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

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

1 -  برنامه Multimedia Builder از چه کامپایلری برای ساخت برنامه های اجراییش استفاده می کند ؟ آیا می توان از امکانات آن در برنامه نویسی وی بی استفاده کرد ؟
پاسخ : در مورد این برنامه و کامپایلر آن اطلاعات زیادی  ندارم اما شاید بتوان reference های آنرا در ویژوال بیسیک استفاده نمود .

2 – چگونه می توان یک بانک اطلاعاتی اکسس را به فرمت یونیکد تبدیل کرد ؟
پاسخ : یک برنامه بنویسید که اطلاعات را از جداول بانک طلاعاتی بخواند ، معادل یونیکد آنها را تولید کرده و در جداول قرار دهد .

3 -  چگونه می توان در وی بی برای یک بانک Backup درست کرد ؟
پاسخ : اگر منظورتان از بانک ، بانک اطلاعاتی است می توانید برنامه ای بنویسید که اطلاعات جداول بانک اطلاعاتی مورد نظرتان را بخواند و در یک فایل قرار دهد .

4 – چگونه می توان صدا را توسط TCP/IP انتقال داد ؟
پاسخ : شما بایستی اطلاعات صدا را بصورت stream بگیرید و توسط WinSocket که قبلاً در مورد آن نوشته ام انتقال دهید و در مقصد نیز بصورت stream دریافت کنید و پخش نمایید . برای کار با stream های صدا می توانید از یک Dll به نام WavStream  استفاده نمایید . برای اطلاعات بیشتر به این آدرس مراجعه کنید .

5 – من یک مشکل در گزارش گیری دارم . می خواهم در گزارش روی پرینتر چند آیتم بصورتی از بقیه آیتمها متمایز باشند مثلاً رنگ زمینه آنها فرق کند و غیره ؟
پاسخ : در زمان ساخت گزارشتان باید آیتم های مورد نظرتان را با background رنگی قرار دهید . ( برای مثال در زمان استفاده از Date Report یا Crystal Report ) .

6 – چگونه می توان با استفاده از وی بی دیسکت یا درایو های هادر را فرمت کرد ؟
پاسخ : قبلاً به این سوال پاسخ داده ام .  به اینجا (  سوال شماره 8 ) مراجعه کنید .

7 -  چگونه می توان پارتینشنی که ویندوز در آن قرار دارد را توسط وی بی شناسایی کرد ؟
پاسخ : از دستور زیر استفاده کنید :

 Environ$("windir")

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


8 – وقتی از نرم افزار اکتیو اسکین استفاده می کنم گزینه راست به چپ برای آن تنظیم نمی شود . آیا می توان گزینه راست به چپ را برای آن تنظیم کرد ؟
پاسخ : من زیاد با این نرم افزار کار نکرده ام . اگر دوستان راه حل را پیدا کردند جواب بدهند .

9 – برنامه من در مانتیور 17 اینچ خوب نشان داده ی شود اما در مانیتور 15 اینچ نه . علت چیست ؟
پاسخ : سایز فرم را بزرگ گرفته اید .

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

11 -  چند کتاب پیشرفته در مورد Dll و اکتیو اکس در وی بی معرفی کنید .
پاسخ : کتابهای انگلیسی زیادی در این زمینه وجود دارد که در سایت amazon با یک جستجوی ساده می توانید آنها را بیابید . کتاب فارسی در زمینه dll ندیده ام اما در مورد اکتیوایکس به کتاب برنامه نویسی اینترنت در ویژوال بیسیک 6 انتشارات نص مراجعه کنید .

12 – چگونه می توان توسط تابعهای FindWindow و FindWindowEx یا با هر روش دیگر username و password اکانت ها را در آورد ؟
پاسخ : ؟؟؟

13 – در مورد کار با تلفن در وی بی توشیح دهید ؟ می می خواهم در برنامه ام شماره تماس گیرنده را داشته باشم و بتوانم با او از طریق برنامه ام صحبت کنم .
پاسخ : به آرشیو موضوعی سایت و بخش کار با TAPI مراجعه کنید .

14 – چگونه می توان Scrollbar را در FlexGrid به پایین ترین جای ممکن آورد برای مثال هر بار که با استفاده از AddItem یک ردیف به جدول اضافه می شود Scrollbar به پایین ترین جلی ممکن برود .
پاسخ : من راه حلی به نظرم نرسيد .

15 – چگونه می توان شماره سریال هارد را بدست آورد ؟
پاسخ : از تابع GetVolumeInformation موجود در کتابخانه Kernel32 استفاده کنید . برای declare کردن این تابع بصورت زیر عمل کنید :

Declare Function GetVolumeInformation Lib "kernel32" Alias
"GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal
lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long,
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal
nFileSystemNameSize As Long) As Long

حال کد زیر را برنامه تان قرار دهید :

  Dim lngNumSerial As Long
  Dim strRotulo As String
  Dim strTipoVolume As String
  Dim lngVal As Long
  strRotulo = Space(255)
  strTipoVolume = Space(255)
  lngVal = GetVolumeInformation("C:\", strRotulo, Len(strRotulo), lngNumSerial, 0, 0, strTipoVolume, Len(strTipoVolume))
  MsgBox (lngNumSerial)

البته شماره سریالی که کد فوق بر می گرداند شماره سریالی است که سیستم عامل به هارد می دهد و زمانیکه هارد مجدداً پارتیشن بندی شود این شماره تغییر خواهد کرد . برای بدست آوردن شماره سریالی که سازنده روی هارد قرار داده از تابع DeviceIoControl استفاده کنید . برای اطلاعات بیشتر به آدرسهای زیر مراجعه کنید :

شماره سریال هارد-1

شماره سریال هارد-2

شماره سریال هارد-3

شماره سریال هارد-4

شماره سریال هارد-5


16 – در مورد نحوه رایت بر روی سی دی توسط وی بی توضیح دهید ؟
پاسخ : بایستی از یکسری َActiveX هایی که برای این منظور ایجاد شده استفاده کنید . یکی آنها mcdburner نام دارد که می توانید اطلاعات بیشتر در مورد را در اینجا ببینید .

17 – برنامه ای برای ساخت برنامه های نصبی معرفی کنید زیرا برنامه Package & Deployment Wizard اصلاً امکانات مناسبی در این زمینه ندارد ؟
در مورد EXE کردن برنامه هايی که می نويسيم به طوری که در کامپيوتری که VB نداشته باشد اجرا شود توضیح دهید .
پاسخ : دو برنامه مشهور برای اینکار وجود دارد :

InstallShield

Wise Installer

توسط لینکهای فوق می توانید وارد سایت رسمی آنها شده و نسخه های آزمایشی این برنامه ها را دریافت کنید .
در اینجا نیز می توانید مقایسه بین این دو محصول را ببینید . لازم بذکر است که هر دو محصول Net Support. می باشند .

سعی می کنم در مورد یکی از ایندو برنامه یک دوره آموزشی را در وبلاگ بنویسم .

18 – چگونه می توان از کامپوننت هایی که در ویندوز XP استفاده شده استفاده کرد ( منظورم دکمه ها و فریم ها و غیره است که در وی بی بصورت کلاسیک هستند ) ؟
پاسخ : راه حلی به نظر من نرسید .

19 – چگونه می توان یک ماشین حساب را در وی بی طراحی کرد ؟
چگونه می توان یک متغیر رشته ای را بصورت فرمول به برنامه داد تا آنرا محاسبه کند ؟
پاسخ : بایستی برای پردازش عبارت محاسباتی ابتدا عبارت مورد نظر را بصورت Postfix یا Prefix در آورید . سپس آنرا خوانده و در Stack بریزید و آنگاه Stack را پردازش نمایید .
برای اطلاعات بیشتر به کتابهای ساختمان داده (Data Structure) مراجعه کنید .

20 – در مورد ارتباط یک دستگاه دیجیتال با کامپیوتر ( مثلاً پورت موازی ) توضیح دهید .
لطفا در مورد کنترل وسايل از طريق پورت موازی يا USB توضيح بديد (آيا نيازی به مدار جانبی دارد يا نه) .
پاسخ : سایتها و کتابهای زیادی را تاکنون دربخش مقالات و نیز پرسش و پاسخهای وبلاگ در این زمینه معرفی کرده ام . به آرشیو ماهیانه مراجعه کنید .

21 – من می خواهم اطلاعاتی را از طريق يک صفحه وب در بانک اطلاعاتی SQL Server 2000 به صورت يونيکد ذخيره کنم. اولاً هنگام درست کردن بانک اطلاعاتی و جداول آن چه نوع کاراکتر ستی را برای آنها درSQLServer انتخاب کنم؟ ثانیاً آیا فقط تنظيم CodePage صفحه وب به يونيکد کافی است يا بايد تغييرات ديگری نيز در نحوه ذخيره اطلاعات اعمال نمایم؟
پاسخ : کاراکتر ست صفحات html خود را windows-1252 قرار داده و کدپیج Session را در برنامه تان نیز 1252 قرار دهید .

22 – چگونه می توان برای یک فایل خروجی از برنامه آیکون تعیین کرد ؟
پاسخ : برای فرم برنامه تان یک آیکون قرار دهید . برای اینکار از بخش خصوصیات فرم مورد Icon را زده و یک فایل ico یا cur به آن اختصاص دهید .

23 - من قبلا يک برنامه answering machine نوشته بودم که با مودم Rockwell جواب ميداد حالا که آن را روی مودم zoltrix اجرا ميکنم جواب نمی دهد . در ضمن برنامه را با استفاده از کنترلMscomm نوشته بودم چطور میشه برنامه ايی نوشت که روی همه مودم ها جواب بده و وابسته به دستورات خاص نباشه ؟
پاسخ : بجای استفاده از MsComm از TAPI استفاده کنید . برای این منظور به آرشیو موضوعی یا ماهیانه وبلاگ مراجعه کنید .

24 – سوال من در مورد D3DVertex است . زمانیکه ما یک Vertex را با P(x,y,z),N(x,y,z),u,v معرفی میکنیم منظور از N وu-v چیست ؟
پاسخ : دایرکت ایکس و سایر برنامه های مدلسازی سطوح سه بعدی ( مثل 3DMax ) برای مدل کردن اشیا سه بعدی و تقریب سطوح انحنا دار این اشیا از یک تقریب به اسم تقریب مش چند ضلعی استفاده می کنند . در این تقریب سطح سه بعدی را توسط یکسری چند ضلعی مسطح ( معمولاً مثلث یا مربع ) تخمین می زنیم . وظیفه برنامه مدلساز اینست که اطلاعات این چند ضلعی ها را بگیرد و بر اساس آن سطح شی سه بعدی را رندر کرده و با در نظر گرفتن اطلاعات نورپردازی ، ماده و بافت ، تصویر نهایی از آن شی را تولید کند . هر چند ضلعی توسط پارامترهای زیر مشخص می شود :
– مختصات رووس چند ضلعی : شامل مختصات x-y-z نقاط راس چند ضلعی
– بردار نرمال سطح : بردار نرمال سطح یک چند ضلعی ، از ضرب خارجی يا Cross Product بین دو بردار ساخته شده از اتصال سه راس چند ضلعی ایجاد می شود . از بردار نرمال سطح در الگوریتم های نورپردازی و حذف سطوح مخفی استفاده می شود .
– مختصاتهای نگاشت بافت ( مختصاتهای u-v ) رووس چند ضلعی : برای اینکه یک تصویر دو بعدی را بر روی سطح یک شی سه بعدی بعنوان بافت قرار دهیم بایستی مشخص کنیم هر نقطه از سطح سه بعدی متناظر با کدام نقطه روی تصویر دو بعدی است . برای اینکار از مختصات نگاشت بافت استفاده می شود .

در صورت تمایل و بدست آوردن اطلاعات بیشتر در این مورد می توانید توسط ایمیل با من مکاتبه کنید .

25 – من می خواهم برنامه ای بسازم که در ویندوز بصورت مخفی باشد و هر کلیدی که زده می شود را ثبت کند اما برنامه نمی تواند رویدادهای کیبورد را تشخیص دهد ؟
پاسخ : اگر شما از رویدادهای کیبورد برای گرفتن کلیدهای زده شده در ویندوز استفاده کنید اینکار تا زمانی امکان پذیر است که برنامه شما بعنوان برنامه فعال سیستم باشد اما اگر بخواهید حتی وقتی برنامه دیگری بعنوان برنامه فعال سیستم است بتوانید از کیبورد Log بگیرید بایستی از Api های کار با کیبورد استفاده کنید . در مورد این توابع در آینده مطالبی خواهم نوشت .
به این آدرس نیز سر بزنید .

26 - ويژوال بيسيکی که اينجانب نصب کرده ام مربوط به 2003 و نسخه 6 است اما پس از اينکه  با استفاده از deployment     and package wizard  مجموعه نصبی مورد نظر را می سازم پس از اجرای فايل نصب دايماً با پيغام "فايلهای که نصب خواهد شد ازفايلهای موجود درکامپيوتر شما قديميتر است وآيا می خواهيد آنها را نگه داريد مواجه می شوم. ضمناً ويندوز من XP است. با توجه به اينکه هيچ update برای توليد فايل نصبی نيافته ام خواهشمندم با توضيحات راهگشای خودتان راه حلی برای اين معضل ارايه دهيد.
پاسخ : سرویس پک 5 ویژال استدیو را از روی سایت مایکروسافت دریافت کرده و نصب کنید .

27 – من برنامه ای نوشته ام که توسط CommonDialog تعداد بیش از یک فایل را بتوان باز کرد ( توسط CommonDialogFlag=&H200& ) و نام فایلها را درون یک لیست اضافه کند . مشکل اینجاست که در این برنامه اگر تعداد فایلهای انتخاب شده توسط کاربر بیش از 17 مورد باشد وی بی خطا می دهد و احتمالاً بافر FileName پر می شود . آیا راه حلی وجود دارد که در انتخاب فایلها محدودیت نباشد .
پاسخ : ابتدا ثابت زیر را در برنامه تان تعریف کنید :

Private Const CD_FLAGS = cdlOFNAllowMultiselect + cdlOFNExplorer + cdlOFNLongNames

سپس خاصیت Flags مربوط به CommonDialog را برابر ثابت فوق بگذارید .
آنگاه بایستی خاصیت MaxFileSize را برابر 32000 قرار دهید .
کد زیر را برای نمونه مطالعه کنید ( توسط این کد می توان نام فایلهای انتخاب شده را نیز بدست آورد ) :

    Dim i As Integer
    Dim myFiles() As String
    Dim myPath As String
    
    With CommonDialog1
        .MaxFileSize = 32000 'this will max out the buffer for the filenames array for large          selections.
        .CancelError = True
        .Filter = "All Files *.*/*.*"
        .Flags = CD_FLAGS 'this is where we tell it to use multiselect
        .ShowOpen
        
        myFiles = Split(.FileName, vbNullChar) 'the Filename returned is delimeted by a null character because we selected the cdlOFNLongNames flag
        
        Select Case UBound(myFiles)
            Case 0 'if only one was selected we are done
                List1.AddItem myFiles(0)
            Case Is > 0 'if more than one, we need to loop through it and append the root directory
                For i = 1 To UBound(myFiles)
                    myPath = myFiles(0) & IIf(Right(myFiles(0), 1) <> "\", "\", "") & myFiles(i)
                    List1.AddItem myPath
                Next i
        End Select

    End With

برای اطلاعات بیشتر در مورد این کنترل به اینجا و اینجا مراجعه کنید .
در اینجا می توانید یک CommonControl قدرتمند تر را ببینید .

28 – من می خواستم در وی بی فرمی داشته باشم که همیشه زیر تمام فرمهایم باشد . از MDIForm نیز نمی توانم استفاده کنم زیرا می خواهم روی آن فرم کنترل قرار دهم ؟
پاسخ : ابتدا سه تابع زیر را از کتابخانه user32 تعریف کنید :

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public 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

سپس ثوابت زیر را تعریف کنید :

Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const HWND_TOPMOST = -1
Public Const Flags = SWP_NOMOVE Or SWP_NOSIZE

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

Public Function GethWndByWinTitle(winTitle As String) As Long
    Dim retval As Long
    GethWndByWinTitle = FindWindow(vbNullString, winTitle)
End Function

تابع قرار دادن فرم در حالت Bottom ( زیر همه فرمها ) بصورت زیر است :

Sub FormOnBottom(Frm As Form)
Dim DeskH As Long
DeskH = GethWndByWinTitle("Program Manager")
Call SetParent(Frm.hWnd, DeskH)
End Sub

تابع قرار دادن فرم در حالت Top ( روی همه فرمها ) بصورت زیر است :

Sub FormOnTop(Frm As Form)
Call SetWindowPos(Frm.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, Flags)
End Sub

تابع قرار دادن فرم در حالت نرمال بصورت زیر است :

Sub FormNormal(Frm As Form)
Dim DeskH As Long
DeskH = GethWndByWinTitle("Form1")
Call SetParent(Frm.hWnd, DeskH)
End Sub

29 – سیستم عاملهای لینوکس با چه زبانی نوشته شده اند و با چه زبانی می توان آنها را تغییر داد یا لینوکس جدیدی نوشت ( منظور اینکه سورس آنها به چه زبانی است ) ؟
پاسخ : معمولاً اکثر سیستم عاملها را با زبان سی ایجاد می کنند . همچنین یکی از کامپایلرهایی که در محیط سیستم عامل لینوکس برای نوشتن برنامه های جدید وجود دارد Gcc نام دارد . برای اطلاعات بیشتر در مورد این کامپایلر به اینجا مراجعه کنید .

30 – شما چه زبانی را برای ساختن بازیها پیشنهاد می کنید که امکانات بیشتر و قویتری داشته باشد ؟
پاسخ : ويژوال سی

+ این مطلب ، احتمالاً آخرین مطلب این وبلاگ در سال جاری می باشد . بنابراین پیشاپیش سال نو را به همه شما دوستان و خوانندگان عزیر وبلاگ تخصصی ویژوال بيسيک تبریک عرض کرده و ایام خوبی را برای همه شما آرزو دارم .

 

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

مطلب جديد+پاسخ به سوالات


خدمت همه دوستان عزير و خوانندگان اين وبلاگ عرض کنم که تا قبل از سال نو يک بخش ديگر پاسخ به سوالات و يک مطلب آموزشی در مورد بررسی Query های SQL خواهيم داشت . احتمالاً روز يکشنبه به سوالات پاسخ داده می شود پس تا اون موقع سوالات خودتون رو در بخش نظرخواهی بنويسيد يا ايميل کنيد .

+ اين هم عيدی ما برای دوستانی که عيدی می خواستند :-)

 

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

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

1 – چگونه می توان Calender Control را فارسی کرد ؟
پاسخ : فکر می کنم خودتان باید یک کنترل جدید طراحی کنید .

2 -  من دارم سعی می کنم یک MsgBox با دکمه های فارسی طراحی کنم . یک کنترل ActiveX نیز برای آن نوشته ام اما هم کامل نیست و هم محدودیتهایی دارد چون خود جعبه پیغام یک تابع است . نظر شما در این مورد چیست ؟
پاسخ : لینک های زیر درباره چگونگی ساخت MsgBox های سفارشی در وی بی است :

A Custom MsgBox

Custom Message Box

A non Standrad MsgBox

Custom MsgBox Control

Create your own custom MsgBox function

A cool custom (form) msgbox using API to get icon

برای یافتن نمونه های بیشتر به سایت www.planetsourcecode.com رفته و عبارت custom msgbox را در بخش ويژوال بيسيک 6 آن جستجو کنید .

3 – چگونه می توان در وی بی اطلاعات را روی یک فایل ذخیره کرد . برای مثال اطلاعات روی Database را در فایل backup گرفت و بتوان از این اطلاعات بر اساس یک فیلد یا گزینه خاص گزارش گیری کرد ؟
پاسخ : برای ایجاد و کار با فایلها قبلاً مطالبی در وبلاگ نوشته ام . به آرشیو موضوعی وبلاگ مراجعه کنید . در مورد جستجو و گزارش گیری از اطلاعات فایل خودتان بایستی روتین های جستجو در فایل را بنویسید بعبارت دیگر بایستی اطلاعات فایل را load  کرده و روی آنها عمل جستجو را انجام دهید .

4 – چگونه می توان فرم فعال را تشخصی داد ؟ آیا می توان متغیری با خاصیت فرم تعریف کرد و آن را به فرم فعالمان اختصاص داد ؟
پاسخ : در مورد تشخیص فرم فعال من روشی پیدا نکردم اما فکر می کنم بایستی از دستگیره فرم یا Hook استفاده کنید .  در مورد تعریف متغیر نیز وی بی دارای شیی به نام Form است که می توانید در برنامه تان از آن استفاده کنید برای مثال اگر فرمی به اسم Form1 در برنامه تان داشته باشید آنگاه :

Dim F As Form
Set F = New Form1

 5 – چگونه می توان محتوای چند فایل را گرفته و درون یک فایل Exe که از قبل وجود دارد ریخت . این فایل exe یک برنامه است و می خواهم این فایلها را با دستوراتی کنترل کنم یعنی کلاً چند تا فایل را داخل یک فایل Exe ریخت ( مثل برنامه های فشرده ساز ) ؟
پاسخ : قبلاً به سوال مشابه این سوال پاسخ داده ام . شما بایستی با ساختار فایلهای Exe آشنا باشید که مطلب ساده ای نیست و فایلهای مورد نظر خود را در ناحیه مشخصی از فایل Exe درج کنید . به این لینک مراجعه کنید :

+ اگر دوستان روش دیگری سراغ دارند لطفاً در بخش نظرخواهی ذکر کنند .

6 – من از سورسی که آیکون برنامه را کنار ساعت ویندوز قرار می دهد استفاده کردم اما نمی دانم چگونه برای رویدادهای کلیک و دابل کلیک روی آیکون برنامه بنویسم ؟
پاسخ : همانطور که در مقاله هم گفته شده بایستی از متد Form_MouseMove استفاده کنید و در آن نوع کلیک شدن ماوس را تشخیص داده و بر اساس آن عملی را انجام دهید .

7 – چگونه می توان کنترلهای استاندارد ActiveX یا کنترلهای طراحی شده توسط خودمان را در سلولهای یک DataGrid یا MSFlexGrid قرار داد ؟
پاسخ : در این زمینه من راه حلی پیدا نکردم .

8 – چگونه می توان از برنامه های وی بی در AutoCad استفاده کرد . بعنوان مثال من یک برنامه نوشتم که وزن و قیمت انواع پروفیلها را در یک جدول در اختیار کاربر قرار می دهد . من می خواهم این جدول را در AutoCad وارد کنم با توجه به اینکه هم وی بی و هم آتوکد محیط گرافیکی دارند ؟
پاسخ : استفاده از ویژوال بیسیک بهمراه آتوکد توسط یک سیستم ابداعی شرکت AutoDesk به اسم ADS -AutoCAD Develpoment System  - امکان پذیر است . این سیستم ارتباطی به برنامه نویسان اجازه می دهد تا برنامه های کاربردیی بنويسند که بتواند آتوکد را کنترل کرده و داده را بین آتوکد و برنامه خارجی رد و بدل کند . پشتیبانی از ویژوال بیسیک در ADS از آتوکد 13 آغاز شد . برای اطلاعات بیشتر به این فایل pdf مراجعه کنید :
همچنین در بخش reference های ويژوال بیسیک ( در صورتیکه آتوکد روی سیستمتان نصب باشد ) گزینه ای به اسم AutoCAD Type Library وجود دارد که می توانید از آن در برنامه تان استفاده کنید برای مثال :

Private autocadApp As AcadApplication
Set autocadApp = ("AutoCAD.Application.15")
Dim doc As AcadDocument
Set doc = autocadApp.Application.Documents.Open("c:\drawing.dwg")

همچنین از کتاب Using Visual Basic with AutoCAD نیز می توانید استفاده کنید .

9 – چگونه می توان تمام اطلاعات مربوط به کانکت جاری سیستم را بدست آورد مانند سرعت اتصال و اطلاعات ارسال و دریافت ؟
پاسخ : از WinInet Api استفاده کنید . قبلاً در وبلاگ مطالبی در این زمینه نوشته ام .


+ در ضمن یکی از دوستان زخمت کشیدند و مطالبی در مورد سوال استفاده از دستورات command promt در وی بی را که در پست قیلی مطرح شده بود عنوان کرده اند :
" با سلام راجع به سوال اون دوست عزيزی که پرسيده بود آيا ميشه دستورات command prompt رو اجرا کرد باید بگم میشه.من این روش رو تو xp آزمایش کردم احتمالا تو ویندوز های دیگه هم جواب میده. اگه دستور Command /k رو تو runوارد کنیم و جلوش دستور رو بنویسیم دستور ما اجرا میشه و Command prompt بسته می شه. و اگه بنویسیم command /c پنجره command prompt باز میمونه. حالا تو vb از دستور shell استفاده میکنیم. مثلا مینویسیم: "shell "command /k dir یا "shell "command /c dir که نتیجه هردو dir گرفتن از فهرست جاریه با این تفاوت که دومی پنجره Command رو پس از اجرای دستور میبنده. واسه اطلاعات بیشتر میتونید تو command prompt بنویسید?/ command در xp هم به جای command میتونید بنویسید cmd در ضمن، دستور NET خودش یه فایل اجرایی داره به همین نام که اگه تو درایو ویندوز بگردی پیداش میکنی. میتونی اونو مستقیما با دستور Shell اجرا کنی . "

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

 

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

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


1 – در مورد  Crystal Report و  گزارشهای شرطی توضيح دهيد .
پاسخ : به کتاب برنامه نويسی بانکهای اطلاعاتی در ويژوال بيسيک مراجعه کنيد . در ضمن اگر فرصت کردم در این زمینه مطالبی خواهم نوشت .

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

3 – چگونه می توان با VB Script Control کار کرد یعنی مثلاً در یک TextBox بنویسیم sin(x) و در کد برنامه sin(x) قرار داده شود ؟
پاسخ : به پرسش و  پاسخهای قبلی مراجعه کنید .

4 – چگونه می توان در وی بی برنامه ای نوشت که نام و مسیر یک فایل را از کاربر بگیرد و در مسیر انتخاب شده شورتکاتی از فایل گرفته شده ایجاد کند ؟
پاسخ : ابتدا متغيرهای زیر را که از نوع Object هستند تعريف کنید :

    Dim wsh As Object
    Dim Shortcut As Object

سپس بايستی شی wsh را ايجاد نمائید :

    Set wsh = (".shell")

سپس بايستی شی Shortcut را ايجاد نمائيد :

    Set Shortcut = wsh.CreateShortcut("c:\YourProgram.lnk")

مسیری که در کد فوق داده شده محل ساخت شورتکات می باشد .
سپس بايستی پارامترهای شی Shortcut را تنظيم کنيد :

    Shortcut.TargetPath = "C:\Program Files\Test\YourProgram.exe"
    Shortcut.IconLocation = "C:\Program Files\Test\YourIcon.ico"
    Shortcut.WorkingDirectory = "C:\Program Files\Test\"
    Shortcut.Description = "Your Description"

پارامتر TargetPath برنامه مرتبط با شورتکات را نشان می دهد .
در پایان بايستی شورتکات را ذخيره کنيد :

    Shortcut.Save

نکته : برای ايجاد شورتکات در دسکتاپ یا در Startup ، بايستی متغيری از نوع SpecialForders ايجاد نمائيد :

Dim sf As Object
Set sf = wsh.SpecialFolders

سپس محل ساخت شورتکات را بصورت  sf("AllUsersDesktop") & YourPath و یا sf("AllUsersStartup") & YourPath بدهيد .


5 – چگونه می توان در وی بی مسیر دایرکتوری استارت آپ را پیدا کرد ؟
پاسخ : با استفاده از روش زیر می توانید مسیر کلیه دایرکتوریهای سیستمی را پیدا کنید :
ابتدا دو تابع زیر را از کتابخانه Shell32 تعريف کنيد :

Private Declare Function SHGetSpecialFolderLocation Lib "shell32" (ByVal hwnd As Long, ByVal nFolder As Long, Pidl As Long) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (Pidl As Long, ByVal FolderPath As String) As Long

حال متغير SystemFolder از نوع Enum را بصورت زیر تعریف کنید :

Public Enum SystemFolder
Desktop = 0
StartMenu_Programs = 2
My_Documents = 5
Favorites = 6
Startup = 7
Recent = 8
SendTo = 9
Start_Menu = 11
Windows_Desktop = 16
Network_Neighborhood = 19
Fonts = 20
ShellNew = 21
AllUsers_Desktop = 25
ApplicationData = 26
Printhood = 27
TemporaryInternetFiles = 32
Cookies = 33
History = 34
End Enum

تابع پیدا کردن دایرکتوریهای سیستمی بصورت زیر خواهد بود :

Public Function FindSystemFolder(ByVal lngNum As SystemFolder) As String
   Dim lpStartupPath As String * MAX_PATH
   Dim Pidl As Long
   Dim hResult As Long
   hResult = SHGetSpecialFolderLocation(0, lngNum, Pidl)
   If hResult = 0 Then 'there is a result
      hResult = SHGetPathFromIDList(ByVal Pidl, lpStartupPath)
      If hResult = 1 Then
         lpStartupPath = Left$(Trim$(lpStartupPath), InStr(lpStartupPath, Chr(0)) - 1)
         FindSystemFolder = Trim$(lpStartupPath)
      End If
   End If
End Function

6 – چگونه می توان از دستورات Command Prompt مثلاً دستورات Net Command در وی بی استفاده کرد ؟
پاسخ : فکر نمی کنم روشی برای استفاده از نتيجه این دستورات در وی بی وجود داشته باشد اما برای دسترسی به Command Prompt در وی بی بایستی از روش Shell Programming استفاده کنید . برا ی اطلاعات بیشتر به این کتاب مراجعه کنید .

7 – در مورد وارد کردن فایلهای Pdf در وی بی با اینکه نرم افزار Adobe Acrobat روی سیستم من نصب است اما در بخش References نتوانستم نام Adobe Acrobat Type Library را پیدا کنم همچنین با این روش نمی توان به عکسهای داخل فایل Pdf دسترسی پیدا کرد .
پاسخ : این reference در موقع نصب Adobe Acrobat 5 ( کل Acrobat  Adobe و نه فقط Reader آن ) در دایرکتوری  \Adobe\Acrobat 5.0\Acrobat قرار داده می شود . در مورد عکس هم من راه حلی به ذهنم نرسید و بنظر من بهترست از همان Ocx موجود استفاده کنید .

8 – من یک سخت افزار ساخته ام که با ویندوز 98 و با پورت سریال و تحت وی بی کار می کند . مشکلی که من دارم اینست که وقتی کامپیوتر روشن می شود و  ویندوز در حال بوت شدن است سیستم عامل پورت سریال را چک می کند و این باعث یک فرمان ناخواسته در سخت افزار می شود . آیا راهی وجود دارد که ویندوز 98 در هنگام بوت شدن پورتهای سریال را چک نکند ؟
پاسخ : یک روش اینست که یک مدار محافظت کننده را به سخت افزارتان اضافه کنید که در هنگام بوت شدن فرمان ناخواسته ای اجرا نشود . در مورد غیر فعال کردن گزینه چک پورت سریال من روشی پیدا نکردم .

9 – چگونه می توان با کلیک کردن روی یکی از مقادیر درون یک کمبو باکس ( استیل 2 : دراپ داون لیست ) از فرم شامل کمبو باکس خارج و فرم دیگری را ظاهر نمود ؟
پاسخ : با استفاده از رویداد Click مربوط به کمبوباکس و متد Hide و Show مربوط به فرم .
برای مثال فرض کنید یک کمبوباکس با نام Combo1 با یک آیتم با مقدار Test1 داشته باشیم . کد زیر را برای رویداد Click آن بنویسید :

  If Combo1.Text = "Test1" Then
     Form1.Hide
     Form2.Show
  End If

10 – چگونه می توان درایو سی دی رام را در وی بی تشخیص داد ؟
پاسخ : ابتدا مورد Microsoft Scripting Runtime را از بخش references پروژه خود اضافه کنید . سپس کد زیر را برای مشخص نمودن سی دی درایو در برنامه تان بنویسید :

Dim fso As New Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
Dim drv As Drive
For Each drv In fso.Drives
     If drv.DriveType = CDRom Then
          CDPath = drv.Path
          Exit For
     End If
Next drv
MsgBox (CDPath)
Set drv = Nothing
Set fso = Nothing

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

 

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

ساخت نرم افزارهای فارسی توسط زبان ساز شتاب


+ برخی دوستان در مورد چگونگی ساخت برنامه های فارسی توسط ويژوال بيسيک سوال کرده بودند . يکی از ابزارهايی که می توان نرم افزارهای فارسی را ايجاد نمود زبان ساز شتاب می باشد . مطلب زير را که در مورد اين زبان ساز است از وبلاگ فارس تک برای شما نقل می کنم :

" زبان ساز شتاب یک ابزار قدرتمند است که به برنامه نویسان اجازه میدهد نرم افزارهای فارسی خود را در ویندوز فارسی، XP یا 2000 بنویسند و در ویندوزهای انگلیسی نیز اجرا کنند. اگر چه زبان ساز شتاب یک نرم افزار قوی است، اما استفاده از آن بسیار ساده ميباشد و هیچ نیازی به نوشتن برنامه و یا دانش برنامه نویسی ندارد. این نرم افزار تنها فارسی سازی است که با استاندارد مایکروسافت کار می کند. همچنین بهترین انتخاب برای فارسی سازی برنامه های تهیه شده با Macromedia Director ميباشد و قابلیت ورود اطلاعات و نمایش صحیح را در تمامی ویندوز ها به این نرم افزارها می دهد و مشکلات فارسی آنها را از قبیل جستجو و نمایش حتی در ویندوز های XP و 2000 بر طرف می کند. به دلیل اینکه این نرم افزار از روش استاندارد مایکروسافت استفاده می کند، در مقایسه با فارسی سازهای دیگر (که معمولاٌ کنترلهای فارسی و یا فونتهای غیر استاندارد را به کار می برند) قابلیتهای مهمی به نرم افزار شما می دهد که به چند مورد از آنها عبارت اند از :

- عدم نیاز به هرگونه برنامه نویسی و کد گزاری حتی یک خط
- قابلیت استفاده از علامتهایی مانند تنوین، تشدید، فتحه، کسره و ...
- امکان اجرای نرم افزار های ترجمه شده در همه ویندوزها
- امکان استفاده در تمامی محیط های برنامه سازی
- امکان جستجو و مرتب سازی استاندارد
- امکان استفاده بدون اشکال از سیستمهای ذخیره سازی (مانند MDB)
- امکان Copy/Paste استاندارد به برنامه های دیگر
- پشتیبانی سایر زبانهای غیر فارسی
- امکان استفاده از فونتهای استاندارد ویندوز
- امکان بهره گیری از سیستم استاندارد ویندوز
-  قابلیت فارسی نمودن کلیه کنترلهای ویندوز و هزاران کنترل آماده ای که در اینترنت وجود دارند. "

دانلود نسخه نمايشی ( با سايز ۴.۹ مگابايت )

اطلاعات بيشتر

 

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