Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 Picture & OriginalSize  [new]
AIS
Member

Откуда:
Сообщений: 1695
Вот такая ситуация в РВ10.5 DeskTop.
Открываю окно в которой только JPG-картинка, у которой установлено OriginalSize. Далее в событии Open окна подгоняю его размеры под картинку:
integer	li_w, li_h

CONSTANT integer	SM_CYCAPTION = 4 	/*высота норм.области заголовка*/
CONSTANT integer	SM_CXFRAME = 32 	/*ширина рамки окна с изм. размером*/
CONSTANT integer	SM_CYFRAME = 33 	/*высота рамки окна с изм. размером*/

/*JPG 770x814*/
li_w=PixelsToUnits(770+GetSystemMetrics(SM_CXFRAME)*2, XPixelsToUnits!)
li_h=PixelsToUnits(814+GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME)*2,YPixelsToUnits!)

//корректировка размеров окна под размер изображения
this.Resize( li_w, li_h)

Почему на ПК с разрешением шрифта 120 - это сработало, а на базовом (96) - нет?
23 апр 12, 23:02    [12459849]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
Riska
Member

Откуда: Израиль
Сообщений: 985
AIS,
А почему просто не сделать
w_1.Width = p_1.Width
?
24 апр 12, 12:13    [12461767]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
AIS
Member

Откуда:
Сообщений: 1695
Riska
AIS,
А почему просто не сделать
w_1.Width = p_1.Width
?

Потому, что у картинки тогда подрезаются стороны.
В моем случае пришлось дополнительно принудительно задать для картинки её оригинальные размеры, т.к. OriginalSize у РВ не срабатывает.
Но вопрос остается, почему OriginalSize не сработал? И можно ли доверять всем опциям РВ типа AutoSize?
24 апр 12, 16:45    [12464189]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
AIS
Member

Откуда:
Сообщений: 1695
AIS
..В моем случае пришлось дополнительно принудительно задать для картинки её оригинальные размеры, т.к. OriginalSize у РВ не срабатывает..

Сделал, везде стало хорошо, а на W7 не попал размер.
Как же выйти из положения? Задачка - проще не бывает, а не выходит. Неужели придется получать версию винды и под каждую свои параметры вставлять, с учетом разрешения и размера шрифта.
Может, что-то не так делаю, или не в ту сторону смотрю?

P.S. А вот интересно: есть какой-то прецедент выставления претензии Sybase за наличие дефектов в среде разработки?
27 апр 12, 16:25    [12481055]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
Dim2000
Member

Откуда: Москва
Сообщений: 5318

27.04.2012 17:25, AIS написал:

> P.S. А вот интересно: есть какой-то прецедент выставления претензии
> Sybase за наличие дефектов в среде разработки?

Не смешно. Любой софт предоставляется "as is".

Posted via ActualForum NNTP Server 1.5

27 апр 12, 16:56    [12481384]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
AIS
Member

Откуда:
Сообщений: 1695
Dim2000
Не смешно. Любой софт предоставляется "as is".

А никто и не говорит, что смешно. Мне вот грусно, и не только финансово, но и морально.

P.S. Не весь софт предоставляется "as is". И уж точно не тот, за который просят кучу денег.
28 апр 12, 12:49    [12484787]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
VFl
Member

Откуда:
Сообщений: 126
Я как то делал похожую задачу, и все получилось при использовании GetSystemMetrics(SM_CYCAPTION), GetSystemMetrics(SM_CYBORDER) и GetSystemMetrics(SM_CХBORDER)

зачем у вас SM_CXFRAME и CYFRAME не совсем понял :(
22 май 12, 13:33    [12594217]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
AIS
Member

Откуда:
Сообщений: 1695
VFl
Я как то делал похожую задачу, и все получилось при использовании GetSystemMetrics(SM_CYCAPTION), GetSystemMetrics(SM_CYBORDER) и GetSystemMetrics(SM_CХBORDER)

зачем у вас SM_CXFRAME и CYFRAME не совсем понял :(

/*ширина и высота рамки окна с изм. размером*/
SM_CXFRAME, SM_CYFRAME
SM_CXSIZEFRAME, SM_CYSIZEFRAME
/*ширина и высота рамки, которое имеет заголовок, но не может изм. свои размеры.*/
SM_CXFIXEDFRAME, SM_CYFIXEDFRAME
/*ширина и высота рамки диалогового окна*/
SM_CXDLGFRAME, SM_CYDLGFRAME
/*размеры трехмерной границы*/
SM_CXEDGE, SM_CYEDGE
/*ширина и высота границы окна*/
SM_CХBORDER, SM_CYBORDER
/*и т.д.*/

Каждая пара для своих окон и для своих целей. А в сочетании с предустановленными параметрами для окна в РВ, в отображении появляются варианты.
24 май 12, 11:30    [12606597]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
VFl
Member

Откуда:
Сообщений: 126
Старый код к сожалению не нашел, но вот что получилось на скорую руку:

p_1.Move(0,0)
p_1.originalsize = False
p_1.picturename = "C:\braut.JPG"
p_1.originalsize = True

long	ll_captions, ll_yborder, ll_xborder

/*
CONSTANT integer	SM_CYCAPTION = 4 	--высота норм.области заголовка
CONSTANT integer	SM_CXBORDER = 5 	--Width of no-sizable borders
CONSTANT integer	SM_CYBORDER = 6 	--Height of non-sizable borders
*/

ll_captions = PixelsToUnits(GetSystemMetrics(SM_CYCAPTION), YPixelsToUnits!)
ll_yborder = PixelsToUnits((GetSystemMetrics(SM_CYBORDER) + 2), YPixelsToUnits!) * 2
ll_xborder = PixelsToUnits((GetSystemMetrics(SM_CXBORDER) + 2), XPixelsToUnits!) * 2



this.resize(p_1.width + ll_xborder, p_1.height + ll_captions + ll_yborder )



К размерам картинки добавляются высота заголовка, 2 раза X бордер и 2 раза Y бордер. + 2 получено эксперементальным путем, я думаю связанно с ошибками округления. Без этого обрезается 1 пиксель в картинке справа и снизу. Работает на XP и на Vista, других не нашлось под рукой. Пробовал с разными картинками.
24 май 12, 20:39    [12610705]     Ответить | Цитировать Сообщить модератору
 Re: Picture & OriginalSize  [new]
AIS
Member

Откуда:
Сообщений: 1695
VFl,
ваш пример для разного типа окон будет отображаться по разному.
А проблема собственно возникла при смене на ПК размера шрифта с базового (96) на 120, и наоборот.
Подгонять параметры методом проб и ошибок для каждого случая - не правильный путь.
Например, с аналогичным скриптом незначительный сбой по размерам проявился только на W7.

P.S. Картинка у меня бралась не из файла, а уже была прикручена в свойствах объекта, и OriginalSize не срабатывало. Правда может надо было в скрипте это свойство "передернуть", как у Вас, и оно бы заработало, но тема для меня уже не актуальна.
24 май 12, 22:38    [12611244]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить