為Android做一個ShowModal視窗
阿新 • • 發佈:2021-06-12
大家知道,用Delphi實現一個Form,並用ShowModal顯示出來,是非阻塞的,如果我們需要類似阻塞的效果,該如何實現呢?
1.先建一個Form,跟通常的情況一樣。
2.為Form實現具體的內容,這按你的需要了。
3.在視窗的單元中實現一個方法,用來顯示這個視窗:
implementation {$R *.fmx} //呼叫方法: // ShowPrivacyForm( // procedure(AResult: TModalResult) // begin // // end); var PrivacyForm: TPrivacyForm;//宣告一個私有變數 procedureShowPrivacyForm(AFormResult: TProc<TModalResult>); begin if not assigned(PrivacyForm) then begin PrivacyForm := TPrivacyForm.Create(Application); end; PrivacyForm.ShowModal( procedure(AResult: TModalResult) begin AFormResult(AResult);//這裡執行回撥 TTask.Run(procedure begin TThread.Synchronize(nil, procedure begin PrivacyForm.DisposeOf;//釋放這個視窗 PrivacyForm := nil; end); end); end); end;
4.顯示這個視窗,首先引用Form所在的單元,然後呼叫顯示視窗的方法ShowPrivacyForm:
ShowPrivacyForm( procedure(AResult: TModalResult) begin if AResult=mrCancel then begin Close; end else begin //使用者點選了確定接鈕 end; end);
5.細節處理,接管Android手機的返回鍵,當用戶按返回鍵,相當於點選取消操作:
procedure TPrivacyForm.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if Key = vkHardwareBack then self.ModalResult := mrCancel; end;
好了,一個完美的ShowModal視窗實現了!
核心程式碼引用專家的ChinaCock元件包中的Demo,這裡表示感謝!
Delphi 10.4.2測試通過。