دلفي-اكس اي 5 تطوير أندرويد.ما هي أفضل طريقة لتحرير الأشكال غير المشروطة?

StackOverflow https://stackoverflow.com//questions/20015519

سؤال

في دلفي ويندوز لا توجد مشكلة لتحرير (النموذج.مجانا) مغلقة الثانوية ديناميكالي-خلق شكل لأن أين هو" شومودال " الأسلوب.ولكن دلفي لالروبوت لا يدعم النموذج.شومودال ، وعلينا أن نستخدم طريقة العرض.ولكن أنا أحسب ما عندما أغلق (شكل.إغلاق) شكل ثانوي فإنه لا يزال في الذاكرة وحتى تشغيل رمز أونريزيزي الحدث (???).ما هي أفضل طريقة لتحرير النماذج في مكالمة غير مشروطة?

وبعبارة أخرى:كيف يمكنني إغلاق نموذج من معالج الحدث أونكليك على هذا النموذج, والتأكد من أن ديستروكتور النموذج يعمل?

هل كانت مفيدة؟

المحلول

تحديث

انظر الملاحظة الهامة أدناه.


في إكس إي 5 لالروبوت هناك إمكانية لإظهار نموذج مع نتائج مشروط ، و مثقلة ShowModal الإجراء باستخدام طريقة مجهولة:

الإجراء شومودال(كونست ريسولتبروك:تبروك);الزائد;

يمكنك العثور عليها موصوفة في هذه المقالة بواسطة ماركو كانتو, Delphi XE5 Anonymous ShowModal and Android.

هنا هو المثال كيفية استخدام هذا الإجراء:

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);

لاحظ أن dlg.DisposeOf; سيجبر النموذج على التدمير ، متجاوزا المناولة التلقائية للقوس.

يمكنك أيضا العثور على وصف في الوثائق, Using Modal Dialog Boxes in Mobile Apps و هنا, ShowModal Dialogs in FireMonkey Mobile Apps.


كما وجدت من قبل الآخرين, http://www.malcolmgroves.com/blog/?p=1585, ، داعيا DisposeOf داخل الأسلوب المجهول خاطئ لأن الإطار المجهول يجب أن يكون قادرا على التعامل مع مودالريسولت من كائن صالح.استخدم هذا النمط بدلا من ذلك لتحرير مربع الحوار المشروط, تحرير مربع الحوار المشروط الخاص بك.

procedure TModalForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caFree;
end;

نصائح أخرى

لا تنسى تعيين في ObjectInspector

giveacodicetagpre.

أو في

giveacodicetagpre.

للمثال dlg.showmodal أعلاه!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top