PDA

View Full Version : اشکال در اضافه کردن فونت در زمان اجرا



farboodj1375
چهارشنبه 26 مرداد 1390, 21:48 عصر
با سلام.
خسته نباشید.
همونطور که همه میدنین یک تابع وجود داره به نام AddFontResource که با اون میشه یک فونت رو به فونت های سیستم اضافه کرد.

اما من از این روش که استفاده میکنم برای چندبار اول که برنامه اجرا میشه فونتها به صورت فونت Arial نشون داده میشن و گاهی اوقات هم اصلا فونت ها به کاراکترهای نامشخص تبدیل میشن که هیچوقت هم درست نمیشه.

کسی میتونه کمکم کنه؟
چون میخوام از این روش برای اصلاح فونت های Autorun برنامم استفاده کنم امکان ساخت ستاپ هم وجود نداره.
ممنون.

butterfly8528
چهارشنبه 26 مرداد 1390, 22:46 عصر
سلام دوست عزيز .
براتون يك نمونه كامل ضميمه كردم .
موفق و پيروز باشيد :لبخندساده:.

setroyd
پنج شنبه 27 مرداد 1390, 00:59 صبح
میتونی این کارو با copy و past کردن انجام بدی حتی بدون api البته اگه مشکلت با api هست .

farboodj1375
پنج شنبه 27 مرداد 1390, 13:49 عصر
ممنون.
در واقع مشکل اینه که دفعه اول که فونت رو اضافه میکنم فونتها خوب اجرا نمیشه.(اغلب اوقات)
در مورد سورس آقای butterfly8528 هم باید بگم که منم از همین روش استفاده میکنم و تو برنامه شما هم درست کار میکنه ولی تو برنامه خود من خوب کار نمیکنه.(مخصوصا وقتی ویندوز رو عوض میکنم)

setroyd
پنج شنبه 27 مرداد 1390, 14:25 عصر
مگه میشه حتما شما در کد نویسی اشتباه کردی دقت کن یا سورست رو بزار واست درستش کنم

farboodj1375
پنج شنبه 27 مرداد 1390, 16:46 عصر
بفرما این برنامه.
دانلود برنامه (http://jalalisoft.persiangig.com/Source/Autoran.rar)

البته همونطور که گفتم وقتی ویندوز عوض میکنم و اجراش میکنم تا چندبار اول فونت ها رو Arial نشون میده.
فونتها رو توی Form3 اضافه کردم.(فرم لود فرم 3) که فرم 3 همون فرم اسپلش هست.
ممنون.

محسن واژدی
پنج شنبه 27 مرداد 1390, 18:02 عصر
سلام علیکم اگر نام فولدر حاوی فونت ها اتوران را به Fonts تغییر دهید مشکل برطرف میشود به عبارت دیگر متغیر StrFontName به پوشه ای با نام Fonts اشاره دارد حال آنکه پوشه ای با این نام در مکان اتوران وجود ندارد موفق باشید

setroyd
پنج شنبه 27 مرداد 1390, 20:27 عصر
بله حق با دوستمونه من در بالا به شما گفتم که در کدنویسی اشتباه کردی حتما !!!!!!!! یا نیمش رو fonts کن یا کد رو تغییر بده

farboodj1375
پنج شنبه 27 مرداد 1390, 22:45 عصر
خیلی خیلی ممنون.
ببخشید یه چندتا سوال در این مورد داشتم:

1-آیا اگه فقط دفعه اول که برنامه اجرا میشه فونت رو اضافه کنیم همون یکبار کافیه؟

2-چرا اگه تو Design فونتها رو تنظیم کنیم و از طریق کدنویسی فقط فونتها رو اضافه کنیم,مشکل پیش میاد؟(منظورم اینه که دیگه با کدنویسی نگیم که مثلا فونت لیبل1 چی باشه و...)
ممنون.

محسن واژدی
جمعه 28 مرداد 1390, 01:08 صبح
خيلي خيلي ممنون.
ببخشيد يه چندتا سوال در اين مورد داشتم:

1-آيا اگه فقط دفعه اول که برنامه اجرا ميشه فونت رو اضافه کنيم همون يکبار کافيه؟

2-چرا اگه تو Design فونتها رو تنظيم کنيم و از طريق کدنويسي فقط فونتها رو اضافه کنيم,مشکل پيش مياد؟(منظورم اينه که ديگه با کدنويسي نگيم که مثلا فونت ليبل1 چي باشه و...)
ممنون.

1- بله کافيه، اصلا" اگر درهردفعه عمل ثبت فونت ها انجام شود هم غيراستاندارد است و هم از سرعت اجراي برنامه مي کاهد
2- مشکلي پيش نمياد، فقط کافيست که يکبار فونت برچسب ها را بر روي Homa تنظيم کنيد و در دفعات بعد تنها لازم است فونت هاي مورد نياز را توسط AddFontResource در سيستم کپي کنيد، البته روشي که براي تغيير فونت های Form1 استفاده کرده ايد را ميتوانيد به کد زير تغيير دهيد:

Private Sub Command2_Click()
Dim oObj As Object
For Each oObj In Me.Controls
If TypeOf oObj Is Label Then
oObj.Font.Name = "Homa"
End If
Next oObj
End Sub

همچنین اگر ميخواهيد فونت همه اشياء بلااستثنا به فونت Homa تغيير کند شرط If دستور بالا را حذف کنيد
موفق باشيد

farboodj1375
جمعه 28 مرداد 1390, 12:36 عصر
ممنون.
شما مطمین هستید که اگه تو دیزاین فونت لیبل ها رو تنظیم کنیم و از طریق کدنویسی فقط فونت رو اضافه کنیم مشکلی پیش نمیاد؟
ببخشید یه سوال دیگه هم اینکه:2-آیا به جز تابع FileExist که به FSO کار میکنه راهی دیگه هست که بشه از وجود یک فونت در یک سیستم با خبر شد؟
بازم متشکر.

محسن واژدی
جمعه 28 مرداد 1390, 13:36 عصر
شما مطمین هستید که اگه تو دیزاین فونت لیبل ها رو تنظیم کنیم و از طریق کدنویسی فقط فونت رو اضافه کنیم مشکلی پیش نمیاد؟

در سایر برنامه برای این موضوع مشکلی پیش نمی آید اما متاسفانه اینگونه که الآن دیدم در وی بی اینگونه نیست، مشکلی نیست ، همان دستور For..Each که در تاپیک قبلی نوشتم را در Form_Load قرار بدین که در زمان اجرا بصورت خودکار فونت همه برچسب های قرار گرفته شده بر روی فرم را به فونت مورد نظرتون تغییر دهد



ببخشید یه سوال دیگه هم اینکه:2-آیا به جز تابع FileExist که به FSO کار میکنه راهی دیگه هست که بشه از وجود یک فونت در یک سیستم با خبر شد؟

چرا، راه های دیگه هم هست:
1- هم میتوانید توسط خود تابع Dir وی بی انجام بدین
2- و هم میتوانید توسط APIی PathFileExists، طبق نمونه زیر:

Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

Private Sub Command1_Click()
MsgBox PathFileExists("c:\")
End Sub

در این دستور در صورت موجود بودن مسیر، مقدار برگشتی 1 در غیر اینصورت صفر خواهد بود

موفق باشید

setroyd
جمعه 28 مرداد 1390, 15:25 عصر
بله چرا نشه شما به dir() i هم میتونی از بودن یک فایل مطلع بشی. ویا سرچ کنی