Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
826 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Frame-Name in Variable

  Alt 24. Aug 2012, 11:13
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
Patrick
  Mit Zitat antworten Zitat