کد برنامه را ویرایش کردم :
کد:
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Form_Activate()
Me.ScaleMode = vbPixels
Me.AutoRedraw = True
a = Me.ScaleWidth - 1
b = Me.ScaleHeight - 1
c = b / a
d = a / b
While i < a
Line (i, 0)-(a, i * c), RGB(0, 255, 0)
i = i + 13
Wend
i = 0
While i < b
Line (0, i)-(i * d, b), RGB(0, 255, 0)
i = i + 13 * c
Wend
End Sub
مورد اول :
ترسیم های گرافیکی را با واحد Pixel انجام بدید و نه Twip که واحد پیشفرض ویژوال بیسیک است.
از ScaleWidth و ScaleHeight برای این منظور استفاده می شود.
مورد دوم :
ترسیم گرافیکی در ویژوال بیسیک دو حالت متفاوت داره، با AutoRedraw فعال و غیر فعال.
در حالت عادی AutoRedraw غیر فعال است و ترسیم شما فقط روی نمایشگر رسم می شود ولی در حافظه فرم ثبت نمیشه
به همین دلیل اگر به هر علتی فرم ترسیم شده Refresh بشه، قسمت Refresh شده به حالت عادی برمی گرده و ترسیم ها
فراموش می شوند. مثلا وقتی فرم دیگری روی فرم ما را بپوشاند، وقتی فرم بالایی کنار برود ترسیم های شما دیگر
وجود ندارند.
برعکس وقتی AutoRedraw فعال باشد، اول ترسیم ها در حافظه فرم ثبت می شوند و سپس روی صفحه نمایشگر
نمایش داده می شود. به همین دلیل تا زمانی که خودمان فرمانی ندهیم پاک نمی شوند.
مورد دوم بایستی در ترسیم شما بکار بروند، چون شما زمانی دارید در فرم ترسیم انجام می دهید که فرم بصورت کامل
نمایش داده نشده، پس احتمال از دست رفتن ترسیم ها با AutoRedraw غیر فعال وجود دارد.
مورد سوم :
صفحه مانیتور مربع که نیست، نسبت طول به عرض صفحه را رعایت نکرده بودید.