Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Помогите создать простенький билдер  [new]
foll-fill
Guest
Помогите кто может, буду очень признателен

Вопрос вот в чём - хочу создать простой билдер моей формы, однако возникают вопросы.

Что делаю сначала:
1. Создаю подкласс класса формы и называю myForm
2. Создаю у него свойство Builder, и заполняю его Library, Class
3. Создаю подкласс класса BulderForm
4. Помещаю на нам 2 элемента BuilderTextBox

Чего хочу (для примера):
1. Если ввожу 1 (в первый builderTextBox) - создавать на форме, для которой и создается билдер, textbox, а если 2, то label.
2. Во втором builderTextBox пишу "messagebox('aaa')", то этот текст помещался в init данной формы.

Подскажите как это можно сделать и можно ли вообще можно или подскажите какую-нибудь ссылку.
28 фев 06, 08:16    [2397208]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать простенький билдер  [new]
Dima T
Member

Откуда:
Сообщений: 15288
Вот кусок кода для создания формы на основе класса. заполнение DE и добавления в проект. Вставлять код в методы не пробовал.
	
lpara tcMainTable,tcChildTable
Create Form ('form\b'+tcMainTable) as bform from forms NoWait
	if aSelObj(laCtrl,1) > 0
		if aSelObj(laDE,2)> 0
			loDe=laDE[1]
			with loDE
				.AddObject('Cursor1','Cursor')
				with .Cursor1
					.Alias=tcMainTable
					.CursorSource=tcMainTable+'.dbf'
				endwith
			endwith
		endif
	endif
	keyboard '{ctrl+w}'
	doevent
	_vfp.activeproject.files.add('form\b'+tcMainTable+'.scx')
28 фев 06, 08:35    [2397248]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать простенький билдер  [new]
kdanylo
Member

Откуда: Lviv
Сообщений: 342
Чтобы писать методы формы нужно ее открыть в режиме конструирования.
Для примера введи в командном окне:

CREATE FORM test as 'form'
ox = SYS(1270) 
*--набери эту строчку, оставь курсор на этой строчке в командном окне, 
*--установи курсор мыши над формой но не кликай по ней, нажми "Enter". 
*--Теперь ox - сылка на форму 'test'. 
*--Далее пишешь код методов Init и Show:

ox.WriteMethod ("Init", [MESSAGEBOX('Init')])
ox.WriteMethod ("Show", [MESSAGEBOX('Show')])

DO FORM test.scx

Сохранишь внесеные изменения - и увидиш два messagebox в Init и Show событиях.

Ссылка на статью Дуга Хенига о билдерах:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfoxtk04/html/ft04l6.asp
28 фев 06, 08:57    [2397280]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать простенький билдер  [new]
foll-fill
Guest
Спасибо получилось.

ТОлько вот ошибки в билдере выскакивают различные, например, по нажатию на Cancel вылезает предложение о закритие билдера и с примерно следуеющим текстом function argument value, type or count is invalid
method - copypems, а если повторно пытаюсь занести код в метод, кричит, что такой объект уже существует.

И еще при запуске билдера для моей формы, билдер открывается вместе с запуском самой формы, для которой он предназначен, как этого можно избежать.
28 фев 06, 10:38    [2397709]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать простенький билдер  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi foll-fill!

Тема это достаточно сложная, а ещё сложнее будет если ты собрался плясать от
того "шаблона" билдера от которого построены MS-овские (тогда его придётся
хорошенько изучать, смотреть что к чему и как предполагается с ним
работать)... Я у себя поступил предельно просто - соорудил prg-ку и прописал
её в свойстве Builder своего класса. "Шаблон" этой prg-ки такой:
LPARAMETERS p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, 
p14, p15, p16
IF UPPER(PROGRAM(0)) == "GRDACTBUILDER" && Это имя prg-ки
 * Прямой вызов
 MESSAGEBOX("Этот построитель не может быть вызван непосредственно. Выберите 
пункт Builder контекстного меню для запуска")
 RETURN .F.
ENDIF
LOCAL loBuilder
loBuilder = CREATEOBJECT("frmBuilder_GrdActBuilder", m.p1, m.wboform) && сам 
класс формы и контролов описан ниже в этой-же prg
IF TYPE("m.loBuilder.Name") = "C"
 m.loBuilder.Show(1)
ENDIF
RETURN .T.

Можешь поставить SET STEP ON и посмотреть что находится в каждом параметре
при вызове билдера фоксовым Builder.app, какие доступны Private переменые и
т.п. В частности первый параметр (p1) это ссылка на объект для которого
вызван билдер, а wboform - ссылка на всю форму для которой он вызван.
Создать новый объект на форме можно по ContainerControl.AddObject() -
удалить по ContainerControl.RemoveObject(), прописать код - по
Control.WriteMethod(), забить некоторое выражение в свойство (именно как
выражение а не резултат его вычисления!) через Control.WriteExpression() -
есть и полезный метод ResetToDefault()...

Posted via ActualForum NNTP Server 1.3

3 мар 06, 02:18    [2411302]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить