powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему появляется синтаксическая ошибка?
14 сообщений из 14, страница 1 из 1
Почему появляется синтаксическая ошибка?
    #39499392
Вроде всё написано правильно, но при компиляции синт. ошибка в строке(ADD OBJECT form1.grid1.column1.header1 AS header WITH ;), где эта ошибка и как правильно надо написать ?
Код: c#
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.
PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.SHOW
RETURN

DEFINE CLASS form1 AS FORM
    DATASESSION = 1
    DESKTOP = .T.
    SHOWWINDOW = 0
    DOCREATE = .T.
    AUTOCENTER = .T.
    BORDERSTYLE = 3
    Height = 345
    Width = 1200
    CAPTION = "********************"
    WINDOWTYPE = 0
    WINDOWSTATE = 0
    WindowType = 1
    NAME = "FORM1"


    ADD OBJECT grid1 AS GRID WITH ;
        COLUMNCOUNT = 2, ;
        DELETEMARK = .F., ;
        WIDTH = 1200, ;
        HEIGHT = 267, ;
        RECORDSOURCE = "test", ;
        NAME = "Grid1", ;
        column1.CONTROLSOURCE = "test.id", ;
        column1.WIDTH = 584, ;
        column1.NAME = "Column1", ;
        column2.CONTROLSOURCE = "test.id_Child", ;
        column2.WIDTH = 584

ADD OBJECT form1.grid1.column1.header1 AS header WITH ;
		Caption = "id", ;
		Name = "Header1"
		        
    PROCEDURE Load
        CREATE CURSOR test (id i, id_Child i)
		INSERT INTO test (id) VALUES (1)
		INSERT INTO test (id) VALUES (2)
		GO TOP
	ENDPROC
    PROCEDURE UnLoad

	ENDPROC
ENDDEFINE

...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499397
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
header не надо добавлять. Если ты указал COLUMNCOUNT = 2, то создастся две колонки с хэдерами и т.д.
Далее просто заполняй
Код: sql
1.
ThisForm.grid1.column1.header1.Caption = "id"
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499400
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так
Код: sql
1.
        column1.header1.Caption = "id";


Это лишнее
Код: sql
1.
        column1.NAME = "Column1", ;
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499413
Если я запускаю с поправками, которые вы подсказали, то получаю на строке(ADD OBJECT grid1 AS GRID WITH ;...) unnown member header1
Код: c#
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.
PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.SHOW
RETURN

DEFINE CLASS form1 AS FORM
    DATASESSION = 1
    DESKTOP = .T.
    SHOWWINDOW = 0
    DOCREATE = .T.
    AUTOCENTER = .T.
    BORDERSTYLE = 3
    Height = 345
    Width = 1200
    CAPTION = "********************"
    WINDOWTYPE = 0
    WINDOWSTATE = 0
    WindowType = 1
    NAME = "FORM1"


    ADD OBJECT grid1 AS GRID WITH ;
        COLUMNCOUNT = 2, ;
        DELETEMARK = .F., ;
        WIDTH = 1200, ;
        HEIGHT = 267, ;
        RECORDSOURCE = "test", ;
        NAME = "Grid1", ;
        column1.CONTROLSOURCE = "test.id", ;
        column1.WIDTH = 584, ;
        column2.CONTROLSOURCE = "test.id_Child", ;
        column2.WIDTH = 584, ;
        column1.header1.Caption = "id"

    PROCEDURE Load
        CREATE CURSOR test (id i, id_Child i)
		INSERT INTO test (id) VALUES (1)
		INSERT INTO test (id) VALUES (2)
		GO TOP
	ENDPROC
    PROCEDURE UnLoad

	ENDPROC
ENDDEFINE

...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499452
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пропиши в инит грида
Код: sql
1.
2.
3.
    PROCEDURE grid1.Init
    This.column1.Header1.Caption = 'Id'
    ENDPROC
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499458
Спасибо, но с инит у меня всё Ok, решил попробовать без инит и вот тут полезли вопросы, которые появились здесь на форуме..
У меня ещё есть вопросы...

После завершения работы программы попадаю в командное окно, но как и где в программе прописать команду, чтоб память очищалась от загруженного класса, где-то надо писать в методе unload или после команды oform1.SHOW

Как правильно написать SetAll в инит грида, чтоб все хидеры в таблицы выравнялись по центру(This.SetAll('Column.header.Alignment', "2") не работает) и все хидеры и текстовые поля в колонке имели размер шрифта, например, 12
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499479
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не_проходи_мимоСпасибо, но с инит у меня всё Ok, решил попробовать без инит и вот тут полезли вопросы, которые появились здесь на форуме..
Я конструктором форм пользуюсь. Попробовал сгенерить код формы через Class Browser, он предлагает
Код: sql
1.
2.
3.
	ADD OBJECT form1.grid1.column1.header1 AS header WITH ;
		Caption = "Id", ;
		Name = "Header1"


но потом этот код не работает

Не_проходи_мимоУ меня ещё есть вопросы...

После завершения работы программы попадаю в командное окно, но как и где в программе прописать команду, чтоб память очищалась от загруженного класса, где-то надо писать в методе unload или после команды oform1.SHOW
Ничего не понял. Почитай про Главный (стартовый) файл проекта

Не_проходи_мимоКак правильно написать SetAll в инит грида, чтоб все хидеры в таблицы выравнялись по центру(This.SetAll('Column.header.Alignment', "2") не работает) и все хидеры и текстовые поля в колонке имели размер шрифта, например, 12
попробуй так
Код: sql
1.
This.SetAll('Alignment', 2, 'header')
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499507
спасибо
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499561
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь пример создания класса Grid с переопределением Header. Там немного о другом речь идет, но общий принцип понять можно

http://www.sql.ru/forum/372261/pro-button-v-gride

Дело в том, что в FoxPro при программном создании класса-контейнера нельзя описывать свойства и методы объектов, добавляемых в этот контейнер. Возможность настроить свойства Column - это уже "фича". Уже не стандартное поведение. Особенность таких специфических классов-контейнеров как Grid, PageFrame. При описании "обычного" Container такого будет сделать нельзя

Т.е., в самом общем случае, нужно отдельно написать сначала определение класса-Header, затем класса-Column, который будет использовать этот класс Header и только потом писать определение класса Grid, который будет использовать этот класс Column. Поскольку здесь класс Column стандартный, то отдельно описывать класс Column нет необходимости


PS: То, что генерит Class Browser из конструктора формы - это псевдо-код. Как правило, он не рабочий. Нужен, скорее для отчетности или просто визуализировать взаимоотношение объектов на форме в виде кода, а не окна дизайнера
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499587
ВладимирМ, спасибо, но дело всё в том, даже взяв этот код приведённый в ссылке при компиляции останавливается на строке ADD OBJECT form1.grid1.column1.header1 AS header WITH ; синтаксическая ошибка по которой и начался весь "сыр-бор", написано вроде правильно, может библиотеки с багами не знаю

Ну и второй вопрос, почему запуская программу, которая под спойлерамии закрывая крестиком, программа всё равно остаётся в памяти(например я не могу удалить файл программы test.fxp в проводнике), только после команды clear all, программа выгружается из памяти

PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.SHOW
clear all
RETURN

Но мне нужно удалить из памяти только загруженный класс oform1
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499594
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не_проходи_мимоНу и второй вопрос, почему запуская программу, которая под спойлерамии закрывая крестиком, программа всё равно остаётся в памяти(например я не могу удалить файл программы test.fxp в проводнике), только после команды clear all, программа выгружается из памяти

PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.SHOW
clear all
RETURN

Но мне нужно удалить из памяти только загруженный класс oform1
для удаления
Код: sql
1.
release oform1


Непонятно зачем ты его объявляешь глобальным (PUBLIC). Если объявишь LOCAL, то release не надо, т.к. release автоматом произойдет.
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499600
Dima T, спасибо, у меня стояло в методе unload release thisform... в общем я добавил clear и всё стало нормально..., почему то во многих приведённых примерах не делают этого...
Код: c#
1.
2.
3.
oform1=NEWOBJECT("form1")
oform1.SHOW
CLEAR CLASS form1
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499610
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не_проходи_мимоDima T, спасибо, у меня стояло в методе unload release thisform...
Объекты изнутри не уничтожаются. Надо работать с oform1, т.е. с ссылкой на объект. Как только все ссылки на объект будут удалены, тогда фокс удалит сам объект.
Если oform1 объявлена LOCAL, то ссылка автоматом удалится при возврате, т.е. на строке return.
Не_проходи_мимов общем я добавил clear и всё стало нормально..., почему то во многих приведённых примерах не делают этого...
Код: c#
1.
2.
3.
oform1=NEWOBJECT("form1")
oform1.SHOW
CLEAR CLASS form1


А зачем это делать? Чем тебе test.fxp помешал? Это скомпилированный код класса, фокс продолжает держать его открытым на случай если еще раз потребуется создать объект этого класса.
...
Рейтинг: 0 / 0
Почему появляется синтаксическая ошибка?
    #39499619
Всё понял, спасибо за объяснение..:-)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему появляется синтаксическая ошибка?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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