AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kein Event bei PtInRect

Ein Thema von EWeiss · begonnen am 21. Okt 2008 · letzter Beitrag vom 23. Okt 2008
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Kein Event bei PtInRect

  Alt 21. Okt 2008, 11:24
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:
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;
gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Kein Event bei PtInRect

  Alt 21. Okt 2008, 11:38
Ich glaube, du suchst MSDN-Library durchsuchenTrackMouseEvent.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Kein Event bei PtInRect

  Alt 21. Okt 2008, 11:55
Zitat von Luckie:
Ich glaube, du suchst MSDN-Library durchsuchenTrackMouseEvent.
Verstehe ich nicht ganz
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:
        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;
dann gehts.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Kein Event bei PtInRect

  Alt 21. Okt 2008, 12:25
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Kein Event bei PtInRect

  Alt 21. Okt 2008, 12:31
Zitat von SirThornberry:
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.
BEim klick auf den Button funktioniert das einwandfrei das Handle des button ist korrekt
und die werte , ausmaße ebenfalls.

Kapiere nicht das kein Event ausgelößt wird wenn ich mit der Maus drübergehe.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Kein Event bei PtInRect

  Alt 21. Okt 2008, 17:20
Hast du dir mal überlegt, das die API Funktion TrackMouseEvent dir genau die Arbeit abnehmen könnte?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Kein Event bei PtInRect

  Alt 22. Okt 2008, 03:02
Zitat von Luckie:
Hast du dir mal überlegt, das die API Funktion TrackMouseEvent dir genau die Arbeit abnehmen könnte?
Ja
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Kein Event bei PtInRect

  Alt 22. Okt 2008, 10:40
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:
        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
Wenn ich nun EndPaint(WinHandle, ps); deaktiviere funktioniert
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Kein Event bei PtInRect

  Alt 23. Okt 2008, 11:44
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:
  TSkinEngine = class
  private
irgendeine möglichkeit muss es doch geben.

gruss EMil
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz