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)
(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?
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);
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.
(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;
(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!
(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
.............
............
........
(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.