Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen (https://www.delphipraxis.net/215316-form-2-aus-form-1-oeffnen-und-nach-schliessen-von-form-2-form-1-witermachen.html)

Walter Landwehr 12. Jun 2024 10:20

Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
 
Hallo, ich öffne form 2 so.
Delphi-Quellcode:
TPatientenblattFrm.Create(Application.MainForm, Patient1Qry.FieldByName('PatientNr').AsInteger, TiereQry.FieldByName('TiereNr').AsInteger);
nun schließe ich die form 2 und möchte direkt an der Pos. in Form 1 weitermachen wo ich Form 2 aufgerufen habe.

Hier weitermachen.
Delphi-Quellcode:
 PatBlattQry.close;
    PatBlattQry.ParamByName('PATIENTNR').AsInteger := TiereQry.FieldByName('PATIENTNR').AsInteger;
    PatBlattQry.Open;
    if (PatBlattQry.RecordCount > 0) then
      btnPatblatt.Font.Color := clred
    else
      btnPatblatt.Font.Color := clWindowText;
    btnPatblatt.Refresh;
Geht das? Wenn ja wie.

DeddyH 12. Jun 2024 10:24

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
 
Und Du bist Dir sicher, dass irgendwer versteht, was Du tust und was Du erreichen willst?

Gausi 12. Jun 2024 10:28

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
 
Zeige die zweite Form per ShowModal an. Wenn diese dann geschlossen wird, geht's in der ersten Form genau da weiter. Man kann dann auch abfragen, ob die Form per Klick auf den "OK-Button" geschlossen wurde, oder ob der Dialog abgebrochen wurde.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form2.ShowModal = mrOK then begin
     ShowMessage('Form 2 wurde geschlossen');
  end;
end;

bcvs 12. Jun 2024 11:11

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

Zitat von Walter Landwehr (Beitrag 1537655)
Hallo, ich öffne form 2 so.
Delphi-Quellcode:
TPatientenblattFrm.Create(Application.MainForm, Patient1Qry.FieldByName('PatientNr').AsInteger, TiereQry.FieldByName('TiereNr').AsInteger);

Wenn die Form im Create gleich geöffnet wird, dann muss bei der Form im Objektinspektor visible auf true stehen. Setze das man auf false. Dann kannst du selbst bestimmen, ob du sie modal oder nicht modal öffnen willst. Und ich würde die Form auch selbst erzeugen und wieder freigeben.

Also:
Delphi-Quellcode:
Form2:=TPatientenblattFrm.Create(nil, Patient1Qry.FieldByName('PatientNr').AsInteger, TiereQry.FieldByName('TiereNr').AsInteger);
try
  if Form2.ShowModal = mrOK then begin
    // mach irgendwas
  end;
finally
  Form2.Free;
end;

Walter Landwehr 12. Jun 2024 12:36

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
 
Alle meine Forms sind MDI Forms, die möchte ich nicht auf Modal setzen. Gibt es sonst keine andere Möglichkeit?
Wenn Form 2 geschlossen wird sollte in Form 1 dieser Coder verarbeitet werden.
Delphi-Quellcode:
PatBlattQry.close;
    PatBlattQry.ParamByName('PATIENTNR').AsInteger := TiereQry.FieldByName('PATIENTNR').AsInteger;
    PatBlattQry.Open;
    if (PatBlattQry.RecordCount > 0) then
      btnPatblatt.Font.Color := clred
    else
      btnPatblatt.Font.Color := clWindowText;
    btnPatblatt.Refresh;

lxo 12. Jun 2024 12:43

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

Zitat von Walter Landwehr (Beitrag 1537668)
Alle meine Forms sind MDI Forms, die möchte ich nicht auf Modal setzen. Gibt es sonst keine andere Möglichkeit?
Wenn Form 2 geschlossen wird sollte in Form 1 dieser Coder verarbeitet werden.
Delphi-Quellcode:
PatBlattQry.close;
    PatBlattQry.ParamByName('PATIENTNR').AsInteger := TiereQry.FieldByName('PATIENTNR').AsInteger;
    PatBlattQry.Open;
    if (PatBlattQry.RecordCount > 0) then
      btnPatblatt.Font.Color := clred
    else
      btnPatblatt.Font.Color := clWindowText;
    btnPatblatt.Refresh;

Du könntest dem Form2 ein OnClose/OnDestroy-Event zuweisen, wenn du dieses aus Form1 verwendest.
In dem du definierst was passieren soll wenn die Form geschlossen/freigegeben wurde.


Delphi-Quellcode:
lForm2 := TPatientenblattFrm.Create(Application.MainForm, Patient1Qry.FieldByName('PatientNr').AsInteger, TiereQry.FieldByName('TiereNr').AsInteger);
lForm2.OnClose := MeineProzedurAusForm1DieAusgeführtWerdenSollWennForm2GeschlossenWurde;
lForm2.OnDestroy:= MeineProzedurAusForm1DieAusgeführtWerdenSollWennForm2FreigegebenWurde;

Klaus01 12. Jun 2024 13:01

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
 
oder eine Nachricht (postMessage) an die Form1 senden wenn die Form2 geschlossen wird.

Grüsse Klaus

TomyN 12. Jun 2024 15:09

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
 
Werden MDI Fenster nicht sowieso im 'Parent' verwaltet? (Hab glaub ich in 40 Jahren noch nie eine MDI Fenster erzeugt).
Ansonsten im Programm1 verwalten (handle anlegen, create ) und am Ende von Programm2 eine Nachricht an Form1 schicken. Bei mir inzwischen immer eine 'Bitte schließe mich' Nachricht. Alternativ kann man natürlich auch nur melden 'Programm 2' beendet, bitte Handle löschen und Processing starten.

Walter Landwehr 14. Jun 2024 14:16

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
 
Also ich rufe in Form 2 bei OnDestroy eine Procedure in Form 1 auf. das geht auch nur erkennt die procedure nicht mein Button 'btnPatblatt' kommt Zugriffsverletzung.
Delphi-Quellcode:
procedure TTierhalterFrm.BtnPatblattFarbe;
begin
  if (ToolsOperation.Farbe = True) then
    btnPatblatt.Font.Color := clred  // Hier kommt Zugriffsverletzung
  else
    btnPatblatt.Font.Color := clWindowText;
  btnPatblatt.Refresh;
end;
Keine Ahnung warum.
Ist die Form 1 nicht aktiv?

TomyN 14. Jun 2024 14:44

AW: Form 2 aus Form 1 öffnen und nach schließen von Form 2 in Form 1 witermachen
 
Schick doch einfach eine Message an Form1. Wenn Du das mit Postmessage machst, dann ist das ganze entkoppelt.
Ansonsten wäre ich bei Zugriffen nach außen bei Destroy seehr vorsichtig, weil da einiges im Hintergrund abläuft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 Uhr.
Seite 1 von 3  1 23      

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