我要投稿
  • 您当前的位置:57365.com -> 技术教程 -> 软件开发教程 -> Delphi教程 -> 教程内容
  • [ 收藏本页教程 ]
  • Delphi 应用编程实例简介Delphi教程

    教程作者:佚名    教程来源:不详   教程栏目:Delphi教程    收藏本页
     

    <-SSE WIDTH=100% SSE->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程序显示一个启动提示或封面,也叫做闪现窗口。由于工程本身创建了程序的主窗口,一般情况下主窗口最先出现, 那么闪现窗口如何出现在主窗口之前。[page]
     如果我们将主窗口的可视(Visible)属性设置为假,于工程启动时,是否能将主窗口暂时隐藏起来,以使闪现屏幕最先出现呢?答案是不能。 因为应用程序自动在适当时候,使Form可视。(注:当一个Form用做子窗口或对话框, 不需要它们时,可视(Visible)属性设为假,可隐藏起Form。)
    那么我们怎么解决这个问题呢?有以下两种方法:
    方法一:调用Showmodal函数来实现。Showmodal方式使一个窗口为激活窗口, 和Show相似,但它令窗口模式化。现举一例说明:

    8.⒈开始一个新工程。给表格起名为MainForm,MainForm的单元起名为Main, 工程文件起名为Test。
    8.⒉在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件的OnClick事件创建一个过程,并在过程的begin和end之间插入Close语句。
    8.⒊在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm 的单元起名为Move。
    8.⒋为便于演示,在MoveForm中插入一个Label部件,设置其Caption 属性为“欢迎进入本系统”。
    8.⒌建立两个表格之间的关联。在Unit Main的 implementation 中加入语句 uses move;
    再为MainForm创建OnActivate事件。

    procedure TMainForm.FormActivate(sender:TObject);
    begin
    MoveForm.Showmodal;
    end;
    8.⒍从Component模板的System类别中选择一个计时器(Timer),添加入 MoveForm表格中,设置其Interval属性为3000(可根据需要自定义),再为其OnTimer事件添加语句close;加入一个Timer部件目的是用以控制闪现窗口显示时间。在此, MoveForm显示了3秒钟后关闭,主窗口MainForm自动被激活。
    8.⒎编译、运行程序,就能得到延迟为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函数释放它所占据的内存。
    ⒎如果此刻你编译和运行程序,MoveForm窗口一闪而过, 你可能未来得及看清。为使MoveForm窗口显示几秒种,我们可为MainForm的OnCreate 事件创建一个处理程序,延迟MoveForm窗口的显现时间。

    program TMainForm.FormCreate(sender:Tobject);
    var
    currentTime:LongInt;
    begin
    currentTime:=GetTickCount d

    我要投稿   -   广告合作   -   关于本站   -   友情连接   -   网站地图   -   联系我们   -   版权声明   -   设为首页   -   加入收藏   -   网站留言
    Copyright © 2009 - 20012 www.www.hxswjs.com All Rights Reserved.57365.com 版权所有