آشنایی با شی پرینتر در ویژوال بیسیک

مقدمه

شی پرینتر ، شیی است که پرینتر پیش فرض سیستم را کنترل می کند . استفاده از شی پرینتر در ویژوال بیسیک ۶ مانند کار با سایر اشیا است و بایستی از خواص و متدهای آن استفاده کرد . در ادامه با برخی از این خواص و متدها آشنا خواهید شد .

چاپ متن توسط شی پرینتر

برای چاپ متن توسط شی پرینتر کافیست خواص CurrentX و CurrentY که محل قرار گرفتن کرسر می باشد را تنظیم نوده و سپس با استفاده از متد Print متن مورد نظر را چاپ نموده و در پایان با استفاده از متد EndDoc صفحه چاپی را از پرینتر بیرون بدهیم . مثال :

Printer.CurrentX=150
Printer.CurrentY=200
Printer.Print “Visual Basic Printer Object Test”
Printer.EndDoc

در مثال فوق فرض شده که ScaleMode برابر Pixel قرار داده شده است . توجه داشته باشید که تا قبل از اجرای متد EndDoc عمل چاپ انجام نمی شود و فقط بعد از این متد است که چاپ انجام شده و کاغذ بیرون می آید .

اگر پس از یک دستور Print ، دستور Print دیگری را استفاده کنیم متن روی خط بعدی چاپ خواهد شد . اگر بخواهیم متن بلافاصله بعد از متن اول چاپ شود باید بعد از دستور Print اول از علامت ; استفاده کنیم .

نکته : برای کنترل دقیق محل چاپ از CurrentX و CurrentY استفاده نمائید .

چاپ گرافیک توسط شی پرینتر

به ۴ روش می توان اشکال گرافیکی را توسط شی پرینتر چاپ کنید :
۱ – چاپ دایره : با استفاده از متد Circle می توان یک دایره ، قوس و یا بیضی را در صفحه چاپ کرد . فرمت کلی این متد بصورت زیر است :

Circle (x,y),radius,[color],[start],[end],[aspect]

که x و y مختصات مرکز دایره و radius شعاع آن می باشد .
پارامترهای color ، start ، end و aspect اختیاری هستند و بترتیب رنگ ، محل شروع قوس ، محل خاتمه قوس و نسبت شعاع بیضی را نشان می دهند .

۲ – چاپ خط : با استفاده از متد Line می توان یک خط و مستطیل را در صفحه چاپ کرد . فرمت کلی این متد بصورت زیر است :

Line (x1,y1)-(x2,y2),[color],[B[F]]

که x1 و y1 مختصات شروع خط ( یا مستطیل ) و x2 و y2 مختصات انتهای خط ( یا مستطیل ) هستند .
پارامتر color اختیاری بوده و رنگ خط ( یا مستتطیل ) را نشان می دهد .
پارامتر B اختیاری بوده و نشان می دهد یک مستیل رسم  شود .
پارامتر F اختیاری بوده و بهمراه B می آید و نشان می دهد یک مستطیل توپر رسم شود .

۳ – چاپ نقطه : با استفاده از متد PSet می توان نقطه ای روی صفحه چاپ کرد و فرمت کلی آن بصورت زیر است :

PSet (x,y),[color]

که x و y مختصات نقطه می باشند .
پارامتر color اختیاری بوده و رنگ نقطه را نشان می دهد .

۴ – چاپ تصویر : با استفاده از متد PaintPicture می توان محتویات یک فایل گرافیکی را چاپ کرد . فرمت کلی این متد بصورت زیر است :

Printer.PaintPicture picture, x1, y1, [width1], [height1], [x2], [y2], [width2], [height2], [opcode]

x1 و y1 مختصات قرارگرفتن تصویر در صفحه بوده و picture یک شی از کلاس IPictureDisp است . این شی را می توان از یک PictureBox یا از خاصیت Picture فرم گرفت و یا از دستور LoadPicture استفاده کرد .

مثال ۱ :

Printer.PaintPicture Picture1.Picture, 100, 100

مثال ۲ :

PaintPicture LoadPicture(”C:\sample.jpg”), 100, 100

width1 و height1 طول و عرض تصویر چاپی  می باشند . x2 و y2 نیز بهمراه width2 و height2 می توانند میزان برش از تصویر اصلی برای چاپ را مشخص کنند .

سایر خواص مهم شی پرینتر

ColorMode : اگر پرینتر رنگی باشد ، رنگی یا تک رنگ بودن چاپ را تعیین می کند .
Copies : تعداد چاپ را مشخص می کند .
Font : نوع فونت چاپ متن را مشخص می کند .
FontSize : سایز فونت چاپ متن را مشخص می کند .
PrintQuality : کیفیت چاپ را مشخص می کند .

سایر متدهای مهم شی پرینتر

KillDoc : پرینت در حال چاپ را از صف چاپ حذف می کند .
NewPage : صفحه جاری را به پایان برده و صفحه جدیدی را برای چاپ آماده می کند .
Scale : سیستم مختصات کاربر را تعیین می کند .
TextHeight : ارتفاع متن پس از چاپ شدن در مختصات Scale را تعیین می کند .
TextWidth : عرض متن پس از چاپ شدن در مختصات Scale را تعیین می کند

VN:F [1.6.7_924]

خواص text box

این دفعه می خوام در مورد بعضی از خاصیت های textbox که در پنجره ی properties وجود داره توضیح بدم.
1-Name=این رو که حتما می دونید که اسم اون هستش ولی نکته ای که باید به اون توجه کرد اینه که برنامه نویس های حرفه ای در اول اسم textbox ها txt روهم مینویسند مثلا txtdisplay یا txtname .
2-Alignment=این خاصیت نحوه تراز شدن متن رو در textbox رو نشون می ده (وسط چین،چپ چین،راست چین).
3-Appearance= این خاصیت به شکل و شمایل اون مربوط می شه اگر flat رو انتخاب کردید textbox به صورت تخت در میاد ولی اگر 3d رو انتخاب کنید به صورت سه بعدی و تو رفته در میاد.
4-Backcolor= ای هم مربوط میشه به رنگ داخل textbox.
5-enable= هم مربوط میشه به فعال یا غیر فعال بودن.
6-Forecolor= این هم رنگ متن داخلش رو مشخص می کنه.
7-locked= این خاصیت مشخص می کند که آیا کاربر می تواند متن داخل ان را عوض کند یا نه.
8-Maxlenght= این خاصیت حداکثر تعداد کاراکترهایی را که می توان درون textbox وارد نمود مشخص می کند.
9-Multiline= چنانچه این خاصیت true باشد وقتی در textbox در حال تایپ کردن هستید اگر اینتر را فشار دهید به خط بعد می روید و می توانید متن را در بیشتر از یک خط بنویسید ولی اگر این خاصیت false باشد فقط میتوانید در یک خط متن را وارد کنید.
10-Passwordchar= حتما دیدید که وقتی در حال تایپ کردن پسورد هستید هرچی تایپ می کنید به جاش یه علامت ستاره تایپ میشه که به خاطر اینه که متن به صورت محرمانه باشه وکسی نتونه ببینه.حالا شما در مقابل این خاصیت هر کاراکتری رو وارد کردی به جای متن اون کاراکتر نشون داده میشه.مثلا اگر 3 رو وارد کردید، هرچی تایپ کردید بجای اون 3 میبندید.
11-RightToLef= این خاصیت مشخص می کنه متن از چپ به راست نوشته شود یا از راست به چپ.
12-scrollbar= چنانچه بخواهید میله های مرور روی جعبه متن ظاهر شوند ونیز برای تعیین تعداد انها باید از این خاصیت استفاده کنید.مقدار0-None از ظاهر شدن میله های مرور جلوگیری میکند.مقدار 1-Horizontal فقط یک میله مرور افقی نشان می دهد.مقدار 2-vertical اجازه نمایش میله مرور عمودی را می دهد..مقدار 3-both هر دو میله مرور افقی و عمودی را نشان می دهد.
13-Text=این خاصیت متن اولیه(مقدار پیش فرض) را که درون جعبه متن ظاهر می شود را نشان می دهد. بازم بر می گردم نظر یادتون نره

دستورات پایه ای برای برنامه نویسی

1-دستور شرطی if

در برنامه نويسی مواردی پیش می آيد که بخواهيم دستور یا دستوراتی، هنگامی که شرط خاصی برقرار است، توسط برنامه به اجرا در آيد. اين مورد در زندگی روزمره نيز ديده می شود؛ به عنوان مثال " اگر فردا باران نيايد، من به کوه خواهم رفت." شرط مورد نظر نيامدن باران است و عملی که قرار است انجام شود رفتن به کوه می باشد.در برنامه نویسی ویژوال بیسیک این شرط به صورت زیر نوشته می شود

If  شرط مورد نظر   Then   دستور مورد نظر

حالا مثال خودمون رو روی این دستور پیاده می کنیم

If  فردا باران نیاید    Then   من به کوه خواهم رفت

دستور if  در ویژوال بیسیک به دو صورت نوشته میشه

الف- معمولی: صورت معمولی دستور if  مثل مثالی هست که قبلا زدیم.در این صورت از دستور فقط یک کار برای ما انجام می شود.

If    شرط مورد نظر    Then    دستور مورد نظر

ب- در این حالت ما می توانیم یک یا چند دستور را اجرا کنیم.باید توجه داشت که در پایان دستور ها باید کلمه End if  را برای اتمام کار بنویسیم در غیر این صورت برنامه پیغام خطا می دهد.

If   شرط مورد نظر    Then

دستور شماره1

دستور شماره 2

دستور شماره3

دستور شماره......

End if

2-دستور شرطی If & Else

گاهی اوقات نياز داريم که در صورت برقرار بودن شرط خاصی يک سری دستورات اجرا و در صورت برقرار نبودن آن شرط دسته ای ديگر از دستورات اجرا گردند. به عنوان مثال اگر فردا باران بيايد من به کوه نمی روم در غير اين صورت من به کوه خواهم رفت.

If  شرط مورد نظر   Then

دستور اول

Else

دستور دوم

End if

حالا مثال رو روی این دستور پیاده می کنیم.

If   فردا باران بیاید   Then

من به کوه نمی روم

Else

من به کوه می روم

End if

حالا ویژوال بیسیک رو اجرا کنید و از پنجره ی باز شده  New Project رو انتخاب کنید تا یک پروژه ی جدید باز شود.

وقتی پروژه ی جدید باز شد از طریق منوی سمت چپ یک Command Button به فرمتون اضافه کنید.

روی command button دو بار کلیک کنید تا پنجره ی کد نویسی باز بشه.

در این قسمت ما می خواهیم دستور if  را برسی کنیم پس کد نویسی را شروع می کنیم.در پنجره ی کدنویسی هر چقدر متن هست رو پاک کنید و به جای اون این کدهارو بزارید.

Private Sub Command1_Click()

If     50 < 100    Then    Beep

End Sub

خط اول و آخر مربوط به اینه که مشخص میکنه در چه جایی این شرط بررسی بشه که ما به برنامه گفتیم در موقعی که بر روی  command button کلیک میشه این شرط رو بررسی کن.

خط دوم هم به برنامه میگه اگر عدد 50 کمتر از 100 بود در اون صورت بوق بزن(Beep)


حالا می خواهیم دستور  If  &Else را بررسی کنیم.

مانند قبل یک پروژه ی جدید باز کنید و در یک command Button به اون اضافه کنید.

با دوبل کلیک بر روی Command Button پنجره ی کدنویسی را باز کنید و کدهای داخل اون رو پاک کنید و این کدها رو بهش اضافه کنید.

Private Sub Command1_Click()

If   50 < 100   Then

MsgBox "50 kamtar az 100 ast"

Else

MsgBox   "50 bishtar az 100 ast"

End If

End Sub

در خط اول و آخر مثل قبل به برنامه گفتیم که در چه جایی شرط بررسی بشه.

در خط دوم شرط مورد نظر رو نوشتیم"اگر عدد 50 کمتر از 100 بود" در اون صورت

در خط سوم دستوری رو نوشتیم که در ازای درست بودن شرط اجرا میشه پیغام "50 kamtar az 100 ast" رو نشون بده

خط چهارم هم کلمه ی Else  یا "در غیر این صورت " رو نوشتیم

در خط پنجم هم دستوری رو نوشتیم که به ازای درست نبودن شرط اجرا میشه "پیغام 50 bishtar az 100 ast رو نشون بده"

در خط ششم هم پایان شرط رو اعلام کردیم




نکته:دستور MsgBox  برای نشان دادن یک پیغام استفاده می شود که دستور ساده ی آن به این صورت است

MsgBox "پیغام مورد نظر"

برنامه ي piano براي ويژوال بيسيك

قسمت اول - ماژول

Option Explicit

Public Const MAXPNAMELEN = 32             ' Maximum product name length

' Error values for functions used in this sample. See the function for more information
Public Const MMSYSERR_BASE = 0
Public Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE + 2)     ' device ID out of range
Public Const MMSYSERR_INVALPARAM = (MMSYSERR_BASE + 11)     ' invalid parameter passed
Public Const MMSYSERR_NODRIVER = (MMSYSERR_BASE + 6)        ' no device driver present
Public Const MMSYSERR_NOMEM = (MMSYSERR_BASE + 7)           ' memory allocation error

Public Const MMSYSERR_INVALHANDLE = (MMSYSERR_BASE + 5)     ' device handle is invalid
Public Const MIDIERR_BASE = 64
Public Const MIDIERR_STILLPLAYING = (MIDIERR_BASE + 1)      ' still something playing
Public Const MIDIERR_NOTREADY = (MIDIERR_BASE + 3)          ' hardware is still busy
Public Const MIDIERR_BADOPENMODE = (MIDIERR_BASE + 6)       ' operation unsupported w/ open mode

Type MIDIOUTCAPS
   wMid As Integer                   ' Manufacturer identifier of the device driver for the MIDI output device
                                     ' For a list of identifiers, see the Manufacturer Indentifier topic in the
                                     ' Multimedia Reference of the Platform SDK.
  
   wPid As Integer                   ' Product Identifier Product of the MIDI output device. For a list of
                                     ' product identifiers, see the Product Identifiers topic in the Multimedia
                                     ' Reference of the Platform SDK.
  
   vDriverVersion As Long            ' Version number of the device driver for the MIDI output device.
                                     ' The high-order byte is the major version number, and the low-order byte is
                                     ' the minor version number.
                                    
   szPname As String * MAXPNAMELEN   ' Product name in a null-terminated string.
  
   wTechnology As Integer            ' One of the following that describes the MIDI output device:
                                     '     MOD_FMSYNTH-The device is an FM synthesizer.
                                     '     MOD_MAPPER-The device is the Microsoft MIDI mapper.
                                     '     MOD_MIDIPORT-The device is a MIDI hardware port.
                                     '     MOD_SQSYNTH-The device is a square wave synthesizer.
                                     '     MOD_SYNTH-The device is a synthesizer.
                                    
   wVoices As Integer                ' Number of voices supported by an internal synthesizer device. If the
                                     ' device is a port, this member is not meaningful and is set to 0.
                                    
   wNotes As Integer                 ' Maximum number of simultaneous notes that can be played by an internal
                                     ' synthesizer device. If the device is a port, this member is not meaningful
                                     ' and is set to 0.
                                    
   wChannelMask As Integer           ' Channels that an internal synthesizer device responds to, where the least
                                     ' significant bit refers to channel 0 and the most significant bit to channel
                                     ' 15. Port devices that transmit on all channels set this member to 0xFFFF.
                                    
   dwSupport As Long                 ' One of the following describes the optional functionality supported by
                                     ' the device:
                                     '     MIDICAPS_CACHE-Supports patch caching.
                                     '     MIDICAPS_LRVOLUME-Supports separate left and right volume control.
                                     '     MIDICAPS_STREAM-Provides direct support for the midiStreamOut function.
                                     '     MIDICAPS_VOLUME-Supports volume control.
                                     '
                                     ' If a device supports volume changes, the MIDICAPS_VOLUME flag will be set
                                     ' for the dwSupport member. If a device supports separate volume changes on
                                     ' the left and right channels, both the MIDICAPS_VOLUME and the
                                     ' MIDICAPS_LRVOLUME flags will be set for this member.
End Type

Declare Function midiOutGetNumDevs Lib "winmm" () As Integer

Declare Function midiOutGetDevCaps Lib "winmm.dll" Alias "midiOutGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As MIDIOUTCAPS, ByVal uSize As Long) As Long

Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long

Declare Function midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long


Declare Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long


قسمت دوم - كد فرم


Option Explicit

Const INVALID_NOTE = -1     ' Code for keyboard keys that we don't handle

Dim numDevices As Long      ' number of midi output devices
Dim curDevice As Long       ' current midi device
Dim hmidi As Long           ' midi output handle
Dim rc As Long              ' return code
Dim midimsg As Long         ' midi output message buffer
Dim channel As Integer      ' midi output channel
Dim volume As Integer       ' midi volume
Dim baseNote As Integer     ' the first note on our "piano"
' Set the value for the starting note of the piano
Private Sub base_Click()
   Dim s As String
   Dim i As Integer
   s = InputBox("Enter the new base note for the keyboard (0 - 111)", "Base note", CStr(baseNote))
   If IsNumeric(s) Then
      i = CInt(s)
      If (i >= 0 And i < 112) Then
         baseNote = i
      End If
   End If
End Sub

' Select the midi output channel
Private Sub chan_Click(Index As Integer)
   chan(channel).Checked = False
   channel = Index
   chan(channel).Checked = True
End Sub

' Open the midi device selected in the menu. The menu index equals the
' midi device number + 1.
Private Sub device_Click(Index As Integer)
   device(curDevice + 1).Checked = False
   device(Index).Checked = True
   curDevice = Index - 1
   rc = midiOutClose(hmidi)
   rc = midiOutOpen(hmidi, curDevice, 0, 0, 0)
   If (rc <> 0) Then
      MsgBox "Couldn't open midi out, rc = " & rc
   End If
End Sub
' If user presses a keyboard key, start the corresponding midi note
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   StartNote NoteFromKey(KeyCode)
End Sub
' If user lifts a keyboard key, stop the corresponding midi note
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
   StopNote NoteFromKey(KeyCode)
End Sub
Private Sub Form_Load()
   Dim i As Long
   Dim caps As MIDIOUTCAPS
  
   ' Set the first device as midi mapper
   device(0).Caption = "MIDI Mapper"
   device(0).Visible = True
   device(0).Enabled = True
  
   ' Get the rest of the midi devices
   numDevices = midiOutGetNumDevs()
   For i = 0 To (numDevices - 1)
      midiOutGetDevCaps i, caps, Len(caps)
      device(i + 1).Caption = caps.szPname
      device(i + 1).Visible = True
      device(i + 1).Enabled = True
   Next
  
   ' Select the MIDI Mapper as the default device
   device_Click (0)
  
   ' Set the default channel
   channel = 0
   chan(channel).Checked = True
  
   ' Set the base note
   baseNote = 60
  
   ' Set volume range
   volume = 127
   vol.Min = 127
   vol.Max = 0
   vol.Value = volume
End Sub
Private Sub Form_Unload(Cancel As Integer)
   ' Close current midi device
   rc = midiOutClose(hmidi)
End Sub
' Start a note when user click on it
Private Sub key_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
   StartNote (Index)
End Sub
' Stop the note when user lifts the mouse button
Private Sub key_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
   StopNote (Index)
End Sub
' Press the button and send midi start event
Private Sub StartNote(Index As Integer)
   If (Index = INVALID_NOTE) Then
      Exit Sub
   End If
   If (key(Index).Value = 1) Then
      Exit Sub
   End If
   key(Index).Value = 1
   midimsg = &H90 + ((baseNote + Index) * &H100) + (volume * &H10000) + channel
   midiOutShortMsg hmidi, midimsg
End Sub
' Raise the button and send midi stop event
Private Sub StopNote(Index As Integer)
   If (Index = INVALID_NOTE) Then
      Exit Sub
   End If
   key(Index).Value = 0
   midimsg = &H80 + ((baseNote + Index) * &H100) + channel
   midiOutShortMsg hmidi, midimsg
End Sub
' Get the note corresponding to a keyboard key
Private Function NoteFromKey(key As Integer)
   NoteFromKey = INVALID_NOTE
   Select Case key
   Case vbKeyZ
      NoteFromKey = 0
   Case vbKeyS
      NoteFromKey = 1
   Case vbKeyX
      NoteFromKey = 2
   Case vbKeyD
      NoteFromKey = 3
   Case vbKeyC
      NoteFromKey = 4
   Case vbKeyV
      NoteFromKey = 5
   Case vbKeyG
      NoteFromKey = 6
   Case vbKeyB
      NoteFromKey = 7
   Case vbKeyH
      NoteFromKey = 8
   Case vbKeyN
      NoteFromKey = 9
   Case vbKeyJ
      NoteFromKey = 10
   Case vbKeyM
      NoteFromKey = 11
   Case 188 ' comma
      NoteFromKey = 12
   Case vbKeyL
      NoteFromKey = 13
   Case 190 ' period
      NoteFromKey = 14
   Case 186 ' semicolon
      NoteFromKey = 15
   Case 191 ' forward slash
      NoteFromKey = 16
   End Select

End Function
' Set the volume
Private Sub vol_Change()
   volume = vol.Value
End Sub