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

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

1 – چگونه مي توان در ويژوال بيسيك برنامه اي نوشت كه بتوان با آن رجيستري  را دستكاري كرد ؟
پاسخ : به آرشيو موضوعي وبلاگ بخش كار با رجيستري مراجعه كنيد .

2 – چگونه مي توان فايلهاي صوتي را به MID تبديل كرد ؟
پاسخ : اگر منظورتان در وي بي است كه بايد دنبال يك OCX يا ActiveX مناسب براي اينكار بگرديد . در غيراينصورت بايد از نرم افزارهاي تبديل كننده فايلهاي صوتي استفاده كنيد .

3 – چگونه مي توان در بانك هاي اطلاعاتي از تاريخ شمسي استفاده كرد ؟
پاسخ : تاريخ را بصورت String در بانك اطلاهاتي ذخيره كنيد و در اينصورت بايستي خودتان روتينهاي مربوط به كار با تاريخ را  بنويسيد .

4 – اگه ما بخواهيم يه HTML بوسيله DHTML Application در ويژوال بيسيك بسازيم هنگام ساختن فايل hTML يه فايل DLL ديگر هم Save ميشود كه در صورت نبود آن ، برنامه ما كار نميكد  و اگر هم بوسيله ويژوال بيسيك كاري كنيم كه همه چيزها فقط در فايل html ذخيره بشود كد هايي كه در قسمت كد نوشتيم در فايل ما ذخيره نميشود به همين خاطر ما نمي توانيم از html ي كه در ويژوال بيسيك ساختيم در يك سرور وب استفاده كنيم چون html موجود در سرور ، ديگر به  dll اي كه ما در كامپيوتر خودمان ساختيم دسرسي ندارد و اگه ما dll را جابجا كنيم هم ديگر html كار نميكند . چگونه مي توان اين مشكل را حل كرد ؟
پاسخ : اين فايل DLL ، در واقع كلاسها و كدهاي كامپايل شده مورد نياز در صفحات DHTML شما مي باشد . شما بايستي اين فايل dll را در كنار صفحات html تان در سرور مربوطه قرار دهيد . همچنين اين فايل dll بايستي در سرور مربوطه رجيستر شود .

5 - - من با وي بي كار مي كنم و تازه سر برنامه نويسي پورتها رفته ام . من ديتا(H378&) وآدرس(مثلا۲۵۵) را مي خواست به من گفتن بايد مبنا ها را ياد بگيري من آنهارا ياد گرفتم (مثلا مبناي ۲، ۱۲۸) اما چه ربطي داشت؟ من الان مي خواهم با وي بي وسايل را كنترل كنم اما شماره پورت و طريقه روشن نگه داشتن چند تاي آنها باهم در يك ديتا مانند مثال ديتا بالايي را نمي دانم .
پاسخ : براي آشنايي با مبناها ، شماره پورتها و برنامه نويسي آنها به كتاب 80X86 IBM PC and Compatible Computers كه هم خود آن و هم ترجمه اش در بازار ايران موجود است مراجعه كنيد . براي آشنايي با چگونكي برنامه نويسي سخت افزار در ويندوز و نيز برنامه نويسي پورت پرينتر به آرشيو موضوعي وبلاگ مراجعه كنيد .

6 - چه جوري ميشه از داخل برنامه اي كه توسط وي بي نوشته ام با فشار بر روي يك CommandButton يا از طريق منويي كه ساخته ام بر نامه اي ديگر مثلا نصب يك برنامه يا ماشين حساب ويندوز را اجرا كرد؟
پاسخ : با استفاده از يك API به اسم ShellExecute  . فرمت كلي استفاده از اين تابع بصورت زير است :

Const SW_SHOW = 1
Const SW_SHOWMAXIMIZED = 3

Public Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" _
  (ByVal hwnd As Long, _
   ByVal lpOperation As String, _
   ByVal lpFile As String, _
   ByVal lpParameters As String, _
   ByVal lpDirectory As String, _
   ByVal nShowCmd As Long) As Long

Sub RunYourProgram()
  Dim RetVal As Long
  On Error Resume Next
  RetVal = ShellExecute(0, "open", "<full path to program>", "<arguments>", "<run in folder>", SW_SHOWMAXIMIZED)
End Sub


7 – چگونه مي توان از پورت پرينتر يكسري اطلاعات بصورت ورودي گرفت ؟
پاسخ :  به آرشيو موضوعي و بخش برنامه نويسي پورت موازي مراجعه كنيد .

8 – چگونه مي توان فلاپي ديسك يا يكي از درايوهاي هاردديسك را توسط ويب بي فرمت كرد ؟
پاسخ : ابتدا دو API زير را در برنامه تان Declare كنيد :

Private Declare Function SHFormatDrive Lib "shell32" _
    (ByVal hwnd As Long, ByVal Drive As Long, ByVal fmtID As Long, _
    ByVal options As Long) As Long


Private Declare Function GetDriveType Lib "kernel32" Alias _
    "GetDriveTypeA" (ByVal nDrive As String) As Long

سپس كد زير را براي فرمت درايو بنويسيد :

    Dim DriveLetter$, DriveNumber&, DriveType&
    Dim RetVal&, RetFromMsg%
    DriveLetter = UCase(Drive1.Drive)
    DriveNumber = (Asc(DriveLetter) - 65)
    DriveType = GetDriveType(DriveLetter)

    If DriveType = 2 Then
        RetVal = SHFormatDrive(Me.hwnd, DriveNumber, 0&, 0&)
    Else
RetFromMsg = MsgBox("This drive is Not a removeable" & vbCrLf & _
        "drive! Format this drive?", 276, "SHFormatDrive Example")


        Select Case RetFromMsg
            Case 6'Yes
            RetVal = SHFormatDrive(Me.hwnd, DriveNumber, 0&, 0&)
            Case 7'No
            ' Do nothing
        End Select

     End If


9 – چگونه مي توان به يك IP  اطلاعات فرستاد ؟
پاسخ : مي توانيد از كنترل WinSock استفاده كنيد . براي اطلاعات بيشتر به آرشيو موضوعي مراجعه كنيد .

10 – چگونه مي توان ipMACHINENAME هر سيستمي را پيدا كرد ؟
پاسخ : مي توانيد از كنترل WinSock استفاده كنيد . براي اطلاعات بيشتر به آرشيو موضوعي مراجعه كنيد .

11 - چطور ميشه يه برنامه رو تو بك گرا ند اجرا كرد در حالي كه آيكون برنامه در سيني سيستم باشه. مثلا مثل آنتي ويروس ها ؟
پاسخ : به آرشيو موضوعي وبلاگ و بخش " قرار دادن آيكون برنامه در كنار ساعت ويندوز " مراجعه كنيد .

12 – در مورد تابع DoEvents توضيح دهيد .
پاسخ : اين تابع به سيستم عامل اجازه مي دهد ساير event ها را پردازش كند . سينتكس اين تابع بصورت زير است :

DoEvents( )

اين تابع زمانيكه بخواهيم به كاربر اجازه دهيم يك فرايند را در وسط كارش  كنسل كند مفيد مي باشد . براي مثال فرض كنيد برنامه اي  نوشته ايد كه با زدن يك دكمه اطلاعاتي را در يك فايل مي نويسد و با زدن دكمه ديگر از برنامه خارج مي شويد . اگر شما دكمه بستن برنامه را در وسط كار نوشتن اطلاعات در فيل فشار دهيد برنامه تا زمانيكه كار نوشتن انجام نشود بسته نخواهد شد اما اگر دستور DoEvents را جايي در وسط كد مربوط به دكمه نوشتن قرار دهيد اجرا هر زمان به آنجا برسد سيستم event مربوط به كليك شدن دكمه close را اجرا مي كند .

13 - با ويژوال بيسيک چگونه می توان با پورت سريال موازی و يواس بی ارتباط برقرار کرد ؟
پاسخ : براي اينكار ابتدا بايد شماره پورت آنها را بدانيد و سپس با استفاده از dll اي كه در بخش برنامه نوسي سخت افزار در آرشيو موضوعي آورده شده اطلاعات را به اين شماره پورتها بفرستيد يا از آنها بخوانيد .

14 – چگونه مي توانم توسط وي بي دايرکتوری ايجاد کنم يا فايل کپی کنم؟
پاسخ : به آرشيو موضوعي وبلاگ بخش كار با فايلها مراجعه كنيد .

+ حامد شیدائیان ; ٢:۳٩ ‎ب.ظ ; سه‌شنبه ٢٧ آبان ،۱۳۸٢
comment نظرات ()

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


1 – زمانيکه از کنترل Winsock در وی بی استفاده می کنم خطای رجيستر نبودن می گيرم ؟
پاسخ : سرويس پک 5 مربوط به ويژوال استديو 6 را از اين آدرس دانلود کرده و نصب کنيد تا نسخه کنترل Winsock شما ارتقا يابد .
در صورتيکه مشکلتان حل نشد می توانيد از WinSock API نيز استفاده کنيد . اين API را بعداً شرح خواهم داد اما فعلاً از اين آدرس نيز می توانيد کمک بگيريد .

2 – چگونه می توان تصاوير را در بانک اطلاعاتی ذخيره کرد ؟
پاسخ : برای اينکار اولاً بايستی فيلدی را در جدول بانک اطلاعاتی خود از نوع باينری ايجاد کنيد . سپس بايستی فايل مورد نظر خود را باز کرده و آنرا درون يک آرايه از نوع بايت کپی کنيد . حال می توانيد اين آرايه را بعنوان مقدار فيلد در جدول مورد نظر قرار دهيد :
روش ديگر استفاده از ADO Stream است .
در اين آدرس و اين آدرس و اين آدرس می توانيد اطلاعات بيشتر همراه با برنامه های نمونه بدست آوريد .


3 – آيا می توان از Microsoft Form 2 Control بدون نصب برنامه Word استفاده کرد ؟
پاسخ : ايندو تا ربطی بهم ندارند .

4 – چگونه می توان برنامه ای شبيه Yahoo Messenger نوشت ؟
پاسخ : برای اينکار شما بايستی با مبحث Network Programming با استفاده از Winsock آشنا باشيد . برای اطلاع بيشتر به آرشيو موضوعی وبلاگ مراجعه کنيد .

5 – نحوه کار با کامپوننتهای OXC را در وی بی توضيح دهيد .
پاسخ : اگر می خواهيد خودتان کنترل OCX بنويسيد می توانيد از کتاب Internet Programming in Visual Basic 6 که انتشارات نص نيز آنرا ترجمه کرده کمک بگيريد . اما اگر می خواهيد از کنترلهای OCX موجود در خود وی بی استفاده کنيد از منوی Project وارد Component شده و کامپوننت مورد نظرتان را انتخاب کنيد تا به نوار ابزار اضافه شود . توضيحات هر کامپوننت را می توانيد در سايت MSDN يا سی دی های MSDN بدست آوريد .

6 – چگونه می توان دو دستور را بطور همزمان در وی بی اجرا کرد ؟
پاسخ : برای اينکار بايستی از امکان Threading ويندوز استفاده کنيد . برای اين منظور تعدادی API وجود دارد که می توانيد از آنها کمک بگيريد . برای اطلاعات بيشتر به نرم افزار API Guide و بخش Thread آن مراجعه کنيد .


7 – تفاوت Module و Class Module را در وی بی توضيح دهيد .
پاسخ : Class Module برای نوشتن کلاس ( برنامه نويسی شی گرا OOP ) در وی بی استفاده می شود . البته وی بی 6 تمام امکانات برنامه نويسی شی گرا را ندارد مثلاً بطور کامل از وراثت پشتيبانی نمی کند يا امکان ايجاد کلاسهای Abstract را ندارد و نيز دارای امکان تعريف متدها و متغيرهای اشتراکی نيست . در صورتيکه بخواهيد از تمام امکانات شی گرايي استفاده کنيد سراغ VB.NET برويد .
اما Module برای تعريف يکسری ثابت ، متغير ، تابع و يا روتين بکار می رود که در تمام پروژه استفاده می شوند . برای مثال Declare های توابع API را در ماژول قرار می دهيم .

8 -  من با کدی که قبلاً برای باز و بسته کردن در سی دی رام گفته بوديد مشکل دارم .
پاسخ : ابتدا يک ماژول به پروژه تان اضافه کنيد و خط زير را در آن قرار دهيد :

Public Declare Function mciSendString Lib “winmm.dll"  Alias "mciSendStringA” (ByVal lpstrCommand As String,ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long


حال می توانيد توابع OpenCDDoor و CloseCDDoor را در کد فرمتان قرار داده و آنها را صدا بزنيد :

Sub OpenCDDoor()

  mciSendString “Set CDAudio Door Open Wait”, 0&, 0&, 0&

End Sub

 

Sub CloseCDDoor()

  mciSendString “Set CDAudio Door Closed Wait”, 0&, 0&, 0&

End Sub


9 – چگونه می توان در وی بی فرمهای غير مستطيلی به شکلهای زيبا درست کرد ؟
پاسخ : اين مطلب قبلاً در اين وبلاگ توضيح داده شده است . به اينجا مراجعه کنيد .


10 – چگونه می توان کاری کرد که در حين اجرای برنامه کاربر بتواند دستوری را در يک TextBox تايپ کند و با زدن يک دکمه آن دستور اجرا شود ؟
پاسخ : برای اينکار بايستی از Microsoft Script Control استفاده کنيد . ابتدا وارد بخش References شده و اين مورد را به پروژه تان اضافه کنيد . حال می توانيد از کد زير استفاده کنيد :

  Dim script As ScriptControl
  Set script = New ScriptControl
  script.Language = "VBSCript"
  script.ExecuteStatement (Text1.Text)

 

11 – چگونه می توان از Microsoft Speech Library در وی بی استفاده کرد ؟
پاسخ : در آينده اين مطلب را توضيح خواهم داد . اما فعلاً می توانيد از اين آدرس و اين آدرس و اين آدرس استفاده کنيد .


12 – چگونه می توان ActiveX های ايجاد شده توسط وی بی را در وب استفاده کرد ؟
پاسخ : برای اينکار ابتدا پروژه ای از نوع ActiveX Document ايجاد کنيد . کد مورد نظرتان را در پروژه بنويسيد و سپس پروژه را کامپايل کنيد . نهايتاً توسط ابزاری به اسم Package & Deployment Wizard که در ويژوال استديو موجود است می توانيد پروژه خود را قابل استفاده در وب کنيد . برای اطلاعات بيشتر به از کتاب Internet Programming in Visual Basic 6 که انتشارات نص نيز آنرا ترجمه کرده مراجعه کنيد .


+ به ساير سوالها نيز بزودی پاسخ داده می شود .

 

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