![]() |
Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
Einen schönen Tag der Arbeit! :)
Angenommen, ich lege einen Schalter auf meiner Setup-Form um, damit auf Form1 etwas dekativiert/aktiviert wird, wie würde ein Weg aussehen, damit es im guten Programmierstil umgesetzt wird? Speziell möchte ich gerne ein TPanel auf Form1 anzeigen bz. verstecken lassen - je nach Checkbox1.checked. Momentan habe ich noch einen Record in Benutzung, um die Setup-Struktur zu verwalten, aber davon bekommt die Form1 ja nix mit. Meine Überlegung wäre, dass es A) per SendMessage lösbar wäre - aber das habe ich noch nie gemacht B) in Form1 public Proceduren/Functionen deklariert sind, die ich dann aufrufe, wenn CheckBox1 sich ändert. LG Mathias |
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
" guten Programmierstil "
Könnte über das Observer-Pattern gemacht werden: ![]() |
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
Zitat:
Delphi-Quellcode:
Ich hoffe, das ist einigermaßen verständlich.
type
TForm1 = ... private procedure HandleConfigChanged(_Sender: TObject; const _CurrentConfig: TConfigRecord); end; // und type TOnConfigChanged = procedure(_Sender: TObject; const _CurrentConfig: TConfigRecord) of object; type TForm2 = ... procedure Checkbox1Click(Sender: TObject); private FOnConfigChanged: TOnConfigChanged; public property OnConfigChanged: TOnConfigChanged read FOnConfigChanged write FOnConfigChanged; end; // und procedure TForm1.ConfigButtonClick(Sender: TObject); begin form2 := TForm2.Create; Form2.Init; Form2.OnConfigChanged := HandleConfigChanged; Form2.ShowModal; end; // und procedure TForm2:Checkbox1Click(Sender: TObject); begin FormToConfigRecord; if Assigned(FOnConfigChanged) FOnConfigChanged(Self, FConfigRecord); end; |
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
Hallo Thomas,
danke für Dein Codebeispiel. FormToConfigRecord ist sicherlich überflüssig? Und muss ich dann für jede CheckBox bzw. Element, welches den/das Setup-Record verändert,
Code:
aufrufen?
if Assigned(FOnConfigChanged)
FOnConfigChanged(Self, FConfigRecord); Edit: FormToConfigRecord ist wohl eine function, in der alle Eigenschaften der Setup-Form in das Record gespeichert werden. Edit2: Funktioniert perfekt! LG Mathias |
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
![]() Nur als Vorschlag. Benenne deine Checkboxen so das du sie auch in einem Jahr noch identifizieren kannst wofür sie stehen. bsp: checkbox1 zu cbTogglePanel also gebe ihnen Namen die zur jeweiligen ausführbaren Funktion stehen. |
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein schnell zusammengeklicktes Beispiel mit System.Messaging. Der Einfachheit halber wird eine globale Instanz des Setup-Records verwendet.
Wenn man den Setup-Datensatz mit den Messages versenden und manipulieren will, sollte man eine besser Klasse anstatt eines Records verwenden. |
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
Hallo Uwe,
ab welcher Delphi-Version gibt es
Delphi-Quellcode:
? XE5 kennt es leider noch nicht. Gibt es eine Abhilfe oder Ersatz dafür?
System.Messaging.pas
Danke & Gruß, Andreas |
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
Zitat:
Zitat:
|
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
Danke Uwe, leider kann ich Dein Demo-Programm in absehbarer Zeit nich ausprobieren.
Gruß, Andreas |
AW: Form1 benachrichtigen, wenn über Form2 (setup) eine Einstellung verändert wurde?
Die CommunityEdition kannst parallel zum XE5 installieren. (oder in eine VM rein)
Dann kannst auch mal Aktuelleres ausprobieren :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 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 by Thomas Breitkreuz