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
    评论
### 回答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、付费专栏及课程。

余额充值