This is the only code that changes between the first and second code snippets:
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; end);
第一个代码片段:典型的代码调用的ShowModal
procedure THeaderFooterForm.btnPickClick(Sender: TObject); var dlg: TForm1; begin dlg := TForm1.Create(nil); try // select current value, if avaialble in the list dlg.ListBox1.ItemIndex := dlg.ListBox1.Items.IndexOf(edit1.Text); if dlg.ShowModal = 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]; finally dlg.Free; end; end;
伪代码典型的ShowModal代码片段解读
这里是一个描述每个此过程的一部分:
声明局部变量 dlg: TForm1; 创建表格的形式和初始化成员 dlg := TForm1.Create(nil); dlg.ListBox1.ItemIndex := dlg.ListBox1.Items.IndexOf(edit1.Text); 显示的形式模态 if dlg.ShowModal = mrOK then 检查用户的结果和处理数据 if dlg.ListBox1.ItemIndex >= 0 then edit1.Text := dlg.ListBox1.Items [dlg.ListBox1.ItemIndex]; 释放表单 dlg.Free;
第二个代码片段:作为一个匿名的方式在所有平台上调用的ShowModal
随着移动平台,你应该改变这种代码,悦目,让所有支持的目标平台上工作的ShowModal。
procedure THeaderFooterForm.btnPickClick(Sender: TObject); var dlg: TForm1; begin dlg := TForm1.Create(nil); // select current value, if available 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; end); end;
匿名方法的ShowModal代码片段的伪代码解读
这里是一个描述发生了什么(做同样的事情,第一个代码段)在第二个代码片段:
Declare local variables dlg: TForm1; Create form and initialize member in the form dlg := TForm1.Create(nil); dlg.ListBox1.ItemIndex := dlg.ListBox1.Items.IndexOf(edit1.Text); Show the form modal dlg.ShowModal(procedure(ModalResult: TModalResult) Check the user's result and process the data if ModalResult = mrOK then if dlg.ListBox1.ItemIndex >= 0 then edit1.Text := dlg.ListBox1.Items [dlg.ListBox1.ItemIndex]; Free the form dlg.DisposeOf;