Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Form Namen Variable verwenden (https://www.delphipraxis.net/169927-form-namen-variable-verwenden.html)

Sir Rufo 21. Aug 2012 16:26

AW: Form Namen Variable verwenden
 
Zitat:

Zitat von Andidreas (Beitrag 1179094)
Damit ich nun im OnCreate Ereignis jeder Form die csv Datei auslesen muss wollte ich mir eine Prozedur basteln an die ich den Form Namen übergebe und über die Prozedur sollen aus der csv Datei dann die richtigen Captions ausgelesen werden.

Aber dann hast du doch auch die Instanz der Form, warum übergibst du die dann nicht direkt? :gruebel:

Delphi-Quellcode:
procedure TSomeForm.SomeFormCreate(Sender : TObject);
begin
  prLoadModuleLanguage( Self ); // <- mit Self wird die aktuelle Instanz übergeben =:o)
end;

Andidreas 21. Aug 2012 16:28

AW: Form Namen Variable verwenden
 
Zitat:

Zitat von Sir Rufo (Beitrag 1179100)
Zitat:

Zitat von Andidreas (Beitrag 1179094)
Damit ich nun im OnCreate Ereignis jeder Form die csv Datei auslesen muss wollte ich mir eine Prozedur basteln an die ich den Form Namen übergebe und über die Prozedur sollen aus der csv Datei dann die richtigen Captions ausgelesen werden.

Aber dann hast du doch auch die Instanz der Form, warum übergibst du die dann nicht direkt? :gruebel:

Delphi-Quellcode:
procedure TSomeForm.SomeFormCreate(Sender : TObject);
begin
  prLoadModuleLanguage( Self ); // <- mit Self wird die aktuelle Instanz übergeben =:o)
end;

Bis jetzt ist ja meine "prLoadModuleLanguage" Prozedur mit einer String Variablen deklariert...
Wie müsste das dann aussehen wenn ich das mit Self mache?
Sorry ich bin auf dem Gebiet nicht wirklich bewandert :oops:

DeddyH 21. Aug 2012 16:30

AW: Form Namen Variable verwenden
 
Dann nimm doch self.Name oder self.Classname, je nachdem.

Sir Rufo 21. Aug 2012 16:34

AW: Form Namen Variable verwenden
 
Zitat:

Zitat von Andidreas (Beitrag 1179094)
Delphi-Quellcode:
procedure prLoadModuleLanguage(sModule : String);

var
i : Integer;


begin

  For i := 0 To Application.FindComponent(sModule).ComponentCount -1 Do
  Begin

    //TAdvPage
    If (Application.FindComponent(sModule).Components[i] is TAdvPage) Then
    Begin
      (Application.FindComponent(sModule).Components[i] as TAdvPage).Caption := fnGetComponentCountryText('Component', sModule, 'TAdvPage', (Application.FindComponent(sModule).Components[i] as TAdvPage).Name);
    End;

    //TAdvToolBar
    ...

    //TAdvGlowButton
    ...
  End;

end;

So macht man das ja auch nicht, sondern man schaut sich an, ob das Caption nicht aus einem Vorfahren kommt, und dann arbeitet man mit dem Vorfahren.

Caption kommt normalerweise von TControl.Caption

Also im ganzen Satz:
Delphi-Quellcode:
procedure prLoadModuleLanguage(aComponent : TComponent);
var
  idx : Integer;
  lComponent : TComponent;
  lControl : TControl;
begin
  for idx := 0 to Pred( aComponent.ComponentCount ) do
  begin

    lComponent := aComponent.Components[ idx ];

    if lComponent is TControl then
    begin

      lControl := lComponent as TControl;

      lControl.Caption := fnGetComponentCountryText('Component', aComponent.ClassName, lComponent.ClassName, lComponent.Name);

    end;

  end;
end;
Irgendwelche Spezialfälle muss man natürlich gesondert behandeln, aber auch da macht es immer Sinn, den passenden Vorgänger zu suchen, sonst tippt man sich einen Wolf.

DeddyH 21. Aug 2012 16:42

AW: Form Namen Variable verwenden
 
Könnte man dann nicht gleich über Controls iterieren? Nicht-visuelle Komponenten müssen ja nicht beschriftet werden. Außerdem ist TControl.Caption IIRC protected und wird in abgeleiteten Klassen dann zu Caption oder zu Text, man bräuchte also entweder eine Unterscheidung, was sehr umfangreich werden könnte, oder ein wenig RTTI.

Sir Rufo 21. Aug 2012 16:47

AW: Form Namen Variable verwenden
 
Zitat:

Zitat von DeddyH (Beitrag 1179106)
Könnte man dann nicht gleich über Controls iterieren? Nicht-visuelle Komponenten müssen ja nicht beschriftet werden. Außerdem ist TControl.Caption IIRC protected und wird in abgeleiteten Klassen dann zu Caption oder zu Text, man bräuchte also entweder eine Unterscheidung, was sehr umfangreich werden könnte, oder ein wenig RTTI.

Controls -> Parent
Components -> Owner

Die Form ist idR der Owner, der Parent kann auch ein Panel sein und dann müsste man bei den Controls rekursiv durchgehen ;)

DeddyH 21. Aug 2012 16:50

AW: Form Namen Variable verwenden
 
Trotzdem würde ich das vorziehen, denn man kann eine Komponente ja auch dynamisch zur Laufzeit erzeugen, ohne dass man einen Owner angibt. Man kann sie natürlich auch ohne Parent erzeugen, aber dann ist sie eh nicht zu sehen, muss also auch gar nicht beschriftet werden.

Andidreas 21. Aug 2012 17:22

AW: Form Namen Variable verwenden
 
@Sir Rufo
Gibt es keine möglichkeit, das ich im OnShow ereignis einer Form die Komponenten durchsuche und die Captions etc. setze und das über eine Prozedur die ich im OnShow Ereignis aufrufe so wie von mir angedacht?

Sir Rufo 21. Aug 2012 17:29

AW: Form Namen Variable verwenden
 
Zitat:

Zitat von Andidreas (Beitrag 1179110)
@Sir Rufo
Gibt es keine möglichkeit, das ich im OnShow ereignis einer Form die Komponenten durchsuche und die Captions etc. setze und das über eine Prozedur die ich im OnShow Ereignis aufrufe so wie von mir angedacht?

:?: Das passiert doch so wie ich das geschrieben habe - gut der Aufruf müsste dann im OnShow erfolgen

himitsu 21. Aug 2012 17:31

AW: Form Namen Variable verwenden
 
Das Einzige, was halbwegs sicher ist, wenn du rekursiv alle Controls (Parent-Child-Beziehungen) durchläufst.

Die Components, bzw der Owner hat ja nichts mit der Sichtbarkeit zu tun, sondern nur mit der internen (Speicher)Verwaltung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
Seite 2 von 4     12 34      

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