Autor Beitrag
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mo 13.02.06 07:45 
Hallo!

Weiß jemand, wie man den aktuellen Mauszeiger-Typ herausfinden kann? Ich meine aber jetzt nicht die Grafik als solche (das habe ich hier im Forum schon gefunden), sondern den Integer, den man den Steuerelementen mit der Eigenschaft cursor:TCursor zuweist. Ich will aber quasi die aktuell visuelle Form des Cursors als TCursor-integer erhalten. Geht das?
Eigentlich möchte ich über die Spaltenüberschrift einer Listview drüberfahren und wenn der Mauscursor die visuelle Form vom crHSplit annimmt (wenn man zwischen zwei Spalten steht), möchte ich darauf reagieren.

Gibt es einen gangbaren Weg dafür?

Liebe Grüße,

Claus.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 13.02.06 09:39 
Hallo,
:arrow: showmessage(IntToStr(Screen.Cursor));

könnt es sein das Du so etwas ähnliches vorhast?
...die Größenänderung von Spalten in einem ListView unterbinden?

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Logikmensch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mo 13.02.06 10:59 
Hallo!

Ja, sowas schwebte mir vor. Ich möchte eigentlich für mein virtuelles Listview die automatische Spaltenanpassung selber machen (habe ich im Grunde auch schon laufen), weil ich gar keine Subitems habe - ich zeichne sie selbst. Dafür habe ich bereits erfolgreich die WM_LBUTTONDBLCLK-Message, die die Listview da erzeugt, abgefangen und selber eine Routine gemacht, die die betreffende Spalte ermittelt. Läuft auch alles, aber der Schwellenwert, wo der Splitter ersscheint und wo er verschwindet, den kriege ich so nirgends raus, es sei denn ich lege ihn selber auf z.B. 5 Pixel links und rechts vom Spaltensplitter. Aber da das System ja den Mauscursor entsprechend ändert, könnte ich (so dachte ich jedenfalls) einfach schauen, ob der Mauscursor gerade die crHSplit-Form hat und nur dann meine Routine starten. Schwellenwerte könnte ich dann wegfallen lassen.

Leider aber ergibt SCREEN.CURSOR bei mir nur den wert 0. Ich habe nachgelesen in der Hilfe und dort steht, dass das nur eine übergeordnete Festlegung ist, nicht aber den aktuellen Mauszeiger ermittelt.
Deswegen funzt ShowMessage(IntToStr(Screen.Cursor)) leider nur in der Theorie, nicht aber in der Praxis.

Zu dumm, die Grafik des Mauszeigers könnte ich auslesen, aber das nützt mir nichts. Ich dachte, die aktuell dargestellte Mausart würde irgendwo abrufbar sein, aber auch die API schweigt sich aus.

Liebe Grüße,

Claus.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 13.02.06 12:06 
Hallo,
user profile iconLogikmensch hat folgendes geschrieben:
Leider aber ergibt SCREEN.CURSOR bei mir nur den wert 0.
Der Cursor crDefault hat den Wert 0.

Wenn Du beispielsweise folgenden Code einbaust:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
// in OnMouseMove der Form 
Screen.Corsor := crHourGlass;
Caption := IntToStr(Screen.Corsor);
// in OnMouseMove der ListView 
Screen.Corsor := crDefault;
Caption := IntToStr(Screen.Corsor);
wirst Du abwechselnd den Wert 0 und -11 in der Titelleiste angezeigt bekommen.

Das Problem ist, das die Form die Änderung des Mauszeigers nicht mitbekommt,
wenn der Mauszeiger sich über den Columns befindet.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Logikmensch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mo 13.02.06 21:32 
Hallo Lannes,

Erst mal danke für den Hinweis bei den Schweizern. Der war echt nicht uninteressant. :D

Klaro wird beim Setzen der Screen.Cursor-Eigenschaft diese beim Auslesen auch wiedergefunden. Nein, das ist nicht ganz das, was ich gemeint hatte. :-) In der Tat meinte ich das Aussehen der Maus während sie sich über Steuerelementen befindet bzw. bewegt wird. Auch ich dachte, dass Screen.Cursor diese Eigenschaft mit 'Cursor' zum Lesen bereitstellt und auch während der Mausbewegung ständig aktualisiert. Aber leider ist das nur ein Wunschdenken von mir.
Ich werde am Dienstag mal den Delphi Source-Code studieren, was genau passiert, wenn ein Steuerelement die Cursor-Eigenschaft gesetzt bekommt. Aber wahrscheinlich wird mir das auch net viel helfen, da der optische Eindruck des Mauszeigers ja erst beim Bewegen der Maus entsteht - das Setzen der Cursor-Eigenschaft hat ja nicht direkt was mit dem momentanen Aussehen des Mauszeigers zu tun, das wird höchstwahrscheinlich vom "Allerheiligsten" im Windows-Kern gesteuert.

Ich bin auch weiterhin für Tipps und Ideen dankbar.
Logikmensch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Fr 29.12.06 13:19 
Ich will diesen offenen Thread mal abschließen, da sich hier leider keine Lösung finden ließ.
Mein damaliger Wunsch, sinnvoll auf den Wechsel des Aussehens des Mauscursors zu reagieren, war der falsche Ansatz. Ich wollte abprüfen, wann der Mauszeiger zu diesem Spaltenverschiebecursor wechselt, um eine Listview besser zu bedienen. Ich habe stattdessen die Mausposition abgefragt und mein Problem so in den Griff gekriegt.

_________________
Es gibt keine Probleme - nur Lösungen!