Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Uygulama Kapatırken Uyarı Vermesi
#1
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;
Cevapla
#2
(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...ya%C5%9Fam
https://www.delphican.com/showthread.php...6#pid21496
https://www.delphican.com/showthread.php...ya%C5%9Fam
https://medium.com/@pelingcinar/android-...219558e99b

İyi çalışmalar.
Cevapla
#3
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.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#4
(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.
Cevapla
#5
(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...ya%C5%9Fam
https://www.delphican.com/showthread.php...6#pid21496
https://www.delphican.com/showthread.php...ya%C5%9Fam
https://medium.com/@pelingcinar/android-...219558e99b

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


Ek Dosyalar Resimler
       
Cevapla
#6
(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...ya%C5%9Fam
https://www.delphican.com/showthread.php...6#pid21496
https://www.delphican.com/showthread.php...ya%C5%9Fam
https://medium.com/@pelingcinar/android-...219558e99b

İ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.
Cevapla
#7
(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;
Cevapla
#8
(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!
Ne ekersen onu biçersin!  Idea
Cevapla
#9
(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
.............
............
........

Cevapla
#10
(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.


Ek Dosyalar Resimler
   
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android Uygulama İkonu ARM 2 400 11-11-2025, Saat: 12:15
Son Yorum: ARM
  Apple Store'a Uygulama Yükleyebilen Arkadaşlarla Yardımlaşma... Jakarta2 23 3.984 04-10-2025, Saat: 16:51
Son Yorum: tavsanlili
  google play ve apple storede ücretli uygulama yayınlamak barissagir 4 821 15-09-2025, Saat: 15:03
Son Yorum: barissagir
  Uygulama üzerinden Wifi Bağlanma ? nurah 4 1.043 28-08-2025, Saat: 10:50
Son Yorum: nurah
  IOS Uygulama Yayınlama Sorunu emrahozten 2 714 11-06-2025, Saat: 21:00
Son Yorum: hakan_cng



Konuyu Okuyanlar: 2 Ziyaretçi