PDA

View Full Version : مبتدی: رزولوشن سیستم



elham99
دوشنبه 24 مهر 1391, 12:47 عصر
سلام دوستان خوبین من میخوام وقتی برنامم اجرا میشه رزولوشن مانیتورو با برنامه خودم ست کنم و به هنگام روج از برنامم دوباره رزولوشن مانیتور به حالت قبلیش برگرده ممنون میشم کسی کدشو برام بنویسه تشکر.با تشکر فراوان از اقای ابراهیمی عزیز

ali reza mansoori 2
دوشنبه 24 مهر 1391, 12:59 عصر
دوست عزیز اگر کسی واقعا بخواد به شما کمک کنه کدشو برات نمینویسه شما رو راهنمایی میکنه تا خودتون اونو بنویسید
در مورد موضوع هم فکر کنم زیاد صحبت شده یه سرچی بزن احتمالا پیدا میکنی

elham99
دوشنبه 24 مهر 1391, 14:30 عصر
دوست عزیز اگر کسی واقعا بخواد به شما کمک کنه کدشو برات نمینویسه شما رو راهنمایی میکنه تا خودتون اونو بنویسید
در مورد موضوع هم فکر کنم زیاد صحبت شده یه سرچی بزن احتمالا پیدا میکنی
دوست عزیز اولا کلا سرچ زدم موضوعی تحت عنوان ست کردن رزولوشن سیستم نبود خیلی بحث شده ولی مفید نیستن یعنی بدرد نمیخورن شما از طریق پرایمری اسکرین رزولوشنون بخونی یا ... نخونی مهم اینه که چطوری بتونی با WFD مچش کنی تا کارایی مطلوبو داشته باشه شما اگه نمیتونین ج بدین بیخودی ج
تاپیک نزارین

xxnagin
دوشنبه 24 مهر 1391, 22:34 عصر
سلام


'class Resolution'
Imports System
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential)> _
Public Structure DEVMODE1
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _
Public dmDeviceName As String
Public dmSpecVersion As Short
Public dmDriverVersion As Short
Public dmSize As Short
Public dmDriverExtra As Short
Public dmFields As Integer
Public dmOrientation As Short
Public dmPaperSize As Short
Public dmPaperLength As Short
Public dmPaperWidth As Short
public dmScale As Short
Public dmCopies As Short
Public dmDefaultSource As Short
Public dmPrintQuality As Short
Public dmColor As Short
Public dmDuplex As Short
Public dmYResolution As Short
Public dmTTOption As Short
Public dmCollate As Short
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _
Public dmFormName As String
Public dmLogPixels As Short
Public dmBitsPerPel As Short
Public dmPelsWidth As Integer
Public dmPelsHeight As Integer
Public dmDisplayFlags As Integer
Public dmDisplayFrequency As Integer
Public dmICMMethod As Integer
Public dmICMIntent As Integer
Public dmMediaType As Integer
Public dmDitherType As Integer
Public dmReserved1 As Integer
Public dmReserved2 As Integer
Public dmPanningWidth As Integer
Public dmPanningHeight As Integer
End Structure
Class User_32
<DllImport("user32.dll")> _
Public Shared Function EnumDisplaySettings(ByVal deviceName As String, ByVal modeNum As Integer, ByRef devMode As DEVMODE1) As Integer
End Function
<DllImport("user32.dll")> _
Public Shared Function ChangeDisplaySettings(ByRef devMode As DEVMODE1, ByVal flags As Integer) As Integer
End Function
Public Const ENUM_CURRENT_SETTINGS As Integer = -1
Public Const CDS_UPDATEREGISTRY As Integer = &H1
Public Const CDS_TEST As Integer = &H2
Public Const DISP_CHANGE_SUCCESSFUL As Integer = 0
Public Const DISP_CHANGE_RESTART As Integer = 1
Public Const DISP_CHANGE_FAILED As Integer = -1
End Class
Namespace Resolution
Class CResolution
Public Sub New(ByVal Width As Integer, ByVal Height As Integer)
Dim screen As Screen = screen.PrimaryScreen
Dim iWidth As Integer = Width
dim iHeight As Integer = Height
Dim dm As New DEVMODE1()
dm.dmDeviceName = New [String](New Char(32) {})
dm.dmFormName = New [String](New Char(32) {})
dm.dmSize = CType(Marshal.SizeOf(dm), Short)
If 0 <> User_32.EnumDisplaySettings(Nothing, User_32.ENUM_CURRENT_SETTINGS, dm) Then
dm.dmPelsWidth = iWidth
dm.dmPelsHeight = iHeight
Dim iRet As Integer = User_32.ChangeDisplaySettings(dm, User_32.CDS_TEST)
If iRet = User_32.DISP_CHANGE_FAILED Then
MessageBox.Show("Unable to process your request")
MessageBox.Show("Description: Unable To Process Your Request. Sorry For This Inconvenience.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
iRet = User_32.ChangeDisplaySettings(dm, User_32.CDS_UPDATEREGISTRY)
Select Case iRet
Case User_32.DISP_CHANGE_SUCCESSFUL
If True Then
Exit Select
'successfull change
End If
Case User_32.DISP_CHANGE_RESTART
If True Then
MessageBox.Show("Description: You Need To Reboot For The Change To Happen." & vbLf & " If You Feel Any Problem After Rebooting Your Machine" & vbLf & "Then Try To Change Resolution In Safe Mode.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Select
'windows 9x series you have to restart
End If
Case Else
If True Then
MessageBox.Show("Description: Failed To Change The Resolution.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Select
'failed to change
End If
End Select
End If
End If
End Sub
End Class
End Namespace
'========================================Form1
public Class Form1
Dim tempHeight As Integer
Dim tempWidth As Integer
Public Sub New()
InitializeComponent()
Dim Srn As Screen = Screen.PrimaryScreen()
tempHeight = Srn.Bounds.Size.Height
tempWidth = Srn.Bounds.Size.Width
Me.Text = tempWidth & "x" & tempHeight
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
MessageBox.Show("Resolution is going to change to " & tempWidth.ToString() & " X " & tempHeight.ToString())
Dim ChangeRes As New Resolution.CResolution(tempWidth, tempHeight)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ChangeRes As New Resolution.CResolution(800, 600)
End Sub
End Class

r. salehi
سه شنبه 25 مهر 1391, 03:36 صبح
سلام
دوست عزیز یک سوال برای من مطرح شد. چرا اصلا باید رزولوشن مانیتور را تغییر بدین؟ اگر نرم افزارتون چیزی غیر از یک بازی باشه اصلا نباید نیازی به این کار داشته باشید. معمولا نرم افزار های امروزی هیچ کدام این کار را نمی کنند. آیا قصدتون از این کار تنظیم نمایش و تنظیمات چیدمان فرمهایه که تهیه کردین؟ یعنی می خواهید فرمتون دقیقا روی هر مانیتوری فیت نمایش داده بشه؟

elham99
سه شنبه 25 مهر 1391, 09:13 صبح
سلام
دوست عزیز یک سوال برای من مطرح شد. چرا اصلا باید رزولوشن مانیتور را تغییر بدین؟ اگر نرم افزارتون چیزی غیر از یک بازی باشه اصلا نباید نیازی به این کار داشته باشید. معمولا نرم افزار های امروزی هیچ کدام این کار را نمی کنند. آیا قصدتون از این کار تنظیم نمایش و تنظیمات چیدمان فرمهایه که تهیه کردین؟ یعنی می خواهید فرمتون دقیقا روی هر مانیتوری فیت نمایش داده بشه؟
سلام ممنون از پاسختون-اره خوب میخوام تو همه سیستم ها فرمم کل صحه رو با چیدمان که خودم تهیه کردم نمایش داده بشه.

xxnagin
سه شنبه 25 مهر 1391, 13:25 عصر
اگه شما میخواهید فرمتون کل صفحه رو بگیره این همه کد نیازی نبود
Me.WindowState = FormWindowState.Maximized
یا
Me.Top = Screen.PrimaryScreen().Bounds.Top
Me.Left = Screen.PrimaryScreen().Bounds.Left
Me.Width = Screen.PrimaryScreen().Bounds.Width
Me.Height = Screen.PrimaryScreen().Bounds.Height

r. salehi
سه شنبه 25 مهر 1391, 15:02 عصر
سلام مجدد
خوب شد گفتین منظورتون از تغییر رزولوشن چیه. ببینید دوست عزیز روشی که برای این کار در پیش گرفتین (یعنی تغییر رزولوشن برای حفظ چیدمان فرم) روش صحیحی نیست. کار زیادی میبره. نتیجه خوبی نمیده و کاربر را هم از نرم افزار شدیدا دلزده میکنه. علاوه بر تمام اینها شفافیت و زیبایی نرم افزار شما را هم خراب میکنه.
ویژوال ابزارهای بسیار زیادی برای تنظیمات محل قرارگیری کنترلهای روی فرم داره که بنا به سایز و رزولوشن مانیتور و همین طور بسته به اینکه فرم اصلی ماکسیمایز باشه و یا نباشه، محل و سایز کنترلهای قرارگرفته روی فرم را تغییر میده. به عنوان ساده ترین ها میتونم به Anchor و Dock اشاره کنم که جز Property های اکثر کنترلها مثل ListBox, DataGridView, TextBox, ComboBox و حتی دکمه ها هست و با کمی تلاش و سعی و خطا خودتون با تغییر مقادیرش و اجرای برنامه میتونید اثراتش را به راحتی ملاحظه بفرمایید.
روشهای دیگری هم هست که با ترکیب همون خصوصیاتی که در بالا عرض کردم و Sub-Form هایی که به شکل User Control به برنامه شما اضافه میشن، شما را قادر می کنند صدها Sub-Form و چند صد کنترل را در برنامه خودتون به نحوی قراربدین که در هر کامپیوتری با هر سایز مانیتور و با هر رزولوشنی شکیل و مرتب به نمایش در بیاد.
امیدوارم تونسته باشم کمکی بکنم
موفق باشید