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.


La franja horaria es GMT +2. Ahora son las 11:43:29.

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