Domanda

In Delfi per Windows non ci sono problemi a Free (Form.Free) Form Closed Dynamicaly Dynamicaly-creato modulo perché dov'è il metodo "showmodal".Ma Delphi per Android non supporta Form.ShowModal, e dobbiamo usare il metodo Mostra.Ma ho capito cosa quando chiudo (Form.Close) forma secondaria è ancora in memoria e persino eseguire il codice onResize Event (???).Qual è il modo migliore per liberare forme in chiamata non modale?

In altre parole: Come chiudere un modulo da un gestore di eventi onclick su quella forma e assicurarmi che il distruttore del modulo corre?

È stato utile?

Soluzione

Aggiornamento

Vedi nota importante qui sotto.


.

In XE5 per Android c'è la possibilità di mostrare un modulo con risultati modali, una procedura ShowModal sovraccaricata utilizzando un metodo anonimo:

.

Procedura Showmodal (Const Resultproc: TPROC); sovraccarico;

Puoi trovarlo descritto in questo articolo di Marco Cantu, Delphi XE5 Anonymous ShowModal and Android . .

Ecco l'esempio Come utilizzare questa procedura:

var
  dlg: TForm1;
begin
  dlg := TForm1.Create(nil);
  // select current value, if avaialble in the list
  dlg.ListBox1.ItemIndex := dlg.ListBox1.Items.IndexOf(Edit1.Text);
  dlg.ShowModal(
    procedure(ModalResult: TModalResult)
    begin
      if ModalResult = mrOK then
      // if OK was pressed and an item is selected, pick it
        if dlg.ListBox1.ItemIndex >= 0 then
          edit1.Text := dlg.ListBox1.Items [dlg.ListBox1.ItemIndex];
      dlg.DisposeOf;  // Wrong !!!, see note below
    end);
.

Nota che il dlg.DisposeOf; costringerà il modulo da distruggere, sovrascrivere la gestione automatica dell'arco.

Puoi anche trovare una descrizione nella documentazione, Using Modal Dialog Boxes in Mobile Apps e qui, ShowModal Dialogs in FireMonkey Mobile Apps .


.

Come trovato da altri, http://www.malcolmgroves.com/blog/?p= 1585 , chiamare DisposeOf all'interno del metodo anonimo è sbagliato perché il telaio anonimo deve essere in grado di gestire modalresult da un oggetto valido. Utilizzare questo modello invece per liberare la finestra di dialogo modale, Libera la finestra di dialogo Modal .

Altri suggerimenti

Non dimenticare di impostare nell'oggettoSpector

ModalResult = mrOK
.

o nel tuo

procedure TForm1.ExitButtonClick(Sender: TObject);
begin
   ModalResult := mrOK;
end;
.

per l'esempio dlg.showmodal sopra!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top