Delphi 中字符串资源的定义与使用

字符串的存储在应用程序中是独立的,应用程序只有在使用资源时载入,使用完之后清
除,从而节省内存,同时字符串也可以用于翻译,一些汉化软件都利用了字符串。编辑的字
符串放在一个文本文件中,可以使用Delphi中的:File-〉New-〉Text,编辑字符串文件,字
符串文件的格式如下:

  stringtable
  begin
  1,“book“
  2,“apple“
  3,“desk“
  4,“pen“
  5,“computer“
  end

  编辑完字符串文件后,选择Save as,注意要将文件类型改为资源编译文件(.RC),这还不是资源文件,它还必须经过编译才能成为资源文件(.RES)。编译命令为Dos提示符下的BRCC32,其路径为:D:Program FilesBorlandDelphi4Binrcc32.exe;例如上面的字符串资源编译文件名为:StrRes.rc,在DOS提示符下输入:brcc32 mydirStrRes.rc;则编译后会生成一个名为:StrRes.res的资源文件,使用该文件即可访问字符串资源。具体使用见下例:

unit teststr;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
 private
count : integer; 
public

 end;

var
Form1: TForm1;

implementation

{ *.DFM}
{ StrRes.RES}

const
wordcount = 5;

procedure TForm1.Button1Click(Sender: TObject);
var
strword : string;
begin
if count > wordcount then
begin
count := 1;
end;
strword := LoadStr(count);
label1.Caption := strword;
count := count + 1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption := LoadStr(1);
count := 2;
end;

end.

程序中常量wordcount用来记录字符串资源文件中字符串的数量,变量count用来记录显
示的字符串编号。程序运行后单击Button1按钮,则将循环显示字符串资源文件中的每一个字
符串。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

另一篇文章

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

不同于其它资源,字符串资源不能直接编辑,需要先按格式编制一个文本文件,再用程
序将其编译成资源文件。下面用一个简单的例子来说明。首先用文本编辑器编一个文件lb.rc,
其内容如下:

stringtable

begin

1,"开始"

2,"退出"

end

然后,找到delphi的bin子目录下的brcc32.exe文件进行编译, 命令格式为: brcc32
lb.rc,编译结束后即生成一个资源文件lb.res。要使用该资源文件,需要在单元文件imple
mentation部分的开始处包括资源文件:<$R lb.res>。在本例中,上面的字符串用于给一个
命令按钮更换caption设置, 使用的函数是windows api函数 loadstring,以下是使用实例:

//在formcreat过程中:

var
txtcaption:array [0..255] of char;
begin
if loadstring(hinstance, 1, txtcaption, sizeof(txtcaption)) > 0 then
begin
btnstart.caption:=StrPas(txtcaption);
end;
end;

//在btnstartclick过程中:

var
txtcaption:array [0..255] of char;
begin
if loadstring(hinstance, 2, txtcaption, sizeof(txtcaption)) > 0 then

btnstart.caption:=strpas(txtcaption);

end;

这样就可以在程序运行时改变各种属性,而不需要在程序中出现字符串。如果使用另一
个delphi函数loadstr,会显得更加简单:

var
txtcaption:string;
begin
txtcaption:=loadstr(2);
if txtcaption <> ‘‘ then
begin
btnstart.caption:=txtcaption;
end;
end;

或许大家可以从以上的过程中看出, 使用123来标识一个字符串有些简陋,也很容易出
错,那么怎么办呢?我们可以采取像 c++ 中使用字符串的方法,为每个字符串预定义一个id,
如:

const

idc-start=1;

idc-exit=2;

当然要把它放在一个unit里(类似于c++的.h文件) ,在使用的单元里再uses一下就
可以了,这样应用感觉是不是很爽呢?

txtcaption:=loadstr(idc-exit);

时间: 2024-10-07 05:16:26

Delphi 中字符串资源的定义与使用的相关文章

Delphi中的指针类型

首先讲讲指针类型在delphi中是怎么定义的: 指针类型的定义语法 type <指针类型标识符>=^<基类型>: 指针指向动态变量的类型是由^符后的基类型来标识,^符号也就是指针类型,而C++中是用*符号来表示指针类型. 举例说明 type student = record    //定义个记录类型,与c++中的结构类型类似 name:string[8]; number:integer; sex:(b,g); age:integer; end; per = ^student;  /

Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的

bool是LongBool类型. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool.后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使用Boolean类型. 这四种类型的布尔值占用内存的数量如下: Boolean 1 Byte ByteBool 1 Byte WordBool 2 Bytes(1 Word) LongBool 4 Bytes(2 Words) 对于ByteBool,WordBool和LongBool三种类型True

Delphi中的关键字与保留字

Delphi中的关键字与保留字 分类整理 Delphi 中的“关键字”和“保留字”,方便查询 感谢原作者的收集整理! 关键字和保留字的区别在于,关键字不推荐作标示符(编译器已经内置相关函数或者留给保留实现),二保留字是根本不可能作标示符(编译时有警示!) [系统保留字] and            array          as             asm begin          case           class          const constructor   

delphi中的Format函数详解

首先看它的声明:[[email protected]][@21ki!] function Format(const Format: string; const Args: array of const): string; overload;[[email protected]][@21ki!] 事实上Format方法有两种形式,另外一种是三个参数的,主要区别在于它是线程安全的,[[email protected]][@21ki!]但并不多用,所以这里只对第一个介绍:[[email protect

Delphi中的消息处理

1.windows的消息驱动体系  在windows系统中,消息传递是实现对乡间通信和控制的主要手段.可以额系统都以消息驱动的方式工作.系统中发生的用户输入操作.显示信息的改变.系统环境参数变化等所有时间都以系统定义消息的形式出现在相关的应用程序和窗口.所以程序设计的主要任务就是为这些消息的处理设计代码. 在应用程序中,发送者可以通过发送消息要求接收者完成相应的处理.当程序运行时,windows系统为每个应用程序实例建立一个消息队列,一次保存发送给该程序实例的消息,在应用程序的主控部分,需要设置

Delphi中多线程用消息实现VCL数据同步显示

Delphi中多线程用消息实现VCL数据同步显示 Lanno Ckeeke 2006-5-12 概述: delphi中严格区分主线程和子主线程,主线程负责GUI的更新,子线程负责数据运算,当数据运行完毕后,子线程可以向主线程式发送消息,以便通知其将VCL中的数据更新. 实现: 关键在于消息的发送及接收.在消息结构Tmessage中wParam和lParam类型为Longint,而指针类型也定义为Longint,可以通过此指针来传递自己所感兴趣的数据.如传递字符数组: 数组定义: const MA

Delphi 中的 procedure of object

其实要了解这些东西,适当的学些反汇编,WINDOWS内存管理机制,PE结构,看下李维的VCL架构剖析可以很好理解type TMyEvent = procedure of object;这是一种数据类型的定义,他定义了一个可以在类中使用的函数类型区别于type TMyProc = procedure; TMyEvent 和 TMyProc 都定义了一个函数类型,他们的差别是,TMyProc 不可以用在类中定义事件,TMyEvent 却可以. 如果你想知道问什么,那就需要深入了解事件类型以及函数类型

Delphi中根据分类数据生成树形结构的最优方法

一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能,因而受到广大程序员的青睐.    树形结构在Windows环境中被普遍应用,但在数据库开发中面对层次多.结构复杂的数据,如何快速构造树形目录并实现导航呢?    二. 实现关键技术:    在Delphi提供的控件中包含了TreeView控件,但树的具体形成还需要用户编写代码.即它的列表项要在程序

delphi中move函数的正确理解(const和var一样,都是传地址,所以Move是传地址,而恰恰不是传值)太精彩了 good

我们能看到以下代码var pSource,pDest:PChar;     len: integer;.......................//一些代码Move(pSource,pDest,len); //错误Move(pSource^,pDest^,len); //正确看起来确实好像是传值,而不是传地址,但是各位别忘了,这不是C,C++,而是DelphiObject Pascal,所以,绝不能从函数调用的方法判断是传值还是串地址!!必须看函数的定义,只有定义才能说明是传值还是传地址,再