Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   .ini y modificacion de .Caption (https://www.clubdelphi.com/foros/showthread.php?t=64526)

Charly911 06-04-2009 04:38:59

.ini y modificacion de .Caption
 
Hace un par de dias que estoy tratando de hacer andar el codigo, pero ya me sale humo de la cabeza y no anda!!!
Lo que estoy tratando de hacer es modifocar las propiedades .Caption y .Hint de todos los componentes de la aplicacion. Con que objetivo?? Que sea multi-lenguaje.
La idea es leer los nombres de los objetos desde un archivo .ini, y a partir de ahi agregarle .Caption o .Hint :=.......
Pero no me deja :'(

Aca les dejo un ejemplo de parte del codigo:

Código Delphi [-]
procedure TL2PacketHackMain.ChangeLang(L:string, );
begin
 if not (L = 'NoLang') then
  begin
   for i:=1 to 100 do
     begin
       C[i]+'.Caption':=Language.ReadString('L',C[i],'NoText');
     end;
  end;
end;

Espero haber sido lo suficientemente claro...

Charly.

DarkMan 06-04-2009 06:24:27

Código Delphi [-]
procedure TL2PacketHackMain.ChangeLang(L:string);
var C: TControl;
    I: Integer;
begin
 if not (L = 'NoLang') then
   for i:=0 to Form1.ControlCount-1 do
     begin
       C:= Form1.Controls[i]; 
      
       If C is TButton then
          TButton(C).Caption:=Language.ReadString(L, TButton(C).Caption, 'NoText');

       If C is TLabel then
          TLabel(C).Caption:=Language.ReadString(L, TLabel(C).Caption, 'NoText');
       {...}
     end;
end;

Aunque con tu ejemplo no lo dejas claro, deduje que lo que pretendías hacer es recorrer la lista de componentes y asignarle a cada uno el valor que le corresponde a su propiedad caption (si la tiene) o hint. En el pedazo de código que te pongo yo, realiza en parte lo que pides, pero para que funcione correctamente tendrás que asignar una identificación a cada componente para que pueda tomar el valor que le corresponde, sino todos adquirirán el mismo valor.

Un saludo.

Charly911 06-04-2009 21:15:13

Cita:

Empezado por DarkMan (Mensaje 343993)
Código Delphi [-]procedure TL2PacketHackMain.ChangeLang(L:string); var C: TControl; I: Integer; begin if not (L = 'NoLang') then for i:=0 to Form1.ControlCount-1 do begin C:= Form1.Controls[i]; If C is TButton then TButton(C).Caption:=Language.ReadString(L, TButton(C).Caption, 'NoText'); If C is TLabel then TLabel(C).Caption:=Language.ReadString(L, TLabel(C).Caption, 'NoText'); {...} end; end;


Aunque con tu ejemplo no lo dejas claro, deduje que lo que pretendías hacer es recorrer la lista de componentes y asignarle a cada uno el valor que le corresponde a su propiedad caption (si la tiene) o hint. En el pedazo de código que te pongo yo, realiza en parte lo que pides, pero para que funcione correctamente tendrás que asignar una identificación a cada componente para que pueda tomar el valor que le corresponde, sino todos adquirirán el mismo valor.

Un saludo.

DarkMan: Aunque no fui muy claro comprendiste lo que necesitaba. Ya habia pensado en hacerlo como vos decis, pero el inconveniente se presenta ya que no se llaman TButton 1, 2, 3.... sino que tienen nombres como ChkLogin, ChkDecrypt, etc... por lo que queria leerlos de la siguiente manera:

Archivo .ini :
-------------
[English]
ChkLogin=Login
Chkdecrypt=Decrypt
[Espanol]
ChkLogin=Identificarse
ChkDecrypt=Decodificar
-------------

A partir de este archivo, y en caso de que este en ingles, leer el primer valor (ChkLogin) y el segundo (Login) y cambiar las propiedades asi:

ChkLogin.Caption:=Login

Osea la idea es tomar las palabras del archivo y utilizarlas para identificar a los diferentes objetos y asi poder modificar sus propiedades..

Sere mas claro ahora?

Charly.

Charly911 06-04-2009 21:23:57

Me olvide de comentarles que esto lo queria hacer asi, porque sino tendria que agregar alrededor de 300 lineas al codigo y quedaria bastante molesto...
En caso de que no se pueda hacer como pretendo, como podria hacer para crear un nuevo archivo .pas y desde este cambiar las propiedades del Form??

Charly.

rgstuamigo 06-04-2009 21:54:58

Cita:

Empezado por Charly911 (Mensaje 344068)
.... Aunque no fui muy claro comprendiste lo que necesitaba. Ya habia pensado en hacerlo como vos decis, pero el inconveniente se presenta ya que no se llaman TButton 1, 2, 3.... sino que tienen nombres como ChkLogin, ChkDecrypt, etc...

Amigo Charly911 no importa como se llamen los botones,Label,etc, igual el codigo que te propone DarkMan va funcionar por que no se basa en el nombre sino se basa en la clase a la que pertenece, ¿me entiendes?, por ejemplo esta linea de codigo:
Código Delphi [-]
If C is TButton then//aqui se esta preguntando si el Control C es un boton
...
...
If C is TLabel then// aqui se pregunta si el Control C es Label 
...
...
Es decir no importa como se llame el control solo se pregunta que tipo de control es
para hacer lo que quiera con el.¿entiendes?:confused:
Saludos...:)

Charly911 06-04-2009 22:54:37

OK OK no lo habia entendido bien.
Despues lo pruebo, o mañana, porque ahora me voy a la facu.. :P

Charly.


La franja horaria es GMT +2. Ahora son las 00:36:45.

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