Alle Objekte eines Formulares durchgehen
Alle Objekte eines Formulares durchgehen
Gibt es eine Möglichkeit mit hilfe einer Laufenden Zahl alle Objekte eines Formulares druchzugehen?
Ich will ein Programm schreiben, das in mehreren Sprachen vorhanden ist. Dazu will ich mit Hilfe einer Schleife auf alle Objekte eines Formulares zugreifen und diese je nach Sprache den Inhalt der Eigenschaft Caption anpassen (über eine DB).
Ich will ein Programm schreiben, das in mehreren Sprachen vorhanden ist. Dazu will ich mit Hilfe einer Schleife auf alle Objekte eines Formulares zugreifen und diese je nach Sprache den Inhalt der Eigenschaft Caption anpassen (über eine DB).
-
- Beiträge: 20
- Registriert: Fr 23. Mai 2008, 00:29
- OS, Lazarus, FPC: Windows|Linux (L 3.8.0 FPC 3.2.2)
- CPU-Target: Intel
- Wohnort: Münster
- Kontaktdaten:
Re: Alle Objekte eines Formulares durchgehen
Jedes Formular hat die Eigenschaften Controls[] und ControlCount. Enthält das Formular WinControls, wie tPanel, muß man nur rekursiv arbeiten, um alle Objekte zu besuchen. Das könnte so aussehen:
Für Internationalisierung existieren aber auch Standardmuster, die wahrscheinlich den besseren Weg darstellen.
Code: Alles auswählen
procedure TForm1.UpdateOne(Control: TControl);
begin
// hier das Sprachupdate auf Control.Caption durchführen
end;
procedure TForm1.UpdateAll(Control: TControl);
var
i: Integer;
begin
if Control is TWinControl then
with Control as TWinControl do
for i:=0 to ControlCount-1 do
UpdateAll(Controls[i]);
UpdateOne(Control);
end;
procedure TForm1.ExecuteUpdateAll(Sender: TObject);
begin
UpdateAll(Self);
end;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Alle Objekte eines Formulares durchgehen
Es gibt noch eine zweite Eigenschaft: ComponentCount und Components. Werden genauso genutzt wie im Beispiel gezeigt.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Alle Objekte eines Formulares durchgehen
Warum machst du's nicht über die offiziellen i18n-Methoden?karkov hat geschrieben:Gibt es eine Möglichkeit mit hilfe einer Laufenden Zahl alle Objekte eines Formulares druchzugehen?
Ich will ein Programm schreiben, das in mehreren Sprachen vorhanden ist. Dazu will ich mit Hilfe einer Schleife auf alle Objekte eines Formulares zugreifen und diese je nach Sprache den Inhalt der Eigenschaft Caption anpassen (über eine DB).
http://wiki.lazarus.freepascal.org/Tran ... r_programs" onclick="window.open(this.href);return false;
Re: Alle Objekte eines Formulares durchgehen
Danke für die Antworten. Das ist genau das, was ich gebraucht habe! 
@ carli: auf die gefahr hin, mich zu blamieren, wi und wie definiere ich denn Ressourcenstrings? Das ist mir bei der Lektüre nicht ganz klar geworden.

@ carli: auf die gefahr hin, mich zu blamieren, wi und wie definiere ich denn Ressourcenstrings? Das ist mir bei der Lektüre nicht ganz klar geworden.
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Alle Objekte eines Formulares durchgehen
karkov hat geschrieben:Danke für die Antworten. Das ist genau das, was ich gebraucht habe!
@ carli: auf die gefahr hin, mich zu blamieren, wi und wie definiere ich denn Ressourcenstrings? Das ist mir bei der Lektüre nicht ganz klar geworden.
Code: Alles auswählen
resourcestring
rsSomeText = 'Some text';
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Alle Objekte eines Formulares durchgehen
Falls du die Standard i18n nicht magst, dann kannst du dir meine Variante auf LazForge ansehen. Alle dynamischen Strings werden in der jeweiligen Unit als r* verwendet, ulanguage eingebunden und r* dort definiert. SetLanguage() ist die Hauptroutine. Der Vorteil meiner Version ist eine IMHO übersichtlichere lang-Datei und die Umschaltung der Sprache zur Laufzeit, Nachteil, dass es eben kein Standard ist. Es gibt aber sicher noch viele weitere Nachteile 
