Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как запретить изменение размера колонок в dw grid? / 13 сообщений из 13, страница 1 из 1
17.01.2004, 19:21
    #32379373
Vovik@PB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
собственно сабж
...
Рейтинг: 0 / 0
17.01.2004, 20:22
    #32379385
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
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
18.01.2004, 04:39
    #32379457
Vovik@PB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
ага, работает все, спасибо
если бы еще попроще было...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
13.12.2006, 14:32
    #34196728
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
проще будет через модифай: processing=0
...
Рейтинг: 0 / 0
13.12.2006, 16:06
    #34197200
СМ.Николай
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
Спасибо, заработало !
...
Рейтинг: 0 / 0
13.12.2006, 16:12
    #34197220
СМ.Николай
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
Уважаемый ZUZU, а можно подробнее...
...
Рейтинг: 0 / 0
13.12.2006, 17:03
    #34197446
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
Проще не будет. Это будет НЕ грид.
...
Рейтинг: 0 / 0
13.12.2006, 21:01
    #34198117
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
ФилиппПроще не будет. Это будет НЕ грид.чем визуально будет отличатся ? :)
...
Рейтинг: 0 / 0
13.12.2006, 21:09
    #34198129
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
в принципе бордер придется подставить ячейкам
а отключается так:
dw_1.modify("datawindow.processing=0")
...
Рейтинг: 0 / 0
13.12.2006, 21:58
    #34198180
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
zuzu ФилиппПроще не будет. Это будет НЕ грид.чем визуально будет отличатся ? :)
Отличатся будет тем, что будет НЕ грид. Обычно требуется "заморозить" определённые колонки, но не ВСЕ ...
...
Рейтинг: 0 / 0
22.12.2006, 16:38
    #34219498
alv
alv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
ФИЛИПП,

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

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

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

Или есть другой выход?
А причём здесь "как запретить изменение размера колонок в dw grid" ?
...
Рейтинг: 0 / 0
09.01.2007, 15:28
    #34243164
bumsy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как запретить изменение размера колонок в dw grid?
По субжу.
Наверно то же самое что у Филиппа, только без "обоворачивания в сервис". Может пригодится когда надо запретить изменять размер у определенных колонок на скорую руку. Вещается на 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
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как запретить изменение размера колонок в dw grid? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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