AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form ReCreate

Ein Thema von trashcandesign · begonnen am 18. Jul 2006 · letzter Beitrag vom 18. Jul 2006
Antwort Antwort
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

Form ReCreate

  Alt 18. Jul 2006, 12:36
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
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Form ReCreate

  Alt 18. Jul 2006, 12:44
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
Frank Reim
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Form ReCreate

  Alt 18. Jul 2006, 12:50
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?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#4

Re: Form ReCreate

  Alt 18. Jul 2006, 12:55
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#5

Re: Form ReCreate

  Alt 18. Jul 2006, 13:00
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.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#6

Re: Form ReCreate

  Alt 18. Jul 2006, 13:04
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;
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Form ReCreate

  Alt 18. Jul 2006, 13:14
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*
  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 12:13 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