Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

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

Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M

  Alt 30. Okt 2003, 01:11
Irgendwie werde aus deinem Gestammel nicht so recht schlau. Alles was ich verstanden habe ist, dass du irgendwelche Probleme mit TrackMouseEvent hast. Aber so geht es bei mir:
Delphi-Quellcode:
function BtnWndProc(hBtn, uMsg, wParam, lParam: DWORD): DWORD; stdcall;
var
  tme: TTRACKMOUSEEVENT;
  TrackMouseEvent_: function(var EventTrack: TTrackMouseEvent): BOOL; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_MOUSEHOVER:
    begin
      if bHover = TRUE then exit;
      SetWindowLong(hBtn, GWL_EXSTYLE, GetWindowLong(hBtn, GWL_EXSTYLE) and not WS_EX_CLIENTEDGE);
      SetWindowPos(hBtn, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_FRAMECHANGED);
      bHover := TRUE;
    end;
    WM_MOUSELEAVE:
    begin
      if bHover = FALSE then exit;
      SetWindowLong(hBtn, GWL_EXSTYLE, GetWindowLong(hBtn, GWL_EXSTYLE) or WS_EX_CLIENTEDGE);
      SetWindowPos(hBtn, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_FRAMECHANGED);
      bHover := FALSE;
    end;
    WM_MOUSEMOVE:
    begin
      tme.cbSize := sizeof(TTRACKMOUSEEVENT);
      tme.dwFlags := TME_HOVER or TME_LEAVE;
      tme.dwHoverTime := 10;
      tme.hwndTrack := hBtn;
      @TrackMouseEvent_:= @TrackMouseEvent; // nur eine Pointerzuweisung!!!
      TrackMouseEvent_(tme);
    end;
  else Result := CallWindowProc(OldWndProc, hBtn, uMsg, wParam, lParam);
  end;
end;
Das ist die überschriebene standard Prozedur eines Buttons, den ich mit einem Hover Effekt versehen habe.
Michael
Ein Teil meines Codes würde euch verunsichern.