有谁知道如何操作INI文件? Use IniFiles;使用TIniFile;好多方法,但是win9x下, win3.x 下不支持大于64k的ini文件。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那请问,Tinifile这么多方法,倒底用哪个可取得所有节点名啊?我的e文不太好使! 好像是sele... 你可以使用帮助,或者输入Tinifile.停顿一下,系统会自动跳出! 是ReadSections,with TIniFile.Create('my.ini') dobegin ReadSections(ComboBox1.Items);//参数是一个TStrings类型 Free;end; Delphi中的INI文件编程 ---- INI文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,所以可视化的编程一族,如VB、VC、VFP、Delphi等都提供了读写INI文件的方法,其中Delphi中操作INI文件,最为简洁,这是因为Delphi3提供了一个TInifile类,使我们可以非常灵活的处理INI文件。 一、有必要了解INI文件的结构: ;注释 [小节名] 关键字=值 ...---- INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值。 ---- 值的类型有三种:字符串、整型数值和布尔值。其中字符串存贮在INI文件中时没有引号,布尔真值用1表示,布尔假值用0表示。 ---- 注释以分号“;”开头。 二、定义---- 1、在Interface的Uses节增加IniFiles; ---- 2、在Var变量定义部分增加一行: myinifile:Tinifile;---- 然后,就可以对变量myinifile进行创建、打开、读取、写入等操作了。 三、打开INI文件 myinifile:=Tinifile.create('program.ini');--- 上面这一行语句将会为变量myinifile与具体的文件 program.ini建立联系,然后,就可以通过变量myinifile,来读写program.ini文件中的关键字的值了。 ---- 值得注意的是,如果括号中的文件名没有指明路径的话,那么这个Program.ini文件会存储在Windows目录中,把Program.ini文件存储在应用程序当前目录中的方法是:为其指定完整的路径及文件名。下面的两条语句可以完成这个功能: Filename:=ExtractFilePath(Paramstr(0))+'program.ini'; myinifile:=Tinifile.Create(filename);四、读取关键字的值--- 针对INI文件支持的字符串、整型数值、布尔值三种数据类型,TINIfiles类提供了三种不同的对象方法来读取INI文件中关键字的值。 --- 假设已定义变量vs、vi、vb分别为string、 integer、boolean类型。 vs:=myinifile.Readstring('小节名','关键字',缺省值); vi:=myinifile.Readinteger('小节名','关键字',缺省值); vb:=myinifile.Readbool('小节名','关键字',缺省值);--- 其中缺省值为该INI文件不存在该关键字时返回的缺省值。 五、写入INI文件---- 同样的,TInifile类也提供了三种不同的对象方法,向INI文件写入字符串、整型数及布尔类型的关键字。 myinifile.writestring('小节名','关键字',变量或字符串值); myinifile.writeinteger('小节名','关键字',变量或整型数值); myinifile.writebool('小节名','关键字',变量或True或False);---- 当这个INI文件不存在时,上面的语句还会自动创建该INI文件。 六、删除关键字---- 除了可用写入方法增加一个关键字,Tinifile类还提供了一个删除关键字的对象方法: myinifile.DeleteKey('小节名','关键字');七、小节操作--- 增加一个小节可用写入的方法来完成,删除一个小节可用下面的对象方法: myinifile.EraseSection('小节名');--- 另外Tinifile类还提供了三种对象方法来对小节进行操作: --- myinifile.readsection('小节名',TStrings变量);可将指定小节中的所有关键字名读取至一个字符串列表变量中; --- myinifile.readsections(TStrings变量);可将INI文件中所有小节名读取至一个字符串列表变量中去。 ---- myinifile.readsectionvalues('小节名',TStrings变量);可将INI文件中指定小节的所有行(包括关键字、=、值)读取至一个字符串列表变量中去。 八、释放 在适当的位置用下面的语句释放myinifile: myinifile.distory;九、一个实例---- 下面用一个简单的例子(如图),演示了建立、读取、存贮INI文件的方法。myini.ini文件中包含有“程序参数”小节,和用户名称(字符串)、是否正式用户(布尔值)和已运行时间(整型值)三个关键字。程序在窗体建立读取这些数据,并在窗体释放时写myini.ini文件。 --- 附源程序清单 unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,inifiles,StdCtrls, ExtCtrls;type TForm1 = class(TForm) Edit1: TEdit; CheckBox1: TCheckBox; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Timer1: TTimer; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementationvar myinifile:TInifile;{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);var filename:string;begin filename:=ExtractFilePath(paramstr(0))+'myini.ini'; myinifile:=TInifile.Create(filename); edit1.Text:= myinifile.readstring('程序参数','用户名称','缺省的用户名称'); edit2.text:= inttostr(myinifile.readinteger('程序参数','已运行时间',0)); checkbox1.Checked:= myinifile.readbool('程序参数','是否正式用户',False);end;procedure TForm1.FormDestroy(Sender: TObject);begin myinifile.writestring('程序参数','用户名称',edit1.Text); myinifile.writeinteger('程序参数','已运行时间',strtoint(edit2.text)); myinifile.writebool('程序参数','是否正式用户',checkbox1.Checked); myinifile.Destroy;end;procedure TForm1.Timer1Timer(Sender: TObject);begin edit2.Text:=inttostr(strtoint(edit2.text)+1);end;end. 1. 控制INI文件几法 要利用.INI文件做程序有关数据的存储工作,就需要能读和写.INI文件,所以列了如下方法给大家参考: 从.INI文件中获取字符串 var strResult:pchar; begin GetPrivateProfileString( 'windows', // []中标题的名字 'NullPort', // =号前的名字 'NIL', // 如果没有找到字符串时,返回的默认值 strResult, //存放取得字符 100, //取得字符的允许最大长度 'c:\forwin95\win.ini' // 调用的文件名 ); edit1.text:=strResult; //显示取得字符串 从.INI文件中获取整数 edit1.text:=inttostr(GetPrivateProfileInt( 'intl', // []中标题的名字 'iCountry', // =号前的名字 0,// 如果没有找到整数时,返回的默认值 'c:\forwin95\win.ini' // 调用的文件名 )); 向.INI文件写入字符串 WritePrivateProfileString( 'windows', // []中标题的名字 'load', // 要写入“=”号前的字符串 'accca', //要写入的数据 'c:\forwin95\win.ini' // 调用的文件名 ); 向.INI文件写入整数 WritePrivateProfileSection( 'windows', // []中标题的名字 'read=100', // 要写入的数据 'c:\forwin95\win.ini' // 调用的文件名 ); 上面的方法是调用API函数,下面介绍另一种不用API从.INI文件中获取字符的方法 var MyIni: TIniFile; begin MyIni := TIniFile.Create('WIN.INI');//调用的文件名 edit1.text:=MyIni.ReadString('Desktop', 'Wallpaper', '');//取得字符 end; 向.INI文件中写入字符的方法 var MyIni: TIniFile; begin MyIni := TIniFile.Create('WIN.INI');//调用的文件名 DelphiIni.WriteString('Desktop', 'Wallpaper', 'c:\a.bmp'); end; 2.转让控制权 有时由于长时间的循环语句占用了cpu的处理权,无法运行 其他程序,照成死循环。这时用以下命令转让控制权,让操作系统处理其他事件。 Application.ProcessMessages; 3.得到执行程序的目录 SysUtils 单元中有 ExtractFileDir 与 ExtractFilePath两个类似的函数, 用哪一个?没有太大的关系。 不过有以下的差别: ExtractFilePath 传回值的最後一个字元是反斜杠“/”。 procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(ExtractFileDir(Application.Exename)); // ie: c:\temp ShowMessage(ExtractFilePath(Application.Exename)); // ie: c:\temp end; 相同点: 如果执行文件在根目录下(如:C:\SAMPLE.EXE)的话, 两者的传回值相同, 且最后一个字符都是“/”。 4.打开已注册文件 打开Windows已经注册的文件其实很简单,根据以下代码定义一个过程: procedure URLink(URL:PChar); begin ShellExecute(0, nil, URL, nil, nil, SW_NORMAL); end; 在要调用的地方使用 URLink('Readme.txt'); 如果是链接主页的话,那么改用 URLink('http://qqxw.yeah.net'); 5.得到Windows用户名和序列号 如何得到Windows的用户名称和产品序列号呢? 1. 可以用 WNetGetUser() 这个函数来得到 user name; 2. Windows 95 的产品序号可以用 TRegistry 到 Registry Database 中找出来; // 取得用户名称 function GetUserName: AnsiString; var lpName: PAnsiChar; lpUserName: PAnsiChar; lpnLength: DWORD; begin Result := ''; lpnLength := 0; WNetGetUser(nil, nil, lpnLength); // 取得字串长度 if lpnLength > 0 then begin GetMem(lpUserName, lpnLength); if WNetGetUser(lpName, lpUserName, lpnLength) = NO_ERROR then Result := lpUserName; FreeMem(lpUserName, lpnLength); end; end; { GetUserName } // 取得 Windows 产品序号 function GetWindowsProductID: string; var reg: TRegistry; begin Result := ''; reg := TRegistry.Create; with reg do begin RootKey := HKEY_LOCAL_MACHINE; OpenKey('Software\Microsoft\Windows\CurrentVersion', False); Result := ReadString('ProductID'); end; reg.Free; end; 6.关闭外部应用程序 如何在 Delphi 应用程序中, 去关闭外部已开启的应用程序? 下面给出一段在 Delphi 中关闭“计算器”程序为例: var HWndCalculator : HWnd; begin // find the exist calculator window HWndCalculator := Winprocs.FindWindow(nil, '计算器'); // close the exist Calculator if HWndCalculator <> 0 then SendMessage(HWndCalculator, WM_CLOSE, 0, 0); end; 7.查阅可视窗口标题 下面只是举出一个例子提供参考: 运用API函数GetWindow()配合GetWindowText()逐一查出各视窗的标题 1. File | New Project 开始一个新的工程 2. 在 Form1 中安排 Button 与 Memo 各一 3. 在 Button1 的 OnClick 事件中撰写程式如下: procedure TForm1.Button1Click(Sender: TObject); var hCurrentWindow: HWnd; szText: array[0..254] of char; begin hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST); while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow, @szText, 255)>0 then Memo1.Lines.Add(StrPas(@szText)); hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT); end; end; 8.在Delphi编程中创建一个启动闪现窗口 通常写得好的Windows程序显示一个启动提示或封面,也叫做闪现窗口。由于工程本身创建了程序的主窗口,一般情况下主窗口最先出现, 那么闪现窗口如何出现在主窗口之前。 如果我们将主窗口的可视(Visible)属性设置为假,于工程启动时,是否能将主窗口暂时隐藏起来,以使闪现屏幕最先出现呢?答案是不能。 因为应用程序自动在适当时候,使Form可视。(注:当一个Form用做子窗口或对话框, 不需要它们时,可视(Visible)属性设为假,可隐藏起Form。) 那么我们怎么解决这个问题呢?有以下两种方法: 方法一:调用Showmodal函数来实现。Showmodal方式使一个窗口为激活窗口, 和Show相似,但它令窗口模式化。现举一例说明: 8.1开始一个新工程。给表格起名为MainForm,MainForm的单元起名为Main, 工程文件起名为Test。 8.2在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件的OnClick事件创建一个过程,并在过程的begin和end之间插入Close语句。 8.3在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm 的单元起名为Move。 8.4为便于演示,在MoveForm中插入一个Label部件,设置其Caption 属性为“欢迎进入本系统”。 8.5建立两个表格之间的关联。在Unit Main的 implementation 中加入语句 uses move; 再为MainForm创建OnActivate事件。 procedure TMainForm.FormActivate(sender:TObject); begin MoveForm.Showmodal; end; 8.6从Component模板的System类别中选择一个计时器(Timer),添加入 MoveForm表格中,设置其Interval属性为3000(可根据需要自定义),再为其OnTimer事件添加语句close;加入一个Timer部件目的是用以控制闪现窗口显示时间。在此, MoveForm显示了3秒钟后关闭,主窗口MainForm自动被激活。 8.7编译、运行程序,就能得到延迟为3秒的闪现窗口。 方法二:你可通过修改工程文件中的源代码来实现,这在Delphi 的编程中是很少见的。现举一例具体说明: 前四步同方法一。 ⒌选择View/Project Manager,击Option按钮,选择结果Project Option 对话底部的Forms页栏目。注意,MainForm和MoveForm是在Auto-create forms 列表中。选择MoveForm并击右键头按钮,把这个表格移到 Available forms 。 所有的Delphi表格通过缺省方式自动在内存中建立, 因此它们要消耗内存和系统资源。在类似这里(程序运行时创建一个表格)的情况下, 你应该将表格从自动创建列表格中去掉。 ⒍下一步修改工程的源代码。选择View/Project Source,修改begin和end之间的语句如下: 程序清单Test.Dpr program Test uses forms, Main in 'MAIN.PAS'{MainForm}, Move in 'Move.PAS'{MoveForm} {$R *.RES} begin MoveForm:=TMoveForm.Create(Application);{Create创建闪现窗口对象} MoveForm.Show; MoveForm.Update; Application.CreateForm(TMainForm,MainForm); MoveForm.Hide; MoveForm.Free;{Free从内存中释放对象} Application.Run; end. 第一条语句创建了对象,该对象存在内存中,但还不能看见, 为了让它出现并更新它的内容,调用对象的Show和Update成员函数:Show和Update。 当闪现窗口使用完后,用Hide函数将它隐藏起来,然后用Free函数释放它所占据的内存。 7.如果此刻你编译和运行程序,MoveForm窗口一闪而过, 你可能未来得及看清。为使MoveForm窗口显示几秒种,我们可为MainForm的OnCreate 事件创建一个处理程序,延迟MoveForm窗口的显现时间。 program TMainForm.FormCreate(sender:Tobject); var currentTime:LongInt; begin currentTime:=GetTickCount div 1000; while ((GetTickCount div 1000)<(currentTime+3) do {不做任何事); end; end. GetTickCount函数返回窗口启动后过去的毫秒数,这个值除以1000 转化为秒数。此时你编译运行程序,就能得到一个延迟3秒多的闪现窗口。为闪现窗口添加上Image部件,再对字体及窗口进行修饰,我们就能为应用程序,创建一个精美的封面或在程序启动时显示重要提示 9.如何用Delphi编ScreenSaver 屏幕保护程序无非是扩展名换成了.SCR的可执行程序,它接受两种命令行参数: -s 运行命令参数 -c 配置命令参数 Windows通过向程序发-s命令行参数来启动程序。 要注意的是:程序的窗口是无边框和标题;窗口大小应与屏幕大小一样;还要注意窗口的事件的处理。 10.Delphi里如何计算日期 算时间在delphi中是最容易的,如下: var ss : TDateTime 其实Tdatetime是一个双精度的浮点数,它的小数点前表示天数: 如, ss := ss + 20 表示从ss开始向后20天,如果 ss = 234.567 它就表示 234.567天,当然是从公元0年开始计算的! 11. delphi怎样调用外部EXE文件 方法一 uses WinProcs; …… begin WinExec(......); …… end. 和调用Pascal库函数没什么两样。 方法二 用ShellExecute更好,在USES段加入SHELLAPI,使用时如: 执行"c:\myapp\myapp.exe"参数为"-s" ShellExecute(handle,'open','c:\myapp\myapp.exe','-s','',SW_SHOWNORMAL); 第一个参数为父窗口句柄; 第二个参数为打开方式(OPEN,PRINT两种); 第三个参数为执行文件全路径; 第四个参数为执行文件参数; 第五个参数为执行文件开始运行时的初始目录; 第六个参数为为执行文件运行方式(SW_HIDE,SW_MAXIMIZE,SW_MINIMIZE, SW_RESTORE,SW_SHOW,SW_SHOWDEFAULT,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE,SW_SHOWNA,SW_SHOWNOACTIVATE,SW_SHOWNORMAL); 具体请看帮助。另外,如果为字符串参数,其中包含变量或运算的必需用PCHAR()函数。 12. Win95/98下监控运行的其他程序 参照下面这段程序,就搞定了啦。^-^ uses ... TLHelp32, ... type TForm1 = class(TForm) ... end; var Form1: TForm1; l : Tlist; ////返回的东东在"L"这个TList中。 type TProcessInfo = Record ExeFile : String; ProcessID : DWORD; end; pProcessInfo = ^TProcessInfo; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var p : pProcessInfo; i : integer; ContinueLoop:BOOL; var FSnapshotHandle:THandle; FProcessEntry32:TProcessEntry32; begin l := TList.Create; l.Clear; FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); FProcessEntry32.dwSize:=Sizeof(FProcessEntry32); ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32); while integer(ContinueLoop)<>0 do begin New(p); p.ExeFile := FProcessEntry32.szExeFile; p.ProcessID := FProcessEntry32.th32ProcessID; l.Add(p); ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32); end; end; procedure TForm1.FormDestroy(Sender: TObject); var p : pProcessInfo; i : integer; begin With l do for i := Count - 1 DownTo 0 do begin p := items[i]; Dispose(p); Delete(i); end; end; ... end. 好全啊!给xiaotian2000(小天)分吧! 请问有没有 232串口接口 的 小数字键盘(最好有显示数字功能) 卖 ??? abort有什么用? 怎么样得到Visual FoxPro数据表结构? intraweb问题,数据库重起后,编译好了的服务程序必须重起吗? TBlobField問題 treeview的节点展开有事件吗 ★请问纯平控件组中的FlatScrollbar控件在程序中具体如何使用?谢谢 请问DbGridEh哪有下载? 如何讓delphi的exe程序接收參數 事務! 怎样获取DBGrid当前行是否被选中的信息 怎么给一个文件夹分配空间啊?40分送上!
begin
ReadSections(ComboBox1.Items);//参数是一个TStrings类型
Free;
end;
---- INI文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,所以可视化的编程一族,如VB、VC、VFP、Delphi等都提供了读写INI文件的方法,其中Delphi中操作INI文件,最为简洁,这是因为Delphi3提供了一个TInifile类,使我们可以非常灵活的处理INI文件。 一、有必要了解INI文件的结构:
;注释
[小节名]
关键字=值
...---- INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值。
---- 值的类型有三种:字符串、整型数值和布尔值。其中字符串存贮在INI文件中时没有引号,布尔真值用1表示,布尔假值用0表示。
---- 注释以分号“;”开头。 二、定义
---- 1、在Interface的Uses节增加IniFiles;
---- 2、在Var变量定义部分增加一行:
myinifile:Tinifile;
---- 然后,就可以对变量myinifile进行创建、打开、读取、写入等操作了。 三、打开INI文件
myinifile:=Tinifile.create('program.ini');
--- 上面这一行语句将会为变量myinifile与具体的文件 program.ini建立联系,然后,就可以通过变量myinifile,来读写program.ini文件中的关键字的值了。 ---- 值得注意的是,如果括号中的文件名没有指明路径的话,那么这个Program.ini文件会存储在Windows目录中,把Program.ini文件存储在应用程序当前目录中的方法是:为其指定完整的路径及文件名。下面的两条语句可以完成这个功能:
Filename:=ExtractFilePath(Paramstr(0))+'program.ini';
myinifile:=Tinifile.Create(filename);四、读取关键字的值
--- 针对INI文件支持的字符串、整型数值、布尔值三种数据类型,TINIfiles类提供了三种不同的对象方法来读取INI文件中关键字的值。
--- 假设已定义变量vs、vi、vb分别为string、 integer、boolean类型。
vs:=myinifile.Readstring('小节名','关键字',缺省值);
vi:=myinifile.Readinteger('小节名','关键字',缺省值);
vb:=myinifile.Readbool('小节名','关键字',缺省值);--- 其中缺省值为该INI文件不存在该关键字时返回的缺省值。 五、写入INI文件
---- 同样的,TInifile类也提供了三种不同的对象方法,向INI文件写入字符串、整型数及布尔类型的关键字。
myinifile.writestring('小节名','关键字',变量或字符串值);
myinifile.writeinteger('小节名','关键字',变量或整型数值);
myinifile.writebool('小节名','关键字',变量或True或False);
---- 当这个INI文件不存在时,上面的语句还会自动创建该INI文件。 六、删除关键字
---- 除了可用写入方法增加一个关键字,Tinifile类还提供了一个删除关键字的对象方法:
myinifile.DeleteKey('小节名','关键字');七、小节操作
--- 增加一个小节可用写入的方法来完成,删除一个小节可用下面的对象方法:
myinifile.EraseSection('小节名');--- 另外Tinifile类还提供了三种对象方法来对小节进行操作:
--- myinifile.readsection('小节名',TStrings变量);可将指定小节中的所有关键字名读取至一个字符串列表变量中;
--- myinifile.readsections(TStrings变量);可将INI文件中所有小节名读取至一个字符串列表变量中去。
---- myinifile.readsectionvalues('小节名',TStrings变量);可将INI文件中指定小节的所有行(包括关键字、=、值)读取至一个字符串列表变量中去。 八、释放
在适当的位置用下面的语句释放myinifile:
myinifile.distory;九、一个实例
---- 下面用一个简单的例子(如图),演示了建立、读取、存贮INI文件的方法。myini.ini文件中包含有“程序参数”小节,和用户名称(字符串)、是否正式用户(布尔值)和已运行时间(整型值)三个关键字。程序在窗体建立读取这些数据,并在窗体释放时写myini.ini文件。 --- 附源程序清单
unit Unit1;interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,inifiles,StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
CheckBox1: TCheckBox;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;implementation
var
myinifile:TInifile;
{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
var
filename:string;
begin
filename:=ExtractFilePath(paramstr(0))+'myini.ini';
myinifile:=TInifile.Create(filename);
edit1.Text:= myinifile.readstring('程序参数','用户名称','缺省的用户名称');
edit2.text:= inttostr(myinifile.readinteger('程序参数','已运行时间',0));
checkbox1.Checked:= myinifile.readbool('程序参数','是否正式用户',False);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
myinifile.writestring('程序参数','用户名称',edit1.Text);
myinifile.writeinteger('程序参数','已运行时间',strtoint(edit2.text));
myinifile.writebool('程序参数','是否正式用户',checkbox1.Checked);
myinifile.Destroy;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
edit2.Text:=inttostr(strtoint(edit2.text)+1);
end;end.
要利用.INI文件做程序有关数据的存储工作,就需要能读和写.INI文件,所以列了如下方法给大家参考: 从.INI文件中获取字符串 var strResult:pchar; begin GetPrivateProfileString( 'windows', // []中标题的名字 'NullPort', // =号前的名字 'NIL', // 如果没有找到字符串时,返回的默认值 strResult, //存放取得字符 100, //取得字符的允许最大长度 'c:\forwin95\win.ini' // 调用的文件名 ); edit1.text:=strResult; //显示取得字符串 从.INI文件中获取整数 edit1.text:=inttostr(GetPrivateProfileInt( 'intl', // []中标题的名字 'iCountry', // =号前的名字 0,// 如果没有找到整数时,返回的默认值 'c:\forwin95\win.ini' // 调用的文件名 )); 向.INI文件写入字符串 WritePrivateProfileString( 'windows', // []中标题的名字 'load', // 要写入“=”号前的字符串 'accca', //要写入的数据 'c:\forwin95\win.ini' // 调用的文件名 ); 向.INI文件写入整数 WritePrivateProfileSection( 'windows', // []中标题的名字 'read=100', // 要写入的数据 'c:\forwin95\win.ini' // 调用的文件名 ); 上面的方法是调用API函数,下面介绍另一种不用API从.INI文件中获取字符的方法 var MyIni: TIniFile; begin MyIni := TIniFile.Create('WIN.INI');//调用的文件名 edit1.text:=MyIni.ReadString('Desktop', 'Wallpaper', '');//取得字符 end; 向.INI文件中写入字符的方法 var MyIni: TIniFile; begin MyIni := TIniFile.Create('WIN.INI');//调用的文件名 DelphiIni.WriteString('Desktop', 'Wallpaper', 'c:\a.bmp'); end;
2.转让控制权
有时由于长时间的循环语句占用了cpu的处理权,无法运行 其他程序,照成死循环。这时用以下命令转让控制权,让操作系统处理其他事件。 Application.ProcessMessages;
3.得到执行程序的目录 SysUtils 单元中有 ExtractFileDir 与 ExtractFilePath两个类似的函数, 用哪一个?没有太大的关系。 不过有以下的差别: ExtractFilePath 传回值的最後一个字元是反斜杠“/”。 procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(ExtractFileDir(Application.Exename)); // ie: c:\temp ShowMessage(ExtractFilePath(Application.Exename)); // ie: c:\temp
end; 相同点: 如果执行文件在根目录下(如:C:\SAMPLE.EXE)的话, 两者的传回值相同, 且最后一个字符都是“/”。
4.打开已注册文件
打开Windows已经注册的文件其实很简单,根据以下代码定义一个过程:
procedure URLink(URL:PChar); begin ShellExecute(0, nil, URL, nil, nil, SW_NORMAL); end; 在要调用的地方使用 URLink('Readme.txt'); 如果是链接主页的话,那么改用 URLink('http://qqxw.yeah.net'); 5.得到Windows用户名和序列号
如何得到Windows的用户名称和产品序列号呢? 1. 可以用 WNetGetUser() 这个函数来得到 user name; 2. Windows 95 的产品序号可以用 TRegistry 到 Registry Database 中找出来;
// 取得用户名称 function GetUserName: AnsiString; var lpName: PAnsiChar; lpUserName: PAnsiChar; lpnLength: DWORD; begin Result := ''; lpnLength := 0; WNetGetUser(nil, nil, lpnLength); // 取得字串长度 if lpnLength > 0 then begin GetMem(lpUserName, lpnLength); if WNetGetUser(lpName, lpUserName, lpnLength) = NO_ERROR then Result := lpUserName; FreeMem(lpUserName, lpnLength); end; end; { GetUserName }
// 取得 Windows 产品序号 function GetWindowsProductID: string; var reg: TRegistry; begin Result := ''; reg := TRegistry.Create; with reg do begin RootKey := HKEY_LOCAL_MACHINE; OpenKey('Software\Microsoft\Windows\CurrentVersion', False); Result := ReadString('ProductID'); end; reg.Free; end; 6.关闭外部应用程序
如何在 Delphi 应用程序中, 去关闭外部已开启的应用程序? 下面给出一段在 Delphi 中关闭“计算器”程序为例:
var HWndCalculator : HWnd; begin // find the exist calculator window HWndCalculator := Winprocs.FindWindow(nil, '计算器'); // close the exist Calculator if HWndCalculator <> 0 then SendMessage(HWndCalculator, WM_CLOSE, 0, 0); end; 7.查阅可视窗口标题
下面只是举出一个例子提供参考: 运用API函数GetWindow()配合GetWindowText()逐一查出各视窗的标题 1. File | New Project 开始一个新的工程 2. 在 Form1 中安排 Button 与 Memo 各一 3. 在 Button1 的 OnClick 事件中撰写程式如下:
procedure TForm1.Button1Click(Sender: TObject); var hCurrentWindow: HWnd; szText: array[0..254] of char; begin hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST); while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow, @szText, 255)>0 then Memo1.Lines.Add(StrPas(@szText)); hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT); end; end; 8.在Delphi编程中创建一个启动闪现窗口
通常写得好的Windows程序显示一个启动提示或封面,也叫做闪现窗口。由于工程本身创建了程序的主窗口,一般情况下主窗口最先出现, 那么闪现窗口如何出现在主窗口之前。 如果我们将主窗口的可视(Visible)属性设置为假,于工程启动时,是否能将主窗口暂时隐藏起来,以使闪现屏幕最先出现呢?答案是不能。 因为应用程序自动在适当时候,使Form可视。(注:当一个Form用做子窗口或对话框, 不需要它们时,可视(Visible)属性设为假,可隐藏起Form。) 那么我们怎么解决这个问题呢?有以下两种方法: 方法一:调用Showmodal函数来实现。Showmodal方式使一个窗口为激活窗口, 和Show相似,但它令窗口模式化。现举一例说明:
8.1开始一个新工程。给表格起名为MainForm,MainForm的单元起名为Main, 工程文件起名为Test。 8.2在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件的OnClick事件创建一个过程,并在过程的begin和end之间插入Close语句。 8.3在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm 的单元起名为Move。 8.4为便于演示,在MoveForm中插入一个Label部件,设置其Caption 属性为“欢迎进入本系统”。 8.5建立两个表格之间的关联。在Unit Main的 implementation 中加入语句 uses move; 再为MainForm创建OnActivate事件。
procedure TMainForm.FormActivate(sender:TObject); begin MoveForm.Showmodal; end; 8.6从Component模板的System类别中选择一个计时器(Timer),添加入 MoveForm表格中,设置其Interval属性为3000(可根据需要自定义),再为其OnTimer事件添加语句close;加入一个Timer部件目的是用以控制闪现窗口显示时间。在此, MoveForm显示了3秒钟后关闭,主窗口MainForm自动被激活。 8.7编译、运行程序,就能得到延迟为3秒的闪现窗口。
方法二:你可通过修改工程文件中的源代码来实现,这在Delphi 的编程中是很少见的。现举一例具体说明: 前四步同方法一。 ⒌选择View/Project Manager,击Option按钮,选择结果Project Option 对话底部的Forms页栏目。注意,MainForm和MoveForm是在Auto-create forms 列表中。选择MoveForm并击右键头按钮,把这个表格移到 Available forms 。 所有的Delphi表格通过缺省方式自动在内存中建立, 因此它们要消耗内存和系统资源。在类似这里(程序运行时创建一个表格)的情况下, 你应该将表格从自动创建列表格中去掉。 ⒍下一步修改工程的源代码。选择View/Project Source,修改begin和end之间的语句如下: 程序清单Test.Dpr
program Test uses forms, Main in 'MAIN.PAS'{MainForm}, Move in 'Move.PAS'{MoveForm}
{$R *.RES}
begin MoveForm:=TMoveForm.Create(Application);{Create创建闪现窗口对象} MoveForm.Show; MoveForm.Update; Application.CreateForm(TMainForm,MainForm); MoveForm.Hide; MoveForm.Free;{Free从内存中释放对象} Application.Run; end. 第一条语句创建了对象,该对象存在内存中,但还不能看见, 为了让它出现并更新它的内容,调用对象的Show和Update成员函数:Show和Update。 当闪现窗口使用完后,用Hide函数将它隐藏起来,然后用Free函数释放它所占据的内存。 7.如果此刻你编译和运行程序,MoveForm窗口一闪而过, 你可能未来得及看清。为使MoveForm窗口显示几秒种,我们可为MainForm的OnCreate 事件创建一个处理程序,延迟MoveForm窗口的显现时间。
program TMainForm.FormCreate(sender:Tobject); var currentTime:LongInt; begin currentTime:=GetTickCount div 1000; while ((GetTickCount div 1000)<(currentTime+3) do {不做任何事); end; end. GetTickCount函数返回窗口启动后过去的毫秒数,这个值除以1000 转化为秒数。此时你编译运行程序,就能得到一个延迟3秒多的闪现窗口。为闪现窗口添加上Image部件,再对字体及窗口进行修饰,我们就能为应用程序,创建一个精美的封面或在程序启动时显示重要提示 9.如何用Delphi编ScreenSaver
屏幕保护程序无非是扩展名换成了.SCR的可执行程序,它接受两种命令行参数: -s 运行命令参数 -c 配置命令参数 Windows通过向程序发-s命令行参数来启动程序。 要注意的是:程序的窗口是无边框和标题;窗口大小应与屏幕大小一样;还要注意窗口的事件的处理。 10.Delphi里如何计算日期
算时间在delphi中是最容易的,如下:
var ss : TDateTime
其实Tdatetime是一个双精度的浮点数,它的小数点前表示天数: 如, ss := ss + 20 表示从ss开始向后20天,如果 ss = 234.567 它就表示 234.567天,当然是从公元0年开始计算的!
11. delphi怎样调用外部EXE文件
方法一 uses WinProcs; …… begin WinExec(......); …… end. 和调用Pascal库函数没什么两样。
方法二
用ShellExecute更好,在USES段加入SHELLAPI,使用时如: 执行"c:\myapp\myapp.exe"参数为"-s" ShellExecute(handle,'open','c:\myapp\myapp.exe','-s','',SW_SHOWNORMAL); 第一个参数为父窗口句柄; 第二个参数为打开方式(OPEN,PRINT两种); 第三个参数为执行文件全路径; 第四个参数为执行文件参数; 第五个参数为执行文件开始运行时的初始目录; 第六个参数为为执行文件运行方式(SW_HIDE,SW_MAXIMIZE,SW_MINIMIZE, SW_RESTORE,SW_SHOW,SW_SHOWDEFAULT,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE,SW_SHOWNA,SW_SHOWNOACTIVATE,SW_SHOWNORMAL); 具体请看帮助。另外,如果为字符串参数,其中包含变量或运算的必需用PCHAR()函数。 12. Win95/98下监控运行的其他程序 参照下面这段程序,就搞定了啦。^-^
uses ... TLHelp32, ...
type TForm1 = class(TForm) ... end; var Form1: TForm1; l : Tlist; ////返回的东东在"L"这个TList中。
type TProcessInfo = Record ExeFile : String; ProcessID : DWORD; end;
pProcessInfo = ^TProcessInfo;
implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var p : pProcessInfo; i : integer; ContinueLoop:BOOL; var FSnapshotHandle:THandle; FProcessEntry32:TProcessEntry32; begin l := TList.Create; l.Clear; FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); FProcessEntry32.dwSize:=Sizeof(FProcessEntry32); ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32); while integer(ContinueLoop)<>0 do begin New(p); p.ExeFile := FProcessEntry32.szExeFile; p.ProcessID := FProcessEntry32.th32ProcessID; l.Add(p); ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32); end; end;
procedure TForm1.FormDestroy(Sender: TObject); var p : pProcessInfo; i : integer; begin With l do for i := Count - 1 DownTo 0 do begin p := items[i]; Dispose(p); Delete(i); end; end; ... end.
给xiaotian2000(小天)分吧!