社区
GAME,图形处理/多媒体
帖子详情
怎样建立和调用资源文件
ming1
2000-09-05 11:34:00
本人以前曾经在vb中很方便的建立和调用过资源文件,不知道在delphi中是否也有很方便
的方法实现请高手说明详细步骤。
...全文
185
6
打赏
收藏
怎样建立和调用资源文件
本人以前曾经在vb中很方便的建立和调用过资源文件,不知道在delphi中是否也有很方便 的方法实现请高手说明详细步骤。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qianying
2001-10-19
打赏
举报
回复
gz
xclxd
2001-05-31
打赏
举报
回复
转贴:
资 源 是 存 放 在 扩 展 名.RES 的 文 件 里 的 二 进 制 数 据 结 构, 在DELPHI 中 资 源 文 件 可 以 使 用 图 象 编 辑 器 来 制 作(IMAGE EDITOR), 或 者 使 用 其 他 的 工 具。 如:BORLAND 公 司 提 供 的RAD PACK FOR DELPHI 中 的RESOURCE WORKSHOP 来 创 建。 资 源 文 件 中 通 常 存 放 的 是 应 用 程 序 可 以 随 时 存 取 的 一 些 对 象, 包 括:ICON、CURSOR、BITMAP、FONT 等 近 十 种。 大 部 分 的 资 源 在 通 常 的 情 况 下 可 以 保 留 在 磁 盘 当 中, 直 到 程 序 需 要 使 用 它 们 时 才 将 其 调 入, 可 以 大 大 的 节 省 内 存 资 源, 同 样, 资 源 文 件 也 是 可 以 共 享 的, 即: 多 个 程 序 可 以 共 享 一 个 资 源 文 件, 进 而 减 少 了 在 应 用 程 序 之 间 代 码 重 复 的 现 象, 使 程 序 的 代 码 得 到 很 大 的 优 化, 因 此 在 应 用 程 序 中 使 用 资 源 文 件 有 独 立 制 作、 方 便、 随 时 修 改 而 不 需 要 对 应 用 程 序 代 码 做 任 何 修 改 的 好 处。
一 般 来 说, 一 个 应 用 程 序 的 所 有 资 源 都 存 放 在 一 个RES 文 件 里, 然 后 在DELPHI 进 行 编 译 的 阶 段 将 资 源 文 件 的 内 容 与 最 终 的EXE 文 件 合 并 在 一 起, 因 此 编 译 后 的RES 文 件 并 没 有 什 么 作 用, 仅 仅 提 供 用 来 查 阅 使 用, 在 分 发 应 用 时 不 必 把RES 文 件 分 发 给 最 终 用 户。 当 然, 不 同 的 资 源 可 以 分 别 放 在 不 同 的 资 源 文 件 当 中, 而 且 资 源 文 件 越 小 调 入 内 存 的 速 度 越 快。 在 这 里 还 要 说 明 的 一 点 是: 在 修 改 了 原 来 的 资 源 文 件 之 后, 在 原 来 编 译 的EXE 文 件 中 加 入 的 资 源 不 会 随 之 而 更 新, 只 有 在 重 新 进 行 编 译 以 后, 才 能 将 新 的 资 源 加 入 到 新 的EXE 文 件 当 中 去。
下 面 我 们 通 过 两 个 例 子 来 说 明 在DELPHI 中 如 何 使 用 资 源 文 件( 在 这 里 我 们 不 讲 述 资 源 文 件 的 制 作 方 法)。
一、 如 何 在DELPHI 中 使 用 定 制 的 光 标。
在 使 用DELPHI 进 行 编 程 时, 有 一 个 很 重 要 的 对 象 ─ ─TSCREEN, 它 是 用 来 管 理 和 操 纵 运 行 时 期 屏 幕 的 不 可 视 构 件。 它 的CURSOR 属 性 是 用 来 指 定 各 个 不 同 的 构 件 光 标 形 状, 声 名 为:
PROPERTY CURSORS[INDEX:INTEGER]:HCURSOR;
这 个 只 读 的 特 性 返 回 应 用 程 序 支 持 的 光 标 组 成 的 一 个HCURSOR 类 型 的 数 组, 它 存 储 了 屏 幕 上 所 有 的 鼠 标 光 标 的 身 份 代 码(HCURSOR 就 是 光 标 的HANDLE 句 柄), 数 组 下 标 从0 开 始, 在DELPHI 预 定 义 了 一 些 代 表 不 同 光 标 的 常 量, 它 的 值 是 从0 到-17, 您 可 以 直 接 指 定 程 序 使 用 的 光 标。 如:
FORM1.CURSOR:=-3 表 示FORM1 采 用 的 光 标 是CRCROSS( 十 字)。
大 家 可 能 都 会 发 现 构 件 的CURSOR 的 属 性 最 多 提 供 十 八 种 常 用 的CURSOR 值, 这 在 很 多 的 情 况 下 是 不 够 的, 如: 当 光 标 进 入 一 个PANEL 面 板 时 光 标 的 形 状 为 一 只 手, 那 么PANEL 的CURSOR 就 不 能 满 足 这 种 要 求, 这 时 就 需 要 我 们 自 定 义 一 个 手 的 光 标 并 将 其 赋 给PANEL 的CURSOR 属 性。 如 何 实 现 则 可 以 按 以 下 步 骤 进 行:
使 用 资 源 文 件 编 辑 器(IMAGE EDITOR 或 者RESOURCE WORKSHOP) 编 写 资 源 文 件。
定 义 一 个 光 标 常 量, 注 意 这 个 常 量 不 能 与DELPHI 中 提 供 的 光 标 常 量 相 冲 突。
在FORMCREATE 事 件 中 使 用WINDOWS API 当 中 的LOADCURSOR 函 数 来 载 入 自 定 义 的CURSOR。
在 程 序 中 将 自 定 义 的CURSOR 分 配 给PANEL 的CURSOR 属 性。
下 面 说 明 如 何 将 自 定 义 的 一 只 手 的 鼠 标 光 标 赋 给PANEL1 的CURSOR 属 性。 首 先 使 用IMAGE EDITOR 建 立 一 个HAND.RES 的 文 件。 之 后 按 如 下 书 写 程 序 代 码:
implementation
{$R *.DFM}
const
Crhand=2;
procedure TForm1.FormCreate(Sender: TObject);
begin
screen.cursors[crhand]:=loadcursor(Hinstance,'hand');
panel1.cursor:=crhand;
end;
除 了 编 写 上 面 的 代 码 以 外, 我 们 还 需 要 做 的 一 项 工 作 是 将 资 源 文 件 加 入 到 项 目 文 件 当 中 去, 编 译 指 令 中 的{$R filename} 伪 指 令 让 我 们 来 增 加 资 源 文 件, 让 我 们 来 看 一 看 项 目 文 件 的 代 码。
program PCUR;
uses
Forms,
HAND in 'HAND.pas' {Form1};
{$R *.RES}// 这 里 的* 意 义 为 在 程 序 编 译 以 后 会 产 生 一 个 与 项 目 文 件 同 名 的 资 源 文 件, 在 这 里 为PCUR.RES 文 件, 这 部 分 是 自 动 产 生 的。
{$R hand.res}// 这 部 分 是 我 们 自 己 加 入 的 自 定 义 资 源 文 件, 这 两 个 资 源 文 件(HAND.RES 和//PCUR.RES 中 的 资 源 都 会 附 加 在 可 执 行 文 件PCUR.EXE 的 后 面。
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
二、 资 源 文 件 在 编 写 动 画 程 序 中 的 应 用
上 面 的 例 子 使 用 的 是 在 资 源 文 件 中 存 储 的CURSOR 资 源 , 在 下 面 的 例 子 中 我 们 将 使 用 的 是 在 资 源 文 件 中 提 供 的ICON 资 源 来 编 写 一 个 小 小 的 动 画 程 序。 在 这 里 动 画 的 产 生 是 利 用 定 时 器 在 一 定 的 时 间 间 隔 内 产 生TIMER 事 件 将 存 储 在 资 源 文 件 中 的ICON 依 次 的 绘 制 在FORM 的 同 一 处 而 产 生 的。 这 时 要 用 到 画 布CANVAS 的DRAW 方 法, 其 声 明 如 下:
procedure Draw(X, Y: Integer; Graphic: TGraphic);
在 这 个 方 法 当 中 的 参 数GRAPHIC 可 以 为:BITMAPS、ICONS、METAFILES。 具 体 的 实 现 方 法 为: 建 立DEMO.RES 文 件, 其 中 含 有 名 为ICON1 —ICON6 的ICON。 并 将DEMO.RES 加 到 项 目 原 代 码 中 去( 如: 上 面 例 子 的 方 法)。
动 画 程 序 的 具 体 代 码 如 下:
unit donghua;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
wicon:array[0..5]of Ticon;
// 建 立TICON 类 型 的 数 组 存 储ICON 文 件
idx:integer;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
iconname:string;
piconame:pchar;
begin
piconame:=stralloc(7);
// 建 立PCHAR 类 型 的 字 符 串
for idx:=0 to 5 do
begin
wicon[idx]:=ticon.create;// 建 立TICON 型 对 象
iconname:='icon'+inttostr(idx);
strpcopy(piconame,iconname);
// 将STRING 类 型 转 换 成PCHAR 类 型
wicon[idx].handle:=loadicon(hinstance,piconame);
// 调 用WINDOWS API 中 的LOADICON 函 数
// 载 入 资 源 中 的ICON
end;
strdispose(piconame);//PCHAR 类 型 的 删 除
form1.canvas.draw(3,3,wicon[1]);
// 调 用DRAW 的 方 法 在FORM 上 画 出ICON1
idx:=1;
form1.setbounds(0,0,100,100);
// 固 定FORM 的 大 小 和 位 置
end;
procedure TForm1.Timer1Timer(Sender: TObject);
// 形 成 动 画 的 定 时 器 事 件
begin
idx:=idx+1;
if idx=6then idx:=1;
form1.canvas.draw(3,3,wicon[0]);
form1.canvas.draw(3,3,wicon[idx]);
end;
end.
以 上 可 以 作 为 一 个 通 用 的 动 画 程 序, 我 们 只 需 要 修 改 不 同 的ICON 以 及 增 加IDX 的 大 小 就 可 以 编 出 不 同 的 动 画 应 用( 同 样 在 资 源 中 可 以 有 其 他 形 式 的 图 形 如:BITMAPS 这 时 需 要 动 态 创 建 的 是TBITMAPS 对 象 而 不 是TICON 对 象)。 在 两 个 例 子 中 我 们 都 用 到 了WINDOWS API 函 数, 这 些 函 数 在WINDOWS 单 元 中 均 有 说 明 在 这 里 不 加 赘 述。 以 上 的 两 个 例 子 只 是 资 源 文 件 的 一 点 点 应 用, 要 真 正 的 掌 握 资 源 文 件 在 程 序 设 计 中 的 强 大 作 用, 还 要 靠 自 己 在 实 践 中 不 断 的 总 结。
skt642
2001-05-31
打赏
举报
回复
3589关注!
bitter
2000-09-06
打赏
举报
回复
image editor 建立res(资源文件)
或用文本编辑建立一个rc 文件,dos下用brcc32编译
假定资源文件为 test.res
在项目的source code 中加入{$R TEST.RES}
使用 LoadFromResourceName(hInstance,IDNAME)
LoadFromResourceID(hInstance,ID);.......
使用帮助查找一下
dragongong
2000-09-06
打赏
举报
回复
上面第二中方法中RC文件中应加入
#Include sample.inc
dragongong
2000-09-06
打赏
举报
回复
使用资源文件能够使你建立一个国际化的应用程序
RC文件的语法
//sample.rc
STRINGTABLE
{
//string list
1,"first"
2,"second"
3,"custom %d: %S "
}
使用brcc32 -r sample.rc生成RES文件
在程序中加入:
{$R Sample.RES}
也可以在INC文件中加入常量
//sample.inc
Const
FirstString = 1;
secondString = 2;
customstring = 3
而在RC文件改为
STRINGTABLE
{
//string list
firststring,"first"
secondstring,"second"
customstring,"error code %d: %S "
}
可使用此法建立自己的错误码库.
如:
raise EMyError.CreateResFmt(CustomString,[3,'out of memory']);
此时用户看到的错误提示为
error code 3: out of memory
flutter插件
调用
APP页面、使用原生aar,framework库
课程一共氛围两部分: 1、Flutter插件跟iOS的交互部分:包括
调用
iOS原生页面、如何使用iOS的framework二进制、bundle
资源
文件
、依赖的cocoapods
资源
; 2、Flutter插件跟安卓的交互部分:包括
调用
Android原生页面、...
性能测试Linux系统
资源
监控工具【nmon】的使用和监控数据分析
通过性能监控工具nmon的... 课程提供的下载资料: 包含通过nmon收集的Linux服务器
资源
信息ecs-lc_220715_1019.nmon
文件
,大家在没有Linux服务器的情况下,可以通过对这个
文件
进行nmon数据解析和数据分析的学习。
安装和配置 Windows Server 2022 存储和
文件
服务
使用任何设备访问自己的
文件
和数据 5、并且安装和配置相关的角色,配置 DFS 分布式的
文件
系统和 BranchCache 的功能和特性,实现分布式和分支机构的应用场景当中,用户更快和更方便地访问数据 6、并且安装和配置相关...
Django3.0 配置
文件
使用详解
课程系统介绍Django配置... 系统描述工程初始化时的各个预装app的作用 系统展示通过配置
文件
设置不同数据库的连接情况,以及多个数据库的访问情况 系统展示自定义模板位置的使用情况 系统展示自定义
资源
文件
的使用情况
k8s实战之istio
资源
详解
云平台令使用它们的公司受益匪浅。但不可否认的是,上云会给 DevOps 团队带来压力。为了可移植性,开发人员必须使用微服务来构建... 本课程详细讲解istio的各种crd
资源
,如何写yaml配置
文件
,以及他们会起什么作用。
GAME,图形处理/多媒体
1,183
社区成员
14,336
社区内容
发帖
与我相关
我的任务
GAME,图形处理/多媒体
Delphi GAME,图形处理/多媒体
复制链接
扫一扫
分享
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章