AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frame-Name in Variable

Ein Thema von Ykcim · begonnen am 24. Aug 2012 · letzter Beitrag vom 24. Aug 2012
Antwort Antwort
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#1

AW: Frame-Name in Variable

  Alt 24. Aug 2012, 10:22
Du kannst doch in Deinen Templates oder auch im Mainform ein Routine aufrufen der das Template oder Mainform als Parameter(TComponent) mitgegeben wird, welche erst alles für TComponent übersetzt und dann rekursiv die gleiche Routine für alle Komponenten (über ComponentCount) aufruft.

Mein letztes Posting macht eben dieses (per RTTI um nicht jeden Komponententyp gesondert behandeln zu müssen).
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Frame-Name in Variable

  Alt 24. Aug 2012, 10:51
Delphi-Quellcode:
// sucht eine Komponente anhand des Pfads (z.B. 'Main.Workshop1.WorkshopDetail1')
function FindComponentByPath(owner:TComponent; name:string):TComponent;
var
   s : string;
   p : Integer;
begin
   if not Assigned(owner) then
   begin
      Result := nil;
      Exit;
   end;

   p := Pos('.', name);
   if p = 0 then
   begin
      Result := owner.FindComponent(name);
      Exit;
   end;

   s := Copy(name, 1, p-1);
   name := Copy(name, p+1, 999);

   Result := owner.FindComponent(s);
   if Assigned(Result) then
      Result := FindComponentByPath(Result, name);
end;
Andreas
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#3

AW: Frame-Name in Variable

  Alt 24. Aug 2012, 10:56
Toll! So klappt es, Bummi!!!

Delphi-Quellcode:
Procedure Beschriftung (Maske: string; TheComp:TComponent);//Damit ist es egal, ob es ein Form oder ein Frame ist
var query1, query2: string;
    Cols1, Cols2: TCols;
    Rows1, Rows2: TRows;
    i, j: integer;
    Language: string;

begin

  Language:='deutsch';
  query1:='select Sprachen_ID from sprachen where Sprache='+#39+Language+#39;
  Connect;
  ExecQuery(DB, query1, Cols1, Rows1);
  DisConnect;

  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;

  for I := 0 to TheComp.ComponentCount-1 do
    begin
      if (TheComp.Components[I] is TLabel) or
          (TheComp.Components[I] is TButton) then
      begin
        if (TheComp.Components[I] is TLabel) then
          begin
            for J:=0 to Length(Rows2[0])-1 do
              begin
                if Rows2[0,J]=TLabel(TheComp.Components[I]).Name then
                  begin
                    TLabel(TheComp.Components[I]).Caption:=Rows2[1,J];
                  end;
              end;
          end;
        if (TheComp.Components[I] is TButton) then
          begin
            for J:=0 to Length(Rows2[0])-1 do
              begin
                if Rows2[0,J]=TButton(TheComp.Components[I]).Name then
                  begin
                    TButton(TheComp.Components[I]).Caption:=Rows2[1,J];
                  end;
              end;
          end;
       end;
    end;
end;
Ich habe eine TComponent verwendet, um sowohl Frames als auch Forms damit übersetzen zu können.

Das ist der Aufruf
Delphi-Quellcode:
procedure TMain.ButtonTestClick(Sender: TObject);
begin
  Beschriftung ('WorkshopDetail', Main.Workshop1.WorkshopDetail1); //Das ist ein Frame
  Beschriftung ('Main', Main); //Das ist ein Form
end;
Vielen Dank an alle für Eure Hilfe!!!

Gruß
Ykcim
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: Frame-Name in Variable

  Alt 24. Aug 2012, 10:57
Du darfst dann aber keine Komponenten dynamisch erzeugen, denen Du keinen Owner zuweist, denn die werden damit nicht erwischt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#5

AW: Frame-Name in Variable

  Alt 24. Aug 2012, 11:05
Hallo DeddyH
Danke für den Hinweis!!!

Ich habe meine neue Erkenntnis - ich lerne von Euch ja schließlich sehr viel und das ist ernst gemeint - genutzt, um die Prozedur noch zu vereinfachen:

Delphi-Quellcode:
Procedure Beschriftung (Maske: string; TheComp:TComponent);
var query1, query2: string;
    Cols1, Cols2: TCols;
    Rows1, Rows2: TRows;
    i, j: integer;
    Language: string;

begin

  Language:='deutsch';
  query1:='select Sprachen_ID from sprachen where Sprache='+#39+Language+#39;
  Connect;
  ExecQuery(DB, query1, Cols1, Rows1);
  DisConnect;
  //showmessage(Rows1[0,0]);
  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;

  for I := 0 to TheComp.ComponentCount-1 do
    begin
      if (TheComp.Components[I] is TLabel) or
          (TheComp.Components[I] is TButton) then
        begin
          for J:=0 to Length(Rows2[0])-1 do
            begin
              if Rows2[0,J]=TComponent(TheComp.Components[I]).Name then
                begin
                  If TheComp.Components[I] is TLabel then
                    TLabel(TheComp.Components[I]).Caption:=Rows2[1,J];
                  If TheComp.Components[I] is TButton then
                    TButton(TheComp.Components[I]).Caption:=Rows2[1,J];
                end;
            end;
        end;
    end;
end;
Vielen Dank an alle Helfer

Ykcim
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Frame-Name in Variable

  Alt 24. Aug 2012, 12:18
Und wenn Du andere Komponenten außer TLabel und TButton ansprechen willst, musst Du den Code wieder erweitern. Da würde ich eher die RTTI-Variante verwenden (und von Components auf Controls umsteigen inkl. Rekursion, aber das muss ja jeder selbst wissen).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz