gpt4 book ai didi

delphi - 再次关于程序资源中的动画 (*.ani) 光标 (Delphi 2010)

转载 作者:行者123 更新时间:2023-12-03 14:58:04 26 4
gpt4 key购买 nike

我创建了一个资源文件Cur.rc。其中包含

CUR1   21   "MYCURSOR.ANI"

mycursor.ani 是一个存在的文件。这是一个普通的 .ani 动画光标。

我使用编译资源文件

Brcc32 cur.rc  

生成文件cur.res

在我的项目的 Unit1 中(我也尝试了项目的 .dpr 文件),我添加了

{$R cur.res} 

在 FormCreate 事件中,

Screen.Cursors[8]:=LoadCursor(HInstance, 'CUR1');
Screen.Cursor := 8;
// p.s. 8 - for an example, can be 0.... n or a constant

我运行该应用程序。光标应更改为我的动画光标。

这应该很简单。我已经尝试了来自不同来源的几个不同的光标文件。但它不起作用。

如果从文件加载,它会起作用:

Screen.Cursors [8]:=LoadCursorFromFile('d:\1.ani'); 
Screen.Cursor:=8;

如何从资源加载动画光标?为什么它不像加载普通光标那样工作?

<小时/>

这行不通。显然,如果不先访问文件,就无法从资源加载动画光标。

不过,这有效:

// MyCursor.rc
BGCURSOR ANICURSOR "D:\TEMP\Background.ani"

// Unit1.pas
{$R MyCursor.res MyCursor.rc}

procedure TForm1.FormCreate(Sender: TObject);
var
Res: TResourceStream;
FileName: string;
HC: HCURSOR;
const
BGCursor = 8; // Can be anything from 0..32767
begin
Res := TResourceStream.Create(MainInstance, 'BGCURSOR', 'ANICURSOR');
try
FileName := ExtractFilePath(ParamStr(0)) + 'BGCursor.ani';
Res.SaveToFile(FileName);
HC := LoadCursorFromFile(PChar(FileName));
Screen.Cursors[BGCursor] := HC;
Screen.Cursor := BGCursor;
finally
DeleteFile(FileName);
Res.Free;
end;
end;
<小时/>

我在两个答案之后写它,因为评论不希望被应用。

附注写于Delphi 2010,但我想,Delphi 7 上也会这样。

基本问题:

仅适用于Panel1。全套初始代码,这里正文,如果长给谁:

完整的例子试图做到:

1. 3 panels - at form start on everyone are appointed the cursor.
2. Works only on the first or at loading of the cursor from a file
3. All in the complete set (the small program, cursors, etc.) - exe (executed) - too there

全套初始代码,这里文字,如果长给谁:

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

Const
CurConst = 8; // 8 .. example, 8 is like me :)
CurConst1 = 7;
CurConst2 = 6;

type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Button1: TButton;
Panel3: TPanel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
cur: HCursor;

implementation

{$R *.dfm}
{$R My.res}

procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s:=IncludeTrailingPathDelimiter(extractfilepath(paramstr(0)))+'sc1.ani';
showmessage('Temp value: '+ s);
Screen.Cursors[CurConst]:=LoadCursorFromFile(pchar(s));
panel1.Cursor:=CurConst;
panel2.Cursor:=CurConst;
panel3.Cursor:=CurConst;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// panel 1
Screen.Cursors[CurConst] := LoadCursor(HInstance,'V_0');
panel1.Cursor:=CurConst;
// panel 2
Screen.Cursors[CurConst1] := LoadCursor(HInstance,'V_1');
panel2.Cursor := CurConst1;
// panel 2
Screen.Cursors[CurConst2] := LoadCursor(HInstance,'V_2');
panel3.Cursor := CurConst2;
end;

end.

下载(完整项目代码):http://www.sendspace.com/file/jbzrpx (关闭弹出窗口,往下看);镜像:注意-没有必要支付任何费用(在慢速引用下下载(大小4 mb))http://rapidshare.com/files/455515706/TestCursor.zip (没有病毒 - 测试赛门铁克 - 11.6.3000 SEP)一般来说,完整的集合中有一个初始代码 - 会理解。

最佳答案

显然api的资源加载器比文件加载器更挑剔,或者要求有点不同。

由于包含可执行文件,我能够使您的光标在您提供的完整项目代码下载中工作,甚至无需接触代码:

  • 在十六进制编辑器中打开“sc1.ani”。
  • 找到文件中的第二个双字(第一个是签名“RIFF”)。双字是'62 0F 00 00',即3938,这是文件大小。修改为'5A 0F 00 00',即'3930',现在表示长度标识符后剩余字节的总数。保存 ani 文件。
  • 打开“Resource Hacker”中的可执行文件'或兼容的资源编辑器,并将'V_1'替换为修改后的文件。
  • 保存可执行文件并运行。


您可以使用Greenfish Icon Editor打开动画光标,然后再次保存。它似乎会产生兼容的文件。

关于delphi - 再次关于程序资源中的动画 (*.ani) 光标 (Delphi 2010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5519480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com