1. 程式人生 > 其它 >為Android做一個ShowModal視窗

為Android做一個ShowModal視窗

大家知道,用Delphi實現一個Form,並用ShowModal顯示出來,是非阻塞的,如果我們需要類似阻塞的效果,該如何實現呢?

1.先建一個Form,跟通常的情況一樣。

2.為Form實現具體的內容,這按你的需要了。

3.在視窗的單元中實現一個方法,用來顯示這個視窗:

implementation

{$R *.fmx}
//呼叫方法:
//   ShowPrivacyForm(
//    procedure(AResult: TModalResult)
//    begin
//
//    end);

var
  PrivacyForm: TPrivacyForm;//宣告一個私有變數

procedure
ShowPrivacyForm(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測試通過。