PDA

نسخه کامل مشاهده نسخه کامل : مي خوام رزوليشن رو تغيير بدم .



sari-1369
28-01-2008, 10:24
سلام دوستان ...
ميخوام وقتي كه برنامه رو اجرا ميكنم . اول رزوليشن فعلي مانيتور رو بگيره . و بعد رزوليشن رو به اون اندازه اي كه من از قبل تعيين كردم تغيير بده .
ودر انتها كه برنامه end ميشه به رزوليشن اولي برگرده .

sari-1369
28-01-2008, 11:52
سلام دوستان ...
ميخوام وقتي كه برنامه رو اجرا ميكنم . اول رزوليشن فعلي مانيتور رو بگيره . و بعد رزوليشن رو به اون اندازه اي كه من از قبل تعيين كردم تغيير بده .
ودر انتها كه برنامه end ميشه به رزوليشن اولي برگرده .
چرا كسي كمكم نميكنه ....:41:

nibble
01-02-2008, 07:53
سلام
راحت ترين راهش اينه كه با Api اين كار رو انجام بديد شما راه ديگه اي مي خواين ؟

من من
01-02-2008, 11:18
منم می خوام بدونم ....

api دیگه چیه؟

sari-1369
01-02-2008, 23:11
سلام
راحت ترين راهش اينه كه با Api اين كار رو انجام بديد شما راه ديگه اي مي خواين ؟
سلام دوست عزيز....
ميشه بگي از كدوم تابع api استفاده كنم ..
اگه ميتونستي يه سورس كد بهم بدي خيلي خوب مي شد .

nibble
02-02-2008, 07:38
سلام از تابع ChangeDisplaySettingsEx استفاده كنيد
اينم كد برنامه اي كه مي خواهيد:
البته ببخشيد خود برنامه رو نزاشتم فقط كدش و اين جا مي زارم
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1

Private Type DEVMODE
dmDeviceName As String * 32
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 * 32
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
dmPanningWidth As Long
dmPanningHeight As Long
End Type

Private Declare Function ChangeDisplaySettingsEx Lib "user32" Alias "ChangeDisplaySettingsExA" (lpszDeviceName As Any, lpDevode As Any, ByVal hWnd As Long, ByVal dwFlags As Long, lParam As Any) As Long

Dim PrevX As Long, PrevY As Long

Private Sub Form_Load()
Dim Dev As DEVMODE
PrevX = Screen.Width / Screen.TwipsPerPixelX
PrevY = Screen.Height / Screen.TwipsPerPixelY
Dev.dmSize = Len(Dev)
Dev.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
Dev.dmPelsWidth = 800
Dev.dmPelsHeight = 600
ChangeDisplaySettingsEx ByVal 0&, Dev, ByVal 0&, CDS_UPDATEREGISTR, ByVal 0&
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim Dev As DEVMODE
Dev.dmSize = Len(Dev)
Dev.dmPelsWidth = PrevX
Dev.dmPelsHeight = PrevY
ChangeDisplaySettingsEx ByVal 0&, Dev, ByVal 0&, CDS_UPDATEREGISTR, ByVal 0&
End Sub

nibble
02-02-2008, 07:42
البته براي گرفتن resolution مي تونيد از تابعEnumDisplaySettings هم استفاده كنيد

lord_ashkan_z
02-02-2008, 14:13
سلام از تابع ChangeDisplaySettingsEx استفاده كنيد
اينم كد برنامه اي كه مي خواهيد:
البته ببخشيد خود برنامه رو نزاشتم فقط كدش و اين جا مي زارم
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1

Private Type DEVMODE
dmDeviceName As String * 32
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 * 32
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
dmPanningWidth As Long
dmPanningHeight As Long
End Type

Private Declare Function ChangeDisplaySettingsEx Lib "user32" Alias "ChangeDisplaySettingsExA" (lpszDeviceName As Any, lpDevode As Any, ByVal hWnd As Long, ByVal dwFlags As Long, lParam As Any) As Long

Dim PrevX As Long, PrevY As Long

Private Sub Form_Load()
Dim Dev As DEVMODE
PrevX = Screen.Width / Screen.TwipsPerPixelX
PrevY = Screen.Height / Screen.TwipsPerPixelY
Dev.dmSize = Len(Dev)
Dev.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
Dev.dmPelsWidth = 800
Dev.dmPelsHeight = 600
ChangeDisplaySettingsEx ByVal 0&, Dev, ByVal 0&, CDS_UPDATEREGISTR, ByVal 0&
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim Dev As DEVMODE
Dev.dmSize = Len(Dev)
Dev.dmPelsWidth = PrevX
Dev.dmPelsHeight = PrevY
ChangeDisplaySettingsEx ByVal 0&, Dev, ByVal 0&, CDS_UPDATEREGISTR, ByVal 0&
End Sub

اگر میشه یه توضیحی بدین ...
من می خوام بفهمم شما چه کرده اید، نه آنکه فقط کپی کنم.
mer30

sari-1369
02-02-2008, 14:38
سلام از تابع ChangeDisplaySettingsEx استفاده كنيد
اينم كد برنامه اي كه مي خواهيد:
البته ببخشيد خود برنامه رو نزاشتم فقط كدش و اين جا مي زارم
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1

Private Type DEVMODE
dmDeviceName As String * 32
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 * 32
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
dmPanningWidth As Long
dmPanningHeight As Long
End Type

Private Declare Function ChangeDisplaySettingsEx Lib "user32" Alias "ChangeDisplaySettingsExA" (lpszDeviceName As Any, lpDevode As Any, ByVal hWnd As Long, ByVal dwFlags As Long, lParam As Any) As Long

Dim PrevX As Long, PrevY As Long

Private Sub Form_Load()
Dim Dev As DEVMODE
PrevX = Screen.Width / Screen.TwipsPerPixelX
PrevY = Screen.Height / Screen.TwipsPerPixelY
Dev.dmSize = Len(Dev)
Dev.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
Dev.dmPelsWidth = 800
Dev.dmPelsHeight = 600
ChangeDisplaySettingsEx ByVal 0&, Dev, ByVal 0&, CDS_UPDATEREGISTR, ByVal 0&
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim Dev As DEVMODE
Dev.dmSize = Len(Dev)
Dev.dmPelsWidth = PrevX
Dev.dmPelsHeight = PrevY
ChangeDisplaySettingsEx ByVal 0&, Dev, ByVal 0&, CDS_UPDATEREGISTR, ByVal 0&
End Sub
ممنونم ........

nibble
04-02-2008, 07:17
ممنونم ........

خواهش مي كنم


اگر میشه یه توضیحی بدین ...
من می خوام بفهمم شما چه کرده اید، نه آنکه فقط کپی کنم.
mer30

خوب توي اين برنامه مي خواهيم وقتي برنامه اجرا مي شه resolution رو تغيير بده و وقتي برنامه تمام مي شه resolution به حالت قبل بركرده پس لازم داريم قبل از تغيير resolution مقدار قبلي اون رو ذخيره كنيم
تغيير resolution را با تابع ChangeDisplaySettingsEx انجام مي دهيم
توي form load قبل از تغيير مقدار قبلي resolution رو در متغير هاي prevx, prevy ذخيره مي كنيم ( Screen.Width عرض صفحه نمايش و Screen.TwipsPerPixelX تعداد twip رو در هر پيكسل افقي بر مي گرداند بنابراين با تقسيم Screen.Width / Screen.TwipsPerPixelX تعداد پيكسل هاي صفحه نمايش بدست مي ياد ) و بعد هم در Dev.dmPelsWidth و Dev.dmPelsHeight مقدارهاي جديد رو وارد مي كنيد و تابع رو صدا مي زنيم تا resolution رو تغير بده
توي form unlaod مقدار قبلي resolution رو كه در prevx,prevy ذخيره كرديم به Dev.dmPelsWidth و Dev.dmPelsHeight انتساب مي ديم و تابع رو صدا مي زنيم تا دوباره به حالت اول برگرده

ديگه هر چي كه توضيح داشت گفتم اميدوارم فهميده باشيد

Ultimator
04-02-2008, 19:07
سلام
با VB.NET به راحتی میشه این کارو کرد بدون Api اگه NET. کار میکنید بگین کدشو بذارم

nibble
05-02-2008, 07:19
سلام
با VB.NET به راحتی میشه این کارو کرد بدون Api اگه NET. کار میکنید بگین کدشو بذارم

سلام اگر امكانش هست كدش و بزاريد
پيشاپيش ممنون