AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
Thema durchsuchen
Ansicht
Themen-Optionen

Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

Ein Thema von Walter Landwehr · begonnen am 12. Jun 2024 · letzter Beitrag vom 16. Jun 2024
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 14. Jun 2024, 15:54
Also ich rufe in Form 2 bei OnDestroy eine Procedure in Form 1 auf.
Wie machst du das denn genau?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 14. Jun 2024, 18:40
Joar, was nach dem Schließen gemacht werden soll, an OnClose/OnDestroy der zweiten Form hängen, oder als Callback übergeben beim Erstellen übergeben.

Nja, den Code für Form1 nicht in die Form2.
Entweder wird ein Callback (Methode) von Form1 als Callback an Form2 übergeben.
Oder, falls OnClose/OnDestroy der Form2 nicht verwendet wird, dann ein Event von Form1 an dieses OnClose/OnDestroy.



Du nutzt aber nicht zufällig die globale Variable der Form1?
Wenn ja, bist'e dir sicher, dass diese Form1 zu dem Zeitpunkt noch da ist?


SendMessage/PostMessage haben den Vorteil, dass wenn die Zielform verschwindet, verbleibende Messages gelöscht werden.
Gibt es die Form beim Senden nicht mehr, geht die Message ins Nirvana und wird nie ausgelöst, ABER gibt es zwischenzeitlich ein neues Fenster (WinControl ala Form/Edit/sonstwas), dann geht die Message an jenes.
Hier kann man sich nur schützen, indem man vorher explizit eine Message-ID reserviert, welche niemand anderes nutzt.
$2B or not $2B

Geändert von himitsu (14. Jun 2024 um 18:48 Uhr)
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 15. Jun 2024, 11:44
Wie funktioniert PostMessage? (von form zu form) habe es noch nie benutzt. Gibt es irgendwo ein Beispiel.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 15. Jun 2024, 13:21
Ich möchte nochmal auf den meiner Meinung nach wesentlichen Code zurückkommen, den wir bisher noch nicht sehen konnten:
Also ich rufe in Form 2 bei OnDestroy eine Procedure in Form 1 auf.
Wie machst du das denn genau?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 15. Jun 2024, 13:30
Form 1
TPatientenblattFrm.Create(Application.MainForm, Patient1Qry.FieldByName('PatientNr').AsInteger, TiereQry.FieldByName('TiereNr').AsInteger);

Form 2
Delphi-Quellcode:
procedure TPatientenblattFrm.FormDestroy(Sender: TObject);
begin
  TierhalterFrm.BtnPatblattFarbe;
end;
in form 1
Delphi-Quellcode:
procedure TTierhalterFrm.BtnPatblattFarbe;
begin
  if (ToolsOperation.Farbe = True) then
    btnPatblatt.Font.Color := clred
  else
    btnPatblatt.Font.Color := clWindowText;
  btnPatblatt.Refresh;
end;
Walter Landwehr
Mfg

Walter

Geändert von Walter Landwehr (15. Jun 2024 um 13:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 15. Jun 2024, 13:39
wie in #1 beschrieben.
Vielleicht übersehe ich ja was, aber ich kann nirgendwo den Code entdecken, der dieser Beschreibung entspricht:
Zitat:
ich rufe in Form 2 bei OnDestroy eine Procedure in Form 1 auf.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 15. Jun 2024, 14:58
siehe #15.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 15. Jun 2024, 20:09
Und TierhalterFrm ist auch wirklich die Instanz von Form1, in der der gezeigte Aufruf von Form2 ausgeführt wurde, und die Instanz ist auch noch nicht anderweitig freigegeben worden?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 15. Jun 2024, 21:00
Und TierhalterFrm ist auch wirklich die Instanz von Form1, in der der gezeigte Aufruf von Form2 ausgeführt wurde,
Du nutzt aber nicht zufällig die globale Variable der Form1?
Wenn ja, bist'e dir sicher, dass diese Form1 zu dem Zeitpunkt noch da ist?
Niemand weiß, wie TTierhalterFrm erstellt wurde, aber wenn ich den Hauch von Code sehe, wie TPatientenblattFrm erstellt wurde, dann hätte ich da auch große Zweifel.

Was ist nun eigentlich das Problem, oder hab ich hier wirklich übersehn, dass irgendwo der "Fehler" genannt wurde?

Wie funktioniert PostMessage? (von form zu form) habe es noch nie benutzt.
Genauso, wie immer Form.Handle, Edit.Handle .... das THandle (eigentlich HWND) des WinControl.

Dieses gibt man zu Beginn dem mit, welcher es dann später aufrufen soll.

in der Fomm dann entweder global reinhängen
procedure WndProc(var Message: TMessage); override;
oder explit
procedure WMMyMessage(var Message: TMessage); message WM_MYMESSAGE;

Als MessageID entweder mit WM_USER+x oder MSDN-Library durchsuchenRegisterWindowMessage.




Will man den Code ordentlich trennen, dann darf Form2 garnichts von Form1 wissen,
drum übergibt man im Constructor oder via Property das Event.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...
  public
    procedure MyCallback;
  end;

  // hab hier einen vordefinieren Typen aus System.Classes verwendet
  //TThreadMethod = procedure of object;

  TForm2 = class(TForm)
  ...
  private
    FCallback: TThreadMethod;
  public
    constructor Create(Owner: TComponent; ....; Callback: TThreadMethod);
  end;

TForm2.Create(...., MyCallback);

constructor TForm2.Create(Owner: TComponent; ....; Callback: TThreadMethod);
begin
  inherited Create(Owner);
  FCallback := Callback;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  if Assigned(FCallback) then
    Callback();
end;
$2B or not $2B

Geändert von himitsu (15. Jun 2024 um 21:09 Uhr)
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen

  Alt 16. Jun 2024, 11:13
Was steht in procedure MyCallback;
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 17: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