در اين بخش مي‌توانيد به مباحث مربوط به انواع زبان هاي برنامه نويسي بپردازيد
Major

Major



نماد کاربر
پست ها

57

تشکر کرده: 0 مرتبه
تشکر شده: 0 مرتبه
تاريخ عضويت

شنبه 20 اسفند 1384 12:23

آرشيو سپاس: 12 مرتبه در 7 پست

چگونه درvb يک فرم مستقل از resolution ص

توسط ORZ » پنج شنبه 4 خرداد 1385 06:09

اگر یک فرم در Resolution 640 * 480طراحی شود , و در Resolution متفاوتی مثلآ Resolution 1600 * 1200نمایش داده شود فقط قسمتی از آن قابل رؤیت خواهد بود. به طور معمول این یک فرآیند عادی است و اینگونه انتظار می رود , لیکن گاهی اوقات می خواهیم فرم ما با اندازه مناسب و موقعیت مناسبی نسبت به صفحه نمایش داشته باشد(مستقل از Resolution صفحه نمایش) . این مقاله با ارائه یک شیوه ساده در این مورد بحث می کند. لازم به ذکر است که این روش تنها در مورد برنامه های کاربردی از نوع SDI (Single Document Interface)  صدق می کند و برای برنامه های کاربردی از نوع MDI(Multiple Document Interface) پاسخگو نمی باشد.

با این شیوه باید در زمان اجرا اندازه فرم را متناسب با اندازه صفحه نمایش تغییر دهیم. لیکن به همین دلیل نکات زیر باید رعایت شود.

در زمان طراحی فرم بهتر است در یک Resolution پایین کار کنیم زیرا تغییر اندازه فرم در زمان اجرا برای متناسب شدن با اندازه صفحه نمایش از Resolution پایین به بالا بهتر صورت می گیرد .
برای طراحی برنامه از فونتهای نوع True Type استفاده کنید , زیرا قابلیت تغییر اندازه را دارند.
برخی کنترل ها مانند Combo Box و Option buttons , تغییر اندازه نمی دهند و برخی کنترلها نیز ممکن است برای تغییر اندازه احتیاج به اعمال روشهای بخصوصی داشته باشند.مثلآ خصوصیت Height یک Combo Box در زمان اجرا فقط خواندنی است ولی اگر خصوصیت Font Size آنرا تغییر دهیم خصوصیت Height آن نیز متناسبآ تغییر می کند.

یک مثال گام در گام :

یک پروژه جدید را در ویژوال بیسیک شروع کنید , به طور پیش فرض Form1 ساخته می شود.
یک Label , یک CommandButton و هر کنترل دیگری که مایلید در فرم قرار دهید.
کدهای زیر را در ماجول فرم قرار دهید :
Option Explicit

Dim MyForm As FRMSIZE
Dim DesignX As Integer
Dim DesignY As Integer

Private Sub Form_Load()
Dim ScaleFactorX As Single, ScaleFactorY As Single ' Scaling factors
' Size of Form in Pixels at design resolution
DesignX = 800
DesignY = 600
RePosForm = True ' Flag for positioning Form
DoResize = False ' Flag for Resize Event
' Set up the screen values
Xtwips = Screen.TwipsPerPixelX
Ytwips = Screen.TwipsPerPixelY
Ypixels = Screen.Height / Ytwips ' Y Pixel Resolution
Xpixels = Screen.Width / Xtwips ' X Pixel Resolution

' Determine scaling factors
ScaleFactorX = (Xpixels / DesignX)
ScaleFactorY = (Ypixels / DesignY)
ScaleMode = 1 ' twips
'Exit Sub ' uncomment to see how Form1 looks without resizing
Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me
Label1.Caption = "Current resolution is " & Str$(Xpixels) + _
" by " + Str$(Ypixels)
MyForm.Height = Me.Height ' Remember the current size
MyForm.Width = Me.Width
End Sub

Private Sub Form_Resize()
Dim ScaleFactorX As Single, ScaleFactorY As Single

If Not DoResize Then ' To avoid infinite loop
DoResize = True
Exit Sub
End If

RePosForm = False
ScaleFactorX = Me.Width / MyForm.Width ' How much change?
ScaleFactorY = Me.Height / MyForm.Height
Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me
MyForm.Height = Me.Height ' Remember the current size
MyForm.Width = Me.Width
End Sub

Private Sub Command1_Click()
Dim ScaleFactorX As Single, ScaleFactorY As Single

DesignX = Xpixels
DesignY = Ypixels
RePosForm = True
DoResize = False
' Set up the screen values
Xtwips = Screen.TwipsPerPixelX
Ytwips = Screen.TwipsPerPixelY
Ypixels = Screen.Height / Ytwips ' Y Pixel Resolution
Xpixels = Screen.Width / Xtwips ' X Pixel Resolution

' Determine scaling factors
ScaleFactorX = (Xpixels / DesignX)
ScaleFactorY = (Ypixels / DesignY)
Resize_For_Resolution ScaleFactorX, ScaleFactorY, Me
Label1.Caption = "Current resolution is " & Str$(Xpixels) + _
" by " + Str$(Ypixels)
MyForm.Height = Me.Height ' Remember the current size
MyForm.Width = Me.Width
End Sub


یک ماجول استاندارد از منوی پروژه به برنامه اضافه کنید و کد زیر را در آن بنویسید.
Public Xtwips As Integer, Ytwips As Integer
Public Xpixels As Integer, Ypixels As Integer

Type FRMSIZE
Height As Long
Width As Long
End Type

Public RePosForm As Boolean
Public DoResize As Boolean

Sub Resize_For_Resolution(ByVal SFX As Single, _
ByVal SFY As Single, MyForm As Form)
Dim I As Integer
Dim SFFont As Single

SFFont = (SFX + SFY) / 2 ' average scale
' Size the Controls for the new resolution
On Error Resume Next ' for read-only or nonexistent properties
With MyForm
For I = 0 To .Count - 1
If TypeOf .Controls(I) Is ComboBox Then ' cannot change Height
.Controls(I).Left = .Controls(I).Left * SFX
.Controls(I).Top = .Controls(I).Top * SFY
.Controls(I).Width = .Controls(I).Width * SFX
Else
.Controls(I).Move .Controls(I).Left * SFX, _
.Controls(I).Top * SFY, _
.Controls(I).Width * SFX, _
.Controls(I).Height * SFY
End If
.Controls(I).FontSize = .Controls(I).FontSize * SFFont
Next I
If RePosForm Then
' Now size the Form
.Move .Left * SFX, .Top * SFY, .Width * SFX, .Height * SFY
End If
End With
End Sub


حال اگر برنامه را در Resolution های متفاوت اجرا کنید خواهید دید که اندازه و موقعیت فرم متناسب با اندازه صفحه نمایش تغییر خواهد کرد. اگر توجه کنید مشاهده خواهید کرد که هنگامی صفحه نمایش را از یک Resolution پایین به Resolution بالاتری تغییر اندازه می دهید اندازه فرم با تناسب بهتری تغییر می کند. اگر در زمان اجرا Resolution را تغییر دهید می توانید با زدن دکمه Command1 اندازه فرم را تصحیح کنید.
منبع  www.shirazjju.ac.ir
کسي را دوست داشته باش که قلب بزرگي داشته باشد
تا مجبور نباشي براي اينکه در قلب او جاي بگيري خودت را کوچک کني.

 


  • موضوعات مشابه
    پاسخ ها
    بازديدها
    آخرين پست

چه کسي حاضر است ؟

کاربران حاضر در اين انجمن: بدون كاربران آنلاين و 4 مهمان