powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Размер окон при разных резолюциях
25 сообщений из 25, страница 1 из 1
Размер окон при разных резолюциях
    #32762974
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопросец:
У меня экран 17" Резолюция стоит 1024х768. Весь проект с такими показателями смотрится хорошо. Беда, если резолюция выше - 800х600 (не говоря уже о 640х480). Тогда окно вылазит за пределы экрана. Как можно задать размеры окон вне зависимости от разрешения монитора? И как уменьшить окна, если монитор 15"?
В проекте есть окно mdi + вызываются окна response + вызываются другие проекты (тоже написанные на PB).
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763046
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так сделай все окна такими, чтобы они влезали в "минимальный" размер экрана (о 640*480 можно уже забывать, 800*600 - вполне разумный минимум).
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763072
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000Ну так сделай все окна такими, чтобы они влезали в "минимальный" размер экрана (о 640*480 можно уже забывать, 800*600 - вполне разумный минимум).
Проект уже готов. К тому же в этом случае получатся очень маленькие окошки при разрешении 1280х1024
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763084
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763141
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сотников Тема уже обсуждалась
Я был здесь: http://%5D%7C>]http://]|> http://www.pfcguide.com/downloads/pfcobjs.zip , перетащил к себе n_cst_resize. Сейчас пытаюсь разобраться, что с ним делать. Может быть кто-нибудь подскажет, как эту беду использовать.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763179
Nividimka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы ходили по этому пути давным-давно (pfc resize). Имхо, он тупиковый (без существенных пределок). При сложном интерфейсе всё получается очень и очень коряво.
Посмотри http://www.google.ru/groups?hl=ru&lr=&threadm=7nrqmm%24aal%241%40news.sovam.com&rnum=1&prev=/groups%3Fhl%3Dru%26lr%3D%26selm%3D7nrqmm%2524aal%25241%2540news.sovam.com

Еще была какая-то статейка в pbdj с примерами ресайса: поищи.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763193
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RiskaПроект уже готов.
Значит, не готов ;).

К тому же в этом случае получатся очень маленькие окошки при разрешении 1280х1024
Так и должно быть. Если кто-то захочет видеть большие окошки - он поставит видеорежим поменьше.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763230
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для resize объектов можно пользоваться чем угодно, хоть своими функциями, хоть из pfc взять сервис. Для содержимого DW есть свойство ZOOM.
dw_control.Object.DataWindow.Zoom Указывается в процентах. Посчитать проценты изменения размеров окна относительно оригинальных и выставить соответсвующий zoom.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763401
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska Сотников Тема уже обсуждалась
Я был здесь: http://" TARGET="_blank">http://]http://www.pfcguide.com/downloads/pfcobjs.zip, перетащил к себе n_cst_resize. Сейчас пытаюсь разобраться, что с ним делать. Может быть кто-нибудь подскажет, как эту беду использовать.
Неужели никто не знает, как запустить этот чертов n_cst_resize?
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763465
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ti vidno ne sovsem ponimaesi problemu,
tut esli daje pritepisi etot n_cst_resize, to avtomatom ne vse u tebea budet resizetsea, tak kak dlea etogo ti doljen v svoem proekte imeti:
vse okna doljni inheritetsea ot tvoego odnogo, vse dw, takje ot odnogo potomka, nu i tak dalee, a potom toliko meneati kod v etih bazovih obiektak,
inace tebe pridiotsea rucikami meneati vo vseh oknah event resize, net drugovo resenia dlea tebea...
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763513
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть n_cst_resize
1) в instance
Код: plaintext
n_cst_resize res 
2) в open евенте окна
Код: plaintext
1.
2.
3.
4.
   res = create n_cst_resize
   res.of_SetOrigSize( 70 , 70 )   // начальные установки
   res.of_SetMinSize( 70 , 70 )   // начальные установки
   res.of_Register(pb_1,"FixedToRight")  // регистрируем объект
3) в resize евенте окна
Код: plaintext
   res.event pfc_resize(sizetype,width,height)

УСЕ
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763806
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
f45fесть n_cst_resize
1) в instance
Код: plaintext
n_cst_resize res 
2) в open евенте окна
Код: plaintext
1.
2.
3.
4.
   res = create n_cst_resize
   res.of_SetOrigSize( 70 , 70 )   // начальные установки
   res.of_SetMinSize( 70 , 70 )   // начальные установки
   res.of_Register(pb_1,"FixedToRight")  // регистрируем объект
3) в resize евенте окна
Код: plaintext
   res.event pfc_resize(sizetype,width,height)

УСЕ
Я вот эту строку не понимаю:
res.of_Register(pb_1,"FixedToRight") // регистрируем объект
Что такое "pb_1"?
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763818
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pb_1 - picture button?
может быть дюбой другой объект cb_1 (command button), sle_1 и т.д.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763845
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
f45fpb_1 - picture button?
может быть дюбой другой объект cb_1 (command button), sle_1 и т.д.
Мне надо уменьшить все окно со всеми объектами, которые внутри (включая объекты в DW). В окне mdi, например, вообще объектов нет.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763861
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем все это должно произойти автоматически при открытии окна.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763898
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska f45fpb_1 - picture button?
может быть дюбой другой объект cb_1 (command button), sle_1 и т.д.
Мне надо уменьшить все окно со всеми объектами, которые внутри (включая объекты в DW). В окне mdi, например, вообще объектов нет.Вообще-то, IMHO, n_cst_resize предназначен для других целей, а именно - обеспечение фиксированного расположения объектов на окне и/или элементов DW внутри объекта DW при изменении размеров окна. Есля я вас правильно понял, то в вашем случае надо, в зависимости от разрешения экрана, изменять физические размеры управляющих элементов (в пикселях, например). Мне кажется, что такую функциональность несложно разработать самостоятельно, используя, допустим коэффициент пересчета для базового разрешения.
Итак, используя pfc, для всех визуальных объектов в библиотеке pfe_main пишем функцию вида
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public function integer of_resolution ();environment env
integer rtn
decimal ld_RelationX, ld_RelationY
rtn = GetEnvironment(env)
IF rtn <>  1  THEN RETURN - 1  
ld_RelationY = env.ScreenHeight /  1024 
ld_RelationX = env.ScreenWidth /  768 

this.resize (this.Width * ld_RelationX, this.height * ld_RelationY)
return  1 
end function
и вызываем ее по мере необходимости (например, в конструкторе или в случае, когда пользователь изменяет разрешение экрана).
Для DataWindow потребуется немного другой алгоритм, смысл которого, как справедливо заметил E-doc...Для содержимого DW есть свойство ZOOM.
dw_control.Object.DataWindow.Zoom Указывается в процентах. Посчитать проценты изменения размеров окна относительно оригинальных и выставить соответсвующий zoom.
Все это можно использовать совместно с n_cst_resize.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763920
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99вызываем ее по мере необходимости (например, в конструкторе или в случае, когда пользователь изменяет разрешение экрана).Почитал соседний топик , и решил, что я, пожалуй, погорячился. В pfc-приложениях есть специальные события окна pfc_preopen и pfc_postopen, в которых и следует писать подобный код. Спасибо за понимание :-))
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763926
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RiskaМне надо уменьшить все окно со всеми объектами, которые внутри (включая объекты в DW). В окне mdi, например, вообще объектов нет.

res.of_SetOrigSize(x,x) твое рабочее разрешение (1024х768)- в Юнитах
res.of_SetMinSize(0,0) минимальный размер окна, до которого ресайзатся
объекты. (800х600) - тоже в Юнитах

регистрируешь нужные контролы и наслаждаешься. для dw - то что сказал
PL99, хотя можно и аналогичным образом поступить.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32763941
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВообще-то, IMHO, n_cst_resize предназначен для других целей, а именно - обеспечение фиксированного расположения объектов на окне и/или элементов DW внутри объекта DW при изменении размеров окна. Есля я вас правильно понял, то в вашем случае надо, в зависимости от разрешения экрана, изменять физические размеры управляющих элементов (в пикселях, например).
Мне как раз и нужно, чтобы размер был фиксированным. Просто в случае изменения резолюции автоматически меняются и окна. Мне надо вернуть в прежднее состояние. Если можно как-то сказать, чтобы размер окон программы не менялся при любых резолюциях, будет еще лучше.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32764043
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
integer i_int
Environment env

i_int = GetEnvironment(env)

IF i_int = 1 THEN
CHOOSE CASE env.ScreenWidth
CASE 640
dw_1.Height = 950
cbx_1.Y = 1050
/*"Ну и так далее..."*/

END CHOOSE

END IF
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32765333
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronkinteger i_int
Environment env

i_int = GetEnvironment(env)

IF i_int = 1 THEN
CHOOSE CASE env.ScreenWidth
CASE 640
dw_1.Height = 950
cbx_1.Y = 1050
/*"Ну и так далее..."*/

END CHOOSE

END IF

Это проходит, если одно-два окна в проекте. А если их 20, то поменять ручками не получится. Вот функция, которая это делает. Для моего проекта ее достаточно. Остальным нужно будет добавить переменные (RadioButton и т.д.). Есть еще проблемы с UserObject. Пришлось менять размеры внутри самих объектов + если разные объекты, то тоже будут проблемы.
Если у кого-то есть желание, то можно доделать эту функцию до нормального вида. ldec_coeff = 1.19 - получено экспериментальным путем (если брать 1.28 (1024/800), то все получается мелкое). Все что надо - заслать f_resize(This).

global type f_resize from function_object
end type

forward prototypes
global function integer f_resize (window aw_name)
end prototypes

global function integer f_resize (window aw_name);integer i, l_control
int l_xx, l_yy
dec ldec_coeff = 1.19
windowobject wo
CommandButton cb
DataWindow dw
CheckBox cbx
GroupBox gb
StaticText st
DropDownListBox ddlb
PictureHyperLink phl
UserObject uo
SingleLineEdit sle
EditMask em

l_control = UpperBound(aw_name.Control)
l_xx = GetSystemMetrics(0)
l_yy = GetSystemMetrics(1)

IF l_xx = 800 AND l_yy = 600 THEN
FOR i = 1 TO l_control
wo = aw_name.Control
choose case wo.TypeOf()
case SingleLineEdit!
sle = aw_name.Control
sle.x = sle.x/ldec_coeff
sle.y = sle.y/ldec_coeff
sle.Width = sle.Width/ldec_coeff
sle.Height = sle.Height/ldec_coeff
case UserObject!
uo = aw_name.Control
uo.x = uo.x/ldec_coeff
uo.y = uo.y/ldec_coeff
uo.Width = uo.Width/ldec_coeff
uo.Height = uo.Height/ldec_coeff
case PictureHyperLink!
phl = aw_name.Control
phl.x = phl.x/ldec_coeff
phl.y = phl.y/ldec_coeff
phl.Width = phl.Width/ldec_coeff
phl.Height = phl.Height/ldec_coeff
case CheckBox!
cbx = aw_name.Control
cbx.x = cbx.x/ldec_coeff
cbx.y = cbx.y/ldec_coeff
case CommandButton!
cb = aw_name.Control
cb.x = cb.x/ldec_coeff
cb.y = cb.y/ldec_coeff
cb.Width = cb.Width/ldec_coeff
cb.Height = cb.Height/ldec_coeff
cb.TextSize = cb.TextSize/ldec_coeff
case DataWindow!
dw = aw_name.Control
dw.x = dw.x/ldec_coeff
dw.y = dw.y/ldec_coeff
dw.Width = dw.Width/ldec_coeff
dw.Height = dw.Height/ldec_coeff
dw.Object.DataWindow.Zoom = 84
case GroupBox!
gb = aw_name.Control
gb.x = gb.x/ldec_coeff
gb.y = gb.y/ldec_coeff
gb.Width = gb.Width/ldec_coeff
gb.Height = gb.Height/ldec_coeff
case StaticText!
st = aw_name.Control
st.x = st.x/ldec_coeff
st.y = st.y/ldec_coeff
st.Width = st.Width/ldec_coeff
st.Height = st.Height/ldec_coeff
st.TextSize = st.TextSize/ldec_coeff
case DropDownListBox!
ddlb = aw_name.Control
ddlb.x = ddlb.x/ldec_coeff
ddlb.y = ddlb.y/ldec_coeff
ddlb.Width = ddlb.Width/ldec_coeff
ddlb.Height = ddlb.Height/ldec_coeff
ddlb.TextSize = ddlb.TextSize/ldec_coeff
case EditMask!
em = aw_name.Control
em.x = em.x/ldec_coeff
em.y = em.y/ldec_coeff
em.Width = em.Width/ldec_coeff
em.Height = em.Height/ldec_coeff
em.TextSize = em.TextSize/ldec_coeff
end choose
NEXT
RETURN 1
END IF
RETURN 0
end function
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32765749
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шутить изволите....

В open ивенте каждого окна этот код должен стоять, у меня вся аппликация так работает и хорошо работает, просто нужно с каждым окном повозитса, потом всё...

Riska voronkinteger i_int
Environment env

i_int = GetEnvironment(env)

IF i_int = 1 THEN
CHOOSE CASE env.ScreenWidth
CASE 640
dw_1.Height = 950
cbx_1.Y = 1050
/*"Ну и так далее..."*/

END CHOOSE

END IF

Это проходит, если одно-два окна в проекте. А если их 20, то поменять ручками не получится. Вот функция, которая это делает. Для моего проекта ее достаточно. Остальным нужно будет добавить переменные (RadioButton и т.д.). Есть еще проблемы с UserObject. Пришлось менять размеры внутри самих объектов + если разные объекты, то тоже будут проблемы.
Если у кого-то есть желание, то можно доделать эту функцию до нормального вида. ldec_coeff = 1.19 - получено экспериментальным путем (если брать 1.28 (1024/800), то все получается мелкое). Все что надо - заслать f_resize(This).

global type f_resize from function_object
end type

forward prototypes
global function integer f_resize (window aw_name)
end prototypes

global function integer f_resize (window aw_name);integer i, l_control
int l_xx, l_yy
dec ldec_coeff = 1.19
windowobject wo
CommandButton cb
DataWindow dw
CheckBox cbx
GroupBox gb
StaticText st
DropDownListBox ddlb
PictureHyperLink phl
UserObject uo
SingleLineEdit sle
EditMask em

l_control = UpperBound(aw_name.Control)
l_xx = GetSystemMetrics(0)
l_yy = GetSystemMetrics(1)

IF l_xx = 800 AND l_yy = 600 THEN
FOR i = 1 TO l_control
wo = aw_name.Control
choose case wo.TypeOf()
case SingleLineEdit!
sle = aw_name.Control
sle.x = sle.x/ldec_coeff
sle.y = sle.y/ldec_coeff
sle.Width = sle.Width/ldec_coeff
sle.Height = sle.Height/ldec_coeff
case UserObject!
uo = aw_name.Control
uo.x = uo.x/ldec_coeff
uo.y = uo.y/ldec_coeff
uo.Width = uo.Width/ldec_coeff
uo.Height = uo.Height/ldec_coeff
case PictureHyperLink!
phl = aw_name.Control
phl.x = phl.x/ldec_coeff
phl.y = phl.y/ldec_coeff
phl.Width = phl.Width/ldec_coeff
phl.Height = phl.Height/ldec_coeff
case CheckBox!
cbx = aw_name.Control
cbx.x = cbx.x/ldec_coeff
cbx.y = cbx.y/ldec_coeff
case CommandButton!
cb = aw_name.Control
cb.x = cb.x/ldec_coeff
cb.y = cb.y/ldec_coeff
cb.Width = cb.Width/ldec_coeff
cb.Height = cb.Height/ldec_coeff
cb.TextSize = cb.TextSize/ldec_coeff
case DataWindow!
dw = aw_name.Control
dw.x = dw.x/ldec_coeff
dw.y = dw.y/ldec_coeff
dw.Width = dw.Width/ldec_coeff
dw.Height = dw.Height/ldec_coeff
dw.Object.DataWindow.Zoom = 84
case GroupBox!
gb = aw_name.Control
gb.x = gb.x/ldec_coeff
gb.y = gb.y/ldec_coeff
gb.Width = gb.Width/ldec_coeff
gb.Height = gb.Height/ldec_coeff
case StaticText!
st = aw_name.Control
st.x = st.x/ldec_coeff
st.y = st.y/ldec_coeff
st.Width = st.Width/ldec_coeff
st.Height = st.Height/ldec_coeff
st.TextSize = st.TextSize/ldec_coeff
case DropDownListBox!
ddlb = aw_name.Control
ddlb.x = ddlb.x/ldec_coeff
ddlb.y = ddlb.y/ldec_coeff
ddlb.Width = ddlb.Width/ldec_coeff
ddlb.Height = ddlb.Height/ldec_coeff
ddlb.TextSize = ddlb.TextSize/ldec_coeff
case EditMask!
em = aw_name.Control
em.x = em.x/ldec_coeff
em.y = em.y/ldec_coeff
em.Width = em.Width/ldec_coeff
em.Height = em.Height/ldec_coeff
em.TextSize = em.TextSize/ldec_coeff
end choose
NEXT
RETURN 1
END IF
RETURN 0
end function
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32765763
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, наверное, чего-то не понимаю. Вы предлагаете в каждом окне прописывать изменения для каждого элемента в отдельности?
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32767246
Louder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишите мыло. Кину объект n_cst_globalresize.
Достаточно зарегистрировать в нем окно и он сам отресайзит его под нужное разрешение экрана. Ресайзит всё, включая Datawindow.
Без pfc не работает.
...
Рейтинг: 0 / 0
Размер окон при разных резолюциях
    #32768507
Louder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем разослал. Пишите, если кому-то не дошло.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Размер окон при разных резолюциях
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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