Yorumları: 1.571
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.829 Üstad
(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
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.
Font dosyasının uygulama dizininde sürekli olarak bulunmasının ne sakıncası var?
There's no place like 127.0.0.1
Yorumları: 471
Konuları: 61
Kayıt Tarihi: 05-02-2017
Aktif Kullandığınız Delphi Sürümü:
- Delphi 10.2
- Delphi 10.1
- Delphi 7
Rep Puanı: 3.115 Uzman
(18-10-2018, Saat: 09:29)SimaWB 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
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.
Font dosyasının uygulama dizininde sürekli olarak bulunmasının ne sakıncası var?
Sakınca yok doğru çözüm dizinde olması tabi ki. Fakat programın dağıtıldığı çok kullanıcı var. Buna ek olarak bu istek ilerde kullanılmayabilir. Her kullanıcıya bu fontu dağıtmak gerekli.
Bunu şu şekilde çözdüm. Zaten Resource içindeki font dosyasını yoksa bir kere çıkarıyorum. Bu dosya çıkarıldıktan sonra tekrar silme işlemini yapmıyorum. Bu şekilde zaten bütün kullanıcıların dizinlerinde dosya mevcut olmuş olacak. Hatayı silme esnasında alıyordum. Dosya uygulamanın dizininde kalsın hiç bir zararı yok.
Yorumları: 231
Konuları: 12
Kayıt Tarihi: 06-07-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.178 Programcı
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.
Yorumları: 1.460
Konuları: 80
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 11.864 Üstad
(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
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.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
Yorumları: 820
Konuları: 135
Kayıt Tarihi: 07-12-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.030 Uzman
@ 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.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz.
Yorumları: 471
Konuları: 61
Kayıt Tarihi: 05-02-2017
Aktif Kullandığınız Delphi Sürümü:
- Delphi 10.2
- Delphi 10.1
- Delphi 7
Rep Puanı: 3.115 Uzman
18-10-2018, Saat: 10:10
(Son Düzenleme: 18-10-2018, Saat: 10:17, Düzenleyen: 3ddark.)
(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
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. +
Yorumları: 820
Konuları: 135
Kayıt Tarihi: 07-12-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.030 Uzman
(18-10-2018, Saat: 10:10)adelphiforumz Adlı Kullanıcıdan Alıntı: [quote pid='21271' dateline='1539846498']
@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. +
[/quote]
Özellikle ben bu yöntemi excel dosyalarında veri okuma sırasında program illegal kapanınca sonrasında dosyayı açık zannediyor.
bende böyle bir yöntemle aşıyorum. sizin işinizede yarar umarım.
ayrıca başka bir projemde dll dosyasını resource içinde alıp disk üzerine oluşturuyorum. (@ ssahinoglu 'nun dediği yöntemi dll'i resource üzerinden yükleyememiştim.)
Sonra dinamik şekilde dll'i load ediyorum.
Hemen arkasından dll'i rename edip siliyorum.
dll hafızaya yüklendiğinden dolayı program illegal kapansa bile o dll ortalıkta bulunmuyor
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz.
Yorumları: 2.017
Konuları: 246
Kayıt Tarihi: 09-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.370 Uzman
(18-10-2018, Saat: 09:16)3ddark Adlı Kullanıcıdan Alıntı: (18-10-2018, Saat: 09:06)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Yeterli katılım ve ilgi olmadığı için devam etmemiştim. Bu durum değişmiş midir acaba
Diğer Challange'ları yaptığınız zamanı hatırlıyorum. Kendi adıma konuşuyorum kimi Challange için bilgim yetersiz/daha önce hiç ilgilenmediğim konu olduğu için ve/veya iş yoğunluğunun çok ve zamanımın yeterli olmadığı için yorum adına katkı yapmasam da zaman buldukça takip ediyordum.
Genelde açtığınız Challange'lar internette arayıp nadiren bulunacak veya hiç bulunamayacak kadar değerli konular oluyordu.
Kesinlikle,
Yani iş güç ev derken çok zaman ayıramazsakda çok faydalı olduğu kesin.
|