powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Рисование на форме/или объекте picture
25 сообщений из 38, страница 1 из 2
Рисование на форме/или объекте picture
    #32859999
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ!
Может просто уже вечер или еще чего...
Но вот что-то никак не могу понять, как мне нарисовать прямоугольник на форме в PowerBuilder 7. Может кто подскажет?

Откуда ноги растут: есть картинка, на которой заданы координаты прозрачных четырехугольников. Нужно их на этой картинке отобразить. Как бы это сделать? Я думал попробовать с line поработать, но чего-то не сростается...
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860000
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то РВ имеет т.н. Rectangle control...
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860002
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... но как его сделать прозрачным???

И еще - как его динамически сгенерить? А еще у меня не получается открыть не-dragObject.. По крайней мере при помощи OpenUserObject. Или как нужно create-ить line или rectangle?
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860018
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rectangle control не есть dragobject, посему открыть его с помощью OpenUserObject не выйдет.
Надо делать custom visual userobject на котором в пайнтере засунут Rectangle...
По большому счёту если надо динамически, то всё это глупости и рисовать надо в datawindow controlе...
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860559
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ммммммммм... А зачем мне на dataWindow вообще рисовать??? У меня на форме ни одного DW нету!!! Есть Picture, в котором картинка... На этой картинке - объекты, описанные в БД. И мне нужно вокруг этих объектов выводить разноцветные рамки (цвет зависит от состояния объекта).
Так что Rectangle мне не подойдет если у него нет свойства прозрачности... Думал рисовать линии - но в Painter'e они не хотели рисоваться поверх картинки (Bring To Top не помогало), а как это сделать в run-time чего-то никак сообразить не могу...

или может есть еще какой способ?? Кто чего может предложить???
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860689
__Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используйте statictext
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860759
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА зачем мне на dataWindow вообще рисовать???Потому что динамически создавать и изменять прямоугольники в datawindow проще и удобнее. и проблем с прозрачностью никаких.
что то вроде этого:
dw.Modify("create bitmap(.... x='1' y='1' height='300' width='500' filename='c:\file.bmp)'" )
dw.Modify("create rectangle(... x='123' y='123' height='123' width='123' brush.hatch='7' brush.color='0' pen.style='0' pen.width='4' pen.color='0' background.mode='1' background.color='0')")
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860826
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__GuestИспользуйте statictext
А его можно сделать прозрачным??

ЗоринАндрей авторА зачем мне на dataWindow вообще рисовать???Потому что динамически создавать и изменять прямоугольники в datawindow проще и удобнее. и проблем с прозрачностью никаких.


Да, это конечно может и хорошо и удобно - но у меня есть файл с картинкой на локальном компутере, есть объект Picture, в котором этот файл выводится...
Наворочено уже обработчиков всяких... Просто неожиданно новый заказчик захотел в старую задачу навернуть новые возможности - не переделывать же накопленное с нуля??
Как-то не хочется переходить от picture куда-то еще...

Есть ли другие предложения??
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860968
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__GuestИспользуйте statictext Vadim RomanenkoА его можно сделать прозрачным??как правило - нет.
когда-то видел фокус - в конструкторе ставится backColor = 2^29
в событии pbm_paint передергивается visible = False/True
но все равно как-то глючно оно отрисовывало статик.

Vadim RomanenkoКак-то не хочется переходить от picture куда-то еще...
ну тогда это карма.

Есть еще вариант для сильных духом
Отмапить pbm_paint и рисовать самостоятельно с помощью WinAPI.

Create a device context for window
Invalidate the rectangle you intend to paint (must do this or you cannot
paint)
Allocate any brushes or pens you intend to use
Select into the device context the brush/pen
Do the painting within the invalidated area
Select the original (brush/pen) back into the device context
Validate the rectangle ( or you will get recursive wm_paint messages)
Release brushes and pens
Release the device context

Handle, GetDC, InvalidateRgn, ValidateRgn, ReleaseDC, приключения с перерисовкой при минимизации/восстановлении, WM_NCPAINT, WM_ERASEBKGND ...
ну как? уже страшно?

ИМХО путь к дальнейшему ухудшению кармы.
Когда устанете это дело отлаживать - возвращайтесь к идее с datawindow
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860994
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Прозрачный четырехугольник можно изобразить комбинацией 4-х непрозрачных четырехугольников.
2. На крайний случай, в качестве прозрачного четырехугольника, можно использовать окно с дыркой посередине.
Прямоугольник с дыркой посередине нудно поместить на картинки или вокруг картинки? Во втором случае можно обойтись без дырки.
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32860996
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Romanenko ЗоринАндрей авторА зачем мне на dataWindow вообще рисовать???Потому что динамически создавать и изменять прямоугольники в datawindow проще и удобнее. и проблем с прозрачностью никаких.


Да, это конечно может и хорошо и удобно - но у меня есть файл с картинкой на локальном компутере, есть объект Picture, в котором этот файл выводится...
Наворочено уже обработчиков всяких... Просто неожиданно новый заказчик захотел в старую задачу навернуть новые возможности - не переделывать же накопленное с нуля??Переделать userobject методом Copy&Paste на другой в данном конкретном случае, IMHO, быстрее и проще, чем использовать "другие предложения"


Vadim RomanenkoЕсть ли другие предложения??Есть конечно :
Код: 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.
	// Получить контекст устройства, 
	// установить и выбрать атрибуты рисунка, 
	// создать и выбрать графические объекты - перо, кисть и т.д.
	// освободить и уничтожить объекты
	Function Long GetDC (Long al_hwnd ) Library "user32.dll" 
	Function Long ReleaseDC (Long al_hwnd , Long al_hdc) Library "user32.dll"
	
	Function Long CreatePen (Long nPenStyle , Long nWidth , Long crColor ) Library "gdi32.dll" 
	
	Function Long SetBkColor  (Long al_hdc, Long al_crColor ) Library "gdi32.dll" 
	Function Long GetBkColor (Long al_hdc) Library "gdi32.dll" 
	
	Function Long SetArcDirection (Long al_hdc, Long al_ArcDirection ) Library "gdi32.dll" 
	Function Long GetArcDirection (Long al_hdc) Library "gdi32.dll" 
	
	Function Long SetBkMode (Long al_hdc, Long al_nBkMode ) Library "gdi32.dll" 
	Function Long GetBkMode (Long al_hdc) Library "gdi32.dll" 
	
	Function Long SetBrushOrgEx (Long al_hdc, Long al_nXOrg , Long al_nYOrg , str_size lppt ) Library "gdi32.dll" 
	Function Long GetBrushOrgEx (Long al_hdc,  str_size lpPoint ) Library "gdi32.dll" 
	
	Function Long SetMapMode (Long al_hdc, Long al_nMapMode ) Library "gdi32.dll" 
	Function Long GetMapMode (Long al_hdc) Library "gdi32.dll" 
	
	Function Long SetROP2 (Long al_hdc, Long al_nDrawMode ) Library "gdi32.dll" 
	Function Long GetROP2 (Long al_hdc) Library "gdi32.dll" 
	
	Function Long SetPolyFillMode (Long al_hdc, Long al_nPolyFillMode ) Library "gdi32.dll" 
	Function Long GetPolyFillMode (Long al_hdc) Library "gdi32.dll" 
	
	Function Long SetViewportExtEx (Long al_hdc, Long al_nX, Long al_nY, str_size lpSize ) Library "gdi32.dll" 
	Function Long GetViewportExtEx (Long al_hdc, str_size lpSize) Library "gdi32.dll" 
	
	Function Long SetViewportOrgEx (Long al_hdc, Long al_nX, Long al_nY, str_size lpPoint ) Library "gdi32.dll" 
	Function Long GetViewportOrgEx (Long al_hdc, str_size lpPoint ) Library "gdi32.dll" 
	
	Function Long SetWindowExtEx (Long al_hdc, Long al_nX, Long al_nY, str_size lpSize ) Library "gdi32.dll" 
	Function Long GetWindowExtEx (Long al_hdc, str_size lpSize ) Library "gdi32.dll" 
	
	Function Long SetWindowOrgEx (Long al_hdc, Long al_nX, Long al_nY, str_size lpPoint ) Library "gdi32.dll" 
	Function Long GetWindowOrgEx (Long al_hdc, str_size lpPoint ) Library "gdi32.dll" 
	
	Function Long GetStockObject  (Long nIndex ) Library "gdi32.dll"  
	Function Long SelectObject (Long al_hdc, Long hObject) Library "gdi32.dll"  
	Function Long DeleteObject (Long hObject) Library "gdi32.dll"  
	
	// Lines
	Function BOOLEAN LineTo (Long al_hdc, Long al_x , Long al_y ) Library "gdi32.dll" 
	Function BOOLEAN MoveToEx (Long al_hdc, Long al_x , Long al_y, REF str_size lpPoint ) Library "gdi32.dll" 
Не лень этим заниматься?
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861001
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрей...
ИМХО путь к дальнейшему ухудшению кармы.
Когда устанете это дело отлаживать - возвращайтесь к идее с datawindow Отлично сказано :-)))
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861012
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УЖЖЖЖЖЖЖЖЖАСССССССССС!!!!!!!!!!!
Неужели я через пару лет работы с билдером буду вынужден понять, что это какая-то недоделка??? Ну где это видано, чтоб поверх картинки нельзя было нарисовать, на крайняк с-create'ить объект-линию???

Насчет фокуса со StaticText'ом - нужно было сделать выделение области, присобачили SingleLineEdit и по таймеру в случае, если что-то выделяли -
if b then
sle_1.visible=not(sle_1.visible)
end if;

Насчет идей - у меня уже есть несколько... Например генерить объект Picture с прозрачным GIFом нужного размера (просто растягивать прозрачный гиф) и границы выделять... Или копировать область картинки большой на маленький объект Picture и выводить поверх уже с рамкой...

Но все перелопачивать и менять идеологию вообще из-за того, что вроде как нельзя динамически нарисовать линию поверх другого объекта... ИМХО жуть/ужас/бред!! Ну как такое могет быть??? Не хочу в такое верить :(
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861039
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк1. Прозрачный четырехугольник можно изобразить комбинацией 4-х непрозрачных четырехугольников.

Как динамически нарисовать четырехугольник?? Я согласен составить четырехугольник даже из четырех линий :) Только как это сделать динамически???

Локшин Марк
2. На крайний случай, в качестве прозрачного четырехугольника, можно использовать окно с дыркой посередине.
Прямоугольник с дыркой посередине нудно поместить на картинки или вокруг картинки? Во втором случае можно обойтись без дырки.
А как это - с дыркой посередине???
Мне нужно на одной картинке забабахать кучу "окантовок" для нарисованных объектов...
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861058
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoУЖЖЖЖЖЖЖЖЖАСССССССССС!!!!!!!!!!!
Неужели я через пару лет работы с билдером буду вынужден понять, что это какая-то недоделка??? Ну где это видано, чтоб поверх картинки нельзя было нарисовать, на крайняк с-create'ить объект-линию???Гм... Два года - не срок :-)). Все можно сделать, вопрос только в ресурсах.

Vadim RomanenkoНо все перелопачивать и менять идеологию вообще из-за того, что вроде как нельзя динамически нарисовать линию поверх другого объекта... ИМХО жуть/ужас/бред!! Ну как такое могет быть??? Не хочу в такое верить :(Менять "идеологию вообще" вам предлагают из-за того, что изначально была непродумана архитектура приложения.
Hint: сервисы, сервисы, сервисы...
Если, конечно, еще не поздно.
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861061
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например генерить объект Picture с прозрачным GIFом нужного размеране получится.
Но все перелопачивать и менять идеологиюну вот значит изначально идеология была ошибочна. ничего, с кем не бывает...

ИМХО жуть/ужас/бред!! Ну как такое могет быть??? Не хочу в такое верить :(А-тставить истерику!
я знал человека который еще под ДОС писал драйвер для "нестандартного" устройства на Клиппере. самое смешное что он его таки написал. еще смешнее что он таки работал, но так меееееедлеееееенннннооооо.
билдеру - билдерово.
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861064
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoКак динамически нарисовать четырехугольник?? Я согласен составить четырехугольник даже из четырех линий :) Только как это сделать динамически???
Ну так Филипп уже сказал - сделать custom visual user object, в который засунуть ractangle. На форме динамичеки размещаем 4 оюъекта данного типа, подобрав координаты. Размер ractangle внутри объекта должен быть равен размеру объекта.
Vadim RomanenkoА как это - с дыркой посередине???
Мне нужно на одной картинке забабахать кучу "окантовок" для нарисованных объектов...
WinAPI функция SetWindowRgn(...) и около нее. Недавно на форуме обсуждалось.
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861088
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99 Vadim RomanenkoУЖЖЖЖЖЖЖЖЖАСССССССССС!!!!!!!!!!!
Неужели я через пару лет работы с билдером буду вынужден понять, что это какая-то недоделка??? Ну где это видано, чтоб поверх картинки нельзя было нарисовать, на крайняк с-create'ить объект-линию???Гм... Два года - не срок :-)). Все можно сделать, вопрос только в ресурсах.

Согласен. И со сроком, и с ресурсами. Но я вообще-то имел в виду, что недоделка - это Билдер ;) Не могу назвать ни одного нормального языка, в котором нельзя было бы скреатить один объект поверх другого динамически...

PL99 Vadim RomanenkoНо все перелопачивать и менять идеологию вообще из-за того, что вроде как нельзя динамически нарисовать линию поверх другого объекта... Менять "идеологию вообще" вам предлагают из-за того, что изначально была непродумана архитектура приложения.
Hint: сервисы, сервисы, сервисы...
Если, конечно, еще не поздно.
Мммммм... А при чем тут сервисы-сервисы-сервисы???

ПС: Предложение Локшина Марка мне в любом случае нравится куда больше, чем все эти излияния с WinAPI и переходом на DataWindow - по-моему это слишком сложное решение...
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861102
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрей Например генерить объект Picture с прозрачным GIFом нужного размеране получится.

А почему же не получится?? Создать динамически Picture не выйдет???


ЗоринАндрей ИМХО жуть/ужас/бред!! Ну как такое могет быть??? Не хочу в такое верить :(А-тставить истерику!
я знал человека который еще под ДОС писал драйвер для "нестандартного" устройства на Клиппере. самое смешное что он его таки написал. еще смешнее что он таки работал, но так меееееедлеееееенннннооооо.
билдеру - билдерово.
Ну да, в очередной раз убеждаюсь - в билдере лучше пользоваться только DataWindow... Для рисования он не предназначен :(
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861795
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoНе могу назвать ни одного нормального языка, в котором нельзя было бы скреатить один объект поверх другого динамически...
А кто вам мешает динамически создавать любые Windowed-объекты функцией CreateUserObject? Вы же задали вопрос про прямоугольник и Филлип вам на него ответил. То, что другие языки имеют в поставке обертки соответствующих API, говорит только о том, что это более низкоуровневые и, следовательно, универсальные средства.
ЗоринАндрейбилдеру - билдерово :-)

Vadim RomanenkoМммммм... А при чем тут сервисы-сервисы-сервисы???Именно в них должны были бы быть закодированы реакции на события, о которых вы упомянули. В визуальных объектах - только вызовы функций соответствующих сервисов. В этом случае вас не испугали бы предложения обратиться к Windows API.
Кстати, вы как думаете, приведенный мной несколькими постами выше кусок кода с объявлениями функций просто так появился на свет?
Он позволял неплохо рисовать :-))
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861817
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99 Vadim RomanenkoНе могу назвать ни одного нормального языка, в котором нельзя было бы скреатить один объект поверх другого динамически...
А кто вам мешает динамически создавать любые Windowed-объекты функцией CreateUserObject? Вы же задали вопрос про прямоугольник и Филлип вам на него ответил.

Дело в том, что даже в Паинтере у меня не получилось создать объект Line поверх объекта Picture... Почему-то он постоянно размещался на Back от Picture. И никак не хотел тащиться на верх. Потому и задал вопрос - как его создать динамически, чтоб попробовать это сделать в рантайме. Но так никто и не ответил :( Сейчас пытаюсь пойти по пути, предложенному Локшиным Марком... Но все время начальство отвлекает - никак не доберусь до конца :(

PL99 Vadim RomanenkoМммммм... А при чем тут сервисы-сервисы-сервисы???Именно в них должны были бы быть закодированы реакции на события, о которых вы упомянули. В визуальных объектах - только вызовы функций соответствующих сервисов. В этом случае вас не испугали бы предложения обратиться к Windows API.
Кстати, вы как думаете, приведенный мной несколькими постами выше кусок кода с объявлениями функций просто так появился на свет?
Он позволял неплохо рисовать :-))
Насчет вашего куска - я так думаю, это и есть кусок объявления функций из WinAPI? Дело в том, что я, к своему стыду, соввершенно не знаком с WinAPI и его применением в PB... Потому наверное и не понял, что такое сервисы-сервисы-сервисы :(

Спасибо за помощь! Как допытаюсь - сообщу, получилось ли чего-то, и как
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32861912
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот statictext с прозрачнім фоном - то что Вам нужно
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32862032
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример рисования с помощью datawindow...
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32862033
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мммм... А не могли бы вы подсказать, как мне самому сделать такой StaticText с прозрачным фоном???
...
Рейтинг: 0 / 0
Рисование на форме/или объекте picture
    #32862041
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roleksВот statictext с прозрачнім фоном - то что Вам нужно

Большое спасибо! А то я уже начал извращаться с UO, у которого заливка черная, 4 штуки на 1 прямоугольник... Неудобно - просто жуть!

ПС: По поводу объяснить, как - я имел в виду, откудова такая идея :) Принцип что-ли... А то мало ли - когда еще понадобится прозрачность где-то сделать...
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Рисование на форме/или объекте picture
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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