![]() |
Kein Event bei PtInRect
Komme nicht in PtInRect rein wenn die Maus sich über den Button befindet.
Nur beim Klick wird es ausgelößt. Woran kann das liegen ?
Delphi-Quellcode:
gruss Emil
GetCursorPos(CurPos);
ScreenToClient(WinHandle, CurPos); if PtInRect(rc, CurPos) then begin if IsLButtonDown then if WinHandle = GetFocus then if (GetCursor = LoadCursor(0, IDC_ARROW)) and (StateMax > 1) then UseState := 2 else if StateMax > 4 then UseState := 5; end; |
Re: Kein Event bei PtInRect
Ich glaube, du suchst
![]() |
Re: Kein Event bei PtInRect
Zitat:
Ich hab ein gültiges handle dieses wird vom Screen zum Clienten gesetzt warum erkennt PtInRect nun die Mausposition nicht ? Wenn ich micht innerhalb des Windows(Button) befinde ? Wenn ich meinen Timer aktiviere für Aero dann wird sie erkannt. Nur ich kann dafür nicht extra einen Timer einbauen.
Delphi-Quellcode:
dann gehts.
if SkinEngine.IsCompositionEnabled = False then
begin if (SkinEngine.SK_AEROEMULATE = 1) and (SkinEngine.IsAeroLayered) then begin if SkinEngine.IsLButtonDown then IsMoving := False; if (IsMoving = False) or ((SkinEngine.IsLButtonDown = True) and (IsMoving)) then begin GetWindowRect(WinHandle, rc); SkinEngine.MoveBackground(rc.Left, rc.Top); SkinEngine.FUpdateWindow(WinHandle, False); end; end; end; end; gruss Emil |
Re: Kein Event bei PtInRect
Hast du mal einen Haltepunkt gesetzt und bei Klick auf den Button die Werte angeschaut. Die müssten dann ja auch so sein das er rein geht. Woher sind die Werte für dein Rect und welches Handle ist WinHandle?
Wenn WinHandle das Handle des Buttons ist müsste dein Rect ja dann bei 0,0 los gehen, with und height müssten dann die Ausmase des Buttons beinhalten. Hast du das beachtet? Aber wie bereits erwähnt ist es das einfachste den Debugger zu verwenden. |
Re: Kein Event bei PtInRect
Zitat:
und die werte , ausmaße ebenfalls. Kapiere nicht das kein Event ausgelößt wird wenn ich mit der Maus drübergehe. gruss Emil |
Re: Kein Event bei PtInRect
Hast du dir mal überlegt, das die API Funktion TrackMouseEvent dir genau die Arbeit abnehmen könnte?
|
Re: Kein Event bei PtInRect
Zitat:
Werd mal schaun ob ich irgendwo einen stdcall vergessen habe das die Messagen vom MouseMove nicht ausgewertet werden. Ist es möglich das es daran liegt das die Winproc nicht der Klasse SkinEngine unterliegt ? Das problem ist nur müßte dann @TSkinEngine.ImageButProc für das erstellte Fenster übergeben Denke das ist auch nicht so das wahre. gruss Emil |
Re: Kein Event bei PtInRect
Hab das nochmal geprüft..
Denke das Problem kommt wo anders her Teil meiner Proc
Delphi-Quellcode:
WM_PAINT, WM_PRINT:
begin Img := GetButImageProperty(WinHandle); ButtonStyle := GetButStyle(WinHandle); if (ButtonStyle and BS_USERBUTTON) = BS_USERBUTTON then IsStaticLabel := True; if (Img <> 0) or IsStaticLabel then begin GetClientRect(WinHandle, rc); if Msg = WM_PAINT then begin hDC := BeginPaint(WinHandle, ps); und das ende
Delphi-Quellcode:
Wenn ich nun EndPaint(WinHandle, ps); deaktiviere funktioniert
if Msg = WM_PAINT then
begin if not Composited then DoubleBuffer(0, 0, 0, 0); EndPaint(WinHandle, ps); end; Result := 0; exit; end; // end WM_PAINT, WM_PRINT WM_DESTROY: begin // GDIPLUS button image löschen Img := GetButImageProperty(WinHandle); DeleteResource(Img); end; end; Result := CallWindowProc(ButOldProc[nil, 0], WinHandle, Msg, wParam, lParam); end; // End With alles so wie es soll MouseMove usw .. Nur was dann passiert könnt ihr euch denken das geht 2 Minuten gut dann wars das. Wie könnte ich das problem lösen hab im moment keine idee. gruss Emil |
Re: Kein Event bei PtInRect
Mal ne dumme frage
kann es sein das meine Class das event WM_PAINT zerstört oder die Winproc messagen nicht richtig verarbeitet werden ?
Delphi-Quellcode:
irgendeine möglichkeit muss es doch geben.
TSkinEngine = class
private gruss EMil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz