AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Aktuellen Mauszeiger Abfragen..

Ein Thema von Mavarik · begonnen am 18. Dez 2009 · letzter Beitrag vom 3. Sep 2010
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#1

Aktuellen Mauszeiger Abfragen..

  Alt 18. Dez 2009, 18:17
Hallo Zusammen!

Gibt es den keine Möglichkeit den aktuellen Mauszeiger abzufragen...

Und zwar nicht das Icon sondern das ID...

Ich möchte einfach nur wissen: Aktueller Mauszeiger ist z.b. : crHandPoint

Von mir aus auch das Windows ID : IDC_HAND

Nochmal nicht sowas..:

Delphi-Quellcode:
  procedure DrawCursor(ScreenShotBitmap : TBitmap);
  var
    r: TRect;
    CI: TCursorInfo;
    Icon: TIcon;
    II: TIconInfo;
  begin
    CI.cbSize := SizeOf(CI);
    if GetCursorInfo(CI) then
      if CI.Flags = CURSOR_SHOWING then
      begin
        r := ScreenShotBitmap.Canvas.ClipRect;
        Icon := TIcon.Create;
        try
          Icon.Handle := CopyIcon(CI.hCursor);
          if GetIconInfo(Icon.Handle, II) then
          begin
            ScreenShotBitmap.Canvas.Draw(
                  ci.ptScreenPos.x - Integer(II.xHotspot) - r.Left,
                  ci.ptScreenPos.y - Integer(II.yHotspot) - r.Top,
                  Icon
                  );
          end;
        finally
          Icon.Free;
        end;
      end;
   end;

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Aktuellen Mauszeiger Abfragen..

  Alt 18. Dez 2009, 18:33
Naja, eine Art GetCursorID gibt es ja nicht und der Cursor selbst ist ja nur eine Graphic.
Die Cursor ID wird ja nicht im System beim setzen eines Cursors (SetCursor();) gespeichert. (glaub ich mal)
Man müsste nun das akt. Cursorbild mit allen anderen Cursorbildern vergleichen um heraus zu finden welcher gerade gesetzt ist.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Aktuellen Mauszeiger Abfragen..

  Alt 18. Dez 2009, 19:32
Einfach im MSDN unter MSDN-Library durchsuchenSetCursor geguckt und das gefunden: MSDN-Library durchsuchenGetCursor.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Aktuellen Mauszeiger Abfragen..

  Alt 18. Dez 2009, 19:53
Hallo,

GetCursor liefert ein Cursor-Handle, nicht die gewünschte Cursor-ID. Die von Delphi verwendete ID lässt sich aber relativ leicht aus dem Handle bestimmen:

Delphi-Quellcode:
// uses Windows, Forms

function GetActiveCursor: TCursor;
var
  CursorHandle: HCURSOR;
begin
  CursorHandle := GetCursor;

  for Result := crSizeAll to Screen.CursorCount do
    if (Screen.Cursors[Result] = CursorHandle) then
      Exit;

  Result := crDefault;
end;
Unschön ist natürlich die feste Untergrenze für die Schleife, aber mir ist kein "offizieller" Weg bekannt, diese Grenze zu ermitteln.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Aktuellen Mauszeiger Abfragen..

  Alt 18. Dez 2009, 20:01
Zitat von Hawkeye219:
GetCursor liefert ein Cursor-Handle, nicht die gewünschte Cursor-ID.
War ja auch nur als Ansatz gedacht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#6

Re: Aktuellen Mauszeiger Abfragen..

  Alt 19. Dez 2009, 00:23
Hallo,

eine allgemeine Lösung kann es garnicht geben, weil ja jedes Programm den Cursor mit einer eigenen Bitmap programmieren kann, und viele tun das auch, einschliesslich Delphi (crHourGlass ist nicht Windows IDC_WAIT). Standardlösungen wie oben können höchstens die ID von Windows-eigenen Cursoren bestimmen, aber so muss der Cursor momentan ja nicht aussehen.

Die Information wird in CreateCursor verarbeitet, aber dazu gibt es keinen Weg zurück.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#7

Re: Aktuellen Mauszeiger Abfragen..

  Alt 19. Dez 2009, 09:12
Zitat von Reinhard Kern:
(crHourGlass ist nicht Windows IDC_WAIT)
Bei mir schon.

crSQLWait sieht aber wie was Eigenes aus.

Zitat von Hawkeye219:
GetCursor liefert ein Cursor-Handle, nicht die gewünschte Cursor-ID.
Hat mal wer probiert was passiert, wenn man sich zu den bekannten Cursor-IDs ein Handle besorgt und dieses mit diesem Handle vergleicht?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: Aktuellen Mauszeiger Abfragen..

  Alt 19. Dez 2009, 11:06
MSDN-Library durchsuchenGetIconInfo liefert doch diese Angabe.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Aktuellen Mauszeiger Abfragen..

  Alt 21. Dez 2009, 07:48
Zitat von himitsu:
Hat mal wer probiert was passiert, wenn man sich zu den bekannten Cursor-IDs ein Handle besorgt und dieses mit diesem Handle vergleicht?
Ja das war auch mein Ansatz...

Das Problem ist das die Funktion GetIconInfo nur dann funktioniert wenn die Maus auch dargestellt wird...

Als mit der Schleife über alle ID'S klappt es nicht, weil sich dafür die Maus auch noch bewegt haben muss..

Zitat von Hawkeye219:
GetCursor liefert ein Cursor-Handle, nicht die gewünschte Cursor-ID. Die von Delphi verwendete ID lässt sich aber relativ leicht aus dem Handle bestimmen:

Delphi-Quellcode:
// uses Windows, Forms

function GetActiveCursor: TCursor;
var
  CursorHandle: HCURSOR;
begin
  CursorHandle := GetCursor;

  for Result := crSizeAll to Screen.CursorCount do
    if (Screen.Cursors[Result] = CursorHandle) then
      Exit;

  Result := crDefault;
end;
Das funktioniert leider auch nicht... Zum start ist Cursorcount = 0. Mal abgesehen davon, dass ein Setcursor den wert erhöht, auch wenn der Cursor
schon vorhanden ist... Bedeutet das mit jedem Setcursor die Liste immer größer wird...


Zitat von toms:
MSDN-Library durchsuchenGetIconInfo liefert doch diese Angabe.
s.o. Wie gesagt nur ein Handle nicht das ID...

Vielleicht gibt es eine Funktion die den Windows Status ausgibt, damit man selber den Cursor setzen kann?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Re: Aktuellen Mauszeiger Abfragen..

  Alt 3. Sep 2010, 09:48
Vielleicht gibt es eine Funktion die den Windows Status ausgibt, damit man selber den Cursor setzen kann?
Push!

Hat keiner ne Idee wie man rauskriegt, dass Windows gerade die Maus auf resize oder so umgeschaltet hat?

Mavarik
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:30 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