Thema: Delphi Probleme mitn Hook?

Einzelnen Beitrag anzeigen

Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Probleme mitn Hook?

  Alt 30. Mai 2005, 14:31
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
  Mit Zitat antworten Zitat