Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Creando componentes en ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=35242)

JULIPO 05-09-2006 14:10:03

Creando componentes en ejecucion
 
Saludos cordiales.

estoy desarrollando una matriz de componentes en ejecucion de 3 columnas x n filas segun un listado de eventos, las columnas estan compuestas por un edit, un label y un button la pregunta es ya creados los componentes y las rutinas de onclick para los botones cuando presiono un boton debo mostrar el contenido del edit y el caption del label pertenecientes a la misma fila del boton como lo hago ?.

espero sea clara la pregunta .

cordialmente

julipo

jachguate 05-09-2006 15:37:59

Hola.

Si no nos decis cómo estas estructurando internamente tus componentes, no hay forma de ayudarte!

Supondré que creaste un registro, un vector de registros y que en la propiedad TAG de cada componente has almacenado su propio índice en el vector, así, quedaría algo como:

Código Delphi [-]
Type
  TFila = record
    Boton: TButton;
    Etiqueta: TLabel;
    Editor: TEdit;
  end;

TForm1 = class(TForm)
  //codigo aqui
  private
    FArreglo : Array[0..n-1] of TFila;
//mas codigo aqui

procedure TForm1BotonCualquieraClick(Sender: TObject);
var
  UnaFila: TFila;
begin
  UnaFila := FArreglo[(Sender as TObject).Tag];
  ShowMessage(Format('El editor contiene: %s'#13'Y la etiqueta dice: %s', 
    [Fila.Editor.Text, Fila.Etiqueta.Caption]);
end;

Hasta luego.

;)

JULIPO 05-09-2006 22:15:31

Me falta algo para que funcione correctamente
 
gracias de antemano por tu respuesta pero no me funciona la rutina de onclick de los botones.

el codigo que realizamos es el siguiente quisiera lo revisaras y me indicaras que falta para que funcione correctamente
Código Delphi [-]
 
type   
       TFila = record
        p: TButton;
        b: TLabel;
        a: TEdit;
  end;
var
        Vertel: TVertel;
        FILAS:ARRAY OF TFILA;
 
procedure TVertel.FormShow(Sender: TObject);
VARCONTADOR,I:INTEGER;
                CSID2,LISTALLAMA:STRING;
begin
  inherited;
    LISTALLAMA:=USUARIOS.Caption;
    SETLENGTH(FILAS,LENGTH(LISTALLAMA));
    CSID2:=CSID.Caption;
    I:=0;
    FOR CONTADOR :=1 TO LENGTH(LISTALLAMA) DO
      BEGIN       ZQUERY3.Close;
       ZQUERY3.SQL.Clear;
       ZQUERY3.SQL.TEXT:=FORMAT('SELECT * FROM CLIENTES.listel%S 
                                               WHERE (INDICE =:INDICE1)',[CSID2]);
       ZQUERY3.ParamByName('INDICE1').AsString:=LISTALLAMA[CONTADOR];
       ZQUERY3.Open;
       IF NOT ZQUERY3.IsEmpty THEN
          BEGIN
          FILAS[i].a:=TEDIT.Create(SELF);
          FILAS[i].A.Parent := Self;
          FILAS[i].A.Left := (50);
          FILAS[i].A.Top := 120+(I*30);
          FILAS[i].A.Width:= 250;
          FILAS[i].A.Height :=25 ;
          FILAS[i].A.Name:='Edit'+inttostr(i);
          FILAS[i].a.Text:=ZQUERY3.Fields[1].AsString;
          FILAS[i].A.ReadOnly:=TRUE;
          FILAS[i].a.Tag:=I;
          FILAS[i].B:=TLABEL.Create(SELF);
          FILAS[i].B.Parent := Self;
          FILAS[i].B.AutoSize:=FALSE;
          FILAS[i].B.Left := (330);
          FILAS[i].B.Top := 120+(I*30);
          FILAS[i].B.Width:= 150;
          FILAS[i].B.Height :=25 ;
          FILAS[i].B.Name:='LABEL'+inttostr(i);
          FILAS[i].B.Alignment:=taCenter;
          FILAS[i].B.Color:=CLRED;
          FILAS[i].B.Caption:=ZQUERY3.Fields[7].AsString;
          FILAS[i].B.Tag:=I;
           IF ZQUERY3.Fields[4].AsString <> '' THEN
            BEGIN
             FILAS[i].p:=TButton.Create(SELF);
             FILAS[i].P.Parent := Self;
             FILAS[i].p.Left := (530);
             FILAS[i].p.Top := 120+(I*30);
             FILAS[i].p.Width:= 50;
             FILAS[i].p.Height :=25 ;
             FILAS[i].p.Name := 'Button'+ IntToStr(i);
             FILAS[i].P.Caption:=ZQUERY3.Fields[4].AsString;;
             FILAS[i].p.OnClick:=BotonCualquieraClick;
             FILAS[i].P.Tag:=I;
            END;           i:=i+1;
          END;
      END;
end;
 
procedure TVertel.BotonCualquieraClick(Sender: TObject);
var
  UnaFila: TFila;
begin
{  UnaFila := Filas[(Sender as TObject).tag];} esta es la parte que no me funciona quisiera me explicaras mejor como hacerlo.

  ShowMessage(Format('El editor contiene: %s'#13'Y la etiqueta dice: %s',
    [UNAFila.A.Text, UNAFila.B.Caption]);
end;


de antemano gracias por tu respuesta.

JULIPO 05-09-2006 22:29:47

ya lo solucione con el siguiente codigo
 
Código Delphi [-]
procedure TVertel.BotonCualquieraClick(Sender: TObject);
var
  UnaFila: TFila;
  boton:tbutton;
begin
  boton:=tbutton(sender);
  UnaFila := Filas[boton.tag];
  ShowMessage(Format('El editor contiene: %s'#13'Y la etiqueta dice: %s',
    [UNAFila.A.Text, UNAFila.B.Caption]));
end;

Gracias nuevamente

jachguate 06-09-2006 00:05:16

Es cierto... cometí el error de castear a TObject, cuando en realidad debí castear a TComponent... un pequeño desliz..

Funcionaría sin mayores cambios si sustituyes

Sender as Tobject

por

Sender as TComponent.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 17:28:38.

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