Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MessageDlg Evet/Hayır Yazdırma
#21
Merhabalar @Fesih ARSLAN bey, @hayalyilmaz43 bey,
Bildirdiğiniz üzere özel pencere - frame - timage tasarlama konusunda uzun süre uğraştım. Fakat projede çok fazla if'li ileti olduğu için, bir türlü tam olarak senkron olarak cevap beklemesi gereken yerlerde durduramadım. 
Aşağıda alternatif bir yol olarak (WindowsClick'te senkron olarak çalışan kodun, asenkron olarak değiştirilmiş hali olan) AndroidClick kısmını denedim. İç içe MessageDialog'lar, göze garip gelse de Android'de senkron olarak çalışıyor görünüyor. Projeyi Windows'tan Android'e aktarmadan önce görüşünüzü bildirebilir misiniz, sizce de bu kod uygun mu? 

unit Unit1;

interface

uses
 System.SysUtils, System.Types, System.UITypes, System.Classes,
 System.Variants,
 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
 FMX.ScrollBox, FMX.Memo, FMX.Controls.Presentation, FMX.StdCtrls,
 FMX.DialogService;

type
 TForm1 = class(TForm)
   Windows: TButton;
   Android: TButton;
   Memo1: TMemo;
   procedure WindowsClick(Sender: TObject);
   procedure AndroidClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.WindowsClick(Sender: TObject);
var
 i: integer;
 netice: TModalResult;

 function Teblig(konu: string): integer;
 begin
   TDialogService.PreferredMode := TDialogService.TPreferredMode.Platform;
   FMX.DialogService.TDialogService.MessageDialog(konu,
     TMsgDlgType.mtInformation, [TMsgDlgBtn.mbNo, TMsgDlgBtn.mbYes],
     TMsgDlgBtn.mbNo, 0,
     procedure(const AResult: TModalResult)
     begin
       if (AResult = mrYes) then
       begin
         netice := mrYes;
       end;
       if (AResult = mrNo) then
       begin
         netice := mrNo;
       end;
     end);
   result := netice;
 end;

begin
 i := 0;
 Memo1.Text := '1. başlangıç - i: ' + inttostr(i);

 if (Teblig('2. bölümü çalıştırmak istiyor musunuz?') = mrYes) then
 begin
   inc(i);
   Memo1.Lines.Add('2. bölüm - i: ' + inttostr(i));
 end;

 if (Teblig('3. bölümü çalıştırmak istiyor musunuz?') = mrYes) then
 begin
   inc(i);
   Memo1.Lines.Add('3. bölüm - i: ' + inttostr(i));
 end;

 if (Teblig('Devam etmek istiyor musunuz?') <> mrYes) then
   exit;

 inc(i);
 Memo1.Lines.Add('4. son - i: ' + inttostr(i));
end;



procedure TForm1.AndroidClick(Sender: TObject);
var
 i: integer;

begin
 i := 0;
 Memo1.Text := '1. başlangıç - i: ' + inttostr(i);

 TDialogService.PreferredMode := TDialogService.TPreferredMode.Platform;
 FMX.DialogService.TDialogService.MessageDialog
   (('2. bölümü çalıştırmak istiyor musunuz?'), TMsgDlgType.mtInformation,
   [TMsgDlgBtn.mbNo, TMsgDlgBtn.mbYes], TMsgDlgBtn.mbNo, 0,
   procedure(const AResult: TModalResult)

     procedure Bolum3;
   begin
     TDialogService.PreferredMode := TDialogService.TPreferredMode.Platform;
     FMX.DialogService.TDialogService.MessageDialog
       (('3. bölümü çalıştırmak istiyor musunuz?'), TMsgDlgType.mtConfirmation,
       [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbNo, 0,
       procedure(const AResult: TModalResult)

         procedure Bolum4;
       begin
         TDialogService.PreferredMode :=
           TDialogService.TPreferredMode.Platform;
         FMX.DialogService.TDialogService.MessageDialog
           ('Devam etmek istiyor musunuz?', TMsgDlgType.mtInformation,
           [TMsgDlgBtn.mbNo, TMsgDlgBtn.mbYes], TMsgDlgBtn.mbNo, 0,
           procedure(const AResult: TModalResult)
           begin
             if (AResult = mrYes) then
             begin
               inc(i);
               Memo1.Lines.Add('4. son - i: ' + inttostr(i));
             end;
             if (AResult = mrNo) then
             begin
               exit;
             end;
           end);
       end;

       begin
         if (AResult = mrYes) then
         begin
           inc(i);
           Memo1.Lines.Add('3. bölüm - i: ' + inttostr(i));
           Bolum4;
         end;
         if (AResult = mrNo) then
         begin
           Bolum4;
         end;
       end);
   end;

   begin
     if (AResult = mrYes) then
     begin
       inc(i);
       Memo1.Lines.Add('2. bölüm - i: ' + inttostr(i));
       Bolum3;
     end;
     if (AResult = mrNo) then
     begin
       Bolum3;
     end;
   end);
end;

end.
saygılar mustafa ֍zgün 
Cevapla
#22
bu mesaj kutularında özellikle android tarafında, mesaj kutusunun dışına yani boş alana tıklandığında, mesaj kutusu ekrandan yok oluyor ve siz hiç bir geri bildirim alamıyorsunuz, yani aresult tetiklenmiyor, bunu unutmamak lasım.

ben olsam bir frame tasarlardım bu frame in içine bir layout u client olarak arka da duracak şekilde eklerdim veya rectanglenin fill colorundan siyahı seçip hafif transparent likde vererek dialouğun açıldığında arka tarafa verdiği saydam siyahlığı sağlardım,
kullanıcı bu arka zemine tıkladığında onclickle kaçmak isteğini yakalardım,

yine ekranın ortasına center olarak bir trectangle kenarları radius lu ekran en boyuna göre boyutlandırır ve içine 2 button ve 1 label ile mesaj kutusunu yapardım. buttonların onclick inide, framedialog.show dan sonra,

formx1.framedialog.okbutton.onclick:= şeklinde kendi formumdan bir click evinte bağlardım, böylece button dil sorunu vs de kalmazdı, bu frame de her yeni form1 e eklediğinde kopyaları yaratıldığı için birbirleri ile çakışmazdı, onclickdede 2. 3. kez
metni değiştirterek gösterdim, ve tabiki form1 un hardware back tuşuna basılırsada frame i gizletirdim.

sizin kodunuzda uygundur.
Cevapla
#23
Merhaba @emozgun bey,
İstediğiniz sonucu veriyorsa, kurmuş olduğunuz mantık doğru demektir. 
Yalnızca iç içe yazdığınız her mesaj için PreferredMode'u defalarca set etmenize gerek yok. Bu özellik Class property olarak işaretlendiği için bir defa set etmeniz yeterli olacaktır.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#24
Kodun mantığı ve uygunluğu için verdiğiniz cevaplara çok teşekkür ederim @hayalyilmaz43 bey, @Fesih ARSLAN bey. PreferredMode kullanımına da dikkat edeceğim. Yalnız "boş alana tıklandığında, mesaj kutusu ekrandan yok oluyor" kısmını bilmiyordum. Çok gerekmedikçe messagedialog yerine, frame kullanacak şekilde projeyi değiştirmeye karar vardım. Çok büyük zaman kaybından kurtardınız, sağolasınız.
saygılar mustafa ֍zgün 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Mobil Uygulamada Yazdırma İşlemi Hk. seydigozegir@gmail.com 5 1.627 16-10-2019, Saat: 16:09
Son Yorum: seydigozegir@gmail.com
  Firemonkey MessageDlg Türkçeleştirmek narkotik 14 4.567 21-08-2019, Saat: 13:03
Son Yorum: SimaWB
  Andorid Pdf Oluştuma ve Yazdırma Hakkında glagher 1 908 03-08-2019, Saat: 18:08
Son Yorum: 3ddark



Konuyu Okuyanlar: 2 Ziyaretçi