Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form ReCreate (https://www.delphipraxis.net/73448-form-recreate.html)

trashcandesign 18. Jul 2006 12:36


Form ReCreate
 
Hi,

ich habe eine Form, auf der ein DBGrid bestimmte Infos aus der DB anzeigt. Auf Knopfdruck öffnet sich eine weitere Form, die dann Auswahlmöglichkeiten für das DBGrid anzeigt. Soweit so gut.

Jetzt möchte ich aber, dass wenn das zweite Fenster geschlossen wird, oder auf Knopfdruck, dass das Erste neu geladen wird mit allen Anweisungen im FormCreate-Teil.

Da die erste Form variabel ist, kann ich da leider nicht mit Form1.FormCreate() arbeiten.
Bei TForm(FormVariable).FormCreate sagt er mir nur, dass FormCreate nicht existiert.
Ein RecreateWnd bringt auch nicht viel, da dabei die Prozeduren nicht durchlaufen werden.


Jemand ne Idee, wie man das lösen könnte?

Gruß
trashcandesign

dataspider 18. Jul 2006 12:44

Re: Form ReCreate
 
Hi,

schreibe eine eigene Methode (f.B. InitForm) und packe alles aus dem OnCreate da rein.
Diese Methode rufst du dann im OnCreate und nach dem Schliessen deines Forms auf.

Cu, Frank

trashcandesign 18. Jul 2006 12:50

Re: Form ReCreate
 
Entweder ich habe es falsch verstanden, oder das geht so nicht.

Ich habe sagen wir mal 3 Fenster, die alle dieses eine Auswahlfenster aufrufen können. Ich weiß aber nicht genau welches das ist. Also kann ich nur mit TForm(GetParentForm(TControl(Sender))) die Form herausfinden. Aber alle Funktionen/Proceduren die ich in den einzelnen Fenstern geschrieben habe sind ja in TForm nicht vorhanden, dementsprechend meckert die Delphi IDE, wenn ich versuche eine der Funktionen aufzurufen.

Muss ich mir jetzt erst eine eigene Klasse schreiben, die von TForm abgeleitet ist und noch um die Funktionen, die ich will erweitert wird? oder kann ich irgendwie dem Fenster sagen, dass es sich neu laden soll?

Phoenix 18. Jul 2006 12:55

Re: Form ReCreate
 
Bau einen kleinen Messenger.

Also eine Klasse, bei der sich die Forms registrieren können, und zwar mit einem Namen und einem Eventhandler.
Alle Forms die Du nun hast und die auf Nachrichten reagieren müssen registrieren sich hier.

Die Forms die was ändern rufen dann eine Benachrichtigungs-Methode auf dem Messenger-Objekt auf mit Angabe des Zielforms. Der Messenger sucht nun für das angegebene Form den Eventhandler und ruft diesen auf -> Refresh dort.

Sidorion 18. Jul 2006 13:00

Re: Form ReCreate
 
Ganz einfach: das Einstellungsfenster zeigst du modal an. Da kann dann die rufnede Form a) aufs schließen reagieren(weil erst nach dem Schließen der Code in der rufenden Form weiterverarbeitet wird) und b) weiss sie, ob mit OK oder abbrechen geschlossen wurde (If Einstellungsform.ShowModal=ID_OK).
Dann ist deiner Einstellungsform auch schnuppe, wer gerufen hat.

KrasserChecker 18. Jul 2006 13:04

Re: Form ReCreate
 
Erstelle dir ein Callback, mit dem das 2. Fenster dasjenige Benachrichtigen kann, welches es aufgerufen hat.

2. Fenster:
Delphi-Quellcode:
TFormXXX = class(TForm)
.
.
.
protected
  FOnRefreshDataDisplay: TNotifyEvent;
public
  property OnRefreshDataDisplay: TNotifyEvent read FOnRefreshDataDisplay write FOnRefreshDataDisplay;
end;

.
.
.

procedure TFormXXX.HierSollDasAndereFensterAktualisiertWerden;
begin
  if Assigned(FOnRefreshDataDisplay) then
    FOnRefreshDataDisplay(self);
end;
Aufrufendes Fenster:
Delphi-Quellcode:
TFormMain= class(TForm)
.
.
.
protected
  procedure DoRefreshDataDisplay(Sender: TObject);
end;

procedure TFormMain.DoRefreshDataDisplay(Sender: TObject);
begin
  // Hier Anzeige aktualisieren
end;

procedure TFormMain.ZweitesFensterAnzeigen;
begin
  FormXXX.RefreshDataDisplay := DoRefreshDataDisplay;
  FormXXX.Show;
end;

trashcandesign 18. Jul 2006 13:14

Re: Form ReCreate
 
Danke euch,

mit der Methode von Sidorion hat es wunderbar geklappt.

@Phoenix:

Ich habe gerade erst mit programmieren angefangen, also entschuldige bitte meine Frage:
Wie könnte so eine Klasse aussehen, bei der sich Forms mit Eventhandler registrieren?


@KrasserChecker:

Klingt interessant, werde das auch mal ausprobieren, könnte man ja nochmal für was anderes brauchen *g*


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 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