Entwickler-Ecke
Sonstiges (Delphi) - Bitmap --> Cursor
mtin - Fr 28.04.06 16:30
Titel: Bitmap --> Cursor
hey,
ich würde gerne mit einem Delphi-Programm den Mauscursor verändern, und das auch noch dynamisch, also müsste ich den cursor zur Laufzeit erstellen...alle möglichkeiten die ich bisher gesehen hab um den cursor zu verändern gehen aber auf das laden einer .cur oder .ani Datei zurück...also müsste ich das entweder so speichern können oder noch besser ein Bitmap in einen Cursor bekommen!
hoffe ma das geht irchendwie!
Danniolo - Fr 28.04.06 16:42
Hab mal im EDH (Easy-Delphi-Helper von
http://www.dsdt.info) nachgeguckt, da steht das hier dazu:
Zitat: |
Unter Delphi hat man die Möglichkeit eigene, animierte Cursor einzubinden. Dies geschieht mit der Routine 'LoadCursorFromFile'. Als Parameter muss man dieser Funktion nur den Pfad zur *.ani-Datei übergeben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.FormCreate(Sender: TObject); const crMyCursor = 22391; begin Screen.Cursors[crMyCursor] := LoadCursorFromFile('C:\cursor.ani'); Screen.Cursor := crMyCursor; end; |
Die Cursor-Konstante muss größer als 0 sein, denn ansonsten kann es Probleme mit bereits definierten Cursor-Konstanten geben. Möchte man den Cursor auch in anderen Routinen verwenden, sollte die Konstante global deklariert werden.
In der Onlinehilfe befindet sich unter dem Stichwort TScreen,Cursors ein Beispiel, wie man eigene Cursors aus einer Ressource einbindet. |
mtin - Fr 28.04.06 18:33
ne, das mein ich ja grad ebn nicht!
das hab ich auch schon überall gefunden, allerdings kann ich ja damit schlecht während der Laufzeit einen Cursor erstellen, oder kann man irgendwie ein TBitmap als .ani speichern!?
Ich möchte während mein Programm läuft in einer Bitmap den cursor generieren und dann als cursor setzen...hoffe ma jetzt isses nen bisschen verständlicher :)
Danniolo - Fr 28.04.06 18:48
Mit dieser Methode gehen auch Bitmaps.
Jedenfalls hatte ich das so im Hinterkopf, ich probiers gleich ma aus.
Danniolo - Fr 28.04.06 19:01
Ich hab noch einen anderen Source gefunden, mit dem lassen sich auch .ico Dateien als Cursor eisetzten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var h: THandle; begin h:=LoadImage(0,'C:\Icon.ico',IMAGE_CURSOR,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE); if h <> 0 then begin Screen.Cursors[1]:=h; Form1.Cursor:=1; end; end; |
Mit
dieser Procedure [
http://www.delphi-forum.de/viewtopic.php?p=85305#85305] lassen sich dann Bitmaps in Icons umwandeln, ich hoffe so geht es. :wink:
mtin - Sa 29.04.06 16:18
mhm, danke, soweit geht das erstmal...einziges Problem ist, dass ich jetzt den Punkt, mit der die Maus klickt nich festlegen kann... das ist immer ganz oben rechts (0,0)
wenn das noch irgendwie gehen würde wärs perfekt :D
mtin - So 30.04.06 18:52
hab das folgende schonma an Luckie geschickt, aber vielleicht findet sich ja hier auch jemand der mir helfen kann...
Zitat: |
hallo!
hab hier irgendwo im Forum diesen code von dir gesehen, der aus einem Bitmap ein Icon macht...das war genau das was ich brauchte :)
hab das dann mal auf meine Bedürfnisse zugeschnitten (Bitmap-->Cursor):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure seticon(const bm1,bm2:TBitmap;x,y:integer); var h: THandle; Iinfo:TIconInfo; begin try Iinfo.fIcon:=true; Iinfo.xHotspot:=x; Iinfo.yHotspot:=y; Iinfo.hbmMask:=bm2.Handle; Iinfo.hbmColor:=bm1.Handle; Screen.Cursors[1]:=CreateIconIndirect(Iinfo); Form1.Cursor:=1; finally bm2.free; bm1.free; end; end; |
Das funktioniert auch erstmal insofern, dass sich dadurch der cursor ändert...allerdings nicht so wie ich das will! Auf dem folgenden screenshot kannst du links das "bm1" erkennen (Iinfo.hbmColor:=bm1.Handle;) und rechts die Maske (bm2).jetzt müsste doch eigentlich dass entstehende icon einfach nur diesen grünen pfeil enthalten und sonst transparent sein, oder? Es wird aber genau das grüne transparent und der rest bleibt sichtbar...das siehste über dem einen Button da (mist, der screenshot hat die maus nich mitgenommen...auf dem 2. screenshot siehste aber wie es aussah, "test.ico")...
habs auch schonmal invertiert versucht (die Maske) ist aber genau das gleiche (was schonmal sehr merkwürdig ist)
[url=http://img133.imageshack.us/my.php?image=042920061926329ml.png] [/URL] [url=http://img141.imageshack.us/my.php?image=042920061937418hu.png] [/URL]
Gehe ich hier vielleicht einfach völlig falsch ran und eine Maske in Delphi ist was anderes als das was ich von Photoshop und co her kenne?
Oder weißt du sonst noch was?
Hab das ganze auch mal genau so probiert wie du das im Forum gepostet hattest, das gespeicherte Icon sieht dann aber ganz genauso aus (wie der cursor)
ich hoff mal du kannst mir helfen :)
|
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!