powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как изменить ширину Border в PB 7.0.3
25 сообщений из 30, страница 1 из 2
Как изменить ширину Border в PB 7.0.3
    #32863738
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не может ли Мировой разум ответить на такой вопрос:
Как изменить ширину(толщину) линий Border для объекта StaticText в PB 7.0.3??
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32863980
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак.
А зачем?
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864004
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) Ммм... Для того, чтобы ширина StaticTextа была больше!! А это нужно для того, чтоб он выделялся выразительнее... Ноги растут из того, что StaticText используется вместо прозрачного Rectangle...

Вот на картинке видно, что стандартно выделенный красным цветом объект смотрится весьма бледно...
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864030
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз повторю - такие вещи надо в datawindow рисовать...
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864052
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Млин, ну почему в DataWindow-то??? Елки-палки... ну чем плохо на Picture?? Не, чем-то наверняка плохо. Но, если использовать ДВ, то тут тоже куча граблей! Первая, которая приходит в голову:
- при resize картинки каким образом изменятся нарисованные линии внутри DW? ведь ссылок на нарисованные линии мне никак не получить... Бродить что-ли по всем объектам ДВ? А как определить, какая линия к какому объекту относится?? Да, впринципе наверное можно было бы вычислить процентную дельту и поменять ВСЕ линии на ДВ... Но... Если предположить что ПСИХИ-заказчики завтра захотят что-то еще??? А если некоторые линии не нужно будет менять? В смысле - ресайзить вместе с картинкой???

Еще в голову лезет вопрос о ресайзе в ДВ картинки по размерам окна... Определению размеров картинки в ячейке ДВ (не оригинальных, а тех, до которых ее удалось отРесайзить, если конечно удалось...). Вобщем, мне кажется просто НЕНОРМАЛЬНЫМ для вывода изображения и работы с ним использовать DataWindow!!! Возможно, вскорости я в этом буду разубежден :)) Но пока что я вижу в той стороне только кучу граблей... И как оказалось - совсем даже не сложно создать прозрачный СтатикТекст, который для моих задач ОЧЕНЬ даже подходит...
Единственное, что меня не устраивает сейчас - это желание изменить толщину рамки StaticText'а.

ПС: Почему не хочу пробовать работать с ДВ - завтра млин дэдЛайн, и переводить все наработки с Picture на DW мне просто не видится возможным... Вот. Да и впринципе не все так страшно с StaticText.. Хотя хотелось бы сделать границы толще! О чем и вопрос собсно :)
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864075
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, все-таки, чего-то не понимаю... Раз вы знаете координаты элементов на картинке, то почему вы не захотели рисовать линии/прямоугольники самостоятельно? Раз уж так настаиваете на Picture...

Для нахождения путей решения вашей локальной задачи необходимо иметь информацию о некоторых умолчаниях, которые Мировому разуму неизвестны ;-).
Ваша картинка масштабируется?
Даже не так :-)
Эта картинка каким образом возникает?

offtop
Vadim Romanenko...ПСИХИ-заказчики...Может, с психами не надо работать?
end offtop
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864078
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том же самом событии мапнутом к pbm_paint, нарисуй Border САМ, с помощью API :-)

Но в общем и целом ты занимаешься классическим забиванием гвоздей микроскопом.
РВ - НЕ графический пакет, а специализированное устройство для работы с НЕграфическими данными в СУБД...
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864080
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, прочитал начало исходного топика :-)

IMHO, учитывая сроки и общее состояние дел, можно было бы сделать UO из statictext...

Сейчас попробую :-)
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864084
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99Я, все-таки, чего-то не понимаю... Раз вы знаете координаты элементов на картинке, то почему вы не захотели рисовать линии/прямоугольники самостоятельно? Раз уж так настаиваете на Picture...

Очень хотел бы! Но вот только:
1) в дезайн-тайме поверх Picture не рисуется ни линия, ни прямоугольник :( BringToFront не помогает!!
2) так и не понял, как динамически рисовать линии/прямоугольники :(

PL99
Для нахождения путей решения вашей локальной задачи необходимо иметь информацию о некоторых умолчаниях, которые Мировому разуму неизвестны ;-).
Ваша картинка масштабируется?

Да. Растягивается на весь экран.

PL99
Даже не так :-)
Эта картинка каким образом возникает?

Есть файл на винте, с определенными размерами, откуда она закачивается. И растягивается на весь экран. На картинке - схема расположения объектов. Пропорции объектов особо не важны, так что растягивать можно в допустимых пределах не обращая на эти самые пропорции внимания :)

PL99
Может, с психами не надо работать?
end offtop
Ну я немножко неправильно выразился :) Просто то, чем я занимаюсь, было сделано год назад по желанию одного из заказчиков. И вот, через год, новый заказчик сказал: не желаю покупать вашей системы за бешеные бабки без ВУТ ЭТАЙ даработки. Ну а поскольку:
1) заказчик всегда прав
2) есть то хоцца, отсюдова опять-таки п.1)
то приходится доделывать то, что ранее вообще даже в голову не приходило...
ПС: Система в целом планировалась и разрабатывалась лет 6-8 назад, начиная с ПБ 5 и Оракла 6 кажется :)

Оффтоп: Система начиналась как просто учет электричества... Теперь заказчику мало просто учета - хочет что-то наподобие кусочка Скады внутри :(
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864086
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПС: Оффтоп относился к Филиппу и его комментарию о том, что ПБ не система для работы с графикой, а только для работы с данными в БД.
Не могу не согласиться, но почему ж нету элементарных возможностей по работе с графикой?? :( Линии и квадратики - это ж даже не графика!! А примитивы редкостные!!!
Я уже не говорю о том, как классно было бы рисовать прямо на картинке эти самые линии/прямоугольники - нарисовал, и забыл! Никаких проблем с ресайзами и перерисовкой объектов...
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864087
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99Ага, прочитал начало исходного топика :-)
IMHO, учитывая сроки и общее состояние дел, можно было бы сделать UO из statictext...
Сейчас попробую :-)
Я вобщем-то так и сделал по совету Локшина Марка (за что ему ГРОМАДНОЕ спасибо). Вот только так и не понял, как он унаследовался от стандартного контрола :(
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864089
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обведи этот красный static text еще одним красным статик текстом, а потом еще одним, а потом еще одним - пока не получтися нужная толщина
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864092
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейобведи этот красный static text еще одним красным статик текстом, а потом еще одним, а потом еще одним - пока не получтися нужная толщина

:)) Мне эта идея тоже уже в голову приходила ;) Но только не нравится почему-то ;)
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864093
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry, с наскока не получилось :-(

ЗоринАндрейобведи этот красный static text еще одним красным статик текстом, а потом еще одним, а потом еще одним - пока не получтися нужная толщина Во, самое простое решение :-))
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864096
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99Sorry, с наскока не получилось :-(

Спасибо за помощь и так :)
PL99
ЗоринАндрейобведи этот красный static text еще одним красным статик текстом, а потом еще одним, а потом еще одним - пока не получтися нужная толщина Во, самое простое решение :-))
Ага, решение простое... Причем мне уже пришло в голову забабахать UO, у которого сделать ф-цию выставления толщины и в зависимости от параметра генерить нужное количество StaticText'ов ;)
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864203
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот прозрачный static text, который умеет рисовать Border нужной ширины и цвета (грубо и быстро, наверное можно улучшить)
Код: 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.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
$PBExportHeader$st_transparent_rgbborder.sru
forward
global type st_transparent_rgbborder from statictext
end type
type a from structure within st_transparent_rgbborder
end type
type point from structure within st_transparent_rgbborder
end type
type rect from structure within st_transparent_rgbborder
end type
end forward

type point from structure
	long		cx
	long		cy
end type

type rect from structure
	long		left
	long		top
	long		right
	long		bottom
end type

global type st_transparent_rgbborder from statictext
integer width =  197 
integer height =  60 
integer textsize = - 8 
integer weight =  400 
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Arial"
long textcolor =  33554432 
long backcolor =  67108864 
boolean enabled = false
boolean focusrectangle = false
boolean disabledlook = true
event paint pbm_paint
end type
global st_transparent_rgbborder st_transparent_rgbborder

type prototypes
Function ulong SelectObject(ulong hdc, ulong hWnd) Library "GDI32.DLL"
Function int SetBkMode(ulong hdcr, integer mode) Library "GDI32.DLL"
Function BOOLEAN GetClientRect(ulong hWnd,  REF Rect rect) library "user32.dll"
FUNCTION ulong  CreatePen ( uint nPenStyle, uint nWidth, long crColor )Library "GDI32.DLL"
Function BOOLEAN DeleteObject(ulong hdc) Library "GDI32.DLL"
FUNCTION long   MoveToEx ( ulong hDC, int xp, int yp, ref point lppt ) LIBRARY "GDI32.DLL"
FUNCTION int    LineTo ( ulong hDC, int xEnd, int yEnd ) LIBRARY "GDI32.DLL"
Function long ReleaseDC(ulong hWnd, ulong hdcr) Library "USER32.DLL"
Function ulong GetDC(ulong hWnd) Library "USER32.DLL"


end prototypes

type variables
public uint 	PENWIDTH =  3  
protected:
Boolean				ib_painting
end variables

event paint;/*------------------------------------------------------------------------------

 Event   :			 st_transparent_rgbborder.Paint

 Returns:         Long

 Parameters:      value Long hdc

 Copyright © 2005 DTI - Philip Salgannik

 Date Created: 1/13/2005

 Description:	pbm_paint
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/

int ctlLeft, ctlTop, ctlWidth, ctlHeight
	long result 
	long charNull, fbFontItalic, fbFontUnderLine
	ulong hpen, hOldPen, hBorderPen, lul_border_color
	ulong hBrush, hOldBrush
	long curpos
	rect rect
	ulong  hWnd,lhDC
	point lp

IF NOT IsValid (This) THEN Return  0 
IF ib_painting THEN Return  0 

ib_painting		= TRUE
This.Visible	= FALSE

DO WHILE Yield ()
LOOP

This.Visible	= TRUE

IF NOT this.border THEN	
	// Get the window handle and the device context
	hWnd = Handle ( this )
	lhDC = GetDC ( hWnd )	
	If lhDC >  0  Then 
	
	// Get the client rectangle.  That is the control minus the border, if any
		GetClientRect ( hWnd, rect )
		
		
		
		ctlLeft = rect.Left  + PENWIDTH /  2 
		ctlTop = rect.Top + PENWIDTH /  2 
		ctlWidth = rect.Right - rect.Left  - PENWIDTH /  2 
		ctlHeight = rect.Bottom - rect.Top  - PENWIDTH /  2 
		
	
		lul_border_color = this.bordercolor 
	
		// Create the  pen required	
		
		hBorderPen  = CreatePen ( 0 , PENWIDTH, lul_border_color)
		
		// Save the old pen and select the dark pen
		hOldPen = SelectObject ( lhDC, hBorderPen )
		
		// Use MoveTo and LineTo functions to draw the lines
		curPos = MoveToEx ( lhDC, ctlLeft, ctlHeight, lp )
		result = LineTo ( lhDC, ctlWidth, ctlHeight )
		result = LineTo ( lhDC, ctlWidth, ctlTop )	
		
		curPos = MoveToEx ( lhDC, ctlLeft, ctlHeight, lp )
		result = LineTo ( lhDC, ctlLeft, ctlTop )
		result = LineTo ( lhDC, ctlwidth, ctlTop )
		
		// Select the old pen and delete other pens
		hPen = SelectObject ( lhDC, hOldPen )
		//DeleteObject ( hLightPen )
		DeleteObject ( hBorderPen )
		
		// Release the Device Context and let PowerBuilder know that we handled the event
		ReleaseDC ( hWnd, lhDC )
	END IF
	
END IF



ib_painting		= FALSE
Message.Processed = True

Return  0 
end event

event constructor;This.BackColor =  2 ^ 29 
end event

on st_transparent_rgbborder.create
end on

on st_transparent_rgbborder.destroy
end on
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864231
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно редакторы схем в таких программах выносять отдельно и пишут его на C или Delphi в исполняемом модуле, ActiveX или OLE, а с клиентского приложения вызывают по мере необходимости. В итоге каждый занимается тем, для чего был предназначен, а не извратами :)
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864829
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ вобщем-то так и сделал по совету Локшина Марка (за что ему ГРОМАДНОЕ спасибо). Вот только так и не понял, как он унаследовался от стандартного контрола :(
От rectangle? Так я от него и не наследовался.
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864858
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк авторЯ вобщем-то так и сделал по совету Локшина Марка (за что ему ГРОМАДНОЕ спасибо). Вот только так и не понял, как он унаследовался от стандартного контрола :(
От rectangle? Так я от него и не наследовался.

Бр-р-р-р... При чем тут Rectangle??? Речь шла о StaticText...
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32864959
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoБр-р-р-р... При чем тут Rectangle??? Речь шла о StaticText...
Тогда не по моему совету...
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32865052
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
Тогда не по моему совету...

Мда... С миру по нитке в таком случае :)
Вобщем, в таком случае - спасибо Мировому разуму
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32865932
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vadim Romanenko
ФилиппВот прозрачный static text, который умеет рисовать Border нужной ширины и цвета (грубо и быстро, наверное можно улучшить) Осталось только вынести в сервис
Код: 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.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
$PBExportHeader$n_draw.sru
forward
global type n_draw from nonvisualobject
end type
end forward

global type n_draw from nonvisualobject autoinstantiate
end type

type prototypes
	// Получить контекст устройства, 
	// установить и выбрать атрибуты рисунка, 
	// создать и выбрать графические объекты - перо, кисть и т.д.
	// освободить и уничтожить объекты
Объявления я уже постил:-)
end prototypes
type variables
ulong iulHandle
long DC

end variables
forward prototypes
public function integer drawrectangle (long width, long color, integer topleftx, integer toplefty, integer bottomrightx, integer bottomrighty)
public function integer of_init (unsignedlong al_handle)
end prototypes

public function integer drawrectangle (long width, long color, integer topleftx, integer toplefty, integer bottomrightx, integer bottomrighty);long hpen, hpenOld;
long hbrush, hbrushOld;
str_size lpPoint 
    hpen = CreatePen( 0 , Width, Color);
    // Select the new pen and brush, and then draw.
    hpenOld = SelectObject(DC, hpen);
	MoveToEx (dc, TopLeftX,TopLeftY, lpPoint ) 
	LineTo (dc, TopLeftX,BottomRightY) 
	LineTo (dc, BottomRightX,BottomRightY) 
	LineTo (dc, BottomRightX,TopLeftY) 
	LineTo (dc, TopLeftX,TopLeftY) 
    // Do not forget to clean up.
    SelectObject(dc, hpenOld);
    DeleteObject(hpen);
return  1 
end function

public function integer of_init (unsignedlong al_handle);iulHandle = al_Handle
DC = GetDC (iulHandle)
if DC =  0  then 
	return - 1 
end if
return  1 

// Использование:
// Объявите переменную экземпляра
//n_draw inv_draw

//Constructor Event -  this - это, например, ваш Picture Object
//long ll_handle
//ll_Handle = handle (this)
// inv_draw.of_init (ll_Handle) >  0  

// в событии, на которое замаплено pbm_paint (или по мере необходимости), отрисовываем прямоугольник 
//	inv_draw.drawrectangle(  5 ,  255  ,  15 ,  20 ,  100 ,  100 )
//

end function
on n_draw.create
call super::create
TriggerEvent( this, "constructor" )
end on

on n_draw.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

event constructor;if DC <>  0  then ReleaseDC (iulHandle, DC)
end event


потребуется еще структура
Код: plaintext
1.
2.
3.
4.
5.
$PBExportHeader$str_size.srs
$PBExportComments$The SIZE structure specifies the width and height of a rectangle. (WIN API)
global type str_size from structure
	long		cx
	long		cy
end type
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32866337
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Млин... Похоже, таки прийдется разбираться с ВинАПИ...
Спасибо за помощь всем-всем!!
Сейчас дострадаю логическую часть (чего, где и какого цвета рисовать) при помощи UserObject'а, а потом займусь попытками перехода на навороченные UO от Филиппа и PL99...
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32866379
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый PL99!! Не могли бы Вы запостить файл для импорта в ПБ целиком?? А то я тут пытаюсь расковырять, что же и где же, но исключительно по экспорту этого сделать не получается...
Я тут пытался дополнить n_draw.sru необходимыми секциями, как например в месте
Код: plaintext
Объявления я уже постил:-)
(кстати, я так и не понял - где же...)
но никак не могу побороть всех ошибок. Так что не могли бы Вы приложить файл экспорта целиком??
...
Рейтинг: 0 / 0
Как изменить ширину Border в PB 7.0.3
    #32866406
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После небольших умственных усилий, я таки вспомнил, где что было запощено :) Все проимпортилось...
Но чего-то у меня не получается использовать сервис от PL99... Может я не до конца понял идею?? Нельзя ли запостить пример использования??

И еще - не мог бы кто-нибудь скинуть линк с описанием применения WinAPI в PowerBuilder?? Например, где указываются прототипы используемых функций?
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как изменить ширину Border в PB 7.0.3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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