Delphi-PRAXiS
Seite 2 von 2     12   

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 Modales Fenster per Klick auf aufrufende Form schließen lassen (https://www.delphipraxis.net/198199-modales-fenster-per-klick-auf-aufrufende-form-schliessen-lassen.html)

Hobbycoder 12. Okt 2018 12:14

AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
 
Zitat:

Zitat von hoika (Beitrag 1415619)
Hallo,
du könntest die 2. Form auch semimodal aufrufen,
dann bleibt das 1. Form noch so bedienbar, wie du das willst.

Was passiert aber, wenn der Nutzer auf einen Button in dem 1. Form klickt,
soll dann der Button ausgelöst werden, oder das 2. Form geschlossen werden?

Was meinst du mit "Semimodal"?

Worauf der Benutzer klickt, soll im Grunde egal sein (allerdings soll der OnClick-Event der Controls, was er anklickt nicht ausgeführt werden). Sobald dieser Klick außer halb der Form ist, will ich irgendwas..ein Event, eine Message, damit ich darauf überhaupt reagieren kann.

hoika 12. Okt 2018 12:29

AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
 
Hallo,
etwa so

Delphi-Quellcode:
var
  Form      : TFormSemi;
  WindowList : Pointer;

procedure ErzeugeForm
begin
  Form:= CreateStateForm(theCaption, theInfo);
  WindowList:= DisableTaskWindows(Form.Handle);
  Form.Show;
  Application.ProcessMessages;

  // hier geht es im 1. Form ganz normale weiter

end;


procedure GibFormFrei
  Form.FCanClose := True;
  EnableTaskWindows(WindowList);
  Form.Free;
Das ganze noch mit einer Boolean-Variable, die im OnKeyDown (KeyPreview=True) des 1. Forms prüft,
ob das semimodale 1. Form gerade läuft und dann in diesem Fall GibFormFrei aufruft

Hobbycoder 12. Okt 2018 12:52

AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
 
Ich habe das mal so versucht:

Delphi-Quellcode:
procedure TModaleForm.WMCapturechanged(var Message: TMessage); //message WM_CAPTURECHANGED;
var
  mp: TPoint;
begin
  if GetCursorPos(mp) then
  begin
    if not (PtInRect(Self.BoundsRect, mp)) then self.Close;
  end;
  inherited;
end;
Funktioniert schon mal wie gewünscht....aber nur beim ersten Mouseklick. Wird dieser innerhalb der modalen Form gemacht, wird WM_CAPTURECHANGED nicht mehr gefeuert.!?
Gibt es eigentlich eine Gegenstückt zu WM_CAPTURECHANGED?

Hobbycoder 12. Okt 2018 13:13

AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
 
Zitat:

Zitat von hoika (Beitrag 1415624)
Hallo,
etwa so

Delphi-Quellcode:
var
  Form      : TFormSemi;
  WindowList : Pointer;

procedure ErzeugeForm
begin
  Form:= CreateStateForm(theCaption, theInfo);
  WindowList:= DisableTaskWindows(Form.Handle);
  Form.Show;
  Application.ProcessMessages;

  // hier geht es im 1. Form ganz normale weiter

end;


procedure GibFormFrei
  Form.FCanClose := True;
  EnableTaskWindows(WindowList);
  Form.Free;
Das ganze noch mit einer Boolean-Variable, die im OnKeyDown (KeyPreview=True) des 1. Forms prüft,
ob das semimodale 1. Form gerade läuft und dann in diesem Fall GibFormFrei aufruft

Hm...muss ich mal probieren. Aber das würde nicht verhindern, dass ein Control der 1. Form angeklickt wird. Das könnte ich in OnMouseDown ja noch regeln.
Und was ist CreateStateForm? Ich kenn nur CreateForm.

hoika 12. Okt 2018 15:38

AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
 
CreateStateForm = TSemiForm.Create

Ich hatte es aus einem alten Projekt rauskopiert und das dort vergessen, u ersetzen


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.
Seite 2 von 2     12   

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