Ver Mensaje Individual
  #15  
Antiguo 11-12-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por cesarsoftware Ver Mensaje
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;
  // Obtener el tamaño del texto del control
  t := SendMessage(handle, WM_GETTEXTLENGTH, 0, 0);
  // Leer el texto del control
  SendMessage(handle, WM_GETTEXT, t + 1, Integer(@buffer));
  {
    si ponemos SizeOf(Buffer) o una constante distinta de t + 1 no funciona
    SendMessage(handle, WM_GETTEXT, SizeOf(Buffer), 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);       // Obtener tamaño (para Delphi 2010)
    SendMessage(TClassNfo(Items.Objects[ItemIndex]).Handle,
      WM_GETTEXT,t+1, Integer(@buffer)); // obtener texto del objeto
    RichEdit1.Text:= Buffer;             // almacenar texto en RichEdit
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita