powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / EditGroup
10 сообщений из 10, страница 1 из 1
EditGroup
    #32222092
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как написать класс типа CommandGroup, но чтобы вместо кнопок при изменении нового свойства EditCount появлялись Эдиты?

Припустим создали новый класс (BaseClass='Container'), добавили свойство EditCount....
Что дальше?
...
Рейтинг: 0 / 0
EditGroup
    #32222211
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну лично я в таких случаях делаю класс на основе PageFrame со свойством Tabs=.F. (т.е. без визуального отображения закладок)

Т.е. действия примерно такие:

-) Создаешь класс на основе PageFrame из 2 страниц и устанавливаешь ему свойство Tabs=.F. (для лучшего визуального эффекта еще можно скрыть Border (толщина 0, тип - невидимый ))
-) На первой странице этого PageFrame кладешь набор кнопок
-) На второй - набор EditBox

Программное перключение между страницами PageFrame осуществляется изменением свойства ActvePage, т.е.

This.ActivePage=1 - открыть первую страницу
This.ActivePage=2 - открыть вторую страницу

Т.е. можно использовать значение стандартного свойства ActivePage как признак того, что именно открыто или нужно открыть. Хотя никто не мешает ввести для этой цели дополнительное свойство (можно с событием ASSIGN для немедленной реакции в случае изменения.)
...
Рейтинг: 0 / 0
EditGroup
    #32222219
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
**************************************************
* -- Class:        editboxgroup
 
* -- ParentClass:  container
 
* -- BaseClass:    container
 
*
DEFINE CLASS editboxgroup AS container


	Width =  200 
	Height =  200 
	itemcount =  0 
	Name =  "editboxgroup" 


	PROCEDURE Resize
		local lnItem, lcName, loControl, lnItemWidth, lnItemHeight

		with this

			if empty(.ItemCount)
				return
			endif

			lnItemWidth = .Width
			lnItemHeight = .Height/.ItemCount

			for lnItem =  1  to .ItemCount
				lcName =  "edt"  + alltrim(str(m.lnItem)) 
				loControl = evaluate( "this." +lcName)
				loControl.Move( 0 , (m.lnItem -  1 )*m.lnItemHeight, m.lnItemWidth, m.lnItemHeight)
			endfor

		endwith
	ENDPROC


	PROCEDURE Init
		local lnItem, lcName

		with this
			for lnItem =  1  to .ItemCount
				lcName =  "edt"  + alltrim(str(m.lnItem)) 
			    .AddObject(m.lcName,  "editbox" )
				store .t. to ( "this." +lcName+ ".Visible" )
			endfor
		endwith

		this.Resize()
	ENDPROC


ENDDEFINE
*
* -- EndDefine: editboxgroup
 
**************************************************
...
Рейтинг: 0 / 0
EditGroup
    #32222259
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с ClassDesigner как это сделать?

Мне нужен класс (из файла *.vcx) который работает также как и CommandGroup, т.е. чтобы была возможность в FormDesigner'е в окне Properties в проектном времени изменить свойство EditCount, например на 5, и в форме появилось 5 эдитов.
...
Рейтинг: 0 / 0
EditGroup
    #32222286
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
* editboxgroup builder
lnCount = aselobj(laArray)
for lnControl =  1  to lnCount
	if type('laArray[m.lnControl].ItemCount') = 'N'
		with laArray[m.lnControl]
			lnItemCount = .ItemCount
			lnItemHeight = .Height / m.lnItemCount
			lnItemWidth = .Width
			for lnItem =  1  to m.lnItemCount
				lcName =  "edt" +alltrim(str(m.lnItem))
				.AddObject(m.lcName,  "editbox" )
				loItem = evaluate( "." +m.lcName)
				loItem.Move( 0 , (m.lnItem -  1 )*m.lnItemHeight, m.lnItemWidth, m.lnItemHeight)
			endfor
		endwith
	endif
endfor


посади этот код на какую-нибудь клавишу, например

Код: plaintext
on key label F12 do editboxgroupbuilder


зайди в дизайнер, выдели свой контейнер (код который я привел для ручного создания в методе Init убери) и нажми f12 - любуйся результатами своего труда:)
...
Рейтинг: 0 / 0
EditGroup
    #32222312
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, идентификацию нужного контрола можно ужесточить:
Код: plaintext
1.
<	if type('laArray[m.lnControl].ItemCount') = 'N'
>	if laArray[m.lnControl].BaseClass =  "Container"  .and. type('laArray[m.lnControl].ItemCount') = 'N' 
...
Рейтинг: 0 / 0
EditGroup
    #32222504
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы, наверное, друг друга не поняли...

Вот мой вопрос:
Мне нужен класс (из файла *.vcx) который работает также как и CommandGroup, т.е. чтобы была возможность в FormDesigner'е в окне Properties в проектном времени изменить свойство EditCount, например на 5, и в форме появилось 5 эдитов.

Я делал так:
1. Создал класс на основе Container.
Открылся ClassDesigner.
2. В этом дизайнере из меню Class нажал NewProperty, имя новому свойству дал EditCount, поставил флажки Access Method и Assign Method.
Фокс создал два метода EditCount_access и EditCount_assign
3. В методе EditCount_assign я написал:

LPARAMETERS vNewVal

FOR i = fCounts+1 TO vNewVal
Num=ALLTRIM(STR(i))
this.AddObject('ED'+Num,'EditBox')
this.ED&Num..height=20
this.ED&Num..Left=10
this.ED&Num..Top=(this.ED&Num..Height+10)*i
this.ED&Num..Visible=.T.
ENDFOR
fCounts=vNewVal
THIS.listscount = m.vNewVal

В Init

PUBLIC fCounts
fCounts=0

В рантайме все работает ( Click какой то кнопки: Thisform.EditGroup1.EditCount=5. Результат: в Container'е 5 эдитов).
В проэктномном времени:
Выделяю свой Container, в окне Properties в строке EditCount пишу цыфру 5.
Результат: ничего не изменилось...(А в CommandGroup - меняется).
...
Рейтинг: 0 / 0
EditGroup
    #32222519
.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.
Гость
behavior by design
...
Рейтинг: 0 / 0
EditGroup
    #32222554
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я прекрасно тебя понял, но, к сожалению, vfp не предоставляет такой возможности. Так что, либо используй обходной путь связанный c использованием построителя, либо пишы activex.
...
Рейтинг: 0 / 0
EditGroup
    #32222626
Aijik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то MS заикнулось о том, что Design-time события (а это как раз то, чего Вы хотите) будут введены в VFP9 (правда говорилось при этом о Report Designer'е только почему-то). Как утверждали некоторые товарищи на конфе впавшего в кому Фоксклуба, в VB такая фича давно есть, а фокса вот всё никак не разродится :(
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / EditGroup
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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