powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PictureSize & DW
13 сообщений из 13, страница 1 из 1
PictureSize & DW
    #36312511
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как установить оригинальный размер картинки в DW, либо как их вычислить/получить эти размеры?
...
Рейтинг: 0 / 0
PictureSize & DW
    #36313777
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, можно и так:
- создать PictureControl (visible=False), установить оригинальный размер, загрузить туда файл с картинкой, ну и потом снять размеры, а PictureControl удалить. Потом использовать данные в DW для картинки из того же файла.

Но думаю, что есть и другие, более лучшие варианты.
Может, кто что-нибудь подскажет, либо посоветует?
...
Рейтинг: 0 / 0
PictureSize & DW
    #36314306
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,

А зачем собственно удалять? Можно повесить невидимый объект на окно (не в ДВ) и пользоваться себе спокойно.
...
Рейтинг: 0 / 0
PictureSize & DW
    #36314640
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoAIS,

А зачем собственно удалять? Можно повесить невидимый объект на окно (не в ДВ) и пользоваться себе спокойно.
Картинка не маленькая, занимает память, а там уже и так много "невидимого".
...
Рейтинг: 0 / 0
PictureSize & DW
    #36314693
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS, а расширение картинки каково?
...
Рейтинг: 0 / 0
PictureSize & DW
    #36315693
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,
BMP-через API, JPG - через скрытый объект.
...
Рейтинг: 0 / 0
PictureSize & DW
    #36316019
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC ,
Спасибо за вариант с API. Вариант со скрытой картинкой - я так и делал, если не считать у вас опечатка (YUnitsToPixels! для p_1.width).

Буду "капать" в сторону API, другого как видно не дано с РВ.

Возмущает то, что для картинки в DW во всплывающем меню свойство "оригинальный размер" (правая кнопка мышки на объекте в списке элементов DW) - есть, а на вкладках свойств - нет. Описания в help - тоже нет. Устанавливаю через меню свойство - вроде всё ОК, размеры правильные. Но когда начинаю тестить на разных разрешениях монитора (+шрифт), то размер сбивается и соответственно "качество картинки" пропадает.
Так что если "хочется иметь качественную картинку", надо размер устанавливать в ручную, а автоматизировать "красиво" можно пожалуй только через API.
...
Рейтинг: 0 / 0
PictureSize & DW
    #36316172
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC ,
для вашего pbl вот нашёл ещё один вариант для BMP...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Int job
BLOB lb_data
ULONG lul_w, lul_h

job = FileOpen ( sle_pict.Text, StreamMode!, Read!)
FileReadEx (job, lb_data)

lul_w = Long(Integer(BlobMid(lb_data, 19 , 2 )),Integer(BlobMid(lb_data, 21 , 2 )))
lul_h = Long(Integer(BlobMid(lb_data, 23 , 2 )),Integer(BlobMid(lb_data, 25 , 2 )))

st_h.Text = string( lul_w)
st_w.Text = string( lul_h)

FileClose (job)
Уверен, что аналогично можно сделать и для GIF, JPG и т.д. Но будет ли это хорошо.
...
Рейтинг: 0 / 0
PictureSize & DW
    #36318658
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно просто в тэге картинки прописывать ее ширину и высоту, типа width=16;height=16;
и использовать фунцию, которая будет фиксировать размер всех картинок DW в момент его показа. Работает довольно быстро.

Код: 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.
//f_fixdwpicturesize(datawindow adw_requestor)
// Функция фиксирует размер объектов DW  в соостветствии с размером в пикселах,
// указанном в тэге объекта, с помощью ключевых слов "width" и "height"
// например: width= 16 ; height= 16 ;
// сейчас фиксируются размеры картинок и вычисляемых полей, можно изменять любые объекты

string	ls_ObjString, ls_ObjHolder, ls_ObjType, ls_Tag, ls_Modify = "", ls_Units
integer li_Value
integer	li_Start= 1 , li_Tab, li_Pos
boolean lb_Last = False
n_cst_string lnv_string
constant string ls_KeyWidth = "width"
constant string ls_KeyHeight = "height"

// Единица измерения DW должна быть PB Unit, если в пикселах то ничего не делаем
ls_Units = adw_Requestor.Describe("DataWindow.Units")
IF ls_Units <> "0" Then Return  0 

ls_ObjString = adw_Requestor.Describe("Datawindow.Objects")

li_Tab =  Pos(ls_ObjString, "~t", li_Start)
Do While li_Tab >  0 
	ls_ObjHolder = Mid(ls_ObjString, li_Start, (li_Tab - li_Start))

	ls_ObjType = adw_Requestor.Describe(ls_ObjHolder + ".type")
	If ls_ObjType = 'compute' Or ls_ObjType = "bitmap" Then
		
			ls_Tag = adw_Requestor.Describe(ls_ObjHolder + ".Tag")

			If Pos(ls_Tag, ls_KeyWidth) >  0  Then
				li_Value = integer(lnv_string.of_GetKeyValue( ls_Tag, ls_KeyWidth, ";"))
				If li_Value >  0  Then ls_Modify += ls_ObjHolder + ".Width='" + string(PixelsToUnits ( li_Value, XPixelsToUnits!  ))  + "' "
			End If

			If Pos(ls_Tag, ls_KeyHeight) >  0  Then
				li_Value = integer(lnv_string.of_GetKeyValue( ls_Tag, ls_KeyHeight, ";"))
				If li_Value >  0  Then ls_Modify += ls_ObjHolder + ".Height='" + string(PixelsToUnits ( li_Value, YPixelsToUnits!  )) + "' "
			End If
			
	End if

	If lb_Last Then Exit
	
	li_Start = li_Tab +  1 
	li_Tab =  Pos(ls_ObjString, "~t", li_Start)
	If li_Tab =  0  Then 
		li_Tab = Len(ls_ObjString) +  1 
		lb_Last = True
	End IF
Loop 

If Len(ls_Modify) >  0  Then 
	If adw_requestor.Modify(ls_Modify) = "" Then 
		Return  1 
	Else
		Return - 1 
	End IF
End If

Return  0 
...
Рейтинг: 0 / 0
PictureSize & DW
    #36320876
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rcryo ,
что тоже не спится?


В принципе это всё понятно -как сделать для всех картинок и по поводу "фиксации". Вопрос то в том чтобы автоматически брать данные из файла и далее применять (например, по вашему сценарию "фиксировать", не важно). Главное не вписывать ручками размеры, а вытягивать их в автомате. Ведь если (например) PictureControl используется для просмотра картинок, то ваш метод не пойдет, т.к. у каждой картинки свои размеры и в Tag их уже не записать и т.д.
Хранить же в базе вместе с картинками ещё и их размеры - думаю как минимум не правильно, если их можно взять из файла.
...
Рейтинг: 0 / 0
PictureSize & DW
    #36321157
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rcryo ,
вот если бы что-нибудь такое . Решение в пару строк. Всё хорошо, но надо dll "хитрая", потом регистрация, требования к ОС непривлекательные.
...
Рейтинг: 0 / 0
PictureSize & DW
    #36321237
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, если вам необходимо показывать картинки из базы то лучше использовать сторонний компонент который будет поддерживать множество форматов и доп. функции, авто-ресайз в том числе. Мне как то нужно было показывать картинки J2K и я использовал AxImage.ocx
В инете где то были примеры для PB. Посмотрите может это больше понравится.

Мое решение было предложено для другого случая, когда вы используете статические картинки как элементы оформления DW, кнопки и т.д., гораздо проще проставить их размер в тэге в момент когда вы их размещаете в дизайнере, чем вычислять их каждый раз. Тем более что как правило у меня все они были 16х16 или около того.

P.S. Рабочее время у меня сдвинуто для работодателя с другой стороны планеты. Хотя и правда пора заканчивать.
...
Рейтинг: 0 / 0
PictureSize & DW
    #36322492
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может кто подскажет, как вызвать в ПО такое же событие как в среде РВ при "клике" во всплывающем меню свойство "оригинальный размер" (правая кнопка мышки на объекте картинка в DW)?
Может как-то воспользовать какой-то функцией РВ из её библиотеки. Ну, как-то же свойство работает в среде.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PictureSize & DW
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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