Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Welches Event nach Formshow?
motion - Di 08.05.07 16:55
Titel: Welches Event nach Formshow?
Welches Event im Leben eines Formulars feuert nach Formshow?
Ich muß eine Aktion starten (Abfrage eines Wertes per Modalem Eingabedialog), sobald das Fenster sichtbar ist.
Mache ich den Aufruf im FormShow Eventhandler, ist leider das eigentliche unter dem Eingabedialog liegende Fenster noch nicht zu sehen.
jakobwenzel - Di 08.05.07 16:56
Kannst du nicht beim aufrufen zuerst das alte Formular verstecken und dann das neue Zeigen?
BenBE - Di 08.05.07 17:03
Du kannst das ganze mit OnActivate des Formulars machen, musst dann aber als erstes in der Behandlung den Event-Handler für OnActivate auf Nil setzen, bevor Du die eigentliche Aufgabe ausführst.
Lannes - Di 08.05.07 19:03
Hallo,
oder mit PostMessage und WM_AFTER_SHOW , poste mal eine komplette Beispiel-Unit, ist ja nicht viel:
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: 34: 35: 36:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; const WM_AFTER_SHOW = WM_USER + 300; type TForm1 = class(TForm) procedure FormShow(Sender: TObject); private public procedure WmAfterShow(var Msg: TMessage); message WM_AFTER_SHOW; end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WmAfterShow(var Msg: TMessage); begin ShowMessage('Hallo'); end;
procedure TForm1.FormShow(Sender: TObject); begin PostMessage(Self.Handle, WM_AFTER_SHOW, 0, 0); end;
end. |
motion - Di 08.05.07 19:13
@jakobwenzel:
Nein, weil das aufrufende Fenster unabhängig im Hintergrund bleibt. Also
Form_Lagerverwaltung -> Form_"schnell-Inventur" -> EingabeDialog Buchungstext (modal)
Form_schnell-Inventur wird per SHOW, nicht showmodal, aufgerufen, so das die Lagerverwaltung parallel weiter genutzt werden kann. Die Schnell-inventur soll also sichtbar werden und dann als erstes gleich der Modale Eingabedialog erscheinen. Der Aufruf des Eingabe-Dialogs ist hier die Frage.
@BenBE: ich hab's mal versucht:
ErsterAufruf:Boolean
im Formcreate: ErsterAufruf:=True;
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm_Assi_Inventur.FormActivate(Sender: TObject); begin inherited; If ErsterAufruf then Begin ErsterAufruf:=False; AbfrageString(Titel,'Bitte geben Sie den Buchungstext ein, der in der'+CRLF+'Artikelhistorie erscheinen soll','Buchungstext',self,Buchungstext,TBvO_edit,False); AnzeigeBuchungstext.Caption:=Buchungstext; End; end; |
Funktioniert leider nicht. Der Eingabedialog wird angezeigt, aber das aufrufende Form ist noch nicht zu sehen.
Habe ich da noch was übersehen?
Lannes - Do 10.05.07 11:22
Hallo,
motion hat folgendes geschrieben: |
...
Habe ich da noch was übersehen? |
eventuell meinen Beitrag :wink:
hab entsprechend Deiner Vorgabe das nochmal getestet:
-> Form_Lagerverwaltung
-> Form_schnell-Inventur.Show <--- in der Unit mein Code-Vorschlag
-> EingabeDialog.ShowModal
Es funktioniert, der EingabeDialog wird zusammen mit Form_schnell-Inventur angezeigt.
motion - Do 10.05.07 11:38
@Lannes:
In der Tat, Deinen Beitrag (10 Min. vor meiner Antwort) habe ich nicht gesehen.
Hatte wohl eine Antwort begonnen, BEVOR Du geantwortest hast und dann NACH Deiner gepostet.
Wie dem auch sei:
Sehr gute und elegante Lösung!
Das ich mit Form-Vererbung arbeite, nehme ich diese Erweiterung in meinem Basis-Form vor und kann es dann in allen abgeleiteten Fenstern verwenden.
Vielen Dank
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!