PDA

View Full Version : مشکل با API EnumFont



Reza,M
دوشنبه 04 اردیبهشت 1391, 15:30 عصر
با سلام
API EnumFont در vb6 مشکلی نداره ولی نمیدونم چرا در vb.net نمیتونم ازش استفاده کنم
نمونه کد vb6 و vb.net را ضمیمه کردم

xxnagin
دوشنبه 04 اردیبهشت 1391, 17:36 عصر
سلام
این کد vb6 باید تبدیل بشه به vb.net
تازه خیلی راحت هم تبدیل نمیشه
تبدیل کردن کد این نیست که بیای عین کد را بنویسی و خطاهای کد رو برطرف کنی مثلا تو vb6 کلمه new زیاد کاربرد نداره ولی اینجا (در بعضی جاها ) باید از new استفاده کنید

اگه شما میخواین فونت ها رو تو list نشون بدین این راه خیلی ساده تر هستش


PrivateSub AddFonts()
Dim allFonts AsNew Drawing.Text.InstalledFontCollection


Dim fontFamilies() AsFontFamily = allFonts.Families()
ForEach fo AsFontFamilyIn fontFamilies
ListBox1.Items.Add(fo.Name)


Next
EndSub

Reza,M
دوشنبه 04 اردیبهشت 1391, 17:51 عصر
نه دوست عزیز میخوام از API استفاده کنم

xxnagin
دوشنبه 04 اردیبهشت 1391, 19:00 عصر
وقتیvb.net کار را راحت کرده چرا کار خودتو سخت میکنی
http://www.codeproject.com/Articles/2699/FontComboBox-a-font-listing-combo-box-for-NET
اینم یه لینک دیگه که به زبان سی شارپ هستش ولود فرم لازم به تبدیل داشت که برات تبدیل هم کردم که فقط یه dll داره که به فرمت اضافه کنی
اینم کد که تو فرم و دکمه میذاری

'load form
fontComboBox1.Populate(False)
fontComboBox2.Populate(True)
'button
textBox1.Font = New Font(fontComboBox1.Text,10)
textBox2.Font = New Font(fontComboBox2.Text,10)

Reza,M
دوشنبه 04 اردیبهشت 1391, 19:44 عصر
هیچ راهی نیست که با API بشه انجام داد ....

xxnagin
دوشنبه 04 اردیبهشت 1391, 19:56 عصر
این کد باید تبدیل بشه به vb.net یعنی مجبورید
vb.net کار رو راحت کرده شما مجبور نیستی از api استفاده کنید وقتی به این راحتی با دو تا خط کد میشه کار میکنه
چرا از خط های زیاد استفاده میکنی

Reza,M
سه شنبه 05 اردیبهشت 1391, 02:08 صبح
این کد باید تبدیل بشه به vb.net یعنی مجبورید
vb.net کار رو راحت کرده شما مجبور نیستی از api استفاده کنید وقتی به این راحتی با دو تا خط کد میشه کار میکنه
چرا از خط های زیاد استفاده میکنی
میخوام با api انجام بدم :متفکر:
اگه میشه تبدیلش کرد لطفا این کار رو انجام بدید آخه من تبدیل کردم جواب نداده

Reza,M
چهارشنبه 06 اردیبهشت 1391, 12:10 عصر
با سلام
API EnumFont در vb6 مشکلی نداره ولی نمیدونم چرا در vb.net نمیتونم ازش استفاده کنم
نمونه کد vb6 و vb.net را ضمیمه کردم

در کد vb.net به EnumFonts(Me.hDC, vbNullString, AddressOf EnumFontProc, 0) خطا میگیره

xxnagin
چهارشنبه 06 اردیبهشت 1391, 13:20 عصر
ببین اینجوری هم که تو فکر میکنی نیست
اون باید اول اینجوری نوشته بشه
منم هر کاری کردم نشد سخت تبدیل میشه بی خیال شو

اول DelegateFunction EnumFontProc(....)as integer
بعدش باید
dim proc as new EnumFontProc(AddressOf EnumFontProc)EnumFonts(Me.hDC, vbNullString, AddressOf EnumFontProc, 0)

تو قسمت قرمز رنگ که تو Module خط اولت باید EnumFontProc بنویسی به جای integer

نمونه http://stackoverflow.com/questions/2463395/addressof-vb6-to-vb-net

Reza,M
چهارشنبه 06 اردیبهشت 1391, 13:24 عصر
درست دوست من راهش همین Delegate ولی چطور باید ازش استفاده کرد :گریه:

Reza,M
چهارشنبه 06 اردیبهشت 1391, 13:59 عصر
ببین اینجوری هم که تو فکر میکنی نیست
اون باید اول اینجوری نوشته بشه
منم هر کاری کردم نشد سخت تبدیل میشه بی خیال شو

اول DelegateFunction EnumFontProc(....)as integer
بعدش باید
dim proc as new EnumFontProc(AddressOf EnumFontProc)EnumFonts(Me.hDC, vbNullString, AddressOf EnumFontProc, 0)

تو قسمت قرمز رنگ که تو Module خط اولت باید EnumFontProc بنویسی به جای integer

نمونه http://stackoverflow.com/questions/2463395/addressof-vb6-to-vb-net


این کارها رو کردم ولی بازم جواب نداد . هنوز خطا میگیره ؟؟؟

xxnagin
چهارشنبه 06 اردیبهشت 1391, 14:21 عصر
vb6

Sub SYNCPROC(ByVal handle As Long, ByVal channel As Long, ByVal data As Long, ByVal user As Long)
'CALLBACK FUNCTION !!!
End Sub

vb.net

Delegate Sub SYNCPRO(ByVal handle As Long, ByVal channel As Long, ByVal data As Long, ByVal user As IntPtr)
dim proc as New Un4seen.Bass.SYNCPROC(AddressOf SyncEndProc)

Public Sub SyncEndProc(ByVal handle As Integer, ByVal channel As Integer, ByVal data As Integer, ByVal user As IntPtr)
Me.Invoke(New System.Windows.Forms.MethodInvoker(AddressOf MusicEnd))
End Sub
Public Sub MusicEnd()
End Sub

این کد برای mp3 player هستش
که میگه اهنگ داره تموم میشه

کد بالا را نگاه کن
در ضمن تو فرم یک به جای hdc از handle خود فرم باید استفاده بکنی
و تو MusicEnd که کارش repeat shuffle اهنگ ها هستش
شماباید اینجوری بنویسی نصفش را خط های قرمز رو می بینی
کلا من نتونستم کاری بکنم
از دوستان دیگه کمک بگیر که بیشتر از من میدونن
حالا نمیشه بی خیال بشی

Reza,M
چهارشنبه 06 اردیبهشت 1391, 15:30 عصر
ضمن تشکر از xxnagin سایر دوستان و اساتید محترم نظری ندارند ؟:اشتباه: