وبلاگ تخصصي برنامه نويسي با VB

پاسخ به سوالات-۵


1 – چگونه می توان فایل Pdf ای را درون فرم ويژوال بيسيک نشان داد ؟
پاسخ : دو راه برای نمایش فایلهای Pdf در ويژوال بيسيک وجود دارد :
- استفاده از دستور ShellExecute برای نمایش فایل توسط Acrobat Reader . برای مثال :


ShellExecute hwnd, "open", "C:\acrobat5\reader\acrobat.pdf", vbNullString, "C:\", 1


در این روش نرم افزار Adobe Acrobat حتماً بایستی روی هر کامپیوتری که پروژه تان را روی آن اجرا می کنید وجود داشته باشد .
- استفاده از کتابخانه Adobe Acrobat Type Library:
در این روش بایستی نرم افزار Adobe Acrobat روی کامپیوتری که پروژه تان را روی آن Develop می کنيد وجود داشته باشد . ابتدا کتابخانه فوق را از بخش references موجود در منوی Project به پروژه تان اضافه کنید . سپس با استفاده از اشیای کلاس Acrobat می توانید برنامه مورد نظرتان را بنویسید . برای مثال کد زیر عنوان فایل Pdf را استخراج می کند :


Dim opdf As Acrobat.CAcroPDDoc
Set opdf = CreateObject("AcroExch.PDDoc")
opdf.Open (x)
Dim y As String
y = opdf.GetInfo("Title")

کد زیر مشابه روش بالا است اما احتیاجی به اضافه کردن کتابخانه مذکور به references نیست :


  Dim opdf As Object
  Set opdf = CreateObject("AcroExch.PDDoc")
  opdf.Open (x)
  Dim y As String
  y = opdf.GetInfo("Title")

2 – چگونه برای MP3 Player ساخت خودم در ويژوال بيسيک یک رقص نور مانند Winamp درست کنم ؟
پاسخ : بایستی از ترکیبی از الگوریتم های ریاضی و گرافیکی استفاده کنید . این روشها بسیار متنوع بوده است . اگر در اینترنت کمی بگردید به جواب خواهید رسید .

3 – لطفاً در مورد hwnd یا همان هندل فرمها توضیح کامل بدهید .
پاسخ : هر فرم در یک برنامه کاربردی در ویندوز با استفاده از الحاق یک دستگیره یا هندل به آن مشخص می شود . این هندل را با hWnd ( یا HWindow ) نیز نشان می دهیم . برخی توابع کتابخانه ای ویندوز به خاصین هندل فرم جاری بعنوان یک آرگومان نیاز دارند تا عملی را بر روی آن فرم انجام دهند . بعبارت دیگر توسط هندل یک فرم می توان به مشخصات و خصوصیات آن فرم دسترسی داشت . خاصیت هندل فرم در ویژوال بيسيک خاصیتی فقط خواندنی است .
باید توجه داشت که هندل یک فرم با هندل زمینه دستگاه آن متفات است .
زمینه دستگاه یا device context یکی دیگر از مشخصات یک فرم می باشد . در ویندوز هر سطحی که عمل رسم بر روی آن انجام می شود یک زمینه دستگاه نام دارد . برای دسترسی به زمینه دستگاه هر فرم از هندلی به اسم hDC استفاده می شود .

4 – چگونه می توان در ويژوال بيسيک از کتابخانه  openGL استفاده کرد ؟
پاسخ : قبلاً در این وبلاگ مطلبی در این زمینه نوشته ام . به اين آدرس مراجعه کنید :

5 – در مورد نصب ويژوال بيسيک دات نت منبعی را معرفی کنید .
پاسخ : به کتابهای.NET مراجعه کنید . فقط این نکته را ذکر می کنم که در زمان نصب ويژوال استديو دات نت ابتدا بایستی FrontPage Server  Extension را روی سیستمتان نصب کرده و فعال کنید . سپس بایستی توسط سی دی Prerequisites موجود در مجموعه سی دی های نصب ، موارد مورد نیاز برای نصب دات نت را روی سیستمتان نصب کنید ( برای مثال .Net Framework ) سپس بسراع نصب خود دات نت بروید .

6 – چگونه می توان از دستورات داس در VB استفاده کرد برای مثال dir ؟
پاسخ : بابا بیخیال !!!

7 – چگونه می توان skin هایی را که با استفاده از وی بی ایجاد می کنیم به سیستممان اضافه کنیم ؟
پاسخ : دوست عزیزی جواب این سوال را داده اند : " شما ميتونيد از برنامه زيبا و توانمند ActiveSkin استفاده کنی که ورژن 4.3 اونرو ميتونی از ZDnet دانلود کنی اگر کرکش رو پيدا نکردی خبر بده برات بفرستم "

8 – چگونه می توان دو فایل را بهم bind کرد ( بهم چسباند ) مثلاً دو فایل اجرایی ( EXE ) را بهم چسباند .
پاسخ : اگر هدف تنها اینست که دو فایل بهم بچسبند می توان محتوای فایل اول و سپس محتوای فایل دوم را خواند و آنها را در یک فایل جدید ریخت . در مورد چگونگی خواندن محتوای فایلهای باینری قبلاً در این وبلاگ مطالبی نوشته ام . اما اگر هدف الحاق دو فایل بهم است بطوریکه فایلها قابل دسترسی باشند ( مثلاً الحاق یک ویروس که به فایلی اجرایی می چسبد ) بایستی با ساختار فایلهای گوناگون آشنا باشید .

9 – چگونه می توان یک فرم را در حالت Always on Top قرار داد ؟
پاسخ : حالت Always on Top حالتی است که در آن همیشه فرم برنامه شما قابل مشاهده در صفحه ویندوز باشد . ( حتی اگر برنامه دیگری انتخاب شده و فعال باشد ) . برای قرار دادن فرم در این حالت از یک API موجود در کتابخانه user32 با نام SetWindowPos استفاده می شود . چگونگی declare کردن این تابع بصورت زیر است ( اين declare را در بالای کدهای مربوط به فرمتان قرار دهيد ) :


Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


همچنین ثابتهای زیر را در بالای کدتان تعریف کنید :

Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2


یک تایمر با Interval ای برابر 1 در فرمتان قرار دهید و کد زیر را برای متد Timer آن بنویسید تا فرم در این حالت قرار بگیرد :


Dim result As Long
result = SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)


برای غیر فعال کردن این حالت کد زیر را در برنامه تان بنویسید :


Timer1.Enabled = False
Dim result As Long
result = SetWindowPos(Form1.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)

برای فعال کردن مجدد این حالت کافیست خاصیت Enabled تایمر را True کنید .

10 - من الان دارم با jro(jet replica) با vb6 کار میکنم. مشکلم اینجاست که نمیتونم با یک فایل از یک ftp ارتباط بر قرار کنم هتی یک فولدر با ای پی ولید درست کردم ولی نشده .
پاسخ : در مورد مشکلتان واضحتر توضیح بدهید .

11 – چگونه می توان از طریق ویژوال بيسيک با اسکنر ارتباط برقرار نموده و عکس را از آن گرفت و در بانک اطلاعاتی ذخیره نمود .
پاسخ : در مورد بخش آخر سوال که ذخیره عکس در بانک اطلاعاتی می باشد قبلاً مطالبی در این وبلاگ نوشته ام . اما در مورد قسمت اول بایستی از یکسری OCX برای اینکار استفاده کنید مانند Twain Scanning ocx و يا Kodak Image Control ocx .

12 - من از datagrid استفاده ميکنم و هر تغيير در رکوردهای آن صورت بگيرد مستقيماً در ديتابيس اعمال ميشود. من ميخواهم وقتی کاربر هر کاری در برنامه کرد و در آخر از برنامه خواست خارج بشه و از کل تغييراتی که کرده بود صرف نظر کنه يه پيغام بهش بده و اگه خواست تغييراتی که انجام داده صرف نظر کنه همه تغييرات برگرده به حالت اول .
پاسخ : من راه حلی بنظرم نرسید . دوستان اگر نظری دارند بدهند . در ضمن به کتاب برنامه نویسی بانکهای اطلاعاتی در ويژوال بيسيک چاپ شده توسط انتشارات نص نیز مراجعه کنید .

13 – در مورد کار با ADO و چگونگی برقراری ارتباط با فایلهای mdb توضیح دهید .
پاتسخ : قبلاً به اختصار در این زمینه مطالبی نوشته ام . در ضمن به کتاب برنامه نویسی بانکهای اطلاعاتی در ويژوال بيسيک چاپ شده توسط انتشارات نص نیز مراجعه کنید .

14 – چگونه می توان يک صفحه A4 را در يک فرم ايجاد کرد وروی اون مطالب و يا جدول و ... را برای چاپ آماده کرد مثل ليست حقوقی و يا صورت هزينه و اين جور چيزها .
پاسخ : شما اطلاعات خود را بهر شکلی که می خواهید روی فرم قرار دهید . در زمان چاپ فرم می توانید سایز صفحه را با استفاده از خاصیت Papersize شی Printer مشخص کنید . برخی مقادیر که می توان برای خاصیت PaperSize تنظيم نمود عبارتند از :
1 : Letter, 8 1/2 x 11 in
8 : A3, 297 x 420 mm
9 : A4, 210 x 297 mm
11 : A5, 148 x 210 mm

برای اطلاعات بیشتر به مطلبی که در مورد شی پرینتر نوشته ام مراجعه کنید .
نکته : در دات نت نیز شی پرینتر در کلاس System.Drawing.Printing موجود است .

15 – وقتی که یک فرم جهت ورود اطلاعات ساخته می شود باستی از طریق دکمه Tab به فیلدهای بعدی رفت . چگونه می توان کاری کرد که با زدن کلید Enter در هر فیلد به فیلد بعدی رفت ؟
پاسخ :  یک روش اینست که در متد KeyPress هر کادر متنی ( یا فیلد ورود اطلاعات ) کدی بنویسید که تشخیص دهد اگر دکمه Enter فشرده شده فوکوس را به فیلد بعدی مورد نظر شما منتقل کند . برای مثال اگر فرض کنید دو کادر متنی با نامهای Text1 و Text2 در فرمتان دارید کد زیر را برای متد KeyPress کادر متنی Text1 بنویسید :


Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 13 Then Text2.SetFocus
End Sub

16 – لطفاً در مورد StatusBar در WebBrowser توضیح بدهید . لطفاً در مورد نمایش History در WebBrowser توضیح دهید .
پاسخ  :  سوال خود را دقیقتر مطرح کنید .

17 – چگونه می توان فعالیت کلیدهای Alt+Ctrl+Del و Alt+Esc و Alt+Tab را در ويژوال بيسيک غیر فعال کرد ؟
پاسخ : برای اینکار از تابع SystemParametersInfo موجود در کتابخانه user32 استفاده می شود . برای declare کردن این API بصورت زیر عمل کنید :


Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long

  
همچنین ثابت زیر را نیز تعریف کنید :


Private Const SPI_SCREENSAVERRUNNING = 97


حال توسط کد زیر می توانید ترکیب Alt+Ctrl+Del را غیر فعال کنید .


    Dim ret As Integer
    Dim pOld As Boolean
    ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)

برای اطلاعات بيشتر و نيز چگونگی غير فعال کردن دو ترکيب ديگر به اين آدرس مراجعه کنید :

18 – چگونه می توان API های WinInet را به API ها اضافه کرد ؟
پاسخ : در بخش WinInet اين مطلب را توضيح داده ام .

19 -  چگونه می توان یک فایل را بصورت مخفیانه به یک آدریس ایمیل در یاهو ارسال کرد ؟
پاسخ : ؟؟؟

20 – یک برنامه تحت ويژوال بيسيک معرفی کنید که بتوان با آن انتگرال دو گانه گرفت .
پاسخ : اگر منظورتان محاسبه مقدار عددی انتگرال دو گانه یک تابع دو متغیره در یک بازه است که باید از الگوریتم های محاسبات عددی استفاده نمائید . برای اطلاعات بیشتر به کتابهای محاسبات عددی پیشرفته مراجعه کنید . اما اگر منظورتان محاسبه انتگرال دوگانه یک تابع است که اینکار به این راحتی ها امکان پذیر نیست و حتی شاید غیر ممکن باشد .

21 – یک Data Type به اسم PRAS_PORT_0 در Msdn وجود دارد که بصورت زیر تعریف شده است :


typedef struct _RAS_PORT_0 {
  WCHAR wszPortName[RASSAPI_MAX_PORT_NAME];
  WCHAR wszDeviceType[RASSAPI_MAX_DEVICETYPE_NAME];
  WCHAR wszDeviceName[RASSAPI_MAX_DEVICE_NAME];
  WCHAR wszMediaName[RASSAPI_MAX_MEDIA_NAME];
  DWORD reserved;
  DWORD Flags;
  WCHAR wszUserName[UNLEN + 1];
  WCHAR wszComputer[NETBIOS_NAME_LEN];
  DWORD dwStartSessionTime;
  WCHAR wszLogonDomain[DNLEN + 1];
  BOOL fAdvancedServer;
} RAS_PORT_0, *PRAS_PORT_0;


چگونه می توان این data type را در ويژوال بيسيک تعريف نمود ؟ کلاً اگر بخواهیم data type ها را در ويژوال بيسيک تعريف کنيم چه بايد بکنيم ؟
پاسخ : برای تعريف data type در ويژوال بيسيک از ساختار Type-End Type استفاده می شود . برای مثال :


Private Type SampleType
  mem1 As Integer
  mem2 As String
End Type


در مثال فوق يک data type از نوع Private با نام SampleType تعريف شده که دارای دو عضو به نامهای mem1 از نوع Integer و mem2 از نوع String است .

در مورد تغيير انواع داده ای نیز بصورت زیر عمل کنيد :
Int  --> Integer
Bool --> Boolean
DWORD --> Long
WCHAR --> array of Byte

22 - Platform SDK که در سایت Msdn از آن اسم برده می شود چيست ؟ آيا همان سی دی های Msdn است ؟
پاسخ : SDK يا همان source development kit ، شامل يکسری مطلب آموزشی و نمونه کد است که در مورد یک زمینه برنامه نويسی خاص توسط مایکروسافت منتشر می شود . برخی از اين SDK ها قابل دانلود از سايت مايکروسافت ( مثلاً DirectX SDK  ) و برخی دیگر فروشی هستند (Windows Driver Model SDK ) .

+ دوستان لطفاً سوالات خود را بصورت فارسی یا انگلیسی بنویسند . به سوالات پینگلیش پاسخ داده نمی شود .

+ مطلب بعدی : دسترسی به بانک های اطلاعاتی SQL در دات نت .

 

+ حامد شیدائیان ; ٥:۳٠ ‎ب.ظ ; شنبه ٢٠ دی ،۱۳۸٢
comment نظرات ()