Registriert seit: 29. Mai 2002
37.621 Beiträge
Delphi 2006 Professional
|
Re: TrackMouseEvent's rectangle befindet sich wohl auf dem M
30. Okt 2003, 02: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.
|
|
|