AGB  ·  Datenschutz  ·  Impressum  







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

Event: Form über Schließen-Kreuz beenden

Ein Thema von Reinhardtinho · begonnen am 1. Okt 2007 · letzter Beitrag vom 1. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#1

Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 09:18
Guten Morgen,

Gibt es ein Event, dass nur ausgelöst wird, wenn ich das Fenster über das "Schließen-Kreuz" beenden will?

Oder kann ich im OnCloseQuery abfragen, ob das Kreuz gedrückt wurde?

Vielen Dank und freundliche Grüße
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 10:04
Hallo,
der Source zeigt Dir wie das Drücken eines der drei Formbuttons abfangen kannst.
Evt hilft Dir das weiter.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    FOldWndProc : TWndMethod;
    procedure MyWndProc(var Msg: TMessage);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FOldWndProc := Self.WindowProc; // alte Fensterproceure merken
  Self.WindowProc:= MyWndProc; // Fensterproceure auf eigene Fensterprocedure umbiegen

end;

procedure TForm1.MyWndProc(var Msg: TMessage);
begin
  If Msg.Msg = WM_NCLBUTTONDOWN then
    begin
    FOldWndProc(Msg);
    end
      else FOldWndProc(Msg); // alte Fensterproceure aufrufen
end;

end.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#3

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 10:15
wm_SysCommand Message müsste das können, schau mal in der Hilfe bei der Kodierung des wParam's nach.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 11:19
Hi,

ich danke euch beiden erst mal für die Tipps.

Allerdings habe ich noch weitere Fragen:

@Jens Schumann:

Was wird hier gemacht, im If und im Else-Fall wird doch der gleiche Code aufgerufen. Was passiert da genau?

Zitat von Jens Schumann:
Delphi-Quellcode:
procedure TForm1.MyWndProc(var Msg: TMessage);
begin
  If Msg.Msg = WM_NCLBUTTONDOWN then
    begin
    FOldWndProc(Msg);
    end
      else FOldWndProc(Msg); // alte Fensterproceure aufrufen
end;
@negaH

Zitat von negaH:
wm_SysCommand Message müsste das können, schau mal in der Hilfe bei der Kodierung des wParam's nach.
Ich habe wParam in der Hilfe nicht gefunden , kann ich die Message auf wm_SysCommand überprüfen oder wie meintest du das? Ist wm_SysCommand das Schließen-Kreuz?


Vielen Dank und mit freundlichen Grüßen
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 11:40
Warum das Umbiegen der fensterprozedur? Die Ereignisse OnClose und OnCloseQuery werden imnmer ausgelöst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 11:44
Und für Minimieren/Maximieren gibt es die ApplicationEvents OnMinimize und OnMaximize (soviel ich weiß, kanns nur grad nicht probieren)
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 11:54
Das Ereignis wird doch auch ausgelöst, wenn ich Close aufrufe oder man Alt-F4 drückt. Ich muss aber den Fall abfangen, wenn man das Form über das Kreuz schließt.
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#8

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 12:01
Darf ich interessehalber fragen, warum du das Schließen per X anders behandeln musst als das Schließen per Alt-F4? In vielen Fällen liegt in so einer Situation ein Design-Fehler vor.

Edit: Beispiel aus der Interface Hall of Shame
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#9

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 12:54
Du kannst auch in der WM_NCHITTEST auf HTCLOSE prüfen.
Damit hättest Du schonmal das Event, sobald sich der Mauszeiger über dem Close-Button befindet.

Wenn Du dann noch den Status der linken Maustaste mit GetKeyState prüfst, sollte das eigentlich funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 13:12
Hi,

Zitat von OregonGhost:
Darf ich interessehalber fragen, warum du das Schließen per X anders behandeln musst als das Schließen per Alt-F4? In vielen Fällen liegt in so einer Situation ein Design-Fehler vor.
Also in meinem Fall sollte Alt-F4 und das Schließen per X das selbe sein, ich wollte oben nur allgemein andeuten, dass es ja verschiedene Wege gibt, ein Form zu schließen.



Ich hänge mal ein Screenshot von meiner Form an, vielleicht wird es dann etwas deutlicher.

Der Benutzer kann den Vorgang abbrechen, wenn er auf Abbrechen klickt oder auf das Kreuz, will ernich abbrechen, so soll die Form normal geschlossen werden, wenn eine bestimmte Prozedur bearbeitet wurde (dort rufe ich einfach nur Close auf).

Beim Abbruch kommt noch eine Abfrage, ob der Benutzer wirklich abbrechen will, das heißt, wenn er Nein sagt, geht der Vorgang normal weiter.


MFG
Lorenz
Miniaturansicht angehängter Grafiken
dialog_130.png  
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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