Cita:
Empezado por cesarsoftware
SOLUCIONADO.
Como no el problema lo tenia Delphi 2010, vamos digo yo, porque a mi no me funciona el codigo de eficsa, recordar que GetClassName me devuelve 0. ¿Usais Delphi 2010?
Es necesario y obligatorio preguntar cuanto va a ocupar el texto a leer y pedir que lea justo ese tamaño
Código Delphi [-]
procedure TFormMain.ListBox1Click(Sender: TObject);
var
buffer: array[0..8192] of char;
p: word;
t: longint;
handle: THandle;
s: string;
begin
s := ListBox1.Items[ListBox1.ItemIndex];
p := Pos(' ' , s);
s := Copy(s, 1, p - 1);
handle := StrToIntDef(s, 0);
if handle = 0 then
Exit;
t := SendMessage(handle, WM_GETTEXTLENGTH, 0, 0);
SendMessage(handle, WM_GETTEXT, t + 1, Integer(@buffer));
end;
|
Hola cesarsoftware.
Primeramente me alegro de que hayas encontrado la solución al tamaño

(lo tendré en cuenta cuando pueda usar otra versión de delphi).
Pero no entiendo por que estas obteniendo el handle del objeto a partir del texto del item del ComboBox/ListBox. El handle de cada objeto fué previamente guardado en el componente; entonces basta con:
Código Delphi
[-]
procedure TfrBusca.ComboBox1Click(Sender: TObject);
var
t: Longint;
Buffer: array[0..8192] of char;
begin
with ComboBox1 do
begin
t := SendMessage(TClassNfo(Items.Objects[ItemIndex]).Handle,
WM_GETTEXTLENGTH, 0, 0); SendMessage(TClassNfo(Items.Objects[ItemIndex]).Handle,
WM_GETTEXT,t+1, Integer(@buffer)); RichEdit1.Text:= Buffer; end;
end;
Saludos.
