Hallo Zusammen,
vielen Dank für die Antworten! Ich glaube aber, dass ich Euch mein Problem nicht richtig beschrieben habe, daher versuche ich es nocheinmal:
Ich habe auf meinem
MySQL Server eine Tabelle, in welcher der Framename, der Label- oder Buttonname, die Sprache und das Caption für diese Sprache steht.
In der Prozedur wird der Framename mitgeliefert. Diese holt dann alle Label- oder Buttonnamen und das dazugehörige Caption für die gewählte Sprache aus der
MySQL-Tabelle.
Dann werden alle Komponenten auf dem mitgelieferten Frame durchsucht und überprüft, ob für die Komponente eine Übersetzung in der
MySQL Tabelle war und diese dann gesetzt.
Hier die Prozedur:
Delphi-Quellcode:
Procedure Beschriftung (Maske:
string);
var query1, query2:
string;
Cols1, Cols2: TCols;
Rows1, Rows2: TRows;
i, j: integer;
Language:
string;
begin
Language:='
deutsch';
//Das ist noch statisch, wird aber später dynamisch
query1:='
select Sprachen_ID from sprachen where Sprache='+#39+Language+#39;
Connect;
ExecQuery(
DB, query1, Cols1, Rows1);
DisConnect;
//Hier werden die Daten für die Komponenten des mitgelieferte Frames (var Maske) aus dem MySQL-Server geholt
query2:='
select Feld_Name, Feld_Bezeichnung from sprache_bezeichnung '+
'
where Sprache='+Rows1[0,0]+'
and Maske='+#39+Maske+#39+
'
and Variante=1';
Connect;
ExecQuery(
DB, query2, Cols2, Rows2);
DisConnect;
//Ab hier werden die Komponenten des mitgliefertes Frames durchsucht und das Caption geändert
for I := 0
to Main.Workshop1.WorkshopDetail1.ComponentCount-1
do
begin
if (Main.Workshop1.WorkshopDetail1.Components[I]
is TLabel)
or
(Main.Workshop1.WorkshopDetail1.Components[I]
is TButton)
then
begin
if (Main.Workshop1.WorkshopDetail1.Components[I]
is TLabel)
then
begin
for J:=0
to Length(Rows2[0])-1
do
begin
if Rows2[0,J]=TLabel(Main.Workshop1.WorkshopDetail1.Components[I]).
Name then
begin
TLabel(Main.Workshop1.WorkshopDetail1.Components[I]).Caption:=Rows2[1,J];
end;
end;
end;
if (Main.Workshop1.WorkshopDetail1.Components[I]
is TButton)
then
begin
for J:=0
to Length(Rows2[0])-1
do
begin
if Rows2[0,J]=TButton(Main.Workshop1.WorkshopDetail1.Components[I]).
Name then
begin
TButton(Main.Workshop1.WorkshopDetail1.Components[I]).Caption:=Rows2[1,J];
end;
end;
end;
end;
end;
end;
Diese Prozedur kann ich theoretisch für alle Frames ungeändert ausführen. Aber damit das Frame von meinem Hauptformular erreichbar ist, muss ich ihm ja den Weg zeigen (Sorry, ich weiß es nicht ander zu erklären), indem ich das schreibe
Main.Workshop1.WorkshopDetail1.Components[I]).Caption
Dabei ist Main das Hauptformular, Workshop1 ist ein Frame auf dem Hauptformular, und WorkshopDetail1 ist das mitgelieferte Frame, welches sich auf dem Frame Workshop1 befindet und was hier übersetzt werden soll.
Ich möchte diese "Pfadangabe"
Main.Workshop1.WorkshopDetail1.
gerne als Variable haben, damit ich die Prozedure nicht für jedes Frame mit eigener Pfadangabe erstellen muss.
Irgendwie bezweifel ich, dass mir das jetzt verständlicher gelungen ist
Hat jemand eine Idee?
Vielen Dank Ykcim