PREGUNTAS CONTESTADAS - Delphi≤nguaje=

 Hay un total de 680 Preguntas.<<  >> 

    Pregunta:  30077 - COMO CERRAR LA VENTANA DE MSDOS DESPUES DE EJECUTADA UNA APL
Autor:  Odalys Montout Camero
Hola:
Mi problema es que ejecuto una aplicacion DOS (de FoxPro) desde Delphi, todo me funciona bien; pero cuando la aplicacion termina se queda abierta y activa la ventana de MSDOS y tengo que cerrarla manualmente.
Mi pregunta es: como puedo cerrar esa ventana por programa, de forma que cuando la aplicacion termine regrese al menu de la aplicacion delphi. Para ejecutar la aplicacion Dos utilizo CreateProcess y cuando el proceso termina CloseHandle.
Les agradezco ya cualquier ayuda. Gracias adelantadas.
  Respuesta:  PACO Govea
La aplicacion de Fox, hazala ejecutable, despues utiliza la funcion de Delphi EXECUTEFILE, y asi se cierra y regresa al programa

    Pregunta:  30244 - CONEXION DE SAP -DELPHI
Autor:  Monika Rodríguez Reyes
Voy a desarrollar una aplicacion con Delphi y tendrá interaacion con SAP pero no se como hacerlo y me super urge. Como puedo hacerlo?????
Gracias
Atte.: Monika R.
  Respuesta:  Julio César Plascencia Hernández
Buenas tardes:

Acerca de tu duda, para la versión de Delphi 4 se desarrollaron componentes de interacción con sap llamados SAPConnect, pero fue la única versión en que se realizó este desarrollo. Tengo entendido que SAP trae consigo librerías OLE y controles ActiveX, para las librerías OLE te recomiendo que las busques y leas detenidamente los método y propiedades que contiene, de forma que puedas desarrollar la conexión a SAP desde Delphi, además de las funcionalidades que requieras. Con los controles ActiveX, podrías ahorrarte cierto trabajo, instálalos en Delphi y realiza aplicaciones de prueba. Y recuerda que al tener hechas tus aplicaciones utilizando controles ActiveX debes distribuir con tu aplicación los archivos OCX. Si cualquiera de estos métodos de trabajo te resulta muy consumidor de tiempo, mi última sugerencia sería que buscaras exhaustivamente vía internet a algún fabricante de componentes VCL (o CLX) que realice lo que necesites con SAP. Espero te resulte de ayuda mi respuesta.

Saludos

    Pregunta:  30262 - CONTAR PAGS IMPRESAS DESDE X APLICACIóN USANDO DELPHI5
Autor:  Efraín Serna Gracia
Cómo puedo hacer para saber, usando Delphi 5, cuántas páginas mandó a imprimir el usuario desde cualquier aplicación, ydistinguir entre una impresora y otra.
  Respuesta:  PEDRO MORALES URZUA
con que estas imprimiendo? con QReport? si es asi, chequea el

siendo Reporte el TQuickRep

Reporte.Prepare ;
lblTotPag.Caption := IntToStr( Reporte.QRPrinter.PageCount ) ;

el tema de la impresora...

http://www.clubdelphi.com/vertruco.php?id=282

saludos

    Pregunta:  30299 - CONTROLAR VOLUMEN EN DELPHI
Autor:  Enrique Ortiz Herrera
Hola Amigos de LWP

Quisiera saber si existe alguna forma de controlar el volumen de la tarjeta de sonido desde una aplicacion en Delphi 3, resulta que estoy desarrollando una aplicacion que me permite escuchar archivos Wav y/o MP3, pero no se como puedo controlar el volumen en la reproduccion.

Mucho les agradeceria si me pudieran ayudar

Saludos y de Antemano muchas Gracias.
  Respuesta:  Miguel Lucero
Espero que esto te sirva

uses
MMSystem;

procedure SetVolume(const volL, volR: Word);
var
hWO: HWAVEOUT;
waveF: TWAVEFORMATEX;
vol: DWORD;
begin
// init TWAVEFORMATEX
FillChar(waveF, SizeOf(waveF), 0);
// open WaveMapper = std output of playsound
waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
vol := volL + volR shl 16;
// set volume
waveOutSetVolume(hWO, vol);
waveOutClose(hWO);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SetVolume(14000, 14000);
end;

{************************************************}

{2.}

{by Serhiy Perevoznyk}

uses
MMSystem;

function GetVolumeControl(aMixer: HMixer; componentType, ctrlType: Longint;
var mxc: TMixerControl): Boolean;
var
mxl: TMixerLine;
mxlc: TMixerLineControls;
rc: Longint;
begin
Result := False;
FillChar(mxl, SizeOf(TMixerLine), 0);
mxl.cbStruct := SizeOf(TMixerLine);
mxl.dwComponentType := componentType;
{Obtain a line corresponding to the component type}
rc := mixerGetLineInfo(aMixer, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if rc = MMSYSERR_NOERROR then
begin
with mxlc do
begin
cbStruct := SizeOf(TMixerLineControls);
dwLineID := mxl.dwLineID;
dwControlType := ctrlType;
cControls := 1;
cbmxctrl := SizeOf(TMixerLine);
pamxctrl := @mxc;
pamxctrl^.cbStruct := SizeOf(TMixerControl);
end;
mixerGetLineControls(aMixer, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
rc := mixerGetLineControls(aMixer, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
Result := rc = MMSYSERR_NOERROR;
end;
end;

function SetVolumeControl(aMixer: HMixer; mxc: TMixerControl; volume: Longint): Boolean;
var
mxcd: TMixerControlDetails;
vol: TMixerControlDetails_Unsigned;
rc: MMRESULT;
begin
FillChar(mxcd, SizeOf(mxcd), 0);
with mxcd do
begin
cbStruct := SizeOf(TMixerControlDetails);
dwControlID := mxc.dwControlID;
cbDetails := SizeOf(TMixerControlDetails_Unsigned);
paDetails := @vol;
cMultipleItems := 0;
cChannels := 1;
end;
vol.dwValue := volume;
rc := mixerSetControlDetails(aMixer, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
Result := rc = MMSYSERR_NOERROR;
end;

function InitMixer: HMixer;
var
Err: MMRESULT;
begin
Err := mixerOpen(@Result, 0, 0, 0, 0);
if Err <> MMSYSERR_NOERROR then
Result := 0;
end;

// Example:

procedure SetMasterVolumeToZero;
var
MyMixerHandle: HMixer;
MyVolCtrl: TMixerControl;
begin
MyMixerHandle := InitMixer;
if MyMixerHandle <> 0 then
try
FillChar(MyVolCtrl, SizeOf(MyVolCtrl), 0);
if GetVolumeControl(MyMixerHandle, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
MIXERCONTROL_CONTROLTYPE_VOLUME, MyVolCtrl) then
begin
{The last parameter (0) here is the volume level}
if SetVolumeControl(MyMixerHandle, MyVolCtrl, 0) then
ShowMessage('Volume should now be set to zero');
end;
finally
mixerClose(MyMixerHandle);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
SetMasterVolumeToZero
end;

    Pregunta:  30475 - ANIMACIóN FLASH EN DELPHI
Autor:  Ronal Valdivia Torrico
saludos atentamente:
el problema que tengo es que estoy intentando insertar animación en mi proyecto (Delphi), para ello manejo la herramienta OleContainer pero al final cuando creo mi imagen (flash 5.0) no pasa nada no me recupera la imagen, existe otra herramienta que me permita reallizar ??

espero que puedan ayudarme
despido atentamente
  Respuesta:  Armando Montoya
Saludos desde irapuato, Gto. mexico, primero que nada felicidades por usar delphi veras que en esta ocacion no te decepcionara, lo que tienes que hacer es usar un archivo ocx del flash, el cual por lo general se encuentra en c:\windows\system\macromed\flash\swflash.ocx, este componente activex te permite visualizar animaciones flash en tus proyectos delphi. sigue los siguientes pasos:
1.-Click en el menu Component
2.-Despues click en el menu Import Activex Control
3.-Te aparece la ventana "Import Activex" con una lista de todos los componentes Activex que existen en tu pc. busca el que se llama "Shockwave Flash" y lo seleccionas.
4.-Despues click en "Install"
5.-Parece que te abre una ventana para compilar el paquete de componentes del usuario (dclusr.dpk) le das click en "Compile"
6.-Reinicia Delphi, si te pregunta si deseas grabar el dclusr.dpk le dices que si.
7.-Checa la paleta de la VCL "Activex" y ahi debe de estar, agrega este componente al form y listo, solo cambia sus propiedades a tu gusto
esto es con delphi 5, si no puedes contactame por mail y con gusto te ayudo

    Pregunta:  30538 - MATRIZ DE CONTROLES
Autor:  Francisco Carabaño Salazar
Saludos amigos de la lista. Soy un programador de Visual Basic que tiene deseos de cambiarse a Delphi por las limitaciones que encuentro en el primero. Sin embargo, hay algoi que he extrañado de Visual Basic en mis primeras incursiones al mundo de Delphi. En Visual Basic cuando se copia un control (una caja de texto, por ejemplo) y se trata de pegar el IDE pregunta si se desea crear una matriz de controles. Esto es un arreglo de controles de la misma naturaleza distinguidos, por supuesto, por un índice. Bueno, esta característica me ha permitido siempre escribir código centralizado para manejo de eventos. De hecho, el prototipo de llamada a los procedimientos que manejan los eventos incluye el índice del control como parámetro. De esta manera es fácil crear una estructura de selección múltiple que permite manejar cada control por separado, de acuerdo a su índice. Mi pregunta es: ¿es posible crear matrices de controles, o algo parecido, en Delphi, de manera de poder manejar los eventos también en forma centralizada?
Gracias de antemano.
  Respuesta:  Miguel Lucero
Francisco

Tu problema es común a todos los que pasamos de vb a delphi pero con el tiempo vas a ver que la solución en delphi es más elegante y más avanzada (oop)

En delphi podés compartir un mismo evento (por ejemplo onClick) entre varios controles y haciendo uso del objeto SENDER podés determinar que control causo el evento
Para poder hacer uso de SENDER tenés que hacer un cast (transformación) al tipo de objeto que querés estudiar por ejemplo:

if SENDER is TButton then
if TButton(SENDER).Caption='&Algo' then ...

Podés crear array de controles pero eso lo tenés que hacer en tiempo de ejecución creando un array de un tipo de objeto y luego asignando los eventos etc. pero no es aconsejable

Espero haberte ayudado un poco.

    Pregunta:  30664 - CREAR UN ALIAS PARA SQL SERVER DESDE DELPHI!!!
Autor:  Carlos Avendaño Perez
Saludos ... Estoy tratando de crear una base de datos de sql server 7 desde delphi y generar un alias para esta, todo en tiempo de ejecucion, si alguien puede ayudarme lo agradeceria mucho, gracias...
  Respuesta:  Ana Gabriela Covarrubias
Carlos, los metodos del TSession te ayudaran a hacer esto, te doy una breve explicacion de ellos:
AddAlias, agrega el alias, ej:
var
parametros : TStringList;
begin
parametros := TStringList.Create;
try
parametros.add('Server name=' + miservidor);
parametros.add('User name=sa');
... //Agrega todos los parametros de conexion que necesites
Session.AddAlias(NombreDeMiAlias, 'SQL', parametros);
finally
parametros.free;
end;

Si antes quisieras preguntar si existe el alias puedes utilizar el metodo isAlias(nombre del alias) el cual te regresa true o false de acuerdo a si existe o no el alias con el nombre especificado

Suerte

Ana Gabriela Covarrubias Sanchez
http://www.smartware.com.mx

    Pregunta:  30812 - EJECUCIóN DE APLICACIONES EXTERNAS
Autor:  Rubén Malonda
Hola amigos:

Me gustaría saber como controlar la sucesión de varias apliaciones externas con Delphi. Es decir, me gustaría poder detectar el estado de una aplicación que haya iniciado desde Delphi para que no comience la próxima hasta que haya finalizado la anterior.

Gracias. Rubén
  Respuesta:  Lucas Colombo
Te paso el codigo para ejecutar una aplicación externa y esperar a que esta termine. Espero que te sea util.

function Ejecutar(const AppName,Params: string): THandle;
var
ProcInfo: TProcessInformation;
Info : TStartupInfo;
begin
FillChar(Info,SizeOf(Info),0);
Info.cb := SizeOf(Info);
Info.dwFlags := STARTF_USESHOWWINDOWS;
Info.wShowWindows := SW_SHOWNORMAL;
if not CreateProcess(nil,PChar(AppName + ' ' + Params) ,nil,nil,False,0,nil,nil,Info,ProcInfo) then
raise Exception.Create('No se puede iniciar la aplicacion');
Result := ProcInfo.hProcess;
end;

procedure TwndMain.Esperar(H;THandle);
begin
while WaitForSingleObject(H,100) = WAIT_TIMEOUT do
begin
Application.ProcessMessages;
if Application.Terminated then Break;
end;
end;

Y para usarla:
Esperar(Ejecutar(Nombre_de_la_aplicacion,parametros));

Suerte !!!

    Pregunta:  31361 - AGRUPAR DATOS POR FECHAS
Autor:  Ray Muñoz
Un saludo a todos.
Soy un novato en Delphi. Mi pregunta es la siguiente:
- Tengo una tabla en Paradox con los campos NumCliente (Numeric), FechaCompra (Date), CodArticulo (Numeric), CostoUnitario (Money), Importe (Money). En esta tabla manejo información de todo el año y quisiera una especie de filtro en un DBGrid que me pudiera mostrar los movimientos exclusivos de Enero, Febrero, etc. y de un número de cliente en particular. Es decir, deseo saber los movimientos del Cliente No. 01 (por ejemplo) durante el mes de enero, febrero, etc. A su vez, deseo un concentrado general de todos los movimientos de cada mes y en forma anual. Posteriormente, en un QuickReport, deseo poder imprimir los movimientos de un cliente en un mes en particular, el concentrado mensual y el concentrado anual.

Ojalá pudieran ayudarme. Gracias por su atención.
  Respuesta:  Hugo O.H.
hola ray,

voy a suponer que sabes algo de sql y que has manejado el componente TQuery (si no es asi, te recomiendo que lo hagas, porque son la base para aplicaciones de escritorio eficientes)...

entonces, lo que necesitas es un TQuery asociado al dbgrid (tal como lo asocias con una tabla), y pasarla una consulta pareceida a:

SELECT * FROM tutabla
WHERE EXTRACT(MONTH FROM FechaCompra )=1
AND NumCliente = 123

lo que obtendrias aqui sería las compras del mes de enero del cliente 123... lo unico que necesitarias es activar la consulta y el dbgrid se encarga de actualizarse...

puedes hacerlo mas elegante utilizando consultas parametrizadas:

SELECT * FROM tutabla
WHERE EXTRACT(MONTH FROM FechaCompra )=:mes
AND NumCliente = :numcliente

y utilizar el metodo paramByName del TQuery para asignarle valores en tiempo de ejecucion a los parametros :mes y :numcliente...

y para generar el reporte pues simplemente utilizas el TQuery como data source del mismo y realizas el mismo procedimiento que con cualquier tabla...

saludos...

EOF

    Pregunta:  31564 - COMPRIMIR UN FICHERO CON WINZIP
Autor:  Fernando PM
Hola, necesito comprimir un fichero con wipZip u otro programa
pero no se como hacer que mi programa ejecute
el WinZip para comprimir un fichero que yo le doy
Conozco la funcion esta :
WinExec(PChar(\'C:\\Archivos de programa\\WinZip\\WINZIP32.EXE\'),SW_SHOWNORMAL);

Pero solo me abre el WinZip y no me comprime el fichero o al menos no se como se hace.
Por favor si teneis alguna solucion decirmelo, gracias
Un saludo
  Respuesta:  Luis Felipe García Gutiérrez
Pues te cuento huho ho que tu procedimiento no me funcionó, pasa por la sentencia e inclusive me gemera el mensaje de éxito de la operación pero por ninguna parte encuentro en la ruta que direccioné el archivo comprimido.

winexec(PChar('"C:\Archivos de programa\WinZip\WINZIP32.exe -min -a -ex -hs C:\BackUp\bd'+hoy+'.zip C:\BackUp\bd.mdb"'),SW_SHOWNORMAL);

me vi en la necesidad de poner al final de la línea ,SW_SHOWNORMAL, proque no quería compilar por la falta del parámetro.

Gracias!!!
  Respuesta:  hugo oh
hola,

puedes utilizar lo siguiente:

sComando := winzipdir+ ' -min -a -ex -hs ' + destino + ' "' + carpeta + '*.*"';

donde:

winzipdir = nombre y path del winzip32.exe...
destino = nombre del archivo que se va a generar...
carpeta = nombre de la carpeta donde se encuentran los archivos que se quieren comprimir. o puede ser el archivo a comprimir, claro se tendria que omitir *.*

algo asi como:

"...winzip32.exe -min -a -ex -hs archivodestino.zip archivofuente.xxx"
para un archivo...

o

"...winzip32.exe -min -a -ex -hs archivodestino.zip .\carpeta\*.*"
para todos los archivos de la carpeta deseada...

ojala y te sirva...

ah!, por supuesto lo ejecutas con winexec(PChar(sComando));
aunque lo correcto es utilizar CreateProcess(...)

saludos...

EOF

|<  <<  42 43 44 45 46 47 48 49 50 51 52  >>  >|