powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / разрешение экраны
24 сообщений из 24, страница 1 из 1
разрешение экраны
    #36258525
asd456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программа работает 2 разных (разрешение экраны разные) компьютерах. Получается так что обеъкты над формой на 2-м компьютера не видно. Как можно это проблем решать, не меняя размер формы для обеих компьютера?
...
Рейтинг: 0 / 0
разрешение экраны
    #36258540
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asd456Программа работает 2 разных (разрешение экраны разные) компьютерах. Получается так что обеъкты над формой на 2-м компьютера не видно. Как можно это проблем решать, не меняя размер формы для обеих компьютера?
Вообще, перед написанием программы формируются минимальные системные требования. Все формы разрабатываются с учетом этих требований. Поэтому компьютеры, не соответствующие этим требованиям можно отшивать. При особом желании, автоматически.
...
Рейтинг: 0 / 0
разрешение экраны
    #36258589
asd456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kruchinin Pahan[quot asd456]компьютеры, не соответствующие этим требованиям можно отшивать. При особом желании, автоматически.
Как это? Я новичок в этом деле, помогите пожалуйста. Разрешение экраны разные (я здесь уже ничего не могу делать) и мне надо не менять размер формы для каждого компьютера отдельно. Как-то автоматически можно это делать?

И еще 1 вопрос: Как можно делать так что в самом гриде ничего нелзя было менять?
...
Рейтинг: 0 / 0
разрешение экраны
    #36258592
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть простой вариант - всю программу писать под разрешение 800х600. Либо разворачивать форму на весь экран. С формами, имеющими Grid чаще всего так и поступаю. Кнопки упраления в
верхней части окна, ниже Grid в Init его прописываю

WITH this
.Width=_Screen.Width-7
.Height=_Screen.Height-61
ENDWITH
в Init формы
WITH this
.Width=_Screen.Width
.Height=_Screen.Height
ENDWITH
Помимо этого где-то видел описание методов изменения разрешения монитора программно. Поищи, если ПК поддерживает - можно попробовать.
...
Рейтинг: 0 / 0
разрешение экраны
    #36258593
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asd456Kruchinin Pahan[quot asd456]компьютеры, не соответствующие этим требованиям можно отшивать. При особом желании, автоматически.
Как это? Я новичок в этом деле, помогите пожалуйста. Разрешение экраны разные (я здесь уже ничего не могу делать) и мне надо не менять размер формы для каждого компьютера отдельно. Как-то автоматически можно это делать?

Еще раз повторюсь, автоматически уменьшить форму - никак. Оптимально расставить контролы на форме может только человек.
Автоматически увеличивать - см. свойство Anchor

asd456
И еще 1 вопрос: Как можно делать так что в самом гриде ничего нелзя было менять?
см. свойство ReadOnly
...
Рейтинг: 0 / 0
разрешение экраны
    #36258594
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в Grid имеется свойство ReadOnly =.T. - только для чтения. У каждого столбца также имеется это спойство, т.е. можно поиграть настройками для чего хочешь
...
Рейтинг: 0 / 0
разрешение экраны
    #36258665
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin Pahan
Еще раз повторюсь, автоматически уменьшить форму - никак.
Не факт.
Оптимально расставить контролы на форме может только человек.
Факт.
...
Рейтинг: 0 / 0
разрешение экраны
    #36258745
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dag Kruchinin Pahan
Еще раз повторюсь, автоматически уменьшить форму - никак.
Не факт.

Имеется в виду: "Автоматически уменьшить форму, так чтобы она осталась удобной и читаемой человеком возможно только в некоторых заранее заданных пределах (за исключением вырожденных случаев)"

Суть передана чуточку вернее, а понятнее от этого не стало.
...
Рейтинг: 0 / 0
разрешение экраны
    #36258780
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример работы на уменьшение и увеличение. По умолчанию разрешение 800*600, размер шрифта 9.
...
Рейтинг: 0 / 0
разрешение экраны
    #36258871
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: asd456
> Как это? Я новичок в этом деле, помогите пожалуйста. Разрешение экраны разные (я здесь уже ничего не могу делать)
> и мне надо не менять размер формы для каждого компьютера отдельно. Как-то автоматически можно это делать?

В решениях на фоксклабе когда-то скачал класс Resizer, активно им пользовался,
пока не появились анчоры, тогда добавил метод класса toscreen2, который просто устанавливает размер формы, а элементы
управления изменяют размер, благодаря анчорам. Ещё позже, появился второй монитор, и тогда доделал метод для определения
на каком мониторе находится окно и определение разрешения этого монитора:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
* Установка зависимости формы от размера экрана

Lparameters m.kW
Local mwidth, kW_, kH_, kA, kT, kTw
kT  =  0 
kTw =  0 
Try
*    Проверяем наличие тулбаров и вычисляем их размеры
 For ln1 = _Screen.FormCount To  1  Step - 1 
  If Alltrim(_Screen.Forms(m.ln1).BaseClass) == "Toolbar" Then
   If _Screen.Forms(m.ln1).DockPosition =   0  Or _Screen.Forms(m.ln1).DockPosition =   3  Then
    kT = kT + _Screen.Forms(m.ln1).Height
   Else
    kTw = kTw + _Screen.Forms(m.ln1).Width
   Endif
  Endif
 Endfor
Catch To oErr
 kT  =  0 
 kTw =  0 
Endtry
* Определяем количество мониторов, и разрешение того монитора, на котором находится окно
#Define DISPLAY_DEVICE_ACTIVE  1 
#Define DISPLAY_DEVICE_PRIMARY_DEVICE  4 
#Define DISPLAY_DEVICE_SIZE   424 
#Define ENUM_CURRENT_SETTINGS - 1 
#Define MONITOR_DEFAULTTONEAREST  2 
#Define MONITORINFOEX_SIZE  72 

#Define SM_XVIRTUALSCREEN  76 
#Define SM_YVIRTUALSCREEN  77 
#Define SM_CXVIRTUALSCREEN  78 
#Define SM_CYVIRTUALSCREEN  79 
#Define SM_CMONITORS  80 
Declare Integer GetSystemMetrics In user32 Integer nIndex
lnNonitors = GetSystemMetrics(SM_CMONITORS)
If lnNonitors >  1  Then
 Declare Integer EnumDisplaySettings In user32;
  STRING lpszDeviceName, Integer iModeNum, String @lpDevMode

 Declare Integer MonitorFromWindow In user32;
  INTEGER hWindow, Integer dwFlags

 Declare Integer GetMonitorInfo In user32;
  INTEGER hMonitor, String @ lpmi
 Local hMonitor, cBuffer, cMonitorName

 hMonitor = MonitorFromWindow(Thisform.HWnd,;
  MONITOR_DEFAULTTONEAREST)

 cBuffer = Padr(Chr(MONITORINFOEX_SIZE),;
  MONITORINFOEX_SIZE, Chr( 0 ))

 = GetMonitorInfo(hMonitor, @cBuffer)

 cMonitorName = Strtran(Substr(cBuffer, 41 ), Chr( 0 ),"")

 Local cBuffer

 cBuffer = Replicate(Chr( 0 ),  1024 )

 If EnumDisplaySettings(cMonitorName,;
   ENUM_CURRENT_SETTINGS, @cBuffer) <>  0 
  lcBuffer = Substr(cBuffer,  109 , 4 )
*   ? "screenwidth - " + Alltrim(Str(Asc(Substr(lcBuffer,  1 , 1 )) + ;
*    BitLShift(Asc(Substr(lcBuffer,  2 , 1 )),   8 ) +;
*    BitLShift(Asc(Substr(lcBuffer,  3 , 1 )),  16 ) +;
*    BitLShift(Asc(Substr(lcBuffer,  4 , 1 )),  24 )))
  mwidth = Asc(Substr(lcBuffer,  1 , 1 )) + ;
   BitLShift(Asc(Substr(lcBuffer,  2 , 1 )),   8 ) +;
   BitLShift(Asc(Substr(lcBuffer,  3 , 1 )),  16 ) +;
   BitLShift(Asc(Substr(lcBuffer,  4 , 1 )),  24 ) - kTw && Отнимаем ширину туллбара, если он есть
  lcBuffer = Substr(cBuffer,  113 , 4 )
*   ? "screenheight - " + Alltrim(Str(Asc(Substr(lcBuffer,  1 , 1 )) + ;
*    BitLShift(Asc(Substr(lcBuffer,  2 , 1 )),   8 ) +;
*    BitLShift(Asc(Substr(lcBuffer,  3 , 1 )),  16 ) +;
*    BitLShift(Asc(Substr(lcBuffer,  4 , 1 )),  24 )))
  mhight = Asc(Substr(lcBuffer,  1 , 1 )) + ;
   BitLShift(Asc(Substr(lcBuffer,  2 , 1 )),   8 ) +;
   BitLShift(Asc(Substr(lcBuffer,  3 , 1 )),  16 ) +;
   BitLShift(Asc(Substr(lcBuffer,  4 , 1 )),  24 )- kT && Отнимаем высоту туллбара, если он есть
  Clear Dlls "GetSystemMetrics", "EnumDisplaySettings", "MonitorFromWindow", "GetMonitorInfo"
 Else
  mwidth = Sysmetric( 1 )- kTw && Отнимаем ширину туллбара, если он есть
  mhight = Sysmetric( 2 )- kT && Отнимаем высоту туллбара, если он есть
  Clear Dlls "GetSystemMetrics", "EnumDisplaySettings", "MonitorFromWindow", "GetMonitorInfo"
 Endif
Else
 mwidth = Sysmetric( 1 )- kTw && Отнимаем ширину туллбара, если он есть
 mhight = Sysmetric( 2 )- kT && Отнимаем высоту туллбара, если он есть
 Clear Dlls "GetSystemMetrics"
Endif

kW_ = Thisform.Width/mwidth
kH_ = Thisform.Height/mhight
kA = .F.

With Thisform
 .LockScreen = .T.
 .Visible = .F.
 _wh = .Width / .Height

 If .AutoCenter = .T.
  kA = .T.
 Endif

*          .Resizer1.Get_sizes()
* Если пропорции формы не совпадают с пропорциями экрана,
* ориентируемся на большую сторону формы.
 If kH_ > kW_
  .Height = mhight * m.kW / 100 
  .Width = .Height * _wh
 Else
  .Width = mwidth * m.kW / 100 
  .Height = .Width / _wh
 Endif
*          .Resizer1.Set_sizes()
*          .Resizer1.Get_sizes()
 If kA = .T.
  .AutoCenter = .T.
 Endif
 .Visible = .T.
 .LockScreen = .F.
Endwith

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
разрешение экраны
    #36259060
dima-k5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Игорь Горбонос,

Lparameters m.kW а что передается этим параметром ?
...
Рейтинг: 0 / 0
разрешение экраны
    #36259064
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: dima-k5
> 2 Игорь Горбонос,
>
> Lparameters m.kW а что передается этим параметром ?

Код: plaintext
m.kW =  95  && Желаемый размер вашей формы относительно размера экрана, %Thisform.Resizer1.ToScreen2(m.kW)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
разрешение экраны
    #36259084
dima-k5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос, большое спасибо !
...
Рейтинг: 0 / 0
разрешение экраны
    #36259085
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Игорь Горбонос
что-то сбился код.
Код: plaintext
1.
m.kW =  95  && Желаемый размер вашей формы относительно размера экрана, в %
Thisform.Resizer1.ToScreen2(m.kW)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
разрешение экраны
    #36259100
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди зачем так сложно, повторюсь
в Init формы
WITH this
.Width=_Screen.Width
.Height=_Screen.Height
ENDWITH
умножайте и делите _Screen.Width и _Screen.Height на что угодно.
...
Рейтинг: 0 / 0
разрешение экраны
    #36259111
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Местами администратор
> Люди зачем так сложно, повторюсь

Подключи себе второй монитор( у меня 19'' и 15'') и потом попробуй свой код
И (не)приятно удивись.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
разрешение экраны
    #36260193
asd456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос, куда этот код записать надо?
...
Рейтинг: 0 / 0
разрешение экраны
    #36260276
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: asd456
> Игорь Горбонос, куда этот код записать надо?

Именно тот который я привел, в новый метод класса Resizer, скачаный когда-то с фоксклаба, ссылку я давал, точнее не
скажу. Немного переделав, метод можно добавить к базовому классу формы или формсета. и установку размеров формы, я
вызываю в Init формы.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
разрешение экраны
    #36260291
asd456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос, я совсем новичек в этом деле, помогите пожалуйста, что делать, как делать, если можно примеры?
...
Рейтинг: 0 / 0
разрешение экраны
    #36260322
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: asd456

открываешь форму, в меню среды Form->New Metod, вводишь имя метода, например toscreen, жмешь кнопку Ок. Потом в окне
свойств формы закладка Methods, идешь в самый низ, там ищешь определенный, тобой метод и дважды кликаешь по нему.
Открывается окно кода, переключаешся на русский язык, копируешь отсюда код и вставляешь в открывшееся окно. Нажимаешь
сохранить. потом в событии формы Init пишешь строку: This.toscreen(85)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
Lparameters m.kW
* Установка зависимости формы от размера экрана
Local mwidth, kW_, kH_, kA, kT
kT =  0 
Try
 For ln1 = _Screen.FormCount To  1  Step - 1 
  If Alltrim(_Screen.Forms(m.ln1).Name) == "my_toolbar" Then
   kT = _Screen.Forms(m.ln1).Height
  Endif
 Endfor
Catch To oErr
 kT =  0 
Endtry
* Определяем количество мониторов, и разрешение того монитора, на котором находится окно
#Define DISPLAY_DEVICE_ACTIVE  1 
#Define DISPLAY_DEVICE_PRIMARY_DEVICE  4 
#Define DISPLAY_DEVICE_SIZE   424 
#Define ENUM_CURRENT_SETTINGS - 1 
#Define MONITOR_DEFAULTTONEAREST  2 
#Define MONITORINFOEX_SIZE  72 

#Define SM_XVIRTUALSCREEN  76 
#Define SM_YVIRTUALSCREEN  77 
#Define SM_CXVIRTUALSCREEN  78 
#Define SM_CYVIRTUALSCREEN  79 
#Define SM_CMONITORS  80 
* Проверяем количество мониторов
Declare Integer GetSystemMetrics In user32 Integer nIndex
lnNonitors = GetSystemMetrics(SM_CMONITORS)
If lnNonitors >  1  Then
 Declare Integer EnumDisplaySettings In user32;
  STRING lpszDeviceName, Integer iModeNum, String @lpDevMode

 Declare Integer MonitorFromWindow In user32;
  INTEGER hWindow, Integer dwFlags

 Declare Integer GetMonitorInfo In user32;
  INTEGER hMonitor, String @ lpmi
 Local hMonitor, cBuffer, cMonitorName
* Определяем, на каком мониторе находится окно
 hMonitor = MonitorFromWindow(This.HWnd,;
  MONITOR_DEFAULTTONEAREST)

 cBuffer = Padr(Chr(MONITORINFOEX_SIZE),;
  MONITORINFOEX_SIZE, Chr( 0 ))

 = GetMonitorInfo(hMonitor, @cBuffer)

 cMonitorName = Strtran(Substr(cBuffer, 41 ), Chr( 0 ),"")

 Local cBuffer

 cBuffer = Replicate(Chr( 0 ),  1024 )
* Определяем разрешение, интересующего нас, монитора
 If EnumDisplaySettings(cMonitorName,;
   ENUM_CURRENT_SETTINGS, @cBuffer) <>  0 
  lcBuffer = Substr(cBuffer,  109 , 4 )

  mwidth = Asc(Substr(lcBuffer,  1 , 1 )) + ;
   BitLShift(Asc(Substr(lcBuffer,  2 , 1 )),   8 ) +;
   BitLShift(Asc(Substr(lcBuffer,  3 , 1 )),  16 ) +;
   BitLShift(Asc(Substr(lcBuffer,  4 , 1 )),  24 )
  lcBuffer = Substr(cBuffer,  113 , 4 )

  mhight = Asc(Substr(lcBuffer,  1 , 1 )) + ;
   BitLShift(Asc(Substr(lcBuffer,  2 , 1 )),   8 ) +;
   BitLShift(Asc(Substr(lcBuffer,  3 , 1 )),  16 ) +;
   BitLShift(Asc(Substr(lcBuffer,  4 , 1 )),  24 )- kT && Отнимаем высоту туллбара, если он есть
  Clear Dlls "GetSystemMetrics", "EnumDisplaySettings", "MonitorFromWindow", "GetMonitorInfo"
 Else
  mwidth = Sysmetric( 1 )
  mhight = Sysmetric( 2 )- kT && Отнимаем высоту туллбара, если он есть
  Clear Dlls "GetSystemMetrics", "EnumDisplaySettings", "MonitorFromWindow", "GetMonitorInfo"
 Endif
Else
 mwidth = Sysmetric( 1 )
 mhight = Sysmetric( 2 )- kT && Отнимаем высоту туллбара, если он есть
 Clear Dlls "GetSystemMetrics"
Endif

kW_ = Thisformset.frmMain.Width/mwidth
kH_ = Thisformset.frmMain.Height/mhight
kA = .F.

With Thisformset.frmMain
 .LockScreen = .T.
 .Visible = .F.
 _wh = .Width / .Height

 If .AutoCenter = .T.
  kA = .T.
 Endif

* Если пропорции формы не совпадают с пропорциями экрана,
* ориентируемся на большую сторону формы.
 If kH_ > kW_
  .Height = mhight * m.kW / 100 
  .Width = .Height * _wh
 Else
  .Width = mwidth * m.kW / 100 
  .Height = .Width / _wh
 Endif
 If kA = .T.
  .AutoCenter = .T.
 Endif
 .Visible = .T.
 .LockScreen = .F.
Endwith


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
разрешение экраны
    #36260332
arzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос, спасибо большое, сейчас буду проверить у себя.
...
Рейтинг: 0 / 0
разрешение экраны
    #36260493
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Местами администратор
> Люди зачем так сложно, повторюсь

Подключи себе второй монитор( у меня 19'' и 15'') и потом попробуй свой код
И (не)приятно удивись.



У меня 15 и 22, решение отличное, но чет трудно представить юзера с 2 мониторами...
...
Рейтинг: 0 / 0
разрешение экраны
    #36261026
asd456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая ошибка получается:
Object is not contained in a forrmset.
...
Рейтинг: 0 / 0
разрешение экраны
    #36261452
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Местами администратор
> У меня 15 и 22, решение отличное, но чет трудно представить юзера с 2 мониторами...

У меня все руководство, с моей подачи, сидит на 2-х мониторах и они пользуются программой, правда у них одинаковые
мониторы и этот код был нужен изначально мне самому , но зато я не переживаю что нужно будет адаптировать под разное
разрешение разных мониторов

> Автор: asd456
> Такая ошибка получается:
> Object is not contained in a forrmset.

У меня это метод формсета, в коде есть строки Thisformset.frmMain замени их на this

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / разрешение экраны
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]