Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Application Terminate Olayını Nasıl Yakalarım?
#16
(18-10-2018, Saat: 10:04)ssahinoglu Adlı Kullanıcıdan Alıntı: Font dosyasını resource kısmına gömüp memory stream olarak kullanabilirsin. Dosya olmak zorunda değil.

Ben bir DLL dosyasını bu şekilde exe içine gömüp sessiz sedasız kullanmıştım.

Bunu düşündüm aklıma geldi fakat yapmadım. Teşekkürler. +

(18-10-2018, Saat: 10:06)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(18-10-2018, Saat: 08:56)3ddark Adlı Kullanıcıdan Alıntı: Verdiğiniz linkteki uygulama örneğini test ettim. Çok güzel sorunsuz çalışıyor. Başka kritik uygulamalarda kullanılabilir.

Fakat bu şekilde ki kullanım benim yapacağım işlem ve programı kullanan son kullanıcı topluluğuna pek hitap etmediği için şu anki sorunum için bu şekildeki bir çözüm kullanmayacağım.

Olayın çıkış noktası da yeni bir font var. Bu fontun özelliği %20 toner tasarrufu sağlıyormuş. Bunu yazıcı formlarında kullanabilir miyiz? şeklinde bir sorun ile başladı. Bütün kullanıcıların bilgisayarında bu font mevcut değil ve her kullanıcının bilgisayarına fontu tek tek eklemek mantıklı olmadığı için bu şekilde kullanmak istedim.

Sonuçta bizim yaptığımız uygulamalar son kullanıcıya hitap etmeli. Benim son kullanıcı topluluğum biraz GARİP bir topluluk  Confused

Asıl sorunum 
  ResStream := TResourceStream.Create(HInstance, pResourceName, 'FONT_TTF');
  try
    ResStream.SavetoFile(pResourceName + '.ttf');
  finally
    ResStream.Free;
  end;

  AddFontResource('font_dosya_adi.ttf');
  SendMessage(Application.Handle, WM_FONTCHANGE, 0, 0);
ile font ekleyip yazıcı formlarında bu fontu kullanacaktım ve işim bittiğinde ise 
if RemoveFontResource(PAnsiChar(FontName + '.ttf')) then
 begin
   SendMessage(Application.Handle, WM_FONTCHANGE, 0, 0) ;
   DeleteFile(PAnsiChar(FontName + '.ttf'));
 end;
ile fontu iptal edip uygulama dizininde geçici olarak oluşturduğum font dosyasını silecektim. Bu işlemi de uygulama ana formu açılırken fontu oluşturup ekledikten sonra uygulama ana formu kapatılırken(Destroy olayında) fontu kaldırıp dosyayı silecektim.

RemoveFontResource yapmadığım zaman bu oluşturduğum font dosyasını silemiyorum. Bu dosya kullanılıyor diyor. Windows tarafından kullanılıyor. Bilgisayarı yeniden başlatınca dosyaya müdahale edebiliyorum. 

Bu sorunu aşmak için başka yol izleyebilirim. Örneğin bu işlemleri her yazdırma işleminden önce ve sonra yapabilirim veya 
AddFontResource
//yerine 
AddFontMemResourceEx
bu şekilde kullanabilirim.

Üstad, arzu ettiğiniz şeyin çok kolay bir yolu var. Uygulamanız prematüre bir şekilde sonlandığında arzu ettiğiniz RemoveFontResource çağrımını yapamadığınız için, dosya kullanımda gibi görünüyor. Sizin uygulamanız yeniden başladığında; AddFontResource çağrımında bulunmadan önce aşağıdaki gibi bir çağrımda bulunacaksınız:

  while RemoveFontResource('C:\temp\sil2\Test.ttf') do ;

  TFile.Delete('C:\temp\sil2\Test.ttf');

Göreceksiniz, dosyayı silebileceksiniz.

Teşekkürler bende aynen o şekilde yaptım. Program hatalı kapansa dahi bir sonraki açılışta ve normal kapanma durumunda dosyayı silmeye izin veriyor. Fakat kodun en son durumuna dosyayı olduğu gibi bırakma kararı aldım. Dosyayı silme işlemini yapmıyorum fakat Windows kullanımından
RemoveFontResource
ile alıyorum.+

(18-10-2018, Saat: 10:08)adelphiforumz Adlı Kullanıcıdan Alıntı: @3ddark  benzer bir sorunu ben zamanında dosya adını rename edip sonra rename edilen isimle siliyordum.
Biraz garip gelebilir fakat windows dosya kullanımda iken silmenize izin vermiyor fakat rename izni veriyor.
Ben sorunu bu şekilde aşmıştım. belki sizinde işinizi görebilir.

İlginç bir bilgi bunu deneyeceğim. Ama mantıklı değil kullanılan dosya sonuçta rename işlemine de izin vermemeli. +
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla


Bu Konudaki Yorumlar
Cvp: Application Terminate Olayını Nasıl Yakalarım? - Yazar: 3ddark - 18-10-2018, Saat: 10:10

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 324 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  TMS Web Core- REST İşlemlerini Nasıl Yapabilirim? kajmerantime 0 429 13-06-2025, Saat: 14:07
Son Yorum: kajmerantime
  Delphi 7 deki pencereleri nasıl sabitleyebilirim? mxpain 1 555 12-12-2024, Saat: 08:50
Son Yorum: 3ddark
  resimdeki hatanin satirini nasil bulabiliriz. sadikacar60 6 1.111 25-11-2024, Saat: 19:18
Son Yorum: sadikacar60
  Programdaki donmanin sebebi nasil yakalanir. sadikacar60 2 741 17-10-2024, Saat: 18:21
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi