Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir Texto a String (https://www.clubdelphi.com/foros/showthread.php?t=64154)

maurici0 19-03-2009 16:53:52

Convertir Texto a String
 
Resuelto

Hola a todos me ha sugido una duda.

Hay alguna forma de convertir un texto en una variable u objeto?, ejemplo:
Código Delphi [-]
var
lbl : String;
begin
lbl:='Label1';
 
with lbl do
  begin
  Enabled:=FALSE;
  end;

Quiero hacer esto, ya que para validar campos es la muerte hacerlos manualemnte :s (ya que son mas de 500 campos).

O como puedo habilitar varios labels con un for o algo asi?
Solucion:
Gracias ContraVeneno.
Solucion 1:
Código Delphi [-]
 for  i:=componentcount-1 downto 0 do begin
      if Components[i] is TLabel then begin
           TLabel(Components[i]).Enabled:= True;
      end; //fin if
  end; //fin for


Solucion2:
Código Delphi [-]
 for  i:=componentcount-1 downto 0 do begin
      if (Components[i] is TLabel) and (TLabel(Components[i]).Tag in [1..50])  then begin
           TLabel(Components[i]).Enabled:= True;
      end; //fin if
  end; //fin for

ContraVeneno 19-03-2009 17:06:48

Código Delphi [-]
 for  i:=componentcount-1 downto 0 do begin
      if Components[i] is TLabel then begin
           TLabel(Components[i]).Enabled:= True;
      end; //fin if
  end; //fin for



¿500 campos? ¿en una tabla? Para mi 500 campos es igual a un problema de diseño y seguramente existe una mejor manera.

maurici0 19-03-2009 17:11:55

Gracias por la respuesta, me podrias explicar que hace en si el codigo?
Y aprovechando tu generosidad, si tengo ejemplo 100 labels, como aplciar tu codigo solo a los primeros 50? o algo asi?

Lo que pasa es de que es una pregunta "matriz", asi que desde la pregunta esta mal formulada jaja, esque es para hacer calculos y no se que mas moneria...

ContraVeneno 19-03-2009 17:16:52

Lo que hace el código es que recorre todos los componentes de un formulario y a todos los que sean TLabel les pone su propiedad enabled a verdadero. Si son 500, a los 500, si son 2, a los 2. Lo mismo se puede aplicar para hacerlos invisibles y se puede aplicar para cualquier tipo de componente y cualquiera de sus propiedades.

Si quisieras solo los primeros 50, tendrías que cambiar las condiciones del For, o utilizar un While. Pero para esto necesitarías saber que número de componentes son los "primeros 50", es decir algo como: "los primeros 50 son los compomentes del 100 al 150".

pero insisto, tener 500 cosas de un mismo tipo me suena a problema de diseño y seguramente existe una mejor manera. Si explicaras un poco más sobre lo que quieres hacer, tal vez alguien podría tener una mejor idea que tener 500 componentes.

Caro 19-03-2009 17:22:41

Cita:

Empezado por ContraVeneno (Mensaje 341992)
Pero para esto necesitarías saber que número de componentes son los "primeros 50", es decir algo como: "los primeros 50 son los compomentes del 100 al 150".

Y para eso te podría servir la propiedad Tag de cada label, le asignas un numero y preguntas por esa propiedad si esta entre 1 y 50.

Saluditos

maurici0 19-03-2009 17:23:20

Gracias por la explciación, eso del componente en donde lo puedo ver?

Caro 19-03-2009 17:29:55

Cita:

Empezado por maurici0 (Mensaje 341997)
Gracias por la explciación, eso del componente en donde lo puedo ver?

Que componente quieres ver, si te te refieres a Component, es una propiedad que tiene un contenedor en tu caso tu formulario ahí estan todos los componentes que tienes en tu formulario.

Saluditos

ContraVeneno 19-03-2009 17:30:45

Código Delphi [-]
 for  i:=componentcount-1 downto 0 do begin
      if (Components[i] is TLabel) and (TLabel(Components[i]).Tag in [1..50])  then begin
           TLabel(Components[i]).Enabled:= True;
      end; //fin if
  end; //fin for

Buena idea la de usar el tag...
creo que sería algo así, ¿o no?

Chris 19-03-2009 17:35:54

Si utilizaras el código propuesto por ContraVeneno, ten en cuenta que si los Label's están dentro de un panel, Groupbox o algo por el estilo tendras que modificar el código para trabajar con controles anidados, o sea llamar a los famosos procedimientos anidados

ContraVeneno 19-03-2009 17:41:39

Cita:

Empezado por D&W (Mensaje 342004)
Si utilizaras el código propuesto por ContraVeneno, ten en cuenta que si los Label's están dentro de un panel, Groupbox o algo por el estilo tendras que modificar el código para trabajar con controles anidados, o sea llamar a los famosos procedimientos anidados

a caray...

Ese código yo lo utilizo para habilitar unos TDBEdits, algunos están directo en el formulario, otros están en un TTabSheet, otros están en otro TTabSheet y dentro de un TGroupBox y de todas formas me los habilita todos... :confused:

roman 19-03-2009 17:51:28

Así es Contra. Imagino que D&W está pensando en el arreglo Controls que sí depende del contenedor visual.

Por cierto, en VB existen los arreglos de controles con los cuales todo esto sería más sencillo :p

// Saludos

Caro 19-03-2009 17:56:23

Hola, con Component recorre todos los componentes pero con Controls no que debe ser al que se refiere D&W.

Edito.- Se me ha adelantado Roman.

Saluditos

Chris 19-03-2009 18:00:56

Cita:

Empezado por ContraVeneno (Mensaje 342005)
a caray...

Ese código yo lo utilizo para habilitar unos TDBEdits, algunos están directo en el formulario, otros están en un TTabSheet, otros están en otro TTabSheet y dentro de un TGroupBox y de todas formas me los habilita todos... :confused:

Ahhhh! en el código estás utilizando la propiedad "Components" no "Controls". Entendía que la propiedad "Components" solo funcionaba para los decendientes de TComponents. Que "Controls" era para los objetos visuales, y en esos si tienes que utilizar procedimientos anidados. Ve que cada día se aprende algo nuevo. Gracias por la intencional lección ContraVeneno.

Saludos.

Faust 19-03-2009 18:38:00

Alguna vez que usé Visual Basic recuerdo que me fueron muy útiles los arrays o vectores de controles...

Me pregunto... ¿Delphi tendrá algo parecido e igual de fácil de usar?

maurici0 19-03-2009 18:48:36

Perfecto, agradezco a todos su ayuda me ha servido, ahora a implementarlo, gracias!!

Caro 19-03-2009 21:30:30

Cita:

Empezado por Faust (Mensaje 342024)
Alguna vez que usé Visual Basic recuerdo que me fueron muy útiles los arrays o vectores de controles...

Me pregunto... ¿Delphi tendrá algo parecido e igual de fácil de usar?

Hola, cuando utilizaba Visual Basic también me gustaba utilizar el vector de controles (donde solo le tenías que indicar el indice y un mismo nombre en las propiedades), pero en delphi no hay, si quieres hacerlo tendrías que crearte tu el arrray de controles que quieras y mantenerlo tu.

Saluditos

roman 19-03-2009 21:44:49

Bien, bien, poco a poco todos vamos confesando nuestro oscuro pasado programando en VB :D

--------------------------------------------

Creo yo que si se accede muchas veces a los controles, conviene hacer nuestro propio arreglo como comenta Caro. Bastaría, por ejemplo, declarar el arreglo

Código Delphi [-]
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel
    ...
    Label84: TLabel;
  private
    Etiquetas: array of TLabel;
  end;

e inicializarlo en el evento OnCreate:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength(Etiquetas, 84);
  Etiquetas[0] := Label1;
  Etiquetas[1] := Label2;
  Etiquetas[2] := Label3;
  ...
  Etiquetas[84] := Label84;
end;

Otra cosa que se puede hacer si se requiere trabajar con secciones de los controles (los primeros 50...) es agrupar las secciones en un panel, y entonces sí, usar el arreglo Controls de cada panel.

// Saludos

Faust 19-03-2009 22:50:37

Cita:

Empezado por roman (Mensaje 342043)
Bien, bien, poco a poco todos vamos confesando nuestro oscuro pasado programando en VB :D

--------------------------------------------

Creo yo que si se accede muchas veces a los controles, conviene hacer nuestro propio arreglo como comenta Caro. Bastaría, por ejemplo, declarar el arreglo

Código Delphi [-]
type   TForm1 = class(TForm)     Label1: TLabel;     Label2: TLabel;     Label3: TLabel     ...     Label84: TLabel;   private     Etiquetas: array of TLabel;   end;




e inicializarlo en el evento OnCreate:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject); begin   SetLength(Etiquetas, 84);   Etiquetas[0] := Label1;   Etiquetas[1] := Label2;   Etiquetas[2] := Label3;   ...   Etiquetas[84] := Label84; end;




Otra cosa que se puede hacer si se requiere trabajar con secciones de los controles (los primeros 50...) es agrupar las secciones en un panel, y entonces sí, usar el arreglo Controls de cada panel.

// Saludos

Eso si es mucho trabajo cuando se tienen demasiados controles, y en cuanto a nuestro pasado con VB ¿qué nos puede comentar Román? No creo que tenga un pasado muy limpio :D :D :D.

Hay un dicho que dice: (estoy siendo redundante)
Cita:

Hay aves que vuelan sobre el pántano sin nisiquiera manchar su plumaje... (creo que va por ahí)
Reciban saludos de este humilde programador al que le pertenece un pasado oscuro y nebuloso... :D :D :D

roman 19-03-2009 23:20:23

Cita:

Empezado por Faust (Mensaje 342047)
y en cuanto a nuestro pasado con VB ¿qué nos puede comentar Román? No creo que tenga un pasado muy limpio :D :D :D.

Hey, hey, que yo lo digo en broma :D Alguna vez usé VB, por eso conozco los arreglos de controles ;)

// Saludos

ContraVeneno 19-03-2009 23:36:18

yo lo use durante toda la escuela... creo que hasta me dieron una medalla por algún programita escolar... Por suerte en cuanto terminé la escuela, lo deje de usar; salvo un periodo oscuro de tres meses hace un par de años...

Pero sí, los arreglos de controles son bastante buenos y muy útiles.

Faust 20-03-2009 00:31:47

Cita:

Empezado por ContraVeneno (Mensaje 342050)
yo lo use durante toda la escuela... creo que hasta me dieron una medalla por algún programita escolar... Por suerte en cuanto terminé la escuela, lo deje de usar; salvo un periodo oscuro de tres meses hace un par de años...

Pero sí, los arreglos de controles son bastante buenos y muy útiles.

Ya lo decía Román y yo lo secundo...

TODOS tenemos un pasado oscuro con VB...

Y coincido con el compa Contra... los arreglos de controles son una cosa salvable de VB... ;)


La franja horaria es GMT +2. Ahora son las 01:51:15.

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