![]() |
Animirten Cursor in exe einbinden?
Hallo,
Ich habe ein Problem mit dem einbinden eines animierten Cursors in die exe. Wenn ich in einem Texteditor schreibe: 1 cursor "cursor.ani", dann als Rc-Datei speichere und versuche es in eine Res-Datei zu Compilieren, sagt der Borlandcompiler (BRCC32.exe), dass es ein unbekanntes Cursorformat ist. Mit normalen Cursorn, die nicht animiert sind klappt das :(. Weis einer was man dagegen machen kann? z.B nen anderer rc-Compiler oder so und falls man einen anderen braucht, wo kann man den runterladen? :gruebel: Ich hoffe mir kann jemand helfen :roll: |
Re: Animirten Cursor in exe einbinden?
ich binde animierte Cursor einfach so ein (ohne Res-Datei):
Delphi-Quellcode:
Roderich
ID := 10;
cursorfilename := 'c:\bla\cursors\mycursor.ani'; Screen.Cursors[ID] := LoadCursorFromFile(PChar(cursorfilename)); |
Re: Animirten Cursor in exe einbinden?
Das will ich ja möglichst vermeiden, auf den Cursor extern zuzugreifen. Er soll mit in die exe rein, dass ich ihn nicht extra in den Ordner mit reinpacken muss. Gibts da keine Lösung für?
|
Re: Animirten Cursor in exe einbinden?
Code:
1 ANICURSOR "appstart.ani"
|
Re: Animirten Cursor in exe einbinden?
Delphi-Quellcode:
function LoadAniCursor(hInst : Cardinal; lpID : PChar; lpType : PChar = nil) : HCURSOR;
var hRes : HRSRC; dwSize : DWORD; hGlob : HGLOBAL; pBytes : PBYTE; begin If not Assigned(lpType) then lpType := PChar('ANICURSOR'); If (StrToIntDef(StrPas(lpID), 0) <> 0) then hRes := FindResource(hInst, PChar('#' + StrPas(lpID)), lpType) else hRes := FindResource(hInst, lpID, lpType); dwSize := SizeofResource(hInst, hRes); hGlob := LoadResource(hInst, hRes); If (hGlob <> 0) then begin pBytes := PBYTE(LockResource(hGlob)); result := HCURSOR(CreateIconFromResource(pBytes, dwSize, FALSE, $00030000)); end else result := 0; end; |
Re: Animirten Cursor in exe einbinden?
Könnt ihr da mal bitte ein konlretes Beispiel geben? Also zuerst : 1 anicursor "cursor.ani" zu ner res Datei unwandeln und dann mit der Funktion, die hier steht wie aufrufen? ...loadanicursor(????); <-- was für Werte müssen da rein? ich weis das noch nicht so genau, da ich noch ziemlich neu bin bei Delphi :)
|
Re: Animirten Cursor in exe einbinden?
Einfach das Beispiel oben abändern:
Delphi-Quellcode:
ID := 10;
Screen.Cursors[ID] := LoadAniCursor(hInstance, MAKEINTRESOURCE(1)); |
Re: Animirten Cursor in exe einbinden?
Funktioniert leider immer noch nicht ich schreib mal mein Sourcecode vielleicht erkennt jemand den Fehler:
Delphi-Quellcode:
Wenn ich den Button klicke kommt ne Fehlermeldung und er springt in die Zeile: Screen.cursors[ID]..
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} {$R cursorausgelastet.res} //<--- eigener Cursor 1 anicursor "cursorausgelastet.ani" function LoadAniCursor(hInst : Cardinal; lpID : PChar; lpType : PChar = nil) : HCURSOR; var hRes : HRSRC; dwSize : DWORD; hGlob : HGLOBAL; pBytes : PBYTE; begin If not Assigned(lpType) then lpType := PChar('ANICURSOR'); If (StrToIntDef(StrPas(lpID), 0) <> 0) then hRes := FindResource(hInst, PChar('#' + StrPas(lpID)), lpType) else hRes := FindResource(hInst, lpID, lpType); dwSize := SizeofResource(hInst, hRes); hGlob := LoadResource(hInst, hRes); If (hGlob <> 0) then begin pBytes := PBYTE(LockResource(hGlob)); result := HCURSOR(CreateIconFromResource(pBytes, dwSize, FALSE, $00030000)); end else result := 0; end; procedure TForm1.Button1Click(Sender: TObject); var ID : tcursor; begin ID := 10; Screen.Cursors[ID] := LoadAniCursor(hInstance, MAKEINTRESOURCE(1)); // <-- In die Zeile springt er screen.cursor:= ID; end; end. |
Re: Animirten Cursor in exe einbinden?
Klappts, wenn du
Delphi-Quellcode:
verwendest?
Screen.Cursors[ID] := LoadAniCursor(hInstance, '1')); // <-- In die Zeile springt er
|
Re: Animirten Cursor in exe einbinden?
Hier nochmal eine optmierte Fassung, um Laufzeitfehler zu vermeiden:
Delphi-Quellcode:
function LoadAniCursor(hInst : Cardinal; lpID : PChar; lpType : PChar = nil) : HCURSOR;
var hRes : HRSRC; dwSize : DWORD; hGlob : HGLOBAL; pBytes : PBYTE; begin result := 0; If not Assigned(lpType) then lpType := PChar('ANICURSOR'); If (Cardinal(lpID) < $10000) then hRes := FindResource(hInst, PChar('#' + IntToStr(Cardinal(lpID))), lpType) else If (StrToIntDef(StrPas(lpID), 0) <> 0) then hRes := FindResource(hInst, PChar('#' + StrPas(lpID)), lpType) else hRes := FindResource(hInst, lpID, lpType); dwSize := SizeofResource(hInst, hRes); hGlob := LoadResource(hInst, hRes); If (hGlob <> 0) then begin pBytes := PBYTE(LockResource(hGlob)); If Assigned(pBytes) then result := HCURSOR(CreateIconFromResource(pBytes, dwSize, FALSE, $00030000)); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz