PDA

Ver la Versión Completa : Listar todos los nombres de los Formularios de mi aplicacion


gabriel_exe
08-04-2009, 05:11:01
Hola a todos! estoy trabajando con DELPHI 2007 queria preguntarles: si saben como mostrar todos los nombre de los formularios de mi aplicacion en un listbox?¿?¿??¿¿?¿?¿?,para despues seleccionar uno de esa lista.Les voy agradecer un monton, por q la verdad no tengo ni idea:confused: jeje:D

Neftali [Germán.Estévez]
08-04-2009, 09:32:06
Puedes acceder a los forms creados utilizando TScreen.Forms[i] y FormCount


for i := 0 to Screen.FormCount do begin
fName := Screen.Forms[i].Name;
...
end;

dec
08-04-2009, 09:36:34
Hola,

Falta el "menos uno" Neftalí, so pena de enfrentarnos a un "Index out of bounds".


var
i, len: integer;
begin
len := Screen.FormCount-1;
for i := 0 to len do begin
ShowMessage(Screen.Forms[i].Name);
end;
end;


Nótese que prefiero además almacenar la "longitud" del bucle en una variable, será por leer a Francisco Charte (http://fcharte.com/). ;)

Neftali [Germán.Estévez]
08-04-2009, 10:14:51
Falta el "menos uno" Neftalí, so pena de enfrentarnos a un "Index out of bounds".

Hazle caso a Dec, que sabe de lo que habla... ;);)

Casimiro Notevi
08-04-2009, 11:32:26
Hola,
Falta el "menos uno" Neftalí, so pena de enfrentarnos a un "Index out of bounds".Código Delphi [-]var i, len: integer; begin len := Screen.FormCount-1; for i := 0 to len do begin ShowMessage(Screen.Forms[i].Name); end; end;


Nótese que prefiero además almacenar la "longitud" del bucle en una variable, será por leer a Francisco Charte (http://fcharte.com/). ;)

[off topic]
Tengo la costumbre de hacer eso, aunque a veces me resisto porque no me parece realmente necesario y acabo haciéndolo sin usar una variable, ¿qué dice F. Charte al respecto?, es que me ha llamado la atención ese comentario tuyo
[/off topic]

dec
08-04-2009, 11:39:51
Hola,

No puedo enlazarte el artículo en cuestión Casimiro (no lo encuentro). Pero, en todo caso, es una cuestión de ahorro de recursos. Si no es extrictamente necesario, en lugar de usar un método o función que mida (a cada paso del bucle) la longitud que nos interesa, podemos almacenar esa longitud en una variable, que será lo que usemos a cada paso del bucle.

PD. Definitivamente Charte lo explica mejor que yo. :D :D

Casimiro Notevi
08-04-2009, 16:10:56
[..]PD. Definitivamente Charte lo explica mejor que yo. :D :D

¿Se puede explicar mejor?, lo dudo :)

roman
08-04-2009, 16:53:21
Nótese que prefiero además almacenar la "longitud" del bucle en una variable, será por leer a Francisco Charte (http://fcharte.com/). ;)

Supongo que Francisco Charte no se ha percatado de que el compilador de delphi evalúa el límite final sólo una vez al comienzo del ciclo for y no en cada vuelta ;)

Pruébenlo:


function Limit(): Integer;
begin
ShowMessage('Estableciendo el límite');
Result := 3;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;

begin
for I := 1 to Limit() do
ShowMessage(Format('Vuelta %d', [I]));
end;


// Saludos

Caro
08-04-2009, 17:15:26
Supongo que Francisco Charte no se ha percatado de que el compilador de delphi evalúa el límite final sólo una vez al comienzo del ciclo for y no en cada vuelta ;)

Pruébenlo:


Ya lo he probado amiguito y es como dices, solo evalúa la primera ves ;).

Saluditos

gabriel_exe
08-04-2009, 18:05:04
Muchas gracias a todos por las respuestas, me van a servir de mucho por que la verdad no sabia por donde empesar jeje:D ahora a programar se ha dicho! jeje:)
Saludos

dec
08-04-2009, 18:10:48
Hola,

Je je je,... se ve que no he tenido en cuenta lo que dice Román. Ciertamente, Francisco Charte hablaba de C (no recuerdo si de C++) en su artículo... no de Delphi... lo cierto es que a mí se me ha quedado como una costumbre (creo que buena) y que uso en el lenguaje que sea... pero no está mal saber que en Delphi las cosas son distintas. ;)

PD. Francisco Charte no ha errado, pues él hablaba de C o de C++, no recuerdo bien, y no de Delphi. He sido yo el metepatas. :D