Delphi Can
Uygulama Kapatırken Uyarı Vermesi - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Uygulama Kapatırken Uyarı Vermesi (/showthread.php?tid=5959)

Sayfalar: 1 2


Uygulama Kapatırken Uyarı Vermesi - OmerAsaf - 01-05-2021

Merhabalar,

android uygulamamda program çıkışında uyarı verdirmek istiyorum. aşağıdaki kod windows da sorunsuz çalışıyor. fakat android de uyarı sormuyor bile. 

nerede yanlış yapıyorum veya bu events mi yanlış bu konuda bilgi verebilir misiniz.  

procedure TFormAna.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
 msg: String;
begin
 msg := 'Programdan Çıkmak İstiyor Musunuz?';

 if MessageDlg(msg, TMsgDlgType.mtConfirmation,
   [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrNo then
   CanClose := False
 else
   CanClose := True;

end;



Cvp: Uygulama Kapatırken Uyarı Vermesi - 41linea41 - 01-05-2021

(01-05-2021, Saat: 00:16)OmerAsaf Adlı Kullanıcıdan Alıntı: Merhabalar,

android uygulamamda program çıkışında uyarı verdirmek istiyorum. aşağıdaki kod windows da sorunsuz çalışıyor. fakat android de uyarı sormuyor bile. 

nerede yanlış yapıyorum veya bu events mi yanlış bu konuda bilgi verebilir misiniz.  

procedure TFormAna.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
 msg: String;
begin
 msg := 'Programdan Çıkmak İstiyor Musunuz?';

 if MessageDlg(msg, TMsgDlgType.mtConfirmation,
   [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrNo then
   CanClose := False
 else
   CanClose := True;

end;

İstediğiniz Mobil Uygulama yaşam döngüsüne uygun görünmüyor.

https://www.delphican.com/showthread.php?tid=5425&highlight=ya%C5%9Fam
https://www.delphican.com/showthread.php?tid=2796&pid=21496#pid21496
https://www.delphican.com/showthread.php?tid=3018&highlight=ya%C5%9Fam
https://medium.com/@pelingcinar/android-activity-life-cycle-aktivite-ya%C5%9Fam-d%C3%B6ng%C3%BCs%C3%BC-dc219558e99b

İyi çalışmalar.


Uygulama Kapatırken Uyarı Vermesi - mcuyan - 01-05-2021

Merhabalar.
Windows ve Mobil işletim sistemlerinin çalşma şekli birbiriniden farklıdır. Örneğin: Windows da İşlemler sırası ile yapılır, Hatta bir diğer işleme geçmesi için diğer işlemin bitmesi beklenir. Fakat Mobil de işler böyle değil. Komut satırları tek tek çalışır. Bir öncekinin çalışmasının bitmesi beklenmez diğerine geçmesi için.

Sizin kullanımınız Windows için geçerli Fakat mobil de:



MessageDlg('Silmek İstediğinizden Eminm isiniz? ?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
     procedure(const AResult: TModalResult)
     begin
       case AResult of
         mrYES:
           xxxxxxxxxxxx;
         END;
         mrNo:
           BEGIN yyyyyyyyyyy;
       END;
     end;
   end)

Şeklinde kullanılır.


Cvp: Uygulama Kapatırken Uyarı Vermesi - 41linea41 - 01-05-2021

(01-05-2021, Saat: 13:58)mcuyan Adlı Kullanıcıdan Alıntı: Merhabalar.
Windows ve Mobil işletim sistemlerinin çalşma şekli birbiriniden farklıdır. Örneğin: Windows da İşlemler sırası ile yapılır, Hatta bir diğer işleme geçmesi için diğer işlemin bitmesi beklenir. Fakat Mobil de işler böyle değil. Komut satırları tek tek çalışır. Bir öncekinin çalışmasının bitmesi beklenmez diğerine geçmesi için.

Sizin kullanımınız Windows için geçerli Fakat mobil de:



MessageDlg('Silmek İstediğinizden Eminm isiniz? ?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
     procedure(const AResult: TModalResult)
     begin
       case AResult of
         mrYES:
           xxxxxxxxxxxx;
         END;
         mrNo:
           BEGIN yyyyyyyyyyy;
       END;
     end;
   end)

Şeklinde kullanılır.
Bu şekilde kodlama yapılsa bil bu kod Formun onClose olayında çalışacak mı?
@OmerAsaf 'ın yapmaya çalıştığı onClose da kodu çalıştırmak ama bu mümkün olmayacaktır diye düşünüyorum.Yanılıyor muyum?

İyi çalışmalar.


Cvp: Uygulama Kapatırken Uyarı Vermesi - OmerAsaf - 01-05-2021

(01-05-2021, Saat: 11:10)41linea41 Adlı Kullanıcıdan Alıntı:
(01-05-2021, Saat: 00:16)OmerAsaf Adlı Kullanıcıdan Alıntı: Merhabalar,

android uygulamamda program çıkışında uyarı verdirmek istiyorum. aşağıdaki kod windows da sorunsuz çalışıyor. fakat android de uyarı sormuyor bile. 

nerede yanlış yapıyorum veya bu events mi yanlış bu konuda bilgi verebilir misiniz.  

procedure TFormAna.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
 msg: String;
begin
 msg := 'Programdan Çıkmak İstiyor Musunuz?';

 if MessageDlg(msg, TMsgDlgType.mtConfirmation,
   [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrNo then
   CanClose := False
 else
   CanClose := True;

end;

İstediğiniz Mobil Uygulama yaşam döngüsüne uygun görünmüyor.

https://www.delphican.com/showthread.php?tid=5425&highlight=ya%C5%9Fam
https://www.delphican.com/showthread.php?tid=2796&pid=21496#pid21496
https://www.delphican.com/showthread.php?tid=3018&highlight=ya%C5%9Fam
https://medium.com/@pelingcinar/android-activity-life-cycle-aktivite-ya%C5%9Fam-d%C3%B6ng%C3%BCs%C3%BC-dc219558e99b

İyi çalışmalar.


Merhaba Arkadaşlar,

Öncelikle Cevap için teşekkürler.

41linea41 Önerdiği gibi;
Android uygulamaya yaşam düngüsü kodlarını ekledim. programı açınca - arka plana alınca - arka planda çağırınca olayları görebiliyorum. 
fakat kullanıcıya uyarı verdirme kodunu nerede yazacağımı tam kestiremedim. 

mcuyan 
önerdiği kodu formun onclose koduna yazdım. Fakat işimi görmedi. Geri tuşuna basında uygulama arka plana geçiyor arka plandan çağırınca uyarı yazısı geliyor. Ekran Resimleri Aşağıdadır.

 MessageDlg('Programdan Çıkmak İstiyor Musunuz.?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
    procedure(const AResult: TModalResult)
    begin
      case AResult of
        mrYES:
           begin
            Application.Terminate;
           END;
        mrNo:
          BEGIN
            ;
          END;
      END;
  end);



Cvp: Uygulama Kapatırken Uyarı Vermesi - 41linea41 - 01-05-2021

(01-05-2021, Saat: 15:48)OmerAsaf Adlı Kullanıcıdan Alıntı:
(01-05-2021, Saat: 11:10)41linea41 Adlı Kullanıcıdan Alıntı: İstediğiniz Mobil Uygulama yaşam döngüsüne uygun görünmüyor.

https://www.delphican.com/showthread.php?tid=5425&highlight=ya%C5%9Fam
https://www.delphican.com/showthread.php?tid=2796&pid=21496#pid21496
https://www.delphican.com/showthread.php?tid=3018&highlight=ya%C5%9Fam
https://medium.com/@pelingcinar/android-activity-life-cycle-aktivite-ya%C5%9Fam-d%C3%B6ng%C3%BCs%C3%BC-dc219558e99b

İyi çalışmalar.


Merhaba Arkadaşlar,

Öncelikle Cevap için teşekkürler.

41linea41 Önerdiği gibi;
Android uygulamaya yaşam düngüsü kodlarını ekledim. programı açınca - arka plana alınca - arka planda çağırınca olayları görebiliyorum. 
fakat kullanıcıya uyarı verdirme kodunu nerede yazacağımı tam kestiremedim. 

mcuyan 
önerdiği kodu formun onclose koduna yazdım. Fakat işimi görmedi. Geri tuşuna basında uygulama arka plana geçiyor arka plandan çağırınca uyarı yazısı geliyor. Ekran Resimleri Aşağıdadır.

 MessageDlg('Programdan Çıkmak İstiyor Musunuz.?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
    procedure(const AResult: TModalResult)
    begin
      case AResult of
        mrYES:
           begin
            Application.Terminate;
           END;
        mrNo:
          BEGIN
            ;
          END;
      END;
  end);

Mobil uygulamalar da uygulamanın yaşamına siz son veremiyorsunuz. Bu sebeple OnClose event'ını çalıştıramıyorsunuz.
Yaşam döngüsü içerisindeki diğer olaylardan birini seçip bu kodu çalıştırmalısınız.

Ya da bu kontrol işleminden vazgeçmeli yerine alternatifler düşünmelisiniz.


Cvp: Uygulama Kapatırken Uyarı Vermesi - OmerAsaf - 01-05-2021

(01-05-2021, Saat: 15:54)41linea41 Adlı Kullanıcıdan Alıntı:
(01-05-2021, Saat: 15:48)OmerAsaf Adlı Kullanıcıdan Alıntı: Merhaba Arkadaşlar,

Öncelikle Cevap için teşekkürler.

41linea41 Önerdiği gibi;
Android uygulamaya yaşam düngüsü kodlarını ekledim. programı açınca - arka plana alınca - arka planda çağırınca olayları görebiliyorum. 
fakat kullanıcıya uyarı verdirme kodunu nerede yazacağımı tam kestiremedim. 

mcuyan 
önerdiği kodu formun onclose koduna yazdım. Fakat işimi görmedi. Geri tuşuna basında uygulama arka plana geçiyor arka plandan çağırınca uyarı yazısı geliyor. Ekran Resimleri Aşağıdadır.

 MessageDlg('Programdan Çıkmak İstiyor Musunuz.?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
    procedure(const AResult: TModalResult)
    begin
      case AResult of
        mrYES:
           begin
            Application.Terminate;
           END;
        mrNo:
          BEGIN
            ;
          END;
      END;
  end);

Mobil uygulamalar da uygulamanın yaşamına siz son veremiyorsunuz. Bu sebeple OnClose event'ını çalıştıramıyorsunuz.
Yaşam döngüsü içerisindeki diğer olaylardan birini seçip bu kodu çalıştırmalısınız.

Ya da bu kontrol işleminden vazgeçmeli yerine alternatifler düşünmelisiniz.

Merhabalar,

Yaşam döngüsü içerisindeki WillBecomeInactive olayını seçtim. Fakat Geri tuşuna basınca uyarı yazıcı çıkmadı kendini arka plana attı. 
kodu yanlış yere mi yazdım yoksa bu şekilde değil mi?
Yardımcı olur musunuz.

function TFormAna.MobilOlaylar(Olaylar:TApplicationEvent;Sender:Tobject): Boolean;
Begin
  case Olaylar of
    TApplicationEvent.FinishedLaunching:
        Bilgi('FinishedLaunching: Uygulama başlatıldı');
    TApplicationEvent.BecameActive:
        Bilgi('BecameActive: Aktif durumda');
    TApplicationEvent.WillBecomeInactive:
        Begin
           Bilgi('WillBecomeInactive: Arkaplana alınacak');
                 MessageDlg('Programdan Çıkmak İstiyor Musunuz.?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
                  procedure(const AResult: TModalResult)
                  begin
                    case AResult of
                      mrYES:
                         begin
                          Application.Terminate;
                         END;
                      mrNo:
                        BEGIN
                          ;
                        END;
                    END;
                end);
        End;

    TApplicationEvent.EnteredBackground:
        Bilgi('EnteredBackground: Arkaplanda');
    TApplicationEvent.WillBecomeForeground:
        Bilgi('WillBecomeForeground: Ön plana alınacak');
    TApplicationEvent.WillTerminate:
        Bilgi('WillTerminate: Sonlandırıldı');
    TApplicationEvent.LowMemory:
        Bilgi('Düşük bellek');
    TApplicationEvent.TimeChange:
        Bilgi('TimeChange: Tarih zaman değişti');
    TApplicationEvent.OpenURL:
        Bilgi('OpenURL: URL yönlendirme yapıldı');
  end;
  Result := True;
End;



Cvp: Uygulama Kapatırken Uyarı Vermesi - tmrksmt - 01-05-2021

(01-05-2021, Saat: 16:43)OmerAsaf Adlı Kullanıcıdan Alıntı:
(01-05-2021, Saat: 15:54)41linea41 Adlı Kullanıcıdan Alıntı: Mobil uygulamalar da uygulamanın yaşamına siz son veremiyorsunuz. Bu sebeple OnClose event'ını çalıştıramıyorsunuz.
Yaşam döngüsü içerisindeki diğer olaylardan birini seçip bu kodu çalıştırmalısınız.

Ya da bu kontrol işleminden vazgeçmeli yerine alternatifler düşünmelisiniz.

Merhabalar,

Yaşam döngüsü içerisindeki WillBecomeInactive olayını seçtim. Fakat Geri tuşuna basınca uyarı yazıcı çıkmadı kendini arka plana attı. 
kodu yanlış yere mi yazdım yoksa bu şekilde değil mi?
Yardımcı olur musunuz.

function TFormAna.MobilOlaylar(Olaylar:TApplicationEvent;Sender:Tobject): Boolean;
Begin
  case Olaylar of
    TApplicationEvent.FinishedLaunching:
        Bilgi('FinishedLaunching: Uygulama başlatıldı');
    TApplicationEvent.BecameActive:
        Bilgi('BecameActive: Aktif durumda');
    TApplicationEvent.WillBecomeInactive:
        Begin
           Bilgi('WillBecomeInactive: Arkaplana alınacak');
                 MessageDlg('Programdan Çıkmak İstiyor Musunuz.?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
                  procedure(const AResult: TModalResult)
                  begin
                    case AResult of
                      mrYES:
                         begin
                          Application.Terminate;
                         END;
                      mrNo:
                        BEGIN
                          ;
                        END;
                    END;
                end);
        End;

    TApplicationEvent.EnteredBackground:
        Bilgi('EnteredBackground: Arkaplanda');
    TApplicationEvent.WillBecomeForeground:
        Bilgi('WillBecomeForeground: Ön plana alınacak');
    TApplicationEvent.WillTerminate:
        Bilgi('WillTerminate: Sonlandırıldı');
    TApplicationEvent.LowMemory:
        Bilgi('Düşük bellek');
    TApplicationEvent.TimeChange:
        Bilgi('TimeChange: Tarih zaman değişti');
    TApplicationEvent.OpenURL:
        Bilgi('OpenURL: URL yönlendirme yapıldı');
  end;
  Result := True;
End;

Bilmiyorum size ne ölçüde referans olabilir ama ben Android uygulamalarımda aşağıdaki gibi kullanıyorum;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
 Shift: TShiftState);

var
 FService : IFMXVirtualKeyboardService;
begin
 if Key = vkHardwareBack then
 begin
   TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
   if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then
   begin
     // Back button pressed, keyboard visible, so do nothing...
   end else
   begin
     Key := 0;
     // Back button pressed, keyboard not visible or not supported on this platform, lets exit the app...
     MessageDlg('Exit Application?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1, OnCloseDialog);
   end;
 end;
end;

NOT : Uses'e FMX.VirtualKeyboard eklemeyi unutmayın!


Cvp: Uygulama Kapatırken Uyarı Vermesi - 41linea41 - 01-05-2021

(01-05-2021, Saat: 16:43)OmerAsaf Adlı Kullanıcıdan Alıntı:
(01-05-2021, Saat: 15:54)41linea41 Adlı Kullanıcıdan Alıntı: Mobil uygulamalar da uygulamanın yaşamına siz son veremiyorsunuz. Bu sebeple OnClose event'ını çalıştıramıyorsunuz.
Yaşam döngüsü içerisindeki diğer olaylardan birini seçip bu kodu çalıştırmalısınız.

Ya da bu kontrol işleminden vazgeçmeli yerine alternatifler düşünmelisiniz.

Merhabalar,

Yaşam döngüsü içerisindeki WillBecomeInactive olayını seçtim. Fakat Geri tuşuna basınca uyarı yazıcı çıkmadı kendini arka plana attı. 
kodu yanlış yere mi yazdım yoksa bu şekilde değil mi?
Yardımcı olur musunuz.

function TFormAna.MobilOlaylar(Olaylar:TApplicationEvent;Sender:Tobject): Boolean;
Begin
  case Olaylar of
    TApplicationEvent.FinishedLaunching:
        Bilgi('FinishedLaunching: Uygulama başlatıldı');
    TApplicationEvent.BecameActive:
        Bilgi('BecameActive: Aktif durumda');
    TApplicationEvent.WillBecomeInactive:
        Begin
           Bilgi('WillBecomeInactive: Arkaplana alınacak');
                 MessageDlg('Programdan Çıkmak İstiyor Musunuz.?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
                  procedure(const AResult: TModalResult)
                  begin
                    case AResult of
                      mrYES:
                         begin
                          Application.Terminate;
                         END;
                      mrNo:
                        BEGIN
                          ;
                        END;
                    END;
                end);
        End;

    TApplicationEvent.EnteredBackground:
        Bilgi('EnteredBackground: Arkaplanda');
    TApplicationEvent.WillBecomeForeground:
        Bilgi('WillBecomeForeground: Ön plana alınacak');
    TApplicationEvent.WillTerminate:
        Bilgi('WillTerminate: Sonlandırıldı');
    TApplicationEvent.LowMemory:
        Bilgi('Düşük bellek');
    TApplicationEvent.TimeChange:
        Bilgi('TimeChange: Tarih zaman değişti');
    TApplicationEvent.OpenURL:
        Bilgi('OpenURL: URL yönlendirme yapıldı');
  end;
  Result := True;
End;

Ben de bu kodlamayı denedim ama sonuç alamadım. Ben şu şekilde kullanıyorum:
procedure TfrmAna.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
 Shift: TShiftState);

begin   
if (Key = vkHardwareBack)
   //Windows Escape
   or (Key = vkEscape) then
.............
............
........




Cvp: Uygulama Kapatırken Uyarı Vermesi - OmerAsaf - 01-05-2021

(01-05-2021, Saat: 17:04)tmrksmt Adlı Kullanıcıdan Alıntı:
(01-05-2021, Saat: 16:43)OmerAsaf Adlı Kullanıcıdan Alıntı: Merhabalar,

Yaşam döngüsü içerisindeki WillBecomeInactive olayını seçtim. Fakat Geri tuşuna basınca uyarı yazıcı çıkmadı kendini arka plana attı. 
kodu yanlış yere mi yazdım yoksa bu şekilde değil mi?
Yardımcı olur musunuz.

function TFormAna.MobilOlaylar(Olaylar:TApplicationEvent;Sender:Tobject): Boolean;
Begin
  case Olaylar of
    TApplicationEvent.FinishedLaunching:
        Bilgi('FinishedLaunching: Uygulama başlatıldı');
    TApplicationEvent.BecameActive:
        Bilgi('BecameActive: Aktif durumda');
    TApplicationEvent.WillBecomeInactive:
        Begin
           Bilgi('WillBecomeInactive: Arkaplana alınacak');
                 MessageDlg('Programdan Çıkmak İstiyor Musunuz.?', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0,
                  procedure(const AResult: TModalResult)
                  begin
                    case AResult of
                      mrYES:
                         begin
                          Application.Terminate;
                         END;
                      mrNo:
                        BEGIN
                          ;
                        END;
                    END;
                end);
        End;

    TApplicationEvent.EnteredBackground:
        Bilgi('EnteredBackground: Arkaplanda');
    TApplicationEvent.WillBecomeForeground:
        Bilgi('WillBecomeForeground: Ön plana alınacak');
    TApplicationEvent.WillTerminate:
        Bilgi('WillTerminate: Sonlandırıldı');
    TApplicationEvent.LowMemory:
        Bilgi('Düşük bellek');
    TApplicationEvent.TimeChange:
        Bilgi('TimeChange: Tarih zaman değişti');
    TApplicationEvent.OpenURL:
        Bilgi('OpenURL: URL yönlendirme yapıldı');
  end;
  Result := True;
End;

Bilmiyorum size ne ölçüde referans olabilir ama ben Android uygulamalarımda aşağıdaki gibi kullanıyorum;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
 Shift: TShiftState);

var
 FService : IFMXVirtualKeyboardService;
begin
 if Key = vkHardwareBack then
 begin
   TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
   if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then
   begin
     // Back button pressed, keyboard visible, so do nothing...
   end else
   begin
     Key := 0;
     // Back button pressed, keyboard not visible or not supported on this platform, lets exit the app...
     MessageDlg('Exit Application?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1, OnCloseDialog);
   end;
 end;
end;

NOT : Uses'e FMX.VirtualKeyboard eklemeyi unutmayın!

Merhabalar,

OnCloseDialog cümlesine takıldı. Bu nedir? Bilgi verir misiniz.