Hallo
DP ,
vorne weg gesagt habe ich schon einiges hier im Forum über Hooks gelesen...
Ich habe eine von TPanel abgeleitete Kompo die als Titelleisten-Ersatz fungiert und welche ein Hook auf die Form.WindowProc hat.
im Create meiner Kompo tu ich folgendes:
Delphi-Quellcode:
tmp := GetParentForm(Self);
if tmp <> nil then begin
FParentForm := TForm(tmp);
CreateIconData;//tray icon
if not (csDesigning in ComponentState) then begin
FPOldParentFormProc := FParentForm.WindowProc;//FPOldParentFormProc ist TWndMethod;
FParentForm.WindowProc := NewProc;
end;
Caption := FParentForm.Caption;
end;
Die "NewProc" sieht so aus:
Delphi-Quellcode:
procedure TDaSysBtns.NewProc(var Message: TMessage);
var
WorkArea: TRect;
begin
case Message.Msg of
WM_USER_ICONMSG: begin
case Message.lParam of
WM_LBUTTONDBLCLK: begin
FParentForm.Show;
// Icon nur anzeigen wenn Fenster minimiert
Shell_NotifyIcon(NIM_DELETE, @FIconData);
end;
end;//Message.lParam-case
end;
WM_GETMINMAXINFO: begin//da maximieren ohne biMaximize über Taskbar maximiert
if not (csDesigning in FParentForm.ComponentState)
AND (FParentForm.WindowState = wsMaximized) then begin//nur bei maximized!
if SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0) then begin
with WorkArea do begin
pMinMaxInfo(Message.LParam).ptMaxSize.Y := Bottom+6;
end;
end;
end else begin
FPOldParentFormProc(Message);// alten Message-Handler rufen
end;
end;
else begin
FPOldParentFormProc(Message);// alten Message-Handler rufen
end;
end;//message.msg-case
end;
Mein Problem ist das manchmal "komische Sachen passieren"
Das irgendwelche Messages an Controls gesendet werden. Vorhin wurde ein "Enter" an nen TEdit gesendet (Tastatur wurde nicht einmal angeschaut...)?! Auch hat ich Probleme mit dem Enablen eines deaktivierten Buttons - Es ging einfach nicht
Ich hab was von nen Tutorial von Asserbad gelesen, konnte es aber nicht finden.
Vielleicht ist mein Source auch buggy? Oder ich hab irgendwas nicht beachtet?
Bitte helft mir.
Gottes Segen