PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Переключить разрешение монитора


Переключить разрешение монитора

Сообщений 1 страница 9 из 9

1

Есть ExamineScreenModes(), она возвращает возможные варианты разрешений.
Так и не понял как можно переключиться на другое разрешение, кругом только чтение. Может это где в другом месте справки есть.

0

2

Разрешение экрана изменяет функция OpenScreen.

0

3

Пробовал, получил чёрный экран на пару секунд, и само всё возвращается назад.

Не получается картинку загрузить с компа, с меня требут флеш подключить.

Это не для игрушки, нужно переключать  разрешение монитора, а не экрана, так умеет делать программа H-menu, но её забросили очень давно.

Отредактировано newJS (08.02.2016 08:32:04)

0

4

Код:
Procedure Change_DisplaySettings(width,height,Depth,Freq,Permanent)
  dmScreenSettings.DEVMODE
  dmScreenSettings\dmSize = SizeOf(dmScreenSettings)
  dmScreenSettings\dmPelsWidth = width
  dmScreenSettings\dmPelsHeight = height
  dmScreenSettings\dmBitsPerPel = Depth
  dmScreenSettings\dmDisplayFrequency=Freq
  dmScreenSettings\dmFields = 262144 | 524288 | 1048576
 
  If Permanent
    retour=ChangeDisplaySettings_(@dmScreenSettings, 1)
  Else
    retour=ChangeDisplaySettings_(@dmScreenSettings, 4)
  EndIf
 
  ProcedureReturn retour
EndProcedure
 
;/ Test
Change_DisplaySettings(1024,768,32,60,0)
MessageRequester("Change Display Settings","OK to Restore")

+1

5

Пётр, спасибо, забрал, попробую, здесь не начем.
Хотелось бы комменты, совсем не понятно кто тут от кого произошёл, особенно эта строка dmScreenSettings\dmFields = 262144 | 524288 | 1048576

0

6

Работать то оно работает, но с тем же эффектом, что и OpenScreen, тут же само переключается назад, а смысл в таком спец эффекте.
Надо чтобы после переключения все программы продолжали работать до следуещего переключения.

0

7

Новое разрешение экрана будет сохраняться до тех пор пока активно запущенное приложение.
Использована процедура из предыдущего примера и просто дополнена AddSysTrayIcon(). Что на счёт такого варианта?

Код:
Procedure Change_DisplaySettings(width,height,Depth,Freq,Permanent)
  dmScreenSettings.DEVMODE
  dmScreenSettings\dmSize = SizeOf(dmScreenSettings)
  dmScreenSettings\dmPelsWidth = width
  dmScreenSettings\dmPelsHeight = height
  dmScreenSettings\dmBitsPerPel = Depth
  dmScreenSettings\dmDisplayFrequency=Freq
  dmScreenSettings\dmFields = 262144 | 524288 | 1048576
  
  If Permanent
    retour=ChangeDisplaySettings_(@dmScreenSettings, 1)
  Else
    retour=ChangeDisplaySettings_(@dmScreenSettings, 4)
  EndIf
  
  ProcedureReturn retour
EndProcedure




Enumeration Window
  #MainWindow
EndEnumeration

Enumeration MenuItemID
  #MenuItemID_Exit
EndEnumeration

Enumeration SysTrayIcon
  #TrayIcon
EndEnumeration

Enumeration Image
  #TrayIconImage
EndEnumeration

If CreateImage(#TrayIconImage, 16, 16)
  StartDrawing(ImageOutput(#TrayIconImage))
  For i=16 To 4 Step -1
    Circle(0, 0, i, RGB(16*i, 0, 0))
  Next
  StopDrawing()
EndIf


If OpenWindow(#MainWindow, #PB_Ignore, #PB_Ignore, 320, 240, "Change Display Settings", #PB_Window_Invisible)
  ;{ Tray
  If AddSysTrayIcon(#TrayIcon, WindowID(#MainWindow), ImageID(#TrayIconImage))
    TrayMenu = CreatePopupMenu(#PB_Any)
    If IsMenu(TrayMenu)
      MenuItem(#MenuItemID_Exit, "Exit")
    EndIf
    
  EndIf
  ;}
  
  
  Change_DisplaySettings(1024,768,32,60,0)
  
  Repeat
    
    WindowEvent=WindowEvent()
    Select WindowEvent
        
      Case #PB_Event_SysTray
        If EventType() = #PB_EventType_RightClick
          DisplayPopupMenu(TrayMenu, WindowID(#MainWindow))
        EndIf
        
      Case #PB_Event_Menu 
        Select EventMenu()   
          Case #MenuItemID_Exit
            Break
        EndSelect
    EndSelect
    
  ForEver
  
  CloseWindow(#MainWindow)
EndIf
End

+1

8

newJS написал(а):

Хотелось бы комменты, совсем не понятно кто тут от кого произошёл, особенно эта строка dmScreenSettings\dmFields = 262144 | 524288 | 1048576

Это нужно изучать описание функции ChangeDisplaySettings (на русском) и структуры DEVMODE (на русском).

newJS написал(а):

Надо чтобы после переключения все программы продолжали работать до следуещего переключения.

Тогда в последнем аргументе должен быть не 0, а 1.

Код:
Change_DisplaySettings(1024,768,32,60,1)

+1

9

Пётр спасибо, это читал, только я уже в том возрасте когда новое даётся с трудом, а виндячие api я вообще не понимаю.

Тигрёнок спасибо, всё забрал, буду пробовать.

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Переключить разрешение монитора