मुझे अपने कार्यक्रम में अस्थायी रूप से कुछ फोंट लोड करने की आवश्यकता है। पसंदीदा रूप से एक डीएलएल संसाधन फ़ाइल से।मैं अस्थायी रूप से फ़ॉन्ट कैसे लोड कर सकता हूं?
उत्तर
और यहाँ एक डेल्फी संस्करण:
procedure LoadFontFromDll(const DllName, FontName: PWideChar);
var
DllHandle: HMODULE;
ResHandle: HRSRC;
ResSize, NbFontAdded: Cardinal;
ResAddr: HGLOBAL;
begin
DllHandle := LoadLibrary(DllName);
if DllHandle = 0 then
RaiseLastOSError;
ResHandle := FindResource(DllHandle, FontName, RT_FONT);
if ResHandle = 0 then
RaiseLastOSError;
ResAddr := LoadResource(DllHandle, ResHandle);
if ResAddr = 0 then
RaiseLastOSError;
ResSize := SizeOfResource(DllHandle, ResHandle);
if ResSize = 0 then
RaiseLastOSError;
if 0 = AddFontMemResourceEx(Pointer(ResAddr), ResSize, nil, @NbFontAdded) then
RaiseLastOSError;
end;
की तरह इस्तेमाल किया जा रहा:
var
FontName: PChar;
FontHandle: THandle;
...
FontName := 'DEJAVUSANS';
LoadFontFromDll('Project1.dll' , FontName);
FontHandle := CreateFont(0, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
FontName);
if FontHandle = 0 then
RaiseLastOSError;
मुझे Google के साथ this मिला। मैंने & काट दिया है नीचे दिए गए प्रासंगिक कोड को चिपकाया है।
आप अपने संसाधन फ़ाइल के लिए फ़ॉन्ट जोड़ने की जरूरत:
34 FONT "myfont.ttf"
निम्नलिखित सी कोड DLL संसाधन से फ़ॉन्ट लोड और स्मृति से जारी जब आप इसका उपयोग करना समाप्त कर लें होगा।
DWORD Count; HMODULE Module = LoadLibrary("mylib.dll"); HRSRC Resource = FindResource(Module,MAKEINTRESOURCE(34),RT_FONT); DWORD Length = SizeofResource(Module,Resource); HGLOBAL Address = LoadResource(Module,Resource); HANDLE Handle = AddFontMemResourceEx(Address,Length,0,&Count); /* Use the font here... */ RemoveFontMemResourceEx(Handle); FreeLibrary(Module);
यहाँ कुछ कोड है कि आपके निष्पादन अंदर से लोड होगा/font उपलब्ध बनाने है (यानी, फ़ॉन्ट एक संसाधन के रूप एम्बेडेड था, बल्कि कुछ की तुलना में आप आमतौर पर विंडोज में स्थापित करने के लिए किया था)।
ध्यान दें कि फ़ॉन्ट पर एप्लिकेशन तक उपलब्ध है जब तक कि आपका प्रोग्राम इससे छुटकारा न हो जाए। मुझे नहीं पता कि आपको यह कितना उपयोगी लगेगा, लेकिन मैंने इसे कुछ बार उपयोग किया है। मैंने फ़ॉन्ट को कभी भी एक डीएल में नहीं रखा है (मैं इसे 'exe' दृष्टिकोण में एम्बेड करना पसंद करता हूं) लेकिन कल्पना न करें कि यह चीजों को बहुत अधिक बदल देता है।
procedure TForm1.FormCreate(Sender: TObject); var ResStream : TResourceStream; sFileName : string; begin sFileName:=ExtractFilePath(Application.ExeName)+'SWISFONT.TTF'; ResStream:=nil; try ResStream:=TResourceStream.Create(hInstance, 'Swisfont', RT_RCDATA); try ResStream.SaveToFile(sFileName); except on E:EFCreateError Do ShowMessage(E.Message); end; finally ResStream.Free; end; AddFontResource(PChar(sFileName)); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); end; procedure TForm1.FormDestroy(Sender: TObject); var sFile:string; begin sFile:=ExtractFilePath(Application.ExeName)+'SWISFONT.TTF'; if FileExists(sFile) then begin RemoveFontResource(PChar(sFile)); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); DeleteFile(sFile); end; end;
- 1. पृष्ठ लोड होने के बाद मैं अस्थायी रूप से जावास्क्रिप्ट को कैसे अक्षम कर सकता हूं?
- 2. मैं Google क्रोम में अस्थायी रूप से वेबस्केट को कैसे अक्षम कर सकता हूं?
- 3. मैं थिंकिंग स्पिंक्स के साथ डेल्टा इंडेक्सिंग को अस्थायी रूप से अक्षम कैसे कर सकता हूं?
- 4. मैं अस्थायी रूप से "वापसी मूल्य को अपरिभाषित" चेतावनी कैसे अक्षम कर सकता हूं?
- 5. मैं रूबी में अस्थायी रूप से stderr को कैसे रीडायरेक्ट कर सकता हूं?
- 6. jQuery के साथ, मैं हाइपरलिंक कैसे इंटरसेप्ट कर सकता हूं अस्थायी रूप से क्लिक करें?
- 7. मैं डेटाबेस से जावा क्लास कैसे लोड कर सकता हूं?
- 8. मैं UITextView का फ़ॉन्ट आकार कैसे सेट कर सकता हूं?
- 9. मैं कक्षा से प्रोग्रामेटिक रूप से स्टोरीबोर्ड कैसे लोड कर सकता हूं?
- 10. मैं UINavigationBar में कस्टम फ़ॉन्ट कैसे सेट कर सकता हूं?
- 11. क्या मैं किसी भी तरह अस्थायी रूप से WPF डेटा बाध्यकारी परिवर्तन अक्षम कर सकता हूं?
- 12. मैं पहचान मैन्युअल रूप से कैसे सम्मिलित कर सकता हूं?
- 13. स्टार्टअप पर मैं स्वचालित रूप से उपनाम कैसे लोड कर सकता हूं?
- 14. मैं कस्टम एसबीटी कमांड में संकलन कार्य को अस्थायी रूप से कैसे चला सकता हूं?
- 15. मैं नाम से अस्थायी रूप से हटाए गए कॉलम के साथ डेटाफ्रेम कैसे प्राप्त कर सकता हूं?
- 16. मैं एक पर्ल कार्यक्रम में अस्थायी रूप से STDOUT को कैसे दबा सकता हूं?
- 17. मैं मॉडल को सहायक कैसे लोड कर सकता हूं?
- 18. अस्थायी रूप से redefinition
- 19. मैं PHP में पैसे से संबंधित गणना कैसे सुरक्षित रूप से कर सकता हूं?
- 20. मैं जीपीयू लोड कैसे पढ़ सकता हूं?
- 21. मैं HTML में ओपनटाइप फ़ॉन्ट से 'स्वाश'/'स्टाइलिस्ट सेट' अक्षरों को कैसे कॉल कर सकता हूं?
- 22. मैं एक अस्थायी बफर कैसे खोल सकता हूं
- 23. मैं एमैक्स लिस्प कोड को आसानी से कैसे लोड कर सकता हूं क्योंकि मैं इसे संपादित कर रहा हूं?
- 24. क्या मैं कक्षा को अनदेखा कर सकता हूं लेकिन बाहरी रूप से सील कर सकता हूं?
- 25. फायरबर्ड 2.1 में एक तालिका में मैं सभी बाधाओं को अस्थायी रूप से अक्षम कैसे कर सकता हूं?
- 26. मैं बिना किसी अक्षमता के बटन पर क्लिक ईवेंट को अस्थायी रूप से कैसे अक्षम कर सकता हूं?
- 27. मैं JConsole का उपयोग कर दूरस्थ रूप से वेबलॉगिक से कैसे कनेक्ट कर सकता हूं?
- 28. क्या मैं एम्बेडेड बेस 64 एन्कोड फ़ॉन्ट को फ़ॉन्ट फ़ाइल में परिवर्तित कर सकता हूं?
- 29. Django: मैं टेम्पलेट से ब्लॉक कैसे प्राप्त कर सकता हूं?
- 30. मैं रेल कंसोल कैसे शुरू कर सकता हूं और परीक्षण डेटाबेस का विशेष रूप से उपयोग कैसे कर सकता हूं?
नायब sFileName/sFile चर एक स्थानीय फ़ॉन्ट फ़ाइल बनाने के लिए उपयोग किया जाता है - इस मामले में, निर्देशिका में जहां एप्लिकेशन होस्ट किया गया है। – robsoft
SendMessage को Vista पर समस्याएं होने वाली हैं। SendMessage (HWND_BROADCAST, ..) के बजाय आप SendMessage (Application.Handle, ..) – smo
वास्तव में, यदि प्रोग्राम \ प्रोग्राम फ़ाइलों में चल रहा है, तो फ़ाइल में फ़ॉन्ट निकालने से Vista में समस्याग्रस्त हो जायेगा । आप बीएमटीयू के उदाहरण के रूप में स्मृति से फ़ॉन्ट संसाधन लोड करना चाहते हैं .. लेकिन मुझे यह भी लगता है कि आपको SendMessage की आवश्यकता है। – smo