Delphi 启动流程

Project.DPR
InitExe
InitiateModule
StartExec
   SetExceptionHandler
   InitUnits
          sysInit
            System
               FPUMaskInit
               FPUInit
               系统相关GetVersion....
            Types
            Windows
            Messages
            ActiveX
            SysConst
            SysUtils
            VarUtils
            Variants
            RtlConsts
            TypInfo
            Classes
            Graphics...
            StdCtrls...
            Dialogs....
            Controls...
            Forms
TApplication.Iniatiate
TApplication.CreateForm
TApplication.Run

[SysUtils]
InitExceptions;
[Variants] 
InitializeCriticalSection(LVarTypeSync);
[classes]
InitThreadSynchronization;
AddModuleUnloadProc(ModuleUnload);
GlobalNameSpace := TMultiReadExclusiveWriteSynchronizer.Create;
RegGroups := TRegGroups.Create;
IntConstList := TThreadList.Create;
GlobalFixupList := TThreadList.Create;
[grapics.pas]
InitScreenLogPixels;
InitializeCriticalSection(BitmapImageLock);
InitializeCriticalSection(CounterLock);
StockPen := GetStockObject(BLACK_PEN);
StockBrush := GetStockObject(HOLLOW_BRUSH);
StockFont := GetStockObject(SYSTEM_FONT);
StockIcon := LoadIcon(0, IDI_APPLICATION);
InitDefFontData;
FontManager := TResourceManager.Create(SizeOf(TFontData));
PenManager := TResourceManager.Create(SizeOf(TPenData));
BrushManager := TResourceManager.Create(SizeOf(TBrushData));
PatternManager := TPatternManager.Create;
BitmapCanvasList := TThreadList.Create;
CanvasList := TThreadList.Create;
RegisterIntegerConsts(TypeInfo(TColor), IdentToColor, ColorToIdent);
RegisterIntegerConsts(TypeInfo(TFontCharset), IdentToCharset, CharsetToIdent);
[Controls.pas]
NewStyleControls := Lo(GetVersion) >= 4;
InitControls;
Mouse.create
Screen.create
Application.create
StartClassGroup(TControl);
ActivateClassGroup(TControl);
GroupDescendentsWith(TCustomImageList, TControl);
GroupDescendentsWith(TContainedAction, TControl);
GroupDescendentsWith(TCustomActionList, TControl);
[Forms]
InitProcs;
RM_TaskBarCreated := RegisterWindowMessage('TaskbarCreated');
Classes.RegisterFindGlobalComponentProc(FindGlobalComponent);
[Dialogs.pas]
InitGlobals;
StartClassGroup(TControl);
ActivateClassGroup(TControl);
GroupDescendentsWith(TCommonDialog, TControl);
[Project] 
Application.Initiate
Application.CreateForm
Application.Run
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、IDE 1、对IDE的高DPI支持,涵盖了最新的4k+显示器,整个字体和图标更干净、更清晰。 2、多显示器和多窗口改进:在多个窗口中同时设计和编辑同一个表单的代码 3、完全重建的欢迎页,具有原生的外观和感觉,以及适合IDE的UI,并可自定义布局和内容 4、C++代码格式化器。使用clang-format自动布局你的C++代码 5、改进了对VCL和IDE的远程桌面支持 6、FireMonkey设计时指南。通过可视化的线条和增强的边距和填充支持更快地进行原型设计 二、VCL 1、丰富的编辑组件更新删除了XP的依赖性,并为TRichEdit控件引入了新的功能。 2、VCL样式增加了设计时支持:通过在设计时立即看到你的样式表格和控件在运行时的样子,使时尚的UI原型更快。 3、增加了对TreeViews中CheckBoxes的支持,每个节点都支持3种状态(部分、变暗、排除)以帮助定制UI。 4、新的TDBLabeledEdit组件提供了TLabelEdit的数据感知版本,以加快原型设计。 5、大量的VCL改进,包括默认的表格大小和字体,例外对话框的复制按钮,备忘录和RichEdit的边距等等。 三、FMX 1、改进了对Windows和桌面的FMX高DPI支持,桌面UI明显优越 2、在WebBrowser组件中支持微软的WebView 2控件(Edge Chromium)。 3、支持最新的Android 30 API和最新的计费API,并迁移到使用AndroidX库 4、Android支持多个classes.dex文件,简化了对外部Android依赖的整合 四、Platforms 1、Delphi macOS 64位ARM编译器和工具链,包括为Intel/Arm AppStore提交构建通用二进制文件 2、Delphi语言支持二进制小数和数字分离器 3、改进了C++工具链,对C++类型的RTTI进行了大修,包括在Delphi类型上使用typeid。 4、为Delphi类型改进了C++风格的RTTI 5、在Win32和Win64上改进了CMake的质量并大大改进了异常处理。 五、RTL 1、RTL质量重点。TZipFile、大数据结构的64位改进、蓝牙LE 2、System.DateUtils中TDateTime的记录帮助器 3、System.SysUtils中TCurrency的Record Helper使货币的工作更加简单和容易。 4、C++ RTL的改进包括在Delphi类中使用make_shared和make_unique,对Delphi字符串的string_view支持,以及Delphi/C++字符串的简单转换。 六、LSP 1、使用Visual Studio Code来编辑Delphi源代码,并具有完整的代码完成功能 2、LSP对Include文件的认识 3、自动重新启动LSP服务器 4、用Tab键自动完成代码 5、支持类辅助工具 6、赋值数组时的数组建议 七、Data 1、新版本中的FireDAC为PostgreSQL、Oracle和Firebird数据库提供了具体的改进。 2、HTTP和REST客户端库已经扩展了超时机制,支持HTTP/2、TLS 1.3、Base64 URL编码。 3、新组件TRESTRequestDataSetAdapter简化了向服务器上传数据集的过程 4、新的低流量RAD Server Lite允许无限制地部署您的多层解决方案,以及完全可扩展的Server引擎。 5、对于DataSnap,REST URL映射逻辑现在是完全可配置的
### 回答1: 要在Delphi中实现安卓开机自启动,可以通过以下步骤完成: 1. 首先,在项目中添加一个广播接收器组件(TReceiver),用于接收设备启动完成的广播事件。 2. 在TReceiver组件的OnReceive事件中编写代码,实现开机后要执行的功能。可以在这里调用其他Delphi代码或者调用Android API。 3. 在MainForm的OnCreate事件中调用TReceiver组件的RegisterReceive方法,注册广播接收器。 4. 在MainForm的OnDestroy事件中调用TReceiver组件的UnregisterReceive方法,取消广播接收器的注册。 通过以上步骤,就可以实现安卓开机自启动。当设备启动完成时,广播接收器会收到广播事件,触发OnReceive事件中的代码执行。这样就可以在开机后自动执行相关功能。 需要注意的是,在开发过程中需要添加相应的权限,以确保应用程序可以接收到设备启动完成的广播事件。在AndroidManifest文件中添加如下权限: <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 以上就是在Delphi中实现安卓开机自启动的简要步骤。具体的代码实现可以根据实际需求进行调整。 ### 回答2: 在Delphi中实现安卓开机自启动有以下几个步骤: 1. 添加权限:首先,需要在AndroidManifest.xml文件中添加以下权限: <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 2. 创建广播接收器:在Delphi中创建一个继承自BroadcastReceiver的类,用于接收开机完成的广播: unit BootReceiver; interface uses Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os; type [BroadcastReceiver] [IntentFilter(TJIntent.JavaClass.ACTION_BOOT_COMPLETED)] TBootReceiver = class(TJavaLocal, Androidapi.JNI.GraphicsContentViewText.JBroadcastReceiver) public procedure onReceive(Context: JContext; Intent: JIntent); cdecl; end; implementation procedure TBootReceiver.onReceive(Context: JContext; Intent: JIntent); var StartupIntent: JIntent; begin // 在此处添加应用开机自启动的逻辑 // 示例:打开应用 StartupIntent := Context.getPackageManager().getLaunchIntentForPackage(Context.getPackageName()); StartupIntent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); Context.startActivity(StartupIntent); end; end. 3. 注册广播接收器:在Delphi的主代码中,注册广播接收器,在应用启动时监听开机完成的广播: unit Main; interface uses // 引入BootReceiver单元 implementation procedure TForm1.FormCreate(Sender: TObject); var BootReceiver: JObject; begin BootReceiver := TJBootReceiver.JavaClass.init; SharedActivityContext.registerReceiver(BootReceiver, TJIntent.JavaClass.ACTION_BOOT_COMPLETED); end; end. 通过以上步骤,就可以实现在安卓设备开机完成时,自动启动Delphi应用。可以根据实际需求,在广播接收器的onReceive方法中添加相应的逻辑,例如启动服务、设置定时任务等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值