Entwickler-Ecke
Windows API - Maus Zeiger ändern
René R.Fo. - Mo 25.05.09 14:42
Titel: Maus Zeiger ändern
Hallo Ich wolte wissen ob man die maus mit einem Bild B.z. Cursor ''Belegen'' Kann?
d.h. nicht mit der eigenschaft Cursor, sonder einer .cur Dartei (Cursor Datei)/ .bmp Datei.
Moderiert von
Narses: Topic aus Multimedia / Grafik verschoben am Mo 25.05.2009 um 15:29
BenBE - Mo 25.05.09 14:46
Du musst diesen Cursor mit LoadCursor laden und das zugehörige Handle dann der Mouse.Courser-Eigenschaft zuweisen. Freigeben am Ende deines Programms nicht vergessen.
Yogu - Mo 25.05.09 15:13
Vorher musst du den Cursor aber noch als Ressource einbinden. Das geht zum Beispiel mit dem in Delphi mitgelieferten Programm, das du im Menü "Tools" findest. Dann kannst du
LoadCursor so aufrufen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| const crMyCursor = 1;
var CursorHandle: THandle; begin CursorHandle := LoadCursor(HInstance, 'NameDerRessource'); if CursorHandle <> 0 then Screen.Cursors[crMyCursor] := CursorHandle; end; |
Die Konstante
crMyCursor kannst du dann nachher z.B. statt
crHourGlass oder
crArrow verwenden. Verwende nur positive Werte, die negativen sind für die Standard-Cursors vorbehalten.
René R.Fo. - Di 26.05.09 14:33
Das klappt irgendwie nicht der Zeiger ändert sich nicht
jaenicke - Di 26.05.09 14:41
Aber die neue Mauszeigerkonstante hast du dann auch benutzt um sie irgendwo zuzuweisen, z.B. an FormX.Cursor?
René R.Fo. - Mi 27.05.09 14:42
jaenicke hat folgendes geschrieben : |
Aber die neue Mauszeigerkonstante hast du dann auch benutzt um sie irgendwo zuzuweisen, z.B. an FormX.Cursor? |
Nein habe ich nicht. W muss ich das denn einsetzen
z.B. an FormX.Cursor?
Form1
Moderiert von
Narses: Zitat gekennzeichnet.
jaenicke - Mi 27.05.09 14:45
Naja, nach dem Laden des Cursors musst du den auch benutzen, also der Eigenschaft Cursor z.B. deines Formulars zuweisen, wie gesagt.
ffgorcky - Mi 27.05.09 19:10
Also wenn ich das gerade richtig überblicke, dann müsste es doch zum Beispiel so gehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure Form1.CursorAendern(); const crMyCursor = 1; var CursorHandle: THandle; begin CursorHandle := LoadCursor(HInstance, 'NameDerRessource'); if not CursorHandle=0 then begin Screen.Cursors[crMyCursor] := CursorHandle; end; end; |
- Oder?
Wobei Du dann die
procedure Form1.CursorAendern(); erst mal oben noch unter
Public oder
private declarieren müsstest, damit Du vor den Procedur-Namen "
Form1." schreiben kannst.
- Sonst reicht es, wenn Du das ganze ohne das "
Form1." ziemlich zu Anfang Deines Quelltextes schreibst.
jaenicke - Mi 27.05.09 19:16
Da fehlt aber wie gesagt noch die Benutzung des damit geladenen Cursors. ;-)
ffgorcky - Mi 27.05.09 19:29
Jaenicke meinte gerade per PN, dass man dann auch noch dieses setzen sollte:
Delphi-Quelltext
1:
| Form1.Cursor := crMyCursor; |
So gut kenne ich mich leider nun auch wieder nicht in dem Gebiet aus, also wenn er das sagt...
jaenicke - Mi 27.05.09 19:35
Ja, hatte ich oben ja auch schon geschrieben, dass der neue Cursor auch zugewiesen werden muss.
Yogu - Mi 27.05.09 21:36
ffgorcky hat folgendes geschrieben : |
Also wenn ich das gerade richtig überblicke, dann müsste es doch zum Beispiel so gehen |
Ach nee - das ist exakt mein Codebeispiel, wenn auch schlechter formatiert :P
Yogu - Mi 27.05.09 21:50
Hoppla, hab ich übersehen. In C(++|#) hätte is IMHO funktioniert (da wird ! als bool'scher Operand angesehen), aber in Delphi wird dann ja erst CursorHandle bitweise invertiert und dann auf <> 0 überprüft. Klappt nicht, denn ein invertiertes Handle ist so ziemlich immer <> 0 ;)
René R.Fo. - Do 28.05.09 19:51
Yogu hat folgendes geschrieben : |
Hoppla, hab ich übersehen. In C(++|#) hätte is IMHO funktioniert (da wird ! als bool'scher Operand angesehen), aber in Delphi wird dann ja erst CursorHandle bitweise invertiert und dann auf <> 0 überprüft. Klappt nicht, denn ein invertiertes Handle ist so ziemlich immer <> 0 ;) |
Toll, hilfreich, Egel :lol: :roll: :wink: .
Irgend wie gibt es ein Problem Bei der Wandlung des Cursors denn der PC wandelt ihn nicht ich habe alles doppelt getestet und euer gepostetes mit einbezogen.
Moderiert von
Narses: Quote-Tags hinzugefügt.
jaenicke - Do 28.05.09 19:55
Wie hast du die Ressource jetzt erstellt? Also wie sieht ggf. das .rc Skript aus und wie sieht dein aktueller Quelltext aus?
Yogu - Do 28.05.09 20:26
René R.Fo. hat folgendes geschrieben : |
Hoppla, hab ich übersehen. In C(++|#) hätte is IMHO funktioniert (da wird ! als bool'scher Operand angesehen), aber in Delphi wird dann ja erst CursorHandle bitweise invertiert und dann auf <> 0 überprüft. Klappt nicht, denn ein invertiertes Handle ist so ziemlich immer <> 0
Toll, hilfreich, Egel :lol: :roll: :wink: . |
In C#:
C#-Quelltext
1:
| if (!CursorHandle == 0) |
könnte man mit "Windschutzklammern" (wie sie mein früherer Mathelehrer immer genannt hat) versehen, ohne dass sich wirklich was verändedrt:
C#-Quelltext
1:
| if (!(CursorHandle == 0)) |
Also: Zuerst wird innen verglichen, dann wird außen invertiert. Denn man arbeitet sich in der Mathematik ja immer von der innersten Klammer zur äußersten :idea:
In Delphi:
Delphi-Quelltext
1:
| if not CursorHandle = 0 |
hieße
Delphi-Quelltext
1:
| if (not CursorHandle) = 0 |
Hier sieht man, dass zuerst
CursorHandle invertiert wird, und dann das ganze auf 0 geprüft wird. Und eben das wollen wir nicht.
Das aber nur am Rande, ich hatte grad ein bisschen zu viel Zeit ;)
René R.Fo. - Mo 01.06.09 16:08
Danke :zustimm: :flehan:
Nurnoch wo Kann ich die Datei Laden?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm185.FormCreate(Sender: TObject); var CursorHandle: THandle; begin if CursorHandle <> 0 then Screen.Cursors[crMyCursor] := CursorHandle; Self.Cursor := crMyCursor; end; |
Wo wird das den geladen? Ich hatte gedacht das dass ihr wäre.
Delphi-Quelltext
1:
| CursorHandle := LoadCursor(HInstance, 'Test'); |
allerdings ist in den Ordner keine Datei mit den Namen
in der Resorss Datei steht auch nichts bitte erklärt mir das :nixweiss: den ich versehe das nicht.
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Timosch - Mo 01.06.09 16:18
Wie schon oben beschrieben: Du musst die Datei als Ressource einbinden. Wie, steht weiter oben.
jaenicke - Mo 01.06.09 16:26
Und die dafür notwendigen Dateien sind ja auch alle dabei... Ressourcenskript, die Batchdatei zum Kompilieren, der Cursor...
René R.Fo. - Mo 01.06.09 16:47
^^Wo den in dem anderem steht nichts und hir auchnicht oder habe ich das übersehen?
René R.Fo. - Mo 01.06.09 17:14
Dake aber wo kommt der Name 'Test' her?
CursorHandle := LoadCursor(HInstance, 'Test');
jaenicke - Mo 01.06.09 17:16
Hast du einmal in das Ressourcenskript (.rc) geschaut...
Und den Link angeschaut?
Zitat: |
Create the resource file script.
Every line consist of a resource name, a resource type and the resource.
In the example below support is the resource name, HTML is the resource type and "support.html" is the resource.
support HTML "support.html" |
René R.Fo. - Mo 01.06.09 17:24
Nein nicht wirklich ich bin kein fän von Englich bitte erkläre es
So das anfänger(bis Fortgeschriten) es verstehen können.
jaenicke - Mo 01.06.09 17:26
Ohne Englisch kommt man als Programmierer nicht weit...
Das solltest du lieber zuerst lernen.
Wie gesagt: Das steht in dem Ressourcenskript, der .rc Datei, die eben sagt was in die Ressource kompiliert werden soll. Die ist bei der Demo doch dabei...
René R.Fo. - Mo 01.06.09 17:41
Wenn ich des richtig verstehe
{$R CursorRes.res}
ist der ''Übersetzer'' Der res Datei
if CursorHandle <> 0 then
Screen.Cursors[crMyCursor] := CursorHandle;
Self.Cursor := crMyCursor;
ist zum umwandel der Maus
CursorHandle := LoadCursor(HInstance, 'Test');
Laden der Maus
aber Was Lädt er den mit Test Das verstehe ich nicht
jaenicke - Mo 01.06.09 17:47
Wie oft denn noch? Das steht in der .rc Datei...
Quelltext
1:
| Test CURSOR Cursor1.cur |
Das sagt dem Ressourcencompiler, dass er in die Ressourcendatei (.res) die Datei Cursor1.cur unter dem Namen Test und als Typ CURSOR packen soll.
Oder hast du etwa die Dateierweiterungen (.exe, .rc, ...) bei dir ausgeblendet? :shock:
Dann schau dir diese Zusatzbemerkung an:
http://www.delphi-library.de/viewtopic.php?p=540052#540052
René R.Fo. - Mo 01.06.09 17:57
Soryy ich hate immer die Project185 Datei geöffnet
ist jetzt inordnung
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!