Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   como usar el valor de una variable (https://www.clubdelphi.com/foros/showthread.php?t=34572)

jesusomarsanche 14-08-2006 18:44:11

como usar el valor de una variable
 
saludos a todos, no se si sea aqui el foro correcto para esta pregunta pero espero me puedan ayudar;

en visual fox pro puedo formar el nombre de una variable en un string y luego hacer al valor del string y no al string mismo anteponiendo el caracter &
Código:

variable = 'label' +str(i) +'.'
&variable caption = 'cualquier cosa`

pero en delphi no se como hacer esto.
espero algien me pueda ayudar con esto.:confused:

Mick 14-08-2006 19:54:13

Puedes buscar en los foros, ya se ha hablado mucho de ese tema.

De todas formas repetire que delphi es un lenguaje compilado de modo que los nombres de las variables dejan de tener sentido por asi decirlo.

Intentar programar al estilo de foxpro o cualquier lenguaje interpretado en un lenguaje que no es intepretado es un error, solo conseguiras programas que vayan muy lentos.

Lo que intentas hacer, se hace de distinta forma en lenguajes compilados: utilizando arrays u otras tecnicas, pero la tecnica que haya que utilizar dependera de que expliques que es lo que pretendes hacer.

Saludos

jesusomarsanche 14-08-2006 20:53:17

creo que no me explique muy bien,
tengo una aplicacion, donde el usuario selecciona un producto el cual tiene de una a n cavidades, lo que hace el programa es darle la obcion al usuario de representar esas cavidades en una fotografia, para despues usar esa informacion en una ayuda visual.
para no tener que crear 200(por decir una cantidad) quiero saber como puedo crear un label en tiempo de ejecucion sin haverlo declarado antes, con un array como mensionaste se solucionaria pero al ponerle
Código:

var i : Integer;
    a,b:array of tlabel;
    lstemp :string;
begin
  for i := 1 to N do begin
    lstemp:='Label'+inttostr(i)
    a[i]:= a[i].Create(lstemp);{marca error de incompatibilidad}
    b[i]:=tlabel.Create(b[i]); {marca violacion de acceso}
    lstemp := lstemp +'.caption';
    lstemp := 'lo que sea' {me iguala lstemp a 'lo que sea' en lugar de
                            asignarselo al labeln}
  end;

eso me simplificaria mucho codigo, a demas de que no seria finito el numero de objetos a manejar por mi aplicacion.
en este momento lo solucione creando 126 label y con un case segun el valor de i trabajo con el label pero estoy limitado a 126 cavidades.

maeyanes 14-08-2006 21:07:55

Puedes usar la estructura TList o TObjectList para lograr lo que deseas.

Sobre el error de incompatibilidad, este se da por la forma como quieres crear el objeto TLabel, lo correcto sería:

Código Delphi [-]
a[i] := TLabel.Create(nil);

Aquí tienes un pequeño ejemplo usando un TList:

Código Delphi [-]
procedure TForm1.CrearCavidades(ALabelList: TList; NoCavs: Integer);
var
  I: Integer;
  ALabel: TLabel;

begin
  for I := 1 to NoCavs do
  begin
    ALabel := TLabel.Create(Self);
    ALabel.Caption := Format('Cavidad %d', [i]);
    ALabel.Parent := Self; // La etiqueta se muestra en la forma
    // Aquí faltaría código para posicionar las diferentes etiquetas que se vayan creando.
    ALabelList.Add(ALabel)
  end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FLabelList := TList.Create;
  CrearCavidades(FLabelList, 5) // Crea 5 etiquetas y las guarda en FLabelList
end;

Espero que con esto te des una idea de como puedes lograr lo que necesitas...


Saludos...

jesusomarsanche 17-08-2006 19:17:55

Gracias a todos.
en el foro encontre algo que me soluciono el problema,


solo tuve que agregarle, para que me los borrara
Código:

 
procedure poscavidades.ocultalabels;
var
      i  : integer;
begin
    i:= 26; {los componentes anteriores son del formulario}
    while i < poscavidades.componentcount do begin
        if uppercase(leftstr(components[i].Name,5))='LABEL' then begin
            poscavidades.Components[i].Destroy;
        end else begin
            inc(i);
        end;
    end
end;

espero les sirva


La franja horaria es GMT +2. Ahora son las 18:11:53.

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