前言:網上有很多介紹delphi創建閃屏的代碼,大多只是在程序開啟前顯示一個閃屏,但是卻沒有說如何在閃屏上顯示程序加載的進度,于是筆者有意思介紹一下這種閃屏方式。
### **方法一**
** [Delphi開發 Android 程序啟動畫面簡單完美解決方案]**
現在,經常不斷的折騰,終于找到了一個相對簡單的解決方案:
1、先創建一個470×320像素的空白圖片,保存到工程的某個目錄下,如 Images,假設我們命名為 Splash470x320.png(其它分辨率類似,實際在720p(榮耀 4x?)/1080p( Mate8 )/2K(小米Note Pro)屏下調用的都是它,別的好象沒有用,所以隨意放幾個空白圖片好了)。
2、進入工程的Project->Options->Application,然后設置470×320,設置如下:
[](http://blog.qdac.cc/wp-content/uploads/2016/01/projappopt.jpg)
* 指定每一個splash image 為正確的尺寸對應的圖片,否則不讓保存;
* 設置 Splash tile mode 一定要是 disabled。
* 設置 Splash gravity 屬性為 fill。
完成后,點擊 OK 保存。
3、制作一個真實的 Splash 啟動畫面的圖片,如果是分辨率真按1080的話,就是1080×1920,如果是按470畫的話,就是470×836。如果圖片尺寸差別不大的話,1080×1920 我覺得可能會更好一些吧,我沒有測試它的實際呈現效果有多大差異,不過我覺得在手機的小屏上一閃而過的畫面應該感覺不到多大的區別。
4、保存這個圖片覆蓋上第一步保存的splash470x320.png,然后正常的編譯和發布程序就OK了。
上面的整個方案中,實際上采用了欺騙的手法,完成了splash的替換,整體效果比較令人滿意。在此,再次感謝音兒的辛苦努力。
### **方法二**
1.創建一個窗體(TfrmSplash),放入一個TImageBox,加載一幅圖片,調整好TImageBox與圖片的大小,然后在其上放入一個TLabel,name=LblStatus,用于顯示加載進度文字。然后將TfrmSplash設置為不自動創建。
2.加入如下代碼(代碼很簡單,就不用解釋太多)
Delphi代碼[](http://peirenlei.iteye.com/blog/521581# "復制代碼")?
1. unit?UntFormSplash; ??
3. interface ??
5. uses ??
6. ??Windows,?Messages,?SysUtils,?Variants,?Classes,?Graphics,?Controls,?Forms, ??
7. ??Dialogs,?ExtCtrls,?StdCtrls; ??
9. type ??
10. ??TfrmSplash?=?class(TForm) ??
11. ????Image1:?TImage; ??
12. ????LblStatus:?TLabel; ??
13. ??private ??
14. ????{?Private?declarations?} ??
15. ????FParam:Pointer; ??
16. ??public ??
17. ????{?Public?declarations?} ??
18. ????class?function?Execute(AParam:Pointer):Boolean; ??
19. ????procedure?SetStatusText(Value:?string); ??
20. ??published ??
21. ????property?StatusText?:?string?write?SetStatusText; ??
22. ??end; ??
24. var ??
25. ??SplashForm:?TfrmSplash; ??
27. implementation ??
29. {$R?\*.dfm} ??
31. {?TfrmSplash?} ??
33. class?function?TfrmSplash.Execute(AParam:Pointer):?Boolean; ??
34. begin ??
35. ??with?TfrmSplash.Create(nil)?do ??
36. ??try ??
37. ????FParam?:=?AParam; ??
38. ????Result?:=?ShowModal?=?mrOk; ??
39. ??finally ??
40. ????Free; ??
41. ??end; ??
42. end; ??
44. procedure?TfrmSplash.SetStatusText(Value:?string); ??
45. begin ??
46. ??LblStatus.Caption?:=?Value; ??
47. ??Update;??//這句非常重要,不加的話,界面會阻塞,文字也就不會更新顯示 ??
48. ??Sleep(1000);?//這句根據自己實際情況來調整,主要是怕閃屏太快關閉,達不到效果 ??
49. end; ??
52. end.??
3\. 在項目的.dpr文件中加入如下代碼:
Delphi代碼[](http://peirenlei.iteye.com/blog/521581# "復制代碼")?
1. begin ??
3. ??Application.Initialize; ??
5. ??SplashForm?:=?TfrmSplash.Create(Application); ??
6. ??SplashForm.Show; ??
7. ??SplashForm.Update; ??
9. ??SplashForm.StatusText?:=?'準備啟動...'; ??
10. ??SplashForm.Update; ??
12. ??Application.CreateForm(TDM,?DM); ??
13. ??Application.CreateForm(TfrmMain,?frmMain); ??
15. ??SplashForm.Hide; ??
16. ??SplashForm.Free; ??
18. ??Application.Run; ??
19. end.??
4.這一步就是主窗體加載數據的時候,邊加載邊更新閃屏的進度文字了:
Delphi代碼[](http://peirenlei.iteye.com/blog/521581# "復制代碼")?
1. procedure?TfrmMain.FormCreate(Sender:?TObject); ??
2. begin ??
4. ??with?SplashForm?do ??
5. ??try ??
6. ????StatusText?:=?('開始初始化內存...'); ??
7. ????FCacheHash?:=?TStringHashMap.Create(CaseInsensitiveTraits,?255); ??
8. ????FCurrentClients?:=?TList.Create; ??
9. ????//VST.NodeDataSize?:=?SizeOf(TTagCustomListItem); ??
10. ????//VST.RootNodeCount?:=?2; ??
11. ????VST.NodeDataSize?:=?SizeOf(TMyTreeNodeDate); ??
12. ????StatusText?:=('初始化內存完成'); ??
14. ????StatusText?:=('開始加載客戶端列表...'); ??
15. ????BuildGroupTree; ??
16. ????StatusText?:=('加載客戶端列表完成'); ??
18. ????StatusText?:=('開始加載分組信息...'); ??
19. ????AddELVDefaultGroup; ??
20. ????StatusText?:=('開始初始化內存'); ??
22. ????StatusText?:=('開始初始化數據...'); ??
23. ????G\_DefNetImpl?:=?TDefNetImpl.Create(); ??
24. ????G\_DefNetImpl.RegisterObserver(Self); ??
25. ????StatusText?:=('全部數據加載完畢,程序即將啟動...'); ??
27. ??finally ??
29. ??end; ??
32. end;??
收功,試著運行一下吧,一個漂亮的splash誕生了.
- 1.制作Android Splash啟動界面
- 2.delphi之完美Splash方案
- 3. Android實例-解決虛擬鍵盤遮擋問題
- 0.Android開發小技巧
- 設 置 您 的 開 發 環 境 Windows PC(Android)
- Delphi XE控件
- 手機屏幕自適應程序問題
- 手勢操作
- delphi xeandroid對硬件操作
- Datasnap
- Delphi XE 10 跨平臺三層數據庫應用教程
- 開發數據庫三層應用的DataSnap
- ListView
- delphi xe10之控件 listview 的強大功能
- FMX.TListView的基本用法
- 初探ListView 的使用方法
- Delphi 常用控件之TlistView總結
- ListView基本用法大全
- android實現透明度可以調整的對話框
- android 獲取網絡狀態
- FMXUI
- FMXUI - ListView用法簡介