Crear botón en tiempo de ejecución

Tengo un memo en el que tengo en cada linea 4 palabras las cuales están separadas por comas,
y quiero que cada palabras de estas me las valla leyendo y guardando en variables distintas, hasta que lea una coma, y la siguiente palabra que lea la guarde en otra variable y así hasta llegar a 4 palabras que son las que tengo.

2 Respuestas

Respuesta
1
Lo que necesitas es sencillo, pon un listbox en tu formulario y cuando tengas el texto en tu memo presiona un botón que contenga el siguiente código:
listbox1.items.commatext := memo1.lines.text;
Luego de esto se separara por comas dentro de tu listbox y luego haces referencias a ellas empezando desde el indice 0 (cero), así:
listbox1.items[0];
listbox1.items[1];
listbox1.items[2];
listbox1.items[3];
listbox1.items[4];
Ok, en el ejemplo que te mande ya tienes separadas las opciones, ¿correcto? Entonces solo te falta asignarlas : aquí puedes agregar el siguiente código:
procedure TForm1.Button1Click(Sender: TObject);
var
NuevoBoton : TButton;
i,o : integer;
begin
o:=30;
For i:=0 to listbo1.items.count-1 do
Begin
NuevoBoton := TButton.create(self);
with NuevoBoton do
begin
Top := 30;
Width := 60;
Left := Width * (self.ControlCount-2);
Parent := self;
Caption := 'Botón '+ inttostr (i);
o:=o+30;
end;
end;
end;
Creo que no me has entendido muy bien lo que quiero hacer.
Mira te explicaré mejor.
Tengo un memo el cual cada linea tiene esta característica por ejemplo
ruben;valcarcel;feliu;romeo
Todas las lineas tienen esta característica. Y lo que quiero hacer es meter cada nombre (sin el ; ) en una variable distinta por ejemplo ruben en a, valcarcel en b feliu en c así.
Y luego quiero hacer un arreglo dinámico de botones, de tal forma que el numero de botones será igual a la cantidad de lineas de memo. Osea, la linea del memo serán las características propias de el botón. Por ejemplo ruben sera el caption, valcarcel el hint, feliu el tamaño y así.
Esta es la idea que tengo pensada.
Saludos
Por favor contestadme
Pero ya lo tienes, prueba el código que te he enviado y luego utiliza las variables que se grabaron en el listbox.
Respuesta
1
Ok.
Mira primero haces un ciclo para leer las 4 lineas de tu memo así:
x:=0
While x<= Memo1.Lines.Count do
begin
Linea := Memo1.Lines.Strings[X];
//Aquí digamos Linea va a tener las 4 palabras separadas por comas.
//Ahora lo que tienes que hacer es leer carácter por carácter lo que tenga Linea y mientras no sea una coma los vas agregando a una variable por ejemplo: V1:=V1+Linea

y cuando llegues a la coma ahí cambias de Variable.
Entonces en pocas palabras haces dos ciclos anidados uno leerá cada linea del Memo y el otro leerá carácter por carácter de lo que hayas leído del memo entonces cuando estés leyendo el carácter lo vas concatenando en tu primer variable cuando llegue a la coma (,) ahí cambiaras de variable y de ahí en adelante lo contenaras en tu segunda variable hasta llegar a la siguiente coma.
Para saber que variable sigue pones un contador el cual llegara solo hasta cuatro, que son las comas que tendrás en tu linea (digo 4 porque te recomiendo que al final de la linea le pongas otra coma para indicar que termino) entonces este contador lo inicias con 1 lo cual significara que estas en tu primer Variable cuando encuentres la coma incrementas también tu contador para indicar que sigue la siguiente la variable y así sucesivamente hasta el final de la cadena.
Y esto se repetirá por cada linea del memo.

HOla necesito que me envies algun codigo de ejemplo para saber bien como es, es que me pierdo un poco con tu explicacion, y mejor leer el codigo y lo entiendo mejor.
Hagamos lo siguiente enviame el código a la siguiente dirección [email protected] , ¿y después te finalizo la pregunta por aquí con 10 puntos vale?
Gracias
Más o menos esto seria:
procedure TForm1.Button1Click(Sender: TObject);
var X,L,Palabra:Integer;
Linea:String;
V1,V2,V3,V4:String;
begin
x:=0;
while x<=Memo1.Lines.Count do
begin
Linea := Memo1.Lines.Strings[x];
L:=0;
Palabra:=1;
while L<=Length(Linea) do
begin
if Linea[x]<>',' then
Case Palabra of
1:V1:=V1+Linea[x];
2:V2:=V2+Linea[x];
3:V3:=V3+Linea[x];
4:V4:=V4+Linea[x];
end;
else
Inc(Contador);
Inc(L);
end;
inc(x);
end;
end;
Tengo otro problemita, y es que el botón desde donde daré click, y me saldrán el arreglo de botones, esta encima de un panel, y los otros botones se me quedan por debajo, utilice el bringtofront y nada, ayudame, gracias
ruben
Lo que debes hacer es ponerle en Parent := Panel; en ves de ponerle que el parent es a la forma y así si se lo pones al panel los componentes serán creados dentro del panel.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas