![]() |
Welches Ereignis um Rückkehr zu Form zu erkennen
Hallo,
ich habe in frmMain ein TTabSheet. Die Inhalte der Tabsheets werden mit
Delphi-Quellcode:
erst erzeugt wenn das TabSheet aufgerufen wird.
if tsTabsheet.ActivePage = tsTabSheet1 then
begin if frmForm1 = nil then begin frmForm1 := TfrmForm1.Create(Application); frmForm1.BorderStyle := bsNone; frmForm1.Parent := tsTabSheet1; frmForm1.Align := alClient; frmForm1.Show; end Meine Frage ist nun, wie ich sicherstellen kann, dass jedes mal, wenn auf dieses frmForm1 zurückgekehrt wird, das gleiche Ereignis ausgelöst wird. Rückkehrmöglichkeiten sind
OnShow wird nur nach Create aufgerufen OnPaint wird nur bei Rückkehr aus anderem Programm aufgerufen OnActivate wird nur bei Rückkehr aus anderem TabSheet oder anderem, per Menu aufgerufenem Form aufgerufen. Aber nur wenn SubForm danach nicht wieder gefreet wird Mit
Delphi-Quellcode:
erreiche ich noch, dass Activate auch bei Rückkehr aus anderem Programm aufgerufen wird
procedure TfrmForm1.FormCreate(Sender: TObject);
begin Application.OnActivate := FormActivate; end; Alle drei zusammen erfüllen also fast was ich suche (Es fehlt Rückkehr aus Form, wenn ich dieses über MenuClick Create, ShowModal und Free aufrufe) Gibt es aber eine Möglichkeit in allen Fällen ein Event/Message abzuarbeiten sobald ich wieder auf frmForm1 zurück kehre Danke für eure Tips Gerd |
AW: Welches Ereignis um Rückkehr zu Form zu erkennen
In diesem Fall wäre eigentlich das "richtige" Event das OnChange des TabControls,
bzw. die OnEnter/OnLeave der/aller Controls auf dieser Form. Denn diese eingebetteten Forms bekommen niemals die Kontrolle. Ebenso wie bei MDI-Forms, ist hier auch Form.ActiveControl beim Lesen immer NIL, denn die oberste Form hält die Kontrolle. Wigentlich arbeitet man hier mit Frames, nicht mit Forms, und schon gibt es diesbezüglich keine "Verwirrung" mehr. ![]() ![]() Ja, leider ist das bissl blöde unpraktikikabel gelöst. Das Form-Event reagiert nicht, wenn die Anwendung verlassen/betreten wird, sondern nur beim Wechsel der VCL-Fenster innerhalb der Anwendung. Also zusätzlich auch noch ![]() Aber zumindestens kann man der Form und dem ApplicationEvents jeweils die selben Ereignismethoden zuweisen. Und besser niemals direkt an die Events der Application hängen, sondern nach Möglichkeit ein TApplicationEvents benutzen. (Ja, leider fehlen darin einige Events, vor allem die an Screen ... aber Diese hier sind vorhanden) Somit kann jede Form ihr eigenes ApplicationEvents bekommen und es gibt keine Konflikte. |
AW: Welches Ereignis um Rückkehr zu Form zu erkennen
Hi Norwegen
Zitat:
Zitat:
Aber machs dir einfacher - baue dein eigenes Event und rufe darin die gewünschte Prozedur auf. Du könntest dir einen Aufzählungstypen deklarieren, dessen Elemente nach Position geordnete Namen tragen, die nach einem passenden Präfix genau so heissen wie deine Tabs (ohne Präfix) und je nach Typelement in der selben Prozedur eine andere Form createn (oder anzeigen). Kurz, bevor du dein Event auslöst, weisst du einer Formvariablen eine gewünschte Form zu (aus einer Liste möglicher Formnamen?):
Delphi-Quellcode:
Dann feuerst du dein Event ab und übergibst ihm den gewünschten Formnamen. in deiner CreateOrShow-Prozedur kannst du zum Createn/Anzeigen nun deine übergebene Formvarible nutzen.
FormVar := Form1 (Form2),(Form3)...
Das ist jetzt einfach so ein mögliches Vorgehen, vielleicht noch nicht ganz ausgereift, weil ungetestet. Ich selbst würde mir die Arbeit sparen, für jedes Tab die richtige Form zu bestimmen und gleich zum PageControl greifen. Gruss Delbor |
AW: Welches Ereignis um Rückkehr zu Form zu erkennen
Eventuell kannst du das mit einem Screen.OnActiveFormChange Event abfangen.
|
AW: Welches Ereignis um Rückkehr zu Form zu erkennen
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Danke für eure schnelle Hilfe |
AW: Welches Ereignis um Rückkehr zu Form zu erkennen
Nja, in den Frame/Form einen EventHandler rein.
Delphi-Quellcode:
Und dann das ans OnChange des PageControls hängen,
public // oder private
procedure DoActivate(Sender: TObject); aber da du mehrere TabSheets hast, hat man hierbei das gleiche Problem, wie beim Application.OnIrgendwas ... dort passt nur ein Event gleichzeitig dran (im Gegensatz zu mehreren TApplicationEvents.OnIrgendwas) Also andersrum. Alle Frames/Forms haben eine public Methode (in einem gemeinsamen Vorfahren), oder einfach in einem gemeinsamen Interface. Und dann prüft im OnChange des TabControls ein Code auf dem ActiveTabSheet das eingebettete Frame/Form auf den Typ/Interface und ruft diese Methode auf. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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-2025 by Thomas Breitkreuz