2016-03-24 36 views
-2

kaydetmeniz gerekir ??? Ben Delphi XE7 kullanmak ,bilgisayar sipariş almak kapatma, ben dosyaya liste kutusu içeriğini nasıl tasarruf edebilirsiniz dosyayı

Ben dosyayı kaydetmek yapmak, ve onunla bir sorunum yok!

ama bilgisayar kapatırken dosyayı kaydetmek istediğiniz.

güncelleme kodum ve Sorun: Projemi çalıştırma arka planda hem olaylar & işe doz değil OnDestroy OnClose olan

benim sorunum!

normalde "değil arka planda" proje çalışması, olay en iyi çalışıyor ise!

Ben arka plan sürecinde çalışan benim projem sorunumu, anlamaya, ben benim proje olaylar onClose ve onDestroy kesinlikle işe değil arka zemin sürecinde çalıştırmak için yaparsanız bu Application.MainFormOnTaskbar := False;Application.ShowMainForm := False; yapmak için bu satırları ekleyin

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
var 
str :TStringList; 
i : integer; 
begin 
    str := TStringList.Create; 
    for i := 0 to ListBox1.Count-1 do 
    str.Add(ListBox1.Items.Strings[i]); 

    try 
    str.SaveToFile('D:\test1.txt', TEncoding.UTF8); 
    finally 
    str.Free; 
    end; 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
var 
str :TStringList; 
i : integer; 
begin 
    str := TStringList.Create; 
    for i := 0 to ListBox1.Count-1 do 
    str.Add(ListBox1.Items.Strings[i]); 

    try 
    str.SaveToFile('D:\test15.txt', TEncoding.UTF8); 
    finally 
    str.Free; 
    end; 
end; 
+2

İlgili: http://stackoverflow.com/questions/25536216 – Kromster

+0

sistem kapanır, uygulamanız kapatılacak ve dosyayı daha sonra kaydedebilirsiniz. Aynı şekilde yeniden başlatmak için. Sistem kapatıldığında, uygulama kapatıldığında dosyayı kaydetmek istediğinizi farz ediyorum. Uyku farklıdır. Bunu başka bir şekilde saptamanız gerekecek. –

+0

Bay David, dosyayı kaydetmeyi, Etkinliği yok etmeyi ve Kapat etkinliğini başlatmayı deniyorum! ve işe yaramadı! – Adam

cevap

2

WM_ENDSESSION mesaj Kulp ve orada dosyanızı kaydedin.

Yakalama böyle windows message: Burada

private 
    procedure OnShutDown(var Msg: TMessage); message WM_ENDSESSION; 

Ve uygulamasıdır

procedure TForm1.OnShutDown(var Msg: TMessage); 
begin 
    //Save your file here. 
end; 
+1

IF Bildirimi ile nasıl kullanabilirim ??? – Adam

+1

Windows mesajının ne olduğunu biliyor musunuz? Bir "if" ifadesinin ne olduğunu biliyor musun? "WM_QUERYENDSESSION" belgesini okudun mu? –

+2

@Charlie Docs, * Bir uygulama bu mesaj için TRUE değerini döndürürse, diğer uygulamaların WM_QUERYENDSESSION mesajına nasıl tepki verdiğine bakılmaksızın, WM_ENDSESSION mesajını alır. Her mesaj, bu mesajı aldıktan hemen sonra DOĞRU veya YANLIŞ döndürmeli ve WM_ENDSESSION mesajını alana kadar herhangi bir temizleme işlemini ertelemelidir. * Başka bir deyişle, dosyayı "WM_QUERYENDSESSION" işleyicisine kaydetmeyin. Bu, cevabınızın ima ettiğinden çok daha karmaşıktır. –