200分求助(200分)

里斯

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一公共单元Unit1.pas(没有FORM)
我想在Unit1.pas中设一变量str:TString,STR的值从一INI文件中取得,在本单元中部分地方要用到STR的值,请问我如何一开始就初始化STR?
 
我或许没明白你的用意。
可以这样来初始化STR。
str:=TStringList.Create;
 
initialization

//在这里

finalization

end.
 
那你就在要用之前先从ini读出值初始化STR
 
unit Unit2;

interface

var
s: String;

procedure ChangeS;

implementation

uses
Dialogs;

procedure ChangeS;
begin
ShowMessage(s)
//s = 123;
s := '567';
ShowMessage(s)
//s = 567;
end;

initialization
s := '123';

finalization
end.
 
哦,你的意思是str是个公用变量,在调用单元就初试话,是吗
这样,楼上说的对的。
initialization
str:=TStringList.Create;
 
implementation
{~t}
.............
{~b}
initialization
从ini读出值初始化STR

end.
 
哈哈,看错类型了。字符串可以不用初试化呀
 
我知道你的意思 unit1.pas 是 公共pas,系统的一些常数,全局类都可以在这里面定义
举个例子,
我们做erp时候,-----做任何项目都 推荐 使用 全局类,不要用全局变量!!!!
1。sysdefine.pas定义全局类...字符串....,其他的form引用sysdefine.pas 即可,
这样可防止 出现调用问题,有利于模块分类 等....
2。作项目最好用inherited,override等等方法,做一个Tbasefrm,可以分几层继承,然后继承这个Tbasefrm
sysdefine.pas
....
type Tmyclass=class
......//
end;
var
myclass:Tmyclass;//全局类。 推荐使用!
...
在主form里面的create里面
unit frm_main
....
use sysdefine;
procedure Tfrmmain.create(owner:Tobject)
begin
myclass:=Tmyclass.create;////
......
end;





 
楼上同志说得很有道理....................
再顶顶................
 
上面的说的可以用,我试了,顶!
 
那肯定的 可以用,
[:)]
我认为应该好好看看我的 [8D]
 
你的做法就是设置全局变量吗
方法有很多,你这种放在公用模块上是比较理想的方法
可以在公用单元上初始化它
 
不是全局变量,是全局对象,还有resourcestring 。。。。[:)]
 
为什么不用cnpack专家包,它做了一个自动生成操作ini文件单元的功能,
假设有abc.ini,格式如下
[xxx]
a=123
b=456
c=789
则操作该文件的单元
unit Unit1;

interface

uses
Classes, SysUtils, IniFiles, Forms, Windows;

const
csInixxxSection = 'xxx';

{Section: xxx}
csInixxxa = 'a';
csInixxxb = 'b';
csInixxxc = 'c';

type
TIniOptions = class(TObject)
private
Fxxxa: Integer;
Fxxxb: Integer;
Fxxxc: Integer;


public
procedure LoadSettings(Ini: TIniFile);
procedure SaveSettings(Ini: TIniFile);

property xxxa: Integer read Fxxxa write Fxxxa;
property xxxb: Integer read Fxxxb write Fxxxb;
property xxxc: Integer read Fxxxc write Fxxxc;

end;

var
IniOptions: TIniOptions = nil;

implementation

procedure TIniOptions.LoadSettings(Ini: TIniFile);
begin
if Ini <> nil then
begin
Fxxxa := Ini.ReadInteger(csInixxxSection, csInixxxa, 123);
Fxxxb := Ini.ReadInteger(csInixxxSection, csInixxxb, 456);
Fxxxc := Ini.ReadInteger(csInixxxSection, csInixxxc, 789);

end;
end;

procedure TIniOptions.SaveSettings(Ini: TIniFile);
begin
if Ini <> nil then
begin
Ini.WriteInteger(csInixxxSection, csInixxxa, Fxxxa);
Ini.WriteInteger(csInixxxSection, csInixxxb, Fxxxb);
Ini.WriteInteger(csInixxxSection, csInixxxc, Fxxxc);

end;
end;

initialization
IniOptions := TIniOptions.Create;

finalization
IniOptions.Free;

end.

 
由于这些天邮箱中毒,所以没看到大家的回复,谢谢。
TYZhang是对的。
也许我的意思说得不够清楚,我是要在用到该单元时开始就把一些值从INI文件中取出来并给其他地方使用。
 

Similar threads

顶部