Autor Beitrag
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mi 02.03.11 20:21 
Hallo,

ich habe ein vielleicht kleines Problem, welches ich aber ohne Hilfe nicht lösen kann bzw. keinen Ansatz finde:

Ich will meine gesamte Anwendung (TApplication) nach allen existierenden (auch noch nicht dargestellten) Formularen absuchen, kurz: nach allen TForm-Objekten, die mit Application.CreateForm erstellt wurden.

Beinahe jedes meiner Forms (alle Nachfahren von TForm) habe ich um eine bestimmte Property "IconScaling" erweitert, die auch überall so heißt.

Nun muss ich im Hauptformular für jedes meiner Dialoge/Fenster eine Code-Zeile in einer Routine schreiben. Ich würde das gerne automatisieren:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure Tmainform.MainformResizerAfterScaling(IconScaling: Ticonscaling);
begin
  mainmenubar.Font.Height:=-GetFontHeight(iconscaling);
  //Diese Zeilen würde ich gerne durch eine automatische Suche ersetzen:
  changeattributesform.iconscaling:=iconscaling;
  backgroundpictureform.iconscaling:=iconscaling;
  EditTextForm.iconscaling:=iconscaling;
  GradientFillStyleForm.iconscaling:=iconscaling;
  ImportPictureForm.IconScaling:=iconscaling;
  NewFileForm.IconScaling:=iconscaling;
  OptionsForm.IconScaling:=iconscaling;
  OverlayPictureForm.iconscaling:=iconscaling;
  patterneditform.IconScaling:=iconscaling;
  saveoptionsform.IconScaling:=iconscaling;
  selectiontoolsform.IconScaling:=iconscaling;
  sinclairfonttoolform.IconScaling:=iconscaling;
  aboutform.IconScaling:=iconscaling;
  filelistform.IconScaling:=iconscaling;
  DrawingInfoLabel.Font.Height:=font.Height; //Besitzt kein ParentFont
  editfileattributesform.iconscaling:=iconscaling;
  headerchangerform.iconscaling:=iconscaling;
  openzipfileform.IconScaling:=iconscaling;
  pulsesequenceeditorform.iconscaling:=iconscaling;
  selectblockform.iconscaling:=iconscaling;
  //nur bis hier
  RedrawRollButtonIcon(RollWestButton,RollWestAction);
  RedrawRollButtonIcon(RollEastButton,RollEastAction);
  RedrawRollButtonIcon(RollNorthButton,RollNorthAction);
  RedrawRollButtonIcon(RollSouthButton,RollSouthAction);
  RedrawRollButtonIcon(RollNorthEastButton,RollNorthEastAction);
  RedrawRollButtonIcon(RollSouthEastButton,RollSouthEastAction);
  RedrawRollButtonIcon(RollNorthWestButton,RollNorthWestAction);
  RedrawRollButtonIcon(RollSouthWestButton,RollSouthWestAction);
  adjustpaintbox;
end;


Es wäre schön, wenn ich jedes TForm-Fenster meiner Anwendung durchsuchen könnte, und prüfen, ob es über die Property "IconScaling" verfügt und dann diese mit einem Wert belegen. Das würde die Flexibilität meines Codes erhöhen.

Leider gibt mir TScreen über die Eigenschaft Forms nur die angezeigten Formulare wieder. TApplication hat gar keine Forms-Aufzählung.
Und ich bin mir nicht sicher, ob es eine Funktion zum Auffinden von Eigenschaften gibt....

Kann mir da jemand auf die Sprünge helfen?

Vielen Dank im Voraus!

_________________
Es gibt keine Probleme - nur Lösungen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 02.03.11 21:04 
user profile iconLogikmensch hat folgendes geschrieben Zum zitierten Posting springen:
Es wäre schön, wenn ich jedes TForm-Fenster meiner Anwendung durchsuchen könnte, und prüfen, ob es über die Property "IconScaling" verfügt und dann diese mit einem Wert belegen.
Application.Components war dir zu einfach? ;-)

user profile iconLogikmensch hat folgendes geschrieben Zum zitierten Posting springen:
Und ich bin mir nicht sicher, ob es eine Funktion zum Auffinden von Eigenschaften gibt....
Das geht via RTTI. Siehe aus ich glaube der Unit TypInfo: GetPropInfo, SetPropValue, ...
Logikmensch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Do 03.03.11 19:02 
Oh, danke für den Denkanstoß, Jaenicke. In der Tat sind die TForms einer Applikation auch im Application-Objekt abrufbar. *Erleuchtet sei* ;-)

Das mit dem Property-Auslesen - mal sehen. Ich kenne die getpropvalue Funktion auch noch von einigen selbst zusammengebauten Property-Editoren. Ich muss mir deren Funktionsweise einfach nochmal anschauen, aber auch dieser Tipp hilft mir erst mal weiter. Wenn ich näheres weiß, poste ich die Lösung hier.

Erst mal vielen, vielen Dank!

Edit:

Tja, mit der richtigen Wahl des Suchwortes hätte ich gestern schon das hier gefunden:
Suche in der Entwickler-Ecke GETPROPINFO

Dies klärt die Sache auf. Klasse!

_________________
Es gibt keine Probleme - nur Lösungen!