Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2007
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Poder: 17
MON___ Va por buen camino
Función Que No Me Funciona En Una Dll

Tenía un módulo con una función para mostrar en un objeto TLISTBOX los elementos de un TCOMBOBOX. La función requería como argumento una variable TSTRINGS. Pronto la cambié por una variable que enviase el HANDLE del TComboBox cuyos elementos mostraría en un TLISTBOX. Así, mediante el API de WINDOWS (sendMessage) podía sincronizar las dos listas.

Más adelante decidí incluir ese módulo en una librería DLL. La función de la librería recibía perfectamente el HANDLE del TComboBox (al menos el valor era mayor a 0), pero no se mostraban sus elementos; es más: el valor devuelto por "sendMessage(handle_comboBox, CB_GETCOUNT, 0, 0)" es siempre 0.

¿Dónde puede estar el error?
Responder Con Cita
  #2  
Antiguo 18-04-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Hice algo muy sencillo que funciona sin problemas:
Código Delphi [-]
library Project2;

uses
  Windows, Messages;


function GetComboCount(Handle: HWND): DWORD; stdcall;
begin
  Result := SendMessage(Handle, CB_GETCOUNT, 0, 0);
end;

exports
  GetComboCount;

begin
end.
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

function GetComboCount(Handle: HWND): DWORD; stdcall;

implementation

{$R *.dfm}

function GetComboCount; external 'Project2.dll';


procedure TForm1.Button1Click(Sender: TObject);
begin
  ComboBox1.Items.Add('Hi!');
  ShowMessageFmt('Cantidad de Items: %d', [GetComboCount(ComboBox1.Handle)]);
end;

end.
Me surge una duda... ¿Cómo estas pasando el handle del combo?... ¿Lo estas guardando en una variable en la dll o lo haces para cada llamado?

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 18-04-2007
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Poder: 17
MON___ Va por buen camino
Función Que No Me Funciona En Una Dll

En la FORM incluída en librería creé una propiedad (property idHandle) para guardar en ella el HANDLE del TComboBox enviado en la función.
Responder Con Cita
  #4  
Antiguo 21-04-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 18
Chris Va por buen camino
Es muy sencillo enviar el número de elementos de una lista, lo difícil es enviar o recibir los elementos. Si solo quieres obtener el numero de elementos, simplemente puedes enviar el Combox1.items.count a una función que reciba el numero, sin necesidad de estar enviando mensajes de windows.

En teoría, dos controles no pueden tener el mismo Handle, así que no puedes asignar el mismo handle del combo del form al combo de la DLL. Lo que si podrías hacer es utilizar funciones "callback" para enviar los valores uno a uno. Con este método si es aceptable que utilices los mensajes de windows.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web

Última edición por Chris fecha: 21-04-2007 a las 02:24:40.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
No me funciona TRY - EXCEPT - END leanfreue OOP 13 14-04-2007 19:08:38
Funcion para saber si un registro .dbf esta bloqueado ( en red no me funciona ) Wonni Conexión con bases de datos 7 06-10-2006 19:49:32
BDE, no funciona martita Conexión con bases de datos 4 26-05-2006 23:21:12
¿Cómo funciona la función sum en SQL? nuri SQL 9 11-08-2005 17:12:25
like no funciona ! dmasson Conexión con bases de datos 9 23-03-2004 15:10:50


La franja horaria es GMT +2. Ahora son las 01:46:20.


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