انا سالت قبل كذا عن كود مجرد ما يفتح اليوزر البرنامج تتغير عنده الresolution
للي انا ابغاه ومسوية البرنامج عليها وبمجرد ما يقفل اليوزر البرنامج ترجع عنده الدقه مثل ما كانت
بس ماني فاهمته مين ممكن يفهمني هو واذا في كود ثاني ابسط لو سمحتوا ؟
الكود:
Option Explicit
Const CCFORMNAME = 32
Const CCDEVICENAME = 32
Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Const WM_DISPLAYCHANGE = &H7E
Const HWND_BROADCAST = &HFFFF&
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const CDS_UPDATEREGISTRY = &H1
Const CDS_TEST = &H4
Const DISP_CHANGE_SUCCESSFUL = 0
Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As Any) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Dim OldX As Long, OldY As Long
Sub ChangeRes(X As Long, Y As Long)
Dim DevM As DEVMODE, ScInfo As Long, Ret As Long
'الحصول علي معامل الشاشة الحالي
Ret = EnumDisplaySettings(0&, 0&, DevM)
'اضافة القيم الجديدة
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
DevM.dmPelsWidth = X
DevM.dmPelsHeight = Y
'تغيير حجم الشاشة لتجربة الحجم الجديد
Ret = ChangeDisplaySettings(DevM, CDS_TEST)
'اذا نحج التغيير
If Ret = DISP_CHANGE_SUCCESSFUL Then
'حفظ التغيير
Ret = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
'ارسال رسالة للنوافذ التى تعمل بان حجم الشاشة تغير
ScInfo = MAKELONG(X, Y)
SendMessage HWND_BROADCAST, WM_DISPLAYCHANGE, ByVal 0&, ByVal ScInfo
Else
'خطا
MsgBox "Error"
End If
End Sub
Private Sub Form_Load()
Dim nDC As Long
'حفظ حجم الشاشة الاصلي
OldX = Screen.Width / Screen.TwipsPerPixelX
OldY = Screen.Height / Screen.TwipsPerPixelY
'تغيير حجم الشاشة
ChangeRes 1024, 768
End Sub
Private Sub Form_Unload(Cancel As Integer)
'الرجوع للحجم الاصلي
ChangeRes OldX, OldY
End Sub
Public Function MAKELONG(loword As Long, hiword As Variant) As Long
MAKELONG = (hiword * &H10000) + (loword And &HFFFF&)
End Function
