[delphi] custom muiscursor wil niet echt

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Dag allen,
Ik ben met een applicatie bezig, waar dit keer een eigen muiscursor in moet. Een handje, om iets te verplaatsen :)

Probleem: als ik de muisknop indruk, wil ik dat er een ander cursortje weergegeven wordt. Dat werkt niet.

Code om de muiscursors in te laden (in de OnCreate handler van het form):
Delphi:
1
2
Screen.Cursors[1] := LoadCursor(HInstance, 'HANDFLOAT');
Screen.Cursors[2] := LoadCursor(HInstance, 'HANDGRAB');


en in de OnMouseDown en OnMouseUp handler van het TImage waarvan de muiscursor moet veranderen resp. de volgende regels code:
Delphi:
1
2
Image.Cursor := 2;
Image.Cursor := 1;

Dat lijkt aardig te kloppen he? Toch werkt het niet :)
Als ik het met de linker muisknop probeer, dan gebeurt er helemaal niets met de muiscursor. Met de rechter muisknop geberut er iets meer... dan verandert de cursor pas nadat ik de muis beweeg. Weird he..

日本!🎌


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 25-08 14:38

OZ-Gump

terug van weggeweest

in principe valt het denk ik wel mee met dat weirde: ik denk dat er een refresh aan te pas moet komen voordat de cursor opnieuw getekend gaat worden. En dat gebeurt pas als je de muis beweegt. Misschien kun je de cursor ook repainten of refreshen via code?
Omdat je de cursor van bijvoorbeeld een image veranderd, wordt dat pas doorgevoerd na de volgende tekenactie op de cursor...

[ Voor 20% gewijzigd door OZ-Gump op 19-12-2002 08:58 ]

My personal website


  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 13-08 18:15

gvdh81

To got or not to got..

Je kunt je muispositie 1 pixel verzetten, of zoiets dergelijks, anders moet je eens kijken naar een component wat ik gemaakt heb, hier kon je animated mouse cursors in delphi gebruiken:
By Xces. Component that has ability to set the mouse cursor to animated cursor's (*.ani, 32x32, True color). Not just in your application, but windows-wide.
http://www.torry.net/vcl/system/mouse/ac.zip

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Dat component doet het met SetSystemCursor, en dat is dus door heel windows heen... das weer een beetje teveel van het goede :)

Ik heb in de tussentijd trouwens wel ontdekt dat als je Screen.Cursor instelt, dat je de cursor dan wel direct te zien krijgt. Het is wat omslachtig, maar uiteindelijk werkt het wel...

Dat van die 1 pixel verzetten of refreshen gaat alleen op voor de rechter muisknop... Als ik de linker muisknop gebruik, dan helpt dat gewoon niet.

offtopic:
Xces, gebruik TFilename voor je FN property, dan krijg je een opendialog vanuit de object inspector ;)

日本!🎌


Verwijderd

rare bug.. bij een Windowed control werkt het wel gewoon... wat je in ieder geval kan doen is dit achteraan in je timer-event zetten:

code:
1
2
GetCursorPos(Point);
SetCursorPos(Point.x, Point.y);


Point is een TPoint variabele

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Dat heb ik ook gedaan, maar dat werkte niet...

Bovendien is een TImage toch een windowed control :?

日本!🎌


Verwijderd

ow vaag bij mij werkt het wel... enneuh TImage is geen windowed control nee

Verwijderd

Doe een simpele API call in het OnMouseDown en OnMouseUp event.

TImage.OnMouseDown :
code:
1
SetCursor (LoadCursor (hInstance, 'HandGrab'));


TImage.OnMouseUp :
code:
1
SetCursor (LoadCursor (hInstance, 'HandFloat'));


:)

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
welke delphi versie heb je? ook alle SP's?

ik heb me eens rot gezocht naar een bug in mijn programma, totdat ik er achter kwam dat ik een SP moet installeren, daarna was de bug weg :(

Opensource delphi componenten (http://www.delphi-jedi.org)


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
TSI2002:
je OnMouseDown werkt, maar je OnMouseUp niet. Daar wordt de cursor gereset naar crDefault. Als ik het met de rechter muisknop doe, dan wordt pas gereset naar crDefault als ik de muis een zet geef. Probleem is dus een beetje omgekeerd zo :)

Mr.NoBody:
Delphi 5, Update Pack geinstalleerd... Draaiend onder Windows XP.

edit:
Ik heb inmiddels een eigen component gemaakt (waar het verplaatsen al in zit), die afgeleid is van een TWinControl. Dat zou een windowed control moeten zijn, en de cursor werkt daarin een stuk beter. Alleen het instellen van de cursor bij OnMouseDown moest ik doen met SetCursor, voor de rest werkt het prima met "Cursor := ..."

Toch vaag.

[ Voor 35% gewijzigd door _Thanatos_ op 19-12-2002 20:02 ]

日本!🎌

Pagina: 1