Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-03-2007
Berto2003 Berto2003 is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 59
Poder: 21
Berto2003 Va por buen camino
Smile Manejando manejadores...

Hola de nuevo amigos/as del foro:

Aquí toi con otra dudilla-problema que me ha surgido . Os agradecería si podeis que me echárais una mano. El tema es que hemos creado una aplicación en Delphi 7 y que necesitamos llamarla desde un programa desarrollado en Delphi 5.
Hasta aquí todo bien, ya que utilizamos llamadas a librerías DLL y funciona bien. Lo único y ahí está el problema, es que cada vez que llamo a una ventana del nuevo programa de Delphi 7 aparece como un nuevo botón en la barra de tareas con su correspondiente icono y claro, cuantas más se abran más botones aparecen . Creo que tiene que ver algo con manejador de la aplicación (handle) que le pasamos para hacer la llamada, no? Pero no sé si es posible solucionarlo para que no aparezcan esos sucesivos botones. Algo hago parecido a esto:

Código Delphi [-]
procedure PROCEDIMIENTOLLAMADA(var ..); stdcall;
var
   Biblioteca: THANDLE;
   Procedim: TProcD7;
begin
  try
     Biblioteca := LoadLibrary('C:\...\MILIBRERIA.DLL');
  finally
       if (Biblioteca >= HINSTANCE_ERROR) then
       begin
             try
               @Procedim:=GetProcAddress(Biblioteca,'NOMBREPROGRAMA');
               if (@Procedim <> nil) then
                 Procedim(application.handle);   // Esto es correcto???

             finally
                  FreeLibrary(Biblioteca);
             end;
       end
       else
           Application.MessageBox('Error', 'Aviso', MB_ICONERROR+MB_OK);
    end;
end;    // de procedim.


Bueno, espero haberme explicado bien.

Gracias por todo,
Saludos y un abrazo,

Berto2003.

Última edición por dec fecha: 05-03-2007 a las 14:38:01.
Responder Con Cita
  #2  
Antiguo 05-03-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Sí, el problema está en Application.Handle. No muestras el código de Procedim, pero debería ser algo así:

Código Delphi [-]
procedure Procedim(Hnd : THandle); stdcall;
begin
   Application.Handle := Hnd;
  // a partir de aquí el resto...
end;
Responder Con Cita
  #3  
Antiguo 05-03-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Acabo de fijarme que PROCEDIMIENTOLLAMADA es stdcall, ¿está también en una dll?. Si es así, tendrías que hacer lo mismo con PROCEDIMIENTOLLAMADA, que reciba el Handle de la aplicación principal.
Responder Con Cita
  #4  
Antiguo 05-03-2007
Berto2003 Berto2003 is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 59
Poder: 21
Berto2003 Va por buen camino
Hola basti!!

El procedimiento está definido de la siguiente manera, en la misma unidad donde está implementado PROCEDIMIENTOLLAMADA:

type
TProcD7 = procedure (handle: THandle); stdcall;

Y sí, PROCEDIMIENTOLLAMADA está en una dll....

Gracias por la ayuda.
Saludos,
Responder Con Cita
  #5  
Antiguo 05-03-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Por defecto, el objeto Application de una dll toma el valor 0 para el Handle.

PROCEDIMIENTOLLAMADA, parece que recibe el handle de la aplicación, es eso correcto?. Si es así sólo tienes que asignarlo al objeto Application de la dll.

Código Delphi [-]
procedure PROCEDIMIENTOLLAMADA ( handle : THandle); stdcall;
begin
  Application.Handle := handle;
.
.
.
end;

Si el handle que recibe PROCEDIMIENTOLLAMADA, no tiene que ver con el handle de la aplicación, tendras que buscarlo con FindWindow (busca FindWindow en el foro y encontrarás varios ejemplos).
Responder Con Cita
  #6  
Antiguo 06-03-2007
Berto2003 Berto2003 is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 59
Poder: 21
Berto2003 Va por buen camino
Gracias basti!!

Problema solucionado, oe, oe...!! Me faltaba eso que me comentas. Muchas gracias por la ayuda.


Un cordial saludo,
Berto2003.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema manejando excepciones David OOP 1 28-07-2006 19:17:48
oracle con otros manejadores en la misma pc Lore Castillo Oracle 1 07-06-2005 22:40:17
EStos manejadores corren bajo novell netware ARCON Firebird e Interbase 2 01-10-2004 11:20:52
problema manejando datos =( CI>140 Conexión con bases de datos 4 22-09-2003 09:56:16
problemas manejando campos CI>140 Conexión con bases de datos 1 20-09-2003 15:59:40


La franja horaria es GMT +2. Ahora son las 19:33:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi