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

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


1 – چگونه می توان يک فرم شفاف ( Transparent ) ساخت بطوريکه اطلاعات پشت فرم مشخص باشد ؟

پاسخ : در دات نت به راحتی می توانيد توسط خاصيت Opacity اينکار را انجام دهيد . اما در ويژوال بيسيک 6 برای ساخت يک فرم شفاف به اين آدرس مراجعه کنيد .

 

2 – چگونه می توان برنامه ای برای ارسال ايميل نوشت ؟

پاسخ : استفاده ازيک کامپوننت به اسم MAPI و يا پياده سازی پروتکل SMTP در برنامه . برای روش اول به اين صفحه و برای روش دوم به اين صفحه مراجعه کنيد .

 

3 – چگونه می توان در سی دی رام را در ويژوال بيسيک باز و بسته کرد .

پاسخ : با استفاده از يک API به اسم mciSendString  بصورت زير :

 

Private 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

 

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

 

4 – چگونه می توان از اطلاعات جداول يک بانک اطلاعاتی يک Report تهيه کرده و به کاربر نشان داد ؟

پاسخ : چند روش برای اينکار وجود دارد :

-   استفاده از     CrystalReport که ابزاری مجزا برای ساخت گزارش ها از بانک های اطلاعاتی است و در وی بی می توان از آن استفاده نمود .

-   استفاده از   DataReport موجود در خود وی بی ( Project/Add Data Report )

برای اطلاعات بيشتر در اين زمنيه به دو کتاب زير مراجعه کنيد :

- مباحث برنامه نويسی پيشرفته در ويژوال بيسيک 6

- برنامه نويسی بانک های اطلاعاتی در ويژوال بيسيک 6

هر دو کتاب را انتشارات نص چاپ کرده است .

 

5 – چگونگی تايپ فارسی در ويژوال بيسيک 6 و بطور کلی ساخت برنامه های فارسی در وی بی 6 ؟

پاسخ : يک راه استفاده از يکسری ActiveX است که توسط برخی شرکتهای ايرانی ايجاد شده .  دوستان اگر راه حل ديگری می دانند جواب بدهند .

 

6 – چگونه می توان کاری کرد که اگر کاربر در يک کادر متنی ( Textbox ) يک دستور وی بی ( مثلا ً msgbox"OK" )  نوشت ، اين دستور اجرا شود ؟

پاسخ : من راه حلی به ذهنم نرسيد . دوستان اگر راه حلی دارند لطفاً جواب بدهند .

 

7 – چگونه می توان يک CommandButton ساخت که يک تصوير در سمت چپ و يک متن در سمت راست آن وجود داشته باشد ؟

پاسخ : بنظر من بهتر است دکمه CommandButton را بطور Custom خودمان ايجاد کنيم . بدين منظور مراحل زير را دنبال کنيد :

– دو تصوير برای دکمه مورد نظر خود طراحی کنيد : يکی برای حالت نرمال و يکی برای حالتی که روی دکمه کليک می کنيد و دکمه فرو می رود . اين کار را می توانيد توسط هر نرم افزار گرافيکی انجام دهيد .

– يک PictureBox بر روی فرم خود قرار دهيد و نام آنرا PicButton بگذاريد .

– کد زير را در Form_Load قرار دهيد :

    PicButton.Picture = LoadPicture(normal_file)

که normal_file نام و مسير فايل حالت نرمال می باشد .

 

– کد زير را برای PicButton_MouseDown بنويسيد :

PicButton.Picture = LoadPicture(mousedown_file)

   PicButtonRefresh

 

که mousedown_file نام و مسير فايل حالت کليک می باشد .

– کد زير را برای PicButton_MouseUp بنويسيد :

 

   PicButton.Picture = LoadPicture(normal_file)

   PicButtonRefresh

 

 

8 – چگونه می توان برای دکمه مربوط به DataGrid منوی DropDown ايجاد کرد ؟

پاسخ : من راه حلی به ذهنم نرسيد . دوستان اگر راه حلی دارند لطفاً جواب بدهند .

 

9 – چگونگی ساخت WebBrowser در وی بی ؟

پاسخ : به اين آدرس مراجعه کنيد .

 

10 – چگونگی ساخت يک MailServer با وی بی ؟

پاسخ : به اين آدرس مراجعه کنيد .

 

11 – چگونگی طراحی سخت افزار با آی سی های 8255 & 8254 & 8212 و برنامه نويسی آنها ؟

پاسخ : به جلد دوم کتاب 80X86 IBM PC and Compatible Computers نوشته آقای علی مزيدی مراجعه کنيد . هم خود کتاب و هم ترجمه آن در بازار موجود می باشد .

 

12 -  چگونه می توان فرمهاي به شكل يك متن طراحی کرد كه در هنگام نمايش فقط نوشته نمايش يابد و از لابلاي آن دسكتاب ديده شود ؟

پاسخ : به مقاله ای که قبلاً در اين وبلاگ در مورد طراحی فرمهای Custom نوشته ام مراجعه کنيد . لينک به مقاله

 

 

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

 

+ در پايان  بخاطر اينکه اين وبلاگ با تاخير به روز می شود و نيز بخاطر  تاخير در پاسخ گويي به سوالات ، از همه دوستان عذرخواهی می کنم .

 

+ مطلب آموزشی بعدی :  بررسی توابع مربوط به مديريت رشته ها در ويژوال بيسيک

 

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

Server-Side ActiveX Dll Programming - بخش هشتم

نکته ای در مورد شی Recordset :

متد ExecuteQuery که در کلاس Database نوشتيم يک رکوردست را بعنوان نتيجه انجام query ورودی روی بانک اطلاعاتی شما برمی گرداند .
همانطور که می دانيد توسط خصوصيت RecordCount می توان تعداد رکوردهای نتيجه شده از يک query را که در رکوردست قرار دارند بدست آورد .
اما مشکلی وجود دارد اينست که با روشی که ما در قسمتهای قبل برای اجرای query در اين متد استفاده کرده بوديم ( myrs = Cn.Execute query ) نمی توان از خاصيت Recordcount  رکوردست استفاده نمود زيرا هميشه ۱- برمی گرداند . بعبارت ديگر در عبارت زير مقدار count هميشه ۱- خواهد بود :

myrs.execute(query)
count=myrs.RecordCount

برای حل اين مشکل بايستی رکوردست را با CursorType مساوی adOpenStatic باز کرد . بعبارت ديگر بجای دستورات فوق از دستور زير استفاده کنيد :

myrs.Open squery, Cn, adOpenStatic, adLockOptimistic
count=myrs.RecordCount

+ برای اطلاعات بيشتر در اين زمينه به اين صفحه مراجعه کنيد .

+ بزودی به همه سوالات دوستان عزيز در همين وبلاگ پاسخ می دم ( البته اگر جواب اونا رو بدونم و گرنه که شرمنده دوستان عزيز خواهم شد ) .

 

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

Server-Side ActiveX Dll Programming - بخش هفتم


تابع بررسی وجود sql-injection که در قسمت قبل در آن صحبت کرديم بصورت زير است :

Private Function makesInjection(ByVal query As String) As Boolean
   Dim specialCharacters() As String
   Dim inQoute As Boolean
   specialCharacters = "-- ;,"
   inQoute = False
   For i = 1 To Len(query)
      Char = Mid(query, i, 1)
      If Mid(query, i, 1) = "'" And inQoute = False Then
         inQoute = True
         GoTo EndFor
      End If
      If Mid(query, i, 1) = "'" And inQoute = True Then
         inQoute = False
         GoTo EndFor
      End If
      If inQoute = False Then
         For Index = 1 To UBound(specialCharacters)
            schar = specialCharacters(Index)
            cchar = Mid(query, i, Len(schar))
            If schar = cchar Then
              Exit For
            End If
         Next
         If Index < UBound(specialCharacters) Then
            makesInjection = True
            Exit Function
         End If
      End If
     
EndFor:
        Next
    If inQoute = True Then
      makesInjection = True
    Else
      makesInjection = False
    End If
End Function

ورودی اين تابع query شما و خروجی آن false ياtrue است .
عملکرد تابع بصورت زير است :
اين تابع در طول رشته query شروع به حرکت می کند و هر کاراکتر از آنرا بررسی می نمايد . در صورتيکه کاراکتر جاری ‘ باشد و داخل ‘ ’ نباشيم  متغير مربوط به آن true شده و حلقه يکی بجلو می رود . اما در صورتيکه کاراکتر جاری ‘ باشد و داخل ‘ ’ باشيم متغير مربوط به  آن false شده و حلقه يکی بجلو می رود . سرانجام در صورتيکه داخل ‘ ’ نباشيم  بررسی می شود که اين کاراکتر يکی از کاراکترهای غير مجاز ( کاراکترهای موجود در رشته specialCharacters ) نباشد که اگر باشد تابع true بر می گرداند .
پس از اتمام حلقه متغير مربوط به ‘ بررسی می شود که اگر true باشد در صورت injection وجود داسته و تابع نيز true بر می گرداند .

 

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