動(dòng)態(tài)網(wǎng)頁(yè)怎么制作長(zhǎng)沙百度快速優(yōu)化
大家知道,用Delphi實(shí)現(xiàn)一個(gè)Form,并用ShowModal顯示出來,在Android平臺(tái)是非阻塞的,即執(zhí)行了Form.ShowModal,代碼會(huì)繼續(xù)往下執(zhí)行而不是等待,這跟在Windows平臺(tái)是完全不一樣的。如果我們需要類似阻塞的效果,該如何實(shí)現(xiàn)呢?
1.先建一個(gè)Form,跟通常的情況一樣。
2.為Form實(shí)現(xiàn)具體的內(nèi)容,這按你的需要了。
3.在窗口的單元中實(shí)現(xiàn)一個(gè)方法,用來顯示這個(gè)窗口:
procedure ShowPrivacyForm(AFormResult: TProc<TModalResult>); implementation{$R *.fmx} //調(diào)用方法: // ShowPrivacyForm( // procedure(AResult: TModalResult) // begin // // end);varPrivacyForm: TPrivacyForm;//聲明一個(gè)私有變量procedure ShowPrivacyForm(AFormResult: TProc<TModalResult>); beginif not assigned(PrivacyForm) thenbeginPrivacyForm := TPrivacyForm.Create(Application);end;PrivacyForm.ShowModal(procedure(AResult: TModalResult)beginAFormResult(AResult);//這里執(zhí)行回調(diào)TTask.Run(procedurebeginTThread.Synchronize(nil,procedurebeginPrivacyForm.DisposeOf;//釋放這個(gè)窗口PrivacyForm := nil;end);end);end); end;
4.顯示這個(gè)窗口,首先引用Form所在的單元,然后調(diào)用顯示窗口的方法ShowPrivacyForm:
ShowPrivacyForm(procedure(AResult: TModalResult)beginif AResult=mrCancel thenbeginClose;endelsebegin//用戶點(diǎn)擊了確定接鈕 end;end);
5.細(xì)節(jié)處理,接管Android手機(jī)的返回鍵,當(dāng)用戶按返回鍵,相當(dāng)于點(diǎn)擊取消操作:
procedure TPrivacyForm.FormKeyUp(Sender: TObject; var Key: Word;var KeyChar: Char; Shift: TShiftState); beginif Key = vkHardwareBack thenself.ModalResult := mrCancel; end;
6.注意的一個(gè)小坑,看下面的代碼:
procedure TPrivacyForm.CCButton1Click(Sender: TObject); beginself.ModalResult := mrOk; //這句直接關(guān)閉窗口,不用再執(zhí)行Close方法 // Close; end;
原來我執(zhí)行了Close,發(fā)現(xiàn)窗口返回的值為mrCancel。在Windows平臺(tái)跟蹤發(fā)現(xiàn)原來是Close執(zhí)行后的結(jié)果,把這行注釋掉,執(zhí)行正常,原來Self.ModalResult:=mrOK這一句會(huì)自動(dòng)關(guān)閉窗口,下面的Close是多余的了。
好了,一個(gè)完美的ShowModal窗口實(shí)現(xiàn)了!
核心代碼引用專家的ChinaCock組件包中的Demo,這里表示感謝!
Delphi 11.3 測(cè)試通過。
?