Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Die komponenten aller Forms durchgehen/Eigenschaften setzen
klezmor - So 18.02.07 14:00
Titel: Die komponenten aller Forms durchgehen/Eigenschaften setzen
Ich möchte alle Komponenten aller Formulare durchgehen und z.B. irgendwelche Eigentschaften setzen, da es aber ca. 10 formulare sind, ist das manuell sehr aufwendig.
Dieser Code hier funzt nicht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for i :=0 to application.ComponentCount - 1 do begin
if Components[i] is TGradBtn_Ex then begin TGradBtn_Ex(Components[i]).BeginColor:=buttonBeginColor; TGradBtn_Ex(Components[i]).EndColor:=buttonEndColor; end; end; |
Kann mir jemand helfen?
MFG Klezmor.
BenBE - So 18.02.07 14:58
Nimm einfach Screen.Forms.
klezmor - So 18.02.07 15:03
hä? Das musst du mir einwenig genauer erklären.
HelgeLange - So 18.02.07 16:00
Screen.Forms hat doch nur MDI fenster in der Liste, oder ?
soweit ich weiss, gibt es keine application-weite Liste aller Komponenten, du kannst es vllt mit messages machen, also jedem form ein Nachrichten-prozedur verpassen, und in der die komponenten der Form jeweils durchklappern. Ich habe das damals mit einem basis-Formular gelöst, welches als grundlage aller formulare in meiner Anwendung ist. Somit hat jedes Formular schon von vornherein einige Funktionen mehr. Mit Dispatch zum bsp. kannst Du an Komponenten (und auch Forms) Nachrichten senden.
hast Du eine MDI-Anwendung, kannst Du Screen.Forms nutzen, würde aber trotzdem die nachrichten-procedure nehmen, da sie sicher ist (wird von Delphi die ganze Zeit benutzt) und auch unabhängig vom Typ, du kannst sie an jede Komponente schicken, da Dispatch schon in TObject definiert ist, wenn ich mich recht entsinne.
IngoD7 - So 18.02.07 16:58
Titel: Re: Die komponenten aller Forms durchgehen/Eigenschaften set
klezmor hat folgendes geschrieben: |
Dieser Code hier funzt nicht.
|
Aaaarggghh .... meine Lieblingsaussage. :cry:
Zufällig weiß ich gerade auswendig, was daran nicht funktioniert - ansonsten darfst du auch gerne etwas genauer beschreiben, was nicht funktioniert und wie sich das äußert. :?
Also:
TApplication.Components enthält die Forms der Anwendung.
Diese Forms haben alle eine
eigene Komponentenliste, also
TForm.Components. Darin sind (in der Regel) dann die Komponenten, die du auf der Form siehst.
HelgeLange - So 18.02.07 17:02
mit der Einschränkung, dass dass zum Bsp. Komponenten auf eine Panel nicht in nder Komponenten-Liste des Forms auftauschen, sondern des Panels... Also heisst das, dass Du rekursiv vorgehen musst :)
IngoD7 - So 18.02.07 17:33
HelgeLange hat folgendes geschrieben: |
mit der Einschränkung, dass dass zum Bsp. Komponenten auf eine Panel nicht in nder Komponenten-Liste des Forms auftauschen, sondern des Panels... Also heisst das, dass Du rekursiv vorgehen musst :) |
Das ist (wieder in der Regel :wink: ) nicht korrekt. Eine Komponente auf einem Panel taucht - gemeinsam mit dem Panel - in der Komponentenliste des Forms auf.
Eine Komponente taucht in der Liste seines Owners (nicht Parent) auf. Der Owner ist bei "zusammengeklickten" Forms immer die Form.
HelgeLange - So 18.02.07 17:54
stimmt, gerade angetestet. Sind alle in der KomponentenListe der Form. Haben die das geándert im laufe von Delphi ? oder warum habe ich das im Hinterkopf gehabt ?
IngoD7 - So 18.02.07 19:34
HelgeLange hat folgendes geschrieben: |
stimmt, gerade angetestet. Sind alle in der KomponentenListe der Form. Haben die das geándert im laufe von Delphi ? oder warum habe ich das im Hinterkopf gehabt ? |
D7 hat's so. D5 weiß ich nicht mehr. Und zu D3-Zeiten hat mich sowas noch nicht interessiert. ;-)
Martok - So 18.02.07 19:35
War da nicht mal was mit Form.Controls[]? Irgendwie war doch Controls mal das 'einsortierte', und Components das andere...
hansa - So 18.02.07 20:04
Es geht wohl um ein einheitliches Erscheinungsbild ? Kurzer Kommentar, wie ich an so etwas rangehe : völlig anders. :mrgreen: mit OOP und Objektablage. Sofern die Forms auch nur irgendwas gemeinsam haben, vererbt man das besser und wenn es nur eine Caption ist.
IngoD7 - So 18.02.07 20:18
Martok hat folgendes geschrieben: |
War da nicht mal was mit Form.Controls[]? Irgendwie war doch Controls mal das 'einsortierte', und Components das andere... |
Nein, aber du hast wenigstens das richtige Stichwort gebracht:
In
Controls einer Komponente A stehen die Komponenten B bis X, deren
Parent die Komponente A ist.
In
Components einer Komponente A stehen die Komponenten B bis X, deren
Owner die Komponente A ist.
Ich glaube, jetzt haben wir's. ;-)
HelgeLange - So 18.02.07 21:11
jopp, das kann's gewesen sein...
naja, ist sonntag.. auch und gerade hier :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!