Entwickler-Ecke
Multimedia / Grafik - Mauscursor intern einbauen ohne extern zuzugreifen
Delphi-Noobie - Fr 21.11.03 21:21
Titel: Mauscursor intern einbauen ohne extern zuzugreifen
Hi Leute,
ich hab nen Problem. Wie kann ich einen animierten Mauscursor intern in die exe mit einbauen ohne extern zuzugreifen. Den Ansatz hab ich schon! ich hab die Cursor.ani File in eine eine Cursor.res[Index=1] Datei umgewandelt und sie in den Ordner kopiert, wo meine Delphi exe drin ist. Dann unter Implentation {$R Cursor.res} eingefügt. Aber mit welchem Befehl kann ich den Cursor nun abrufen? Meinetwegen onclick oder so :? ?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| implementation
{$R *.dfm} {$R Cursor.res} procedure TForm1.Button1Click(Sender: TObject); begin end;
end. |
Andreas Pfau - Mo 24.11.03 21:47
Hallo,
erstmal den cursor laden:
Delphi-Quelltext
1:
| Screen.Cursors[1] := LoadCursor (HINSTANCE, PChar(1)); |
Der Index von Cursors MUSS positiv sein. in PChar() den Index oder den Namen des Cursors eintragen (den RESSOURCENnamen!!!).
Dann den Cursor aufrufen:
oder, wenn du den Cursor für die GESAMTE Anwendung ändern willst:
Delphi-Noobie - Di 25.11.03 21:20
Es klappt leider immer noch nicht! Könnte es daran liegen das ich ne falsche Skriptdatei mit dem Borlandcompiler Compiliert habe? Ich hab nen Texteditor geöffnet und reingeschrieben: 1 Cursorfile "cursor.ani" und dann nachdem ich es zu ner Rc-Datei gemacht habe mit dem Borland Compiler zu ner Res Datei umgewandelt. Kommt da vielleicht was anderes hin z.B nicht Cursorfile? Oder was mache ich sonst falsch? :?:
Andreas Pfau - Di 25.11.03 21:32
Hallo,
nicht "Cursorfile", sondern "Cursor"! Das macht einen riesigen unterschied, denn LoadCursor() suchr NUR nach "Cursor"!!!
Also dien RC sollte etwa so aussehen:
Quelltext
1:
| 1 CURSOR "Cursor1.ani" |
Groß-Kleinschreibung ist egal, sieht aber so gleich übersichtlicher aus, vor allem wenn du mal mehrere Ressourcen hast. Die Anführungszeichen sind hier eigentlich egal, aber bei Dateinamen mit Leerzeichen unbedingt erforderlich!
Dann der Konsolenparameter für den Compiler:
Quelltext
1:
| Brcc32.exe Resource.rc |
Dann müsste es klappen. Obwohl ich jetzt nicht weiß, ob das auch mir animierten Cursors geht, aber das merkst du ja dann gleich :wink:
Delphi-Noobie - Di 25.11.03 21:37
Ok ich weis jetzt wo der Fehler liegt undzwar bei Compiler :) Wenn ich in den Texteditor schreibe: 1 Cursor "cursor.cur" dann klappts, aber nicht wenn ich reinschreibe: 1 cursor "cursor.ani" ! Dann sagt er unbekanntes Cursorformat! :cry: Wenn jemand weis, was ich stattdessen reinschreiben muss bitte melden. Thx im Vorraus!
Delphi-Noobie - Di 25.11.03 21:41
Ups hab net gesehen, dass du schon wieder geschrieben hast, deswegen der Text ebend :). Aber das mit der ani-file nimmt er ebend nicht :(. Wenn du rausbekommst wie der richtige Befehl lautet kannste ihn ja nochmal posten ^^.
Andreas Pfau - Di 25.11.03 21:45
Hallo,
habe nachgeschlagen im PSDK, und es stimmt - man braucht eine andere Funktion, und die heißt LoadImage().
Delphi-Noobie - Di 25.11.03 22:01
habs ausprobiert..funktioniert aber immer noch nicht :( ich hab in den Texteditor geschriben: 1 loadimage "cursor.ani".. kompiliert, in exe eingefügt und dann mit deinem Befehl versucht aufzurufen, was aber immer noch nicht klappt. Auch wenn ich bei deinem Befehl loadcursor mit loadimage ersetze klappts nicht. Aber warum?
Andreas Pfau - Mi 26.11.03 16:47
Hallo,
nimm mir das jetzt bitte nicht schief, aber du scheinst mir ein absoluter anfönger sein. Daher jetz mal gaaaanz langsam:
die RC-datei bleibt UNVERÄNDERT. Und wenn man hinter einen Namen () schreibt, so ist das eine Funktion - d.h.du musst den Cutrsor mit LoadImage() laden, und zwar so ungefähr:
Delphi-Quelltext
1:
| Screen.Cursors[1] := LoadImage(HInstance, PChar(1), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE); |
Nun ist es aber GANZ wichtig, dass du den Cursor freigibst. Zu Programmende das heir aufrufen:
Delphi-Quelltext
1:
| DestroyCursor(Screen.Cursors[1]); |
Und immer schön in der Delphi-Hilfe nachschauen, das hilft immer.
Delphi-Noobie - Mi 26.11.03 20:07
Das mit dem Anfänger simmt :) Ich habe erst vor kurzem angefangen mit Delphi ( vor 8 Wochen oder so). Aber nochmal zum Problem: Das was du hier grad geschrieben ist mir schon klar, so hab ichs auch gemacht. Nur Wenn ich den TExt im Texteditor so lasse (1 Cursor "cursor.ani") nimmt der Compiler das nicht an, weil es ne ani.File ist und deswegen schreibt er umnbekanntes Cursorformat! Das war meine eingendliche Frage, was ich da statt "Cursor" ebend hinschreiben soll. ich hab schon nen paar Sachen, wie Cursorfile, loadimage, image,... ausprobiert, was er dann zwar zu ner res Datei umformt aber er den Cursor nicht wechselt beim Aufrufen. Hier nochmal mein Sourcecode
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| implementation
{$R *.dfm} {$R cursor.res} procedure TForm1.Button1Click(Sender: TObject); begin screen.cursors[1]:=loadimage(hinstance,pchar(1),IMAGE_CURSOR,0,0,LR_DEFAULTSIZE); screen.cursor:= 1; end;
end. |
Das mit dem destroycursor(screen.cursors[1]) hab ich auch ausprobiert, bewirkt aber trotzdem nix. Ich hoffe du erkennst mein Problem und ich nerve nicht sooo viel :)
Andreas Pfau - Mi 26.11.03 21:09
Hallo,
musst entschuldigen, aber das habe ich auch grade rausgefunden - anscheinen will der RC-Compiler keine ANIs. Villeicht kann man sich ja einen irgendwo runterladen der das kann (offiziell muss es ja gehen, laut der aktuellen PSDK von Februar 2003), aber ich kreige es mit Brcc32 nicht hin.
Also: aus Datei laden:
Quelltext
1:
| Screen.Cursors[1] := LoadCursorFromFile(PChar('AniTest.ani')); |
Und so wie es aussieht, musst du diesen Cursor NICHT mit DestroyCursor() freigeben. Aber leider kannst du ihn auch nicht in die EXE linken... Sei froh, dass es überhaupt mal geht :wink:
Delphi-Noobie - Mi 26.11.03 23:21
Jo mit loadfile, also zugreifen indem ich die exe extern öffne, hatte ich ja vorher auch schon :). Aber trotzdem danke für die hilfe, ich hoffe ich finde irgendwo den Befehl Um ani-Files intern einzubauen. Gruß Delphi-Noobie
Andreas Pfau - Do 27.11.03 21:58
Hallo,
es MUSS gehen, nur unterstützt es dein RC-Compiler nicht, du erhälst ja - so wie ich - die Meldung, dass das Dateiformat nicht unterstützt wird. Ich habe im Internet schon ähnliches gelesen.
Die Frage ist: woher kriegst du jetzt einen RC-Compiler, der ANI unterstützt???
Delphi-Noobie - Do 27.11.03 22:20
Jo keine Ahnung..gibts sowas überhaupt..nen anderen Compiler? Wenn ja, müsste man nur noch rausfinden wie er heißt und wo es ihn gibt aber da kann ich wahrscheinlich lange suchen :(
Andreas Pfau - Do 27.11.03 22:52
Hallo,
so was gibt es, was meinst du, wie die es mit MSVC++ oder VBA oder KeineAhnungWas machen? Wenn du dir mal den Konsole-Output anschaust, siehst du, dass Borland den Compiler geschreiben hast. Es muss auch noch einen von MS geben, und der kann das mit ziemlicher Sicherheit, da die ja auch die Richtlinien rausgeben (also die PSDK und so).
Villeicht kennst du ja jemanden mit MSVC++, dann kannst du es ja mal da kompilieren (versuchen halt). Wenn nich, villeicht gibt's das ja im Internet was. BRCC32.EXE, RCC32.EXE, RCC.EXE, usw. Ich schätze mal, die ohne das "B" sind von MS, damit müsste es klappen. Probieren geht über studieren... Da hier eindeutig ein Softwarefehler vorliegt (in meinen Augen), bleibt dir nix anderes übrig.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!