Moin DeMo,
dann will ich mal mein Glück versuchen
Ganz allgemein:
Um Messages abzufangen, die an ein Fenster gesendet werden, kann man die WndProc (Window Procedure) überschreiben, und dann dort alles filtern und entsprechend reagieren, wie man es gerne hätte.
Delphi-Quellcode:
type
TForm1 = class(TForm)
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
procedure WndProc(var msg : TMessage); override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WndProc(var msg: TMessage);
begin
// Message WM_SYSCOMMAND abfangen
if msg.Msg = WM_SYSCOMMAND then begin
// Wenn Maximiert werden soll
if msg.WParam = SC_MAXIMIZE then begin
// auf minimiert umschalten
msg.WParam := SC_MINIMIZE;
end;
end else begin
// Doppelclick auf die Titelleiste?
if msg.Msg = WM_NCLBUTTONDBLCLK then begin
// dann die Message auf mimimieren ändern
msg.Msg := WM_SYSCOMMAND;
msg.WParam := SC_MINIMIZE;
end;
end;
// WICHTIG:
// Die eigentliche WndProc mit den ggf. geänderten
// Werten aufrufen
inherited;
end;
Eine andere Möglichkeit, vielleicht etwas übersichtlicher, ist es sich direkt für die verschiedenen Messages Verarbeitungsmethoden anzulegen:
Delphi-Quellcode:
type
TForm1 = class(TForm)
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
procedure WMSysCommand(var msg : TMessage); message WM_SYSCOMMAND;
procedure WMNclButtonDblClk(var msg : TMessage); message WM_NCLBUTTONDBLCLK;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMNclButtonDblClk(var msg: TMessage);
begin
// Wenn ein Doppelclick auf die Titelzeile erkannt wird
// Minimieren anfordern
SendMessage(self.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
// WICHTIG:
// Hier darf nicht die Messageverarbeitung mit inherited aufgerufen werden,
// da die urprüngliche Message dann nicht unterdrückt wird.
end;
procedure TForm1.WMSysCommand(var msg: TMessage);
begin
// Wenn Maximierung angefordert wird auf minimieren ändern
if msg.WParam = SC_MAXIMIZE then msg.WParam := SC_MINIMIZE;
// und weiterverarbeiten
inherited;
end;
Anmerkung:
In einer Methode entspricht self immer dem Objekt zu dem die Methode gehört. Hier sind es Methoden des Objektes Form1, so dass self.Handle das
Handle des Formulares Form1 enthält.