delphi应用代码执行的过程和步骤

delphi应用代码执行的过程和步骤

第1步:加载LApp应用程序的项目单元并执行LApp

program LApp;

// 1.1 加载引用单元:
uses
  System.StartUpCopy,
  FMX.Forms,
  MasterDetail in 'MasterDetail.pas' {MasterDetailForm};

// 1.2 加载引用单元:

{$R *.res}

// 1.3 定义应用程序级别的变量、类或方法、函数等:

type TaClass = class  //:或:  type TaClass = TObject  //:  需在上面引用sysytem的相关单元
    private 
     { Private declarations }
    
public
     { Public declarations }
    
end;
var LApp2:Integer; 
procedure global1;  
implementation
procedure global1; 
begin  // ...
end;    

begin
// 1.4 LApp应用程序初始化前要执行的代码 ,比如: 
    ReportMemoryLeaksOnShutdown := True;  //:内存泄漏报警
    if WebRequestHandler <> nil then WebRequestHandler.WebModuleClass := WebModuleClass; //:初始化类(如果有的话)
   再如,需要的话: 
              //  uses System.SysUtils 系统时间截格式设定 及货币格式 :
          ///////////////////////////////////////////TFormatSettings.create(LANG_CHINESE);
          // 设置WINDOWS系统的短日期的格式:
        {$IFDEF MSWINDOWS}
          SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, 'yyyy-MM-dd');
          //SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SLONGDATE, 'yyyy-MM-dd');
        {$ENDIF MSWINDOWS}
          //Application.UpdateFormatSettings := False; //UpdateFormatSettings 失效
          // 设定程序本身所使用的日期时间格式: 毫秒格式符.ms
          with FormatSettings do
          begin
            ShortDateFormat := 'yyyy-mm-dd';
            LongDateFormat := 'yyyy-mm-dd';
            ShortTimeFormat := 'hh:nn:ss';
            LongTimeFormat := 'hh:nn:ss.zzz'; //长时间: 毫秒.ms
            //LongTimeFormat := 'hh:nn:ss.ms'; //长时间: 毫秒.ms
            DateSeparator := '-';
            TimeSeparator := ':';
          end;  
// 1.5 LApp应用程序初始化 
  Application.Initialize;
// 1.6 LApp应用程序产生你指定的应用主窗体  
  Application.CreateForm(TMasterDetailForm, MasterDetailForm);
 // 1.7 LApp应用程序运行并执行你指定的应用主窗体(假设窗体单名元名为main,实例名为fmxMain)
  Application.Run;
end.

第2步:加载应用主窗体

unit main;
2.1 执行窗体的接口及引用的单元: 
interface
uses
    System.SysUtils, System.Types, 
    System.UITypes, System.Classes, 
    System.Variants, 
    System.Math,  
    System.StrUtils  
    //...  
    ;
2.2 定义该窗体的类、变量、过程和方法:(如果有的话)
type
    TfmxMain = class(TForm)  //:定义本窗体类:必须
private
    //...
private
    { Private declarations }
public
    { Public declarations }
end;
var
   fmxMain: TfmxMain; // : 实例化该窗体类:必须

2.3 定义独立于窗体类的类、变量、过程和方法:(如果有的话),比如:
type
    //...类
private
    { Private declarations }
public
    { Public declarations }
end; 
    ///<summary>汉子首字缩进字符串FIntendCN:=DupeString(#32,8);</summary>
    ///<remarks>DupeString:将字符串重复N次:uses StrUtils;</remarks>
var FIntendCN:string;  //:...变量
var FlblName,FlblTitle:TStrings;
procedure Init; //:...方法或函数

//  2.4的代码应当写在窗体类的任何代码的最后,但它先于窗体类的任何代码执行:

2.4 执行应用主窗体的initialization部分的代码:与窗体类无关的代码(如果有的话)
initialization
  //:初始化与窗体类无关的代码
  //:执行窗体类执行前的包括FormCreate:
  FIntendCN:=DupeString(#32,8);
  FlblName:=nil;  FlblTitle:=nil;
  Init;
  ShowMessage('第2.4步单元初始化initialization开始画:在主窗体FormCreate并因此显示出来之前');
//  2.5的代码应当写在该窗体的最后,且它滞后于窗体类的任何代码执行
2.5 执行应用主窗体的finalization部分的代码:与窗体类无关的代码(如果有的话)
finalization
  //:结束与窗体类无关的代码:
  FlblName.Free;
  FlblTitle.Free;
end.  //:结束窗体的执行

2.6 执行应用主窗体的FormCreate代码:
procedure TfmxMain.FormCreate(Sender: TObject);
begin
    FlblName:=TStringList.Create;  
    FlblTitle:=TStringList.Create;

    Memo1.Lines.Add('第2.6步窗体Form初始化FormCreate开始画');
end;

2.7 执行应用主窗体的FormShow代码:
procedure TfmxMain.FormShow(Sender: TObject);
begin
    Memo1.Lines.Add('第2.7步窗体FormShow开始画');
end;
2.8 执行应用主窗体的FormPaint代码:
procedure TfmxMain.FormPaint(
  Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin 
    Memo1.Lines.Add('第2.8步才会执行窗体自身开始画');
end;
2.9 执行应用主窗体中的组件OnPaint代码:
procedure TfmxMain.ListView1Paint(
  Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin 
    Memo1.Lines.Add('第2.9步才会开始画窗体内的组件');
end;
 

演示一下:窗体消息的传递:

在窗体还未显示出来之前:

点确定后:

发布了61 篇原创文章 · 获赞 6 · 访问量 5555

猜你喜欢

转载自blog.csdn.net/pulledup/article/details/104384291