powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как установить минимальный размер окна?
6 сообщений из 6, страница 1 из 1
Как установить минимальный размер окна?
    #39683172
Apprehension
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как задать для окна с изменяемыми размерами минимальный размер?
Знаю, что при использовании PFC этот параметр задавать можно, но как быть без него? Из resize() вызывать resize() мне не очень хочется, а как отменить событие мне не известно :(...
...
Рейтинг: 0 / 0
Как установить минимальный размер окна?
    #39683197
Apprehension
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно, конечно, прямо в resize() написать что-то вроде
IF newwidth < MIN_WIDTH THEN newwidth = MIN_WIDTH
но что делать, если пользователь продолжает тащить мышку? Сделать на 1-2 секунды размер окна неизменяемым? Уж слишком костыльно как-то...
...
Рейтинг: 0 / 0
Как установить минимальный размер окна?
    #39683281
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы правильно думали.
Например, как то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
/* событие resize окна */
if this.WindowState = Minimized! then
	return
else	
	this.SetRedraw (false)
	//ограничение...
	if this.height <= gi_minheightsheet then this.height = gi_minheightsheet
	if this.width <= gi_minwidthsheet then this.width = gi_minwidthsheet
	//вызов функий Resize элементов окна
	of_ResizeControl()
	this.SetRedraw (True)
end if
...
Рейтинг: 0 / 0
Как установить минимальный размер окна?
    #39683650
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apprehension,

Добрый день.
Можно использовать WinAPI

subroutine GetMinMaxInfo ( ref str_minmaxinfo d, long s, long l ) library 'kernel32.dll' alias for "RtlMoveMemory;Ansi"
subroutine SetMinMaxInfo ( long d, str_minmaxinfo s, long l ) library 'kernel32.dll' alias for "RtlMoveMemory;Ansi"

--
global type str_minmaxinfo from structure
str_point ptreserved
str_point ptmaxsize
str_point ptmaxposition
str_point ptmintracksize
str_point ptmaxtracksize
end type

--
event ue_getminmaxinfo pbm_getminmaxinfo

event ue_getminmaxinfo;str_MinMaxInfo lstr_MinMaxInfo
/* copy the data, pointed by the argument MinMaxInfo, to our lstr_MinMaxInfo structure */
GetMinMaxInfo(lstr_MinMaxInfo, MinMaxInfo, 40)
/* set the minimal size for our window */
lstr_MinMaxInfo.ptMinTrackSize.lx = 730
lstr_MinMaxInfo.ptMinTrackSize.ly = 250
/* copy the structure back into memory at the same place */
SetMinMaxInfo(MinMaxInfo,lstr_MinMaxInfo,40)
/* important, according to the MS API, we must return 0 */
return 0

end event
...
Рейтинг: 0 / 0
Как установить минимальный размер окна?
    #39683651
umalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
umalov,

global type str_point from structure
long lx
long ly
end type
...
Рейтинг: 0 / 0
Как установить минимальный размер окна?
    #39683659
Apprehension
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
umalov, AIS Благодарю!

Должен сказать, что через систему получилось лучше: даже при использовании SetRedraw() в случае удержании мышки окно все равно могло подергиваться, словно в легкой эпилепсии, а после системных определений стояло как скала под ветром.

Единственное: неужели было обязательно использовать GetMinMaxInfo? Я понял так, что эта функция пишет и читает из структуры, указатель на которую передается как аргуент в событии. Но разве нельзя как нибудь обойтись приведением типов? Неужели в PowerScript нет такого механизма?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как установить минимальный размер окна?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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