Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   ¿Cómo puedo saber el tamaño que debo asignar al buffer? (https://www.clubdelphi.com/foros/showthread.php?t=52869)

MON___ 02-02-2008 13:26:18

¿Cómo puedo saber el tamaño que debo asignar al buffer?
 
Para saber el tamaño que debo asignar al "buffer" para obtener los valores de un TLISTBOX (mediante GetText) empleo:
Código:

int x;
x = SendMessage(ListBox1->Handle, WM_GETTEXTLEGHT, 0, 0);

Pero la función me devuelve 0.
¿Dónde tengo el error?

xEsk 02-02-2008 14:04:34

Hola, es que para preguntar la longitud de un ítem en un TListBox, debes usar la constante LB_GETTEXTLEN.

WM_GETTEXTLEGHT es para obtener los captions de los controles o el texto de los Edits, etc...

Así pues:

Código:

int x = SendMessage(ListBox1->Handle, LB_GETTEXTLEN, 0, 0);
El tercer parámetro (WPARAM) es el item index dentro del TListBox.

Saludos.

MON___ 02-02-2008 14:16:44

Gracias, esk. Tienes razón, pero lo que pretendo no es obtener el tamaño de un item, sino de todos los que componen en objeto TListBox.

dec 02-02-2008 14:28:52

Hola,

Cita:

Empezado por MON___
Gracias, esk. Tienes razón, pero lo que pretendo no es obtener el tamaño de un item, sino de todos los que componen en objeto TListBox.

Cita:

Empezado por xEsk
El tercer parámetro (WPARAM) es el item index dentro del TListBox.

Con lo que, digo yo, en todo caso podrían "recorrerse" los elementos de la lista e ir sumando. ¿No?

MON___ 02-02-2008 15:47:41

Tienes razón, DEC... un bucle e ir recorriendo (y sumando) cada uno de los elementos del control. Ahora bien: me extraña que si mediante "p = ListBox1->GetText" o "p := ListBox.GetText" obtenemos todos los valores ("Enero/nFebrero/Marzo/n...") debe existir una función que nos devuelva el tamaño que debemos previamente asignar al "buffer".
Un saludo

xEsk 02-02-2008 22:08:02

Si te refieres a que el TListBox tiene la propiedad text y te devuelve todos los ítems como un String, esto es porque internamente usa un TStringList, que sí tiene esta propiedad text.

Y el Delphi/C++ Builder no usa este tipo de llamadas (SendMessage) para trabajar, sino que usa sus métodos, etc... evidentemente que su forma mas baja si usa cosas por el estilo, pero no las clases de alto nivel, hehe, no se si se me ha entendido.

Saludos.


La franja horaria es GMT +2. Ahora son las 02:32:55.

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