Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Animirten Cursor in exe einbinden? (https://www.delphipraxis.net/12499-animirten-cursor-exe-einbinden.html)

Delphi-Noobie 28. Nov 2003 16:18


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:

roderich 28. Nov 2003 16:34

Re: Animirten Cursor in exe einbinden?
 
ich binde animierte Cursor einfach so ein (ohne Res-Datei):

Delphi-Quellcode:
  ID := 10;
  cursorfilename := 'c:\bla\cursors\mycursor.ani';
  Screen.Cursors[ID] := LoadCursorFromFile(PChar(cursorfilename));
Roderich

Delphi-Noobie 29. Nov 2003 08:57

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?

scp 29. Nov 2003 10:44

Re: Animirten Cursor in exe einbinden?
 
Code:
1 ANICURSOR "appstart.ani"

scp 29. Nov 2003 11:59

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;

Delphi-Noobie 29. Nov 2003 14:04

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 :)

scp 29. Nov 2003 23:30

Re: Animirten Cursor in exe einbinden?
 
Einfach das Beispiel oben abändern:
Delphi-Quellcode:
  ID := 10;
  Screen.Cursors[ID] := LoadAniCursor(hInstance, MAKEINTRESOURCE(1));

Delphi-Noobie 30. Nov 2003 13:38

Re: Animirten Cursor in exe einbinden?
 
Funktioniert leider immer noch nicht ich schreib mal mein Sourcecode vielleicht erkennt jemand den Fehler:
Delphi-Quellcode:
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.
Wenn ich den Button klicke kommt ne Fehlermeldung und er springt in die Zeile: Screen.cursors[ID]..

scp 30. Nov 2003 13:55

Re: Animirten Cursor in exe einbinden?
 
Klappts, wenn du
Delphi-Quellcode:
Screen.Cursors[ID] := LoadAniCursor(hInstance, '1')); // <-- In die Zeile springt er
verwendest?

scp 30. Nov 2003 14:02

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 16:18 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz