ايران ويج

نسخه‌ی کامل: مشکل عجیب با فونت ها
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
نمدونم چرا روی بعضی فرمها یهو فونتا به هم میریزه و ناخوانا میشه !
با وجود اینکه همیشه تاهوما 8 استفاده می کنم .
روی یک فرم همین تاهوما درست نشون میده . روی فرم کناریش که ساختارش هم مثل همونه همه چی به هم میریزه !

Angry
به احتمال زياد متن هاي داخل فرم هم فارسي هستند...
در ديالوگ انتخاب فونت يك ليست هست به اسم Script كه بايد اون رو به Arabic تغيير بدين...
اگر مشكل حل نشد، بيشتر توضيح بفرماييد تا بيشتر پي گيري كنيم...
EleRam نوشته است:به احتمال زياد متن هاي داخل فرم هم فارسي هستند...
در ديالوگ انتخاب فونت يك ليست هست به اسم Script كه بايد اون رو به Arabic تغيير بدين...
اگر مشكل حل نشد، بيشتر توضيح بفرماييد تا بيشتر پي گيري كنيم...

ممنون دوست عزیز
فکر می کنم مشکل از همین بوده .

یه سوال دیگه : اگه بخایم از یه سری فونتها استفاده کنیم که تو کامپیوتر دیگه ممکنه نباشه باید چه کنیم که همه جا بدون مشکل فونت نمایش داده بشه ؟
باید فونتو هم همراه برنامه ببرید ! ;)
amin_amin نوشته است:یه سوال دیگه : اگه بخایم از یه سری فونتها استفاده کنیم که تو کامپیوتر دیگه ممکنه نباشه باید چه کنیم که همه جا بدون مشکل فونت نمایش داده بشه ؟

بايد فونت مورد نظر رو در پوشه فونت هاي ويندوز كپي كنين و بهتره كه با هر بار اجراي برنامه اينكار انجام بشه تا مطمئن باشي كه ديگه بهم نميريزه همه چي
EleRam نوشته است:
amin_amin نوشته است:یه سوال دیگه : اگه بخایم از یه سری فونتها استفاده کنیم که تو کامپیوتر دیگه ممکنه نباشه باید چه کنیم که همه جا بدون مشکل فونت نمایش داده بشه ؟

بايد فونت مورد نظر رو در پوشه فونت هاي ويندوز كپي كنين و بهتره كه با هر بار اجراي برنامه اينكار انجام بشه تا مطمئن باشي كه ديگه بهم نميريزه همه چي
من این کار رو کردم. جواب نداد. با اجرای بعدی برنامه، فونت ها اعمال میشن. باورت میشه. حتی بعد از کپی کردن فونت یه حلقه While گذاشتم که بیش از 10 ثانیه DoEvents و Refresh و از اینجور کارا میکرد ولی جواب نداد. اما نگران نباش. راه داره:
mojtabamalaekeh نوشته است:مشکل فونت اساسی حل شد
با تابع AddFontResource که تو Api-Guide نمونه کدش هست میتونید فونت رو از هر پوشه ای که میخواید به جدول فونت های ویندوز اضافه کنید که بعد از ریست کردن ویندوز فونت از تو لیست فونت های ویندوز حذف میشه البته میتونید با RemoveFontResource این کار رو بکنید.
من یک قدم جلوتر رفتم و بجای قرار دادن فونت در یک پوشه، فونت ها رو توی فایل Resource گذاشتم و قبل از استفاده از AddFontResource اول فونت رو از فایل Resource توی یک آرایه بارگذاری می کنم arr()=LoadResData
بعد آرایه رو داخل فایل ذخیره می کنم CreateFile, WriteFile, CloseHandle
اونوقت با تابع AddFontResource فایل ایجاد شده رو اضافه می کنم.
این کار در هر بار اجرای برنامه انجام میشه.
mojtabamalaekeh نوشته است:
EleRam نوشته است:
amin_amin نوشته است:یه سوال دیگه : اگه بخایم از یه سری فونتها استفاده کنیم که تو کامپیوتر دیگه ممکنه نباشه باید چه کنیم که همه جا بدون مشکل فونت نمایش داده بشه ؟

بايد فونت مورد نظر رو در پوشه فونت هاي ويندوز كپي كنين و بهتره كه با هر بار اجراي برنامه اينكار انجام بشه تا مطمئن باشي كه ديگه بهم نميريزه همه چي
من این کار رو کردم. جواب نداد. با اجرای بعدی برنامه، فونت ها اعمال میشن. باورت میشه. حتی بعد از کپی کردن فونت یه حلقه While گذاشتم که بیش از 10 ثانیه DoEvents و Refresh و از اینجور کارا میکرد ولی جواب نداد. اما نگران نباش. راه داره:
mojtabamalaekeh نوشته است:مشکل فونت اساسی حل شد
با تابع AddFontResource که تو Api-Guide نمونه کدش هست میتونید فونت رو از هر پوشه ای که میخواید به جدول فونت های ویندوز اضافه کنید که بعد از ریست کردن ویندوز فونت از تو لیست فونت های ویندوز حذف میشه البته میتونید با RemoveFontResource این کار رو بکنید.
من یک قدم جلوتر رفتم و بجای قرار دادن فونت در یک پوشه، فونت ها رو توی فایل Resource گذاشتم و قبل از استفاده از AddFontResource اول فونت رو از فایل Resource توی یک آرایه بارگذاری می کنم arr()=LoadResData
بعد آرایه رو داخل فایل ذخیره می کنم CreateFile, WriteFile, CloseHandle
اونوقت با تابع AddFontResource فایل ایجاد شده رو اضافه می کنم.
این کار در هر بار اجرای برنامه انجام میشه.

ممنون مجتبی جان
ممکنه یه نمونه از این برنامه ها رو بزارین ؟Heart

ضمنا فکر می کنم شما توی یکی از برنامه هاتون یه تابع گرادینت نوشته بودین که طیف رنگی برای اشیا ایجاد می کرد . ممکنه همچین فانگشنی رو برای اسکیل مود توایپ هم بزارین ؟
mojtabamalaekeh نوشته است:من این کار رو کردم. جواب نداد. با اجرای بعدی برنامه، فونت ها اعمال میشن. باورت میشه. حتی بعد از کپی کردن فونت یه حلقه While گذاشتم که بیش از 10 ثانیه DoEvents و Refresh و از اینجور کارا میکرد ولی جواب نداد. اما نگران نباش. راه داره:
mojtabamalaekeh نوشته است:مشکل فونت اساسی حل شد
با تابع AddFontResource که تو Api-Guide نمونه کدش هست میتونید فونت رو از هر پوشه ای که میخواید به جدول فونت های ویندوز اضافه کنید که بعد از ریست کردن ویندوز فونت از تو لیست فونت های ویندوز حذف میشه البته میتونید با RemoveFontResource این کار رو بکنید.
من یک قدم جلوتر رفتم و بجای قرار دادن فونت در یک پوشه، فونت ها رو توی فایل Resource گذاشتم و قبل از استفاده از AddFontResource اول فونت رو از فایل Resource توی یک آرایه بارگذاری می کنم arr()=LoadResData
بعد آرایه رو داخل فایل ذخیره می کنم CreateFile, WriteFile, CloseHandle
اونوقت با تابع AddFontResource فایل ایجاد شده رو اضافه می کنم.
این کار در هر بار اجرای برنامه انجام میشه.

بدون API اگه بخواي بايد يه برنامه كوچيك بنويسي تا فونت رو كپي كنه بعد از كپي شدن برنامه اصلي رو اجرا كنه به همين سادگي به همين خوشمزگي Smile
ببخشید یکم شلوغ شد. آخه بعضی فونت ها تو اسمشون کاراکتر Space دارند در حالیکه تو فایل Resource اسم ها باید بدون Space باشن. بهمین خاطر از AliasName و RealName استفاده کردم. البته تو فایل Resource می تونی بجای AliasName هایی که من تعیین کردم شماره بذاری 101 و 102 و 103 و ...
اون مثال پیچیده بود. این مثال رو ببینید:
با فرض اینکه فونتی به اسم Iran.ttf کنار فایل اجرایی برنامه وجود داشته باشه
کد php:
Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long

Private Sub Form_Load()
    
AddFontResource "Iran.ttf"
End Sub

Private Sub Form_Unload(Cancel As Integer)
    
RemoveFontResource "Iran.ttf"
End Sub 
استفاده از RemoveFontResource در پایان برنامه تأثیری تو عملکرد برنامه شما نداره و با ریستارت کردن ویندوز فونت از جدول فونت ها حذف میشه
اين همه درده سر لازم نيست !
فونتها (يا هر فايلي) رو كه مي خوايي كپي بشه در قسمت Initialize برنامه كپي كن
حتي لازم نيست كه برنامه مجدد اجرا بشه