AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Welches Ereignis um Rückkehr zu Form zu erkennen
Thema durchsuchen
Ansicht
Themen-Optionen

Welches Ereignis um Rückkehr zu Form zu erkennen

Ein Thema von norwegen60 · begonnen am 31. Mär 2023 · letzter Beitrag vom 31. Mär 2023
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Welches Ereignis um Rückkehr zu Form zu erkennen

  Alt 31. Mär 2023, 11:53
Hallo,

ich habe in frmMain ein TTabSheet. Die Inhalte der Tabsheets werden mit
Delphi-Quellcode:
  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
erst erzeugt wenn das TabSheet aufgerufen wird.

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
  • Beim Create
  • aus anderem TabSheet
  • über Menu von foMain aufgerufeners anderes Fenster
  • aus ganz anderer Anwendung
  • ...

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:
procedure TfrmForm1.FormCreate(Sender: TObject);
begin
  Application.OnActivate := FormActivate;
end;
erreiche ich noch, dass Activate auch bei Rückkehr aus anderem Programm aufgerufen wird

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

AW: Welches Ereignis um Rückkehr zu Form zu erkennen

  Alt 31. Mär 2023, 12:04
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.




Delphi-Referenz durchsuchenTForm.OnActivate und Delphi-Referenz durchsuchenTForm.OnDeactivate
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
Delphi-Referenz durchsuchenTApplicationEvents.OnActivate und OnDeactivate

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (31. Mär 2023 um 12:56 Uhr)
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Welches Ereignis um Rückkehr zu Form zu erkennen

  Alt 31. Mär 2023, 12:34
Hi Norwegen
Zitat:
Meine Frage ist nun, wie ich sicherstellen kann, dass jedes mal, wenn auf dieses frmForm1 zurückgekehrt wird, das gleiche Ereignis ausgelöst wird.
Zitat:
OnShow wird nur nach Create aufgerufen
Und was wird bei Form1.Shw aufgerufen?

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?):
FormVar := Form1 (Form2),(Form3)... 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.


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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#4

AW: Welches Ereignis um Rückkehr zu Form zu erkennen

  Alt 31. Mär 2023, 13:08
Eventuell kannst du das mit einem Screen.OnActiveFormChange Event abfangen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#5

AW: Welches Ereignis um Rückkehr zu Form zu erkennen

  Alt 31. Mär 2023, 13:16
In diesem Fall wäre eigentlich das "richtige" Event das OnChange des TabControls
Passt mir nicht so, denn dann müsste ich ja auch die Abarbeitung im Hauptform machen oder von dort im TabForm aufrufen

Eigentlich arbeitet man hier mit Frames, nicht mit Forms, und schon gibt es diesbezüglich keine "Verwirrung" mehr.
Das stimmt natürlich. Frames habe ich bisher immer dann verwendet, wenn ich ähnliche "Frames" in unterschiedlichen Forms verwendet habe.

Also zusätzlich auch noch TApplicationEvents.OnActivate und OnDeactivate
Das schau ich mir an

Aber machs dir einfacher - baue dein eigenes Event und rufe darin die gewünschte Prozedur auf. ..
Ich hatte auf eine Standardlösung gehofft

Eventuell kannst du das mit einem Screen.OnActiveFormChange Event abfangen.
Schau ich mir auch an

Danke für eure schnelle Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#6

AW: Welches Ereignis um Rückkehr zu Form zu erkennen

  Alt 31. Mär 2023, 13:24
Nja, in den Frame/Form einen EventHandler rein.

Delphi-Quellcode:
public // oder private
  procedure DoActivate(Sender: TObject);
Und dann das ans OnChange des PageControls hängen,
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz