powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как запретить изменение размера колонок в dw grid?
13 сообщений из 13, страница 1 из 1
как запретить изменение размера колонок в dw grid?
    #32379373
Vovik@PB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
собственно сабж
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #32379385
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Map pbm_lbuttondown on your datawindow control
2) Import the source
3) Make it an instance variable on your datawindow of the type
n_cst_noresize_columns_ingrid
4) Create it in the constructor of your datawindow and call it's method of_setrequestor(..)
5) Call it's method of_registernoresizecolumn(..) as many times as you need
6) In the event mapped in step 1), write (assuming that the name of the
instance variable is 'inv_grid'):

Код: plaintext
1.
2.
3.
IF inv_grid.of_hittest(flags, xpos, ypos) THEN
 message.processed = TRUE
 RETURN  1 
END IF


Код: 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.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
$PBExportHeader$n_cst_noresize_columns_ingrid.sru
forward
global type n_cst_noresize_columns_ingrid from nonvisualobject
end type
end forward

global type n_cst_noresize_columns_ingrid from nonvisualobject
end type
global n_cst_noresize_columns_ingrid n_cst_noresize_columns_ingrid

type variables
Protected:

string 	is_noresizecolumn[]
string	is_noresize
datawindow idw_requestor
integer PROXIMITY_FACTOR =  16 
end variables

forward prototypes
public function integer of_registernoresizecolumn (string as_column)
public function integer of_getregistered (ref string as_regcolumns[])
public function boolean of_isregistered (string as_column)
public function integer of_unregister (string as_column)
public function integer of_setrequestor (datawindow adw_requestor)
public function boolean of_hittest (unsignedlong flags, integer xpos, integer ypos)
public function integer of_setproximity_factor (integer ai_factor)
end prototypes

public function integer of_registernoresizecolumn (string as_column);integer	li_upper
integer	li_cnt


// Check arguments.
If IsNull(as_column) or Len(Trim(as_column))= 0  Then 
	Return - 1 
End If

// Trim and Convert to lower case.
as_column = Lower(Trim(as_column))

// Determine if column is already registered.
li_upper = UpperBound(is_noresizecolumn)
For li_cnt =  1  to li_upper
	If is_noresizecolumn[li_cnt] = as_column Then
		// Column was previously registered.
		Return  0  
	End If	
Next


// Add to array.
is_noresizecolumn[ li_upper +  1  ] = as_column

Return  1 
end function

public function integer of_getregistered (ref string as_regcolumns[]);
integer	li_upper
string	ls_empty[]

// Initialize
as_regcolumns = ls_empty


li_upper = UpperBound(is_noresizecolumn)
If li_upper >  0  Then		
		as_regcolumns = is_noresizecolumn
End If


Return UpperBound(as_regcolumns[])
end function

public function boolean of_isregistered (string as_column);integer	li_upper
integer	li_cnt

// Check arguments.
If IsNull(as_column) or Len(Trim(as_column))= 0  Then 
	Return False
End If

// Trim and Convert to lower case.
as_column = Lower(Trim(as_column))

// Determine if column is registered.
li_upper = UpperBound(is_noresizecolumn)
For li_cnt =  1  to li_upper
	If is_noresizecolumn[li_cnt] = as_column Then
		// Column was previously registered.
		Return True
	End If
Next

// The column is not registerd.
Return False
end function

public function integer of_unregister (string as_column);integer	li_upper, ii
integer	li_index
boolean lb_found
string ls_newarray[]
// Check arguments.
If IsNull(as_column) or Len(Trim(as_column))= 0  Then 
	Return - 1 
End If

// Get the current number of entries on array.
li_upper = UpperBound (is_noresizecolumn)

// Loop around array and unregister entry if found.
For li_index =  1  to li_upper
	lb_found = Lower(as_column) = Lower(is_noresizecolumn[li_index]) 
	IF lb_found THEN CONTINUE
	ii ++
	ls_newarray[ii]=is_noresizecolumn[li_index]
Next
IF lb_found THEN
	is_noresizecolumn = ls_newarray
	RETURN  1 
END IF

// No maching entry was found to unregister.
Return - 1 
end function

public function integer of_setrequestor (datawindow adw_requestor);If IsNull(adw_requestor) or Not IsValid(adw_requestor) Then
	Return - 1 
End If

idw_Requestor = adw_Requestor
Return  1 
end function

public function boolean of_hittest (unsignedlong flags, integer xpos, integer ypos);IF NOT IsValid(idw_requestor) THEN RETURN FALSE
IF IsNull(idw_requestor) THEN RETURN FALSE
IF idw_requestor.Describe( "DataWindow.Processing" ) <>  "1 " THEN RETURN FALSE //operate only on grids

integer COL_N, kounter, li_total
boolean lb_near
string ls_obj

integer li_colwidth, lix
ls_obj = idw_requestor.GetBandAtpointer( )
IF Pos(ls_obj,  "header" ,  1 ) <>  1  THEN RETURN FALSE
li_total = UpperBound(is_noresizecolumn) 
IF li_total <  1  THEN RETURN FALSE
FOR kounter =  1  TO li_total
	lb_near = FALSE
	lix = Integer(idw_requestor.Describe(is_noresizecolumn[kounter] +  ".x" ))
	li_colwidth = Integer(idw_requestor.Describe(is_noresizecolumn[kounter] +  ".width" ))
	
	//lb_near = (xpos > lix - PROXIMITY_FACTOR AND xpos <= lix)	
	//lb_near = (xpos >= lix AND xpos < lix + PROXIMITY_FACTOR)
	
	lb_near = (xpos > lix + li_colwidth - PROXIMITY_FACTOR AND xpos <= lix + li_colwidth)
	IF NOT lb_near THEN lb_near = (xpos >= lix + li_colwidth AND xpos < lix + li_colwidth + PROXIMITY_FACTOR)
	IF lb_near THEN RETURN TRUE
NEXT
RETURN lb_near

end function

public function integer of_setproximity_factor (integer ai_factor);IF IsNull(ai_factor) THEN RETURN PROXIMITY_FACTOR
IF ai_factor <  1  OR ai_factor >  32  THEN RETURN PROXIMITY_FACTOR

integer li_temp
li_temp = PROXIMITY_FACTOR
PROXIMITY_FACTOR = ai_factor

RETURN li_temp
end function

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

on n_cst_noresize_columns_ingrid.destroy
TriggerEvent( this,  "destructor"  )
call super::destroy
end on
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #32379457
Vovik@PB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага, работает все, спасибо
если бы еще попроще было...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как запретить изменение размера колонок в dw grid?
    #34196728
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проще будет через модифай: processing=0
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34197200
СМ.Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, заработало !
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34197220
СМ.Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый ZUZU, а можно подробнее...
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34197446
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще не будет. Это будет НЕ грид.
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34198117
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппПроще не будет. Это будет НЕ грид.чем визуально будет отличатся ? :)
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34198129
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в принципе бордер придется подставить ячейкам
а отключается так:
dw_1.modify("datawindow.processing=0")
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34198180
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zuzu ФилиппПроще не будет. Это будет НЕ грид.чем визуально будет отличатся ? :)
Отличатся будет тем, что будет НЕ грид. Обычно требуется "заморозить" определённые колонки, но не ВСЕ ...
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34219498
alv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФИЛИПП,

Хороший пример, только что-делать, если существует колонка справа, которая
не запрещена для изменения размера, и пользователь 'сужает' ее до 0-ля.
Обратно восстановить ее он уже не сможет. Только переоткрывать окно.

Или есть другой выход?
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34229170
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alvФИЛИПП,

Хороший пример, только что-делать, если существует колонка справа, которая
не запрещена для изменения размера, и пользователь 'сужает' ее до 0-ля.
Обратно восстановить ее он уже не сможет. Только переоткрывать окно.

Или есть другой выход?
А причём здесь "как запретить изменение размера колонок в dw grid" ?
...
Рейтинг: 0 / 0
как запретить изменение размера колонок в dw grid?
    #34243164
bumsy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По субжу.
Наверно то же самое что у Филиппа, только без "обоворачивания в сервис". Может пригодится когда надо запретить изменять размер у определенных колонок на скорую руку. Вещается на clicked() в dw control.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
long ll_x1, ll_x2, ll_xpos
int li
ll_xpos= PixelsToUnits(xpos, XPixelsToUnits! )
string ls_noresizecol[]
integer PROXIMITY_FACTOR =  16 

if left(this.GetBandAtPointer(),  6 ) = 'header' then
	
	// Определяем список нерасширяемых колонок в датавинде
	ls_noresizecol[ 1 ] = "c_but"
	
	for li =  1  to upperbound(ls_noresizecol) 
		if this.Describe(ls_noresizecol[li] + ".visible" ) = '1' then
			ll_x1 = long(this.Describe(ls_noresizecol[li] + ".X")) + long(this.Describe(ls_noresizecol[li] + ".width")) - PROXIMITY_FACTOR
			ll_x2 = ll_x1 +  2 *PROXIMITY_FACTOR
			if ll_xpos > ll_x1 and ll_xpos < ll_x2 then
				return  1 
			end if
		end if
	next
end if


P.S. обозначение величины близости взял как у Филиппа (PROXIMITY_FACTOR)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как запретить изменение размера колонок в dw grid?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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