Определение собственного класса грида - ошибка определения | |
---|---|
stok_from_perm Сообщений: 2 Дата регистрации: 02.06.2023 |
Всем доброго времени суток!
Возникла проблема. С VFP работаю давно, но раньше такого вопроса не возникало, сейчас же была поставлена некая задача, в рамках которой потребовалось определить собственный класс грида. Не визуальный класс, который создаётся без всяких проблем, сохраняется как .VCX/VCT, добавляется в проект и там используется в нужных местах, это всем известно и это работает. А вот именно собственное определение. Начало такое: ************************************************** *-- Class: sgrid (d:\vfp_prg\addon\fields\sgrid.vcx) DEFINE CLASS Sgrd AS grid ColumnCount = 1 DeleteMark = .F. HeaderHeight = 25 Height = 200 ReadOnly = .T. RecordMark = .F. RowHeight = 21 Width = 320 Name = "sgrd" Column1.ReadOnly = .T. Column1.Name = "Column1" ADD OBJECT sgrd.column1.header1 AS header WITH Caption = "Header1", Name = "Header1" ADD OBJECT Sgrd.column1.text1 AS textbox WITH BorderStyle = 0, Margin = 0, ForeColor = RGB(0,0,0), BackColor = RGB(255,255,255), Name = "Text1" PROCEDURE Init ...ну и так далее, все нужные процедуры и прочее. Определение этого класса в числе прочих включается в текст программы, в которой создаётся форма, на ней определяются другие объекты (командой ADD OBJECT), и объект Sgrd, определённый этим классом. Эта программа находится, естественно, в переменной Proc_Main_Form. Далее, вызывается стандартная VFP команда: ExecScript(Proc_Main_Form)И вот при исполнении возникают следующие ошибки: ADD OBJECT sgrd.column1.header1 AS header WITH Caption = "Header1", Name = "Header1" Error in line 358: Syntax error. ADD OBJECT Sgrd.column1.text1 AS textbox WITH BorderStyle = 0, Margin = 0, ForeColor = RGB(0,0,0), BackColor = RGB(255,255,255), Name = "Text1" Error in line 359: Syntax error. Т.е., стандартные VFPшные определения записаны неправильно ! В чём может быть дело? Исправлено 3 раз(а). Последнее : stok_from_perm, 02.06.23 14:15 |
Re: Определение собственного класса грида - ошибка определения | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Посмотри пример forum.foxclub.ru
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Определение собственного класса грида - ошибка определения | |
---|---|
stok_from_perm Сообщений: 2 Дата регистрации: 02.06.2023 |
Спасибо, посмотрел.
То есть, не следует добавлять элементы грида командами ADD OBJECT sgrd.column1.header1 ... и ADD OBJECT Sgrd.column1.text1 ..., а определить количество колонок и их свойства в методе INIT. В самом деле, сработало. Правда, вопрос всё равно остался - типовое определение всё ж таки не работает. Я ведь этот текст взял не с потолка, а воспользовался генерацией текста в браузере классов - кнопкой "View Class Code", она там именно такое выдаёт. Или генерация текста объекта в VFP, а данном случае, получается не корректна! В любом случае, за подсказку спасибо ! |
Re: Определение собственного класса грида - ошибка определения | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Да, кодом визарда пользоваться напрямую не стоит.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Определение собственного класса грида - ошибка определения | |
---|---|
akvvohinc Автор Сообщений: 4219 Откуда: Москва Дата регистрации: 11.11.2008 |
Здесь несколько моментов: 1) Код, создаваемый визардом, в принципе не для того, чтобы его просто брать и вставлять в программу (его скорее можно назвать "псевдо-кодом"); 2) Вы, думая, что визард создает рабочий код, не ознакомились с опцией (clause) ADD OBJECT в должной степени. Например, вас не удивило, что в коде нет команды для создания колонки, но приведён "код" создания Хедера и Текстбокса. В действительности же уже после выполнения команды ColumnCount = 1 грид будет иметь объект Column1 с Header1 и Text1 (по умолчанию). Ну, а ошибка синтаксиса - она и есть ошибка синтаксиса - посмотрите в Help и примерах, что может быть задано в качестве ObjectName в опции ADD OBJECT, и вы поймёте, что писать Sgrd.column1.text1 здесь нельзя. Но даже если вы напишете там некую переменную или свойство, содержащую "Sgrd.column1.text1", то это лишь избавит вас от Syntax Error при компиляции, но вы получите ошибку при выполнении. В общем, (для простоты) можете считать что после ADD OBJECT можно задать просто имя нового (дочернего) объекта, который будет создан в родительском объекте (его имя уже известно - задано в DEFINE CLASS и не может быть указано в опции ADD OBJECT). При желании имя нового объекта можно заключить в кавычки. А если его имя находится в какой-то переменной или свойстве, то их имена надо дополнительно заключить в круглые скобки: objectname = [MyNewObject] ADD OBJECT (this.objectname) AS ... && будет создан объект с именем MyNewObject Опция ADD OBJECT не может создать Хедер колонки напрямую классе грида (Хедер не может иметь родителем Грид) Но вы можете создавать колонки в гриде на основе как базового класса Column, так и своего собственного - при этом объекты, подчиненные создаваемой колонке, будут созданы автоматически (при базовом Column автоматически создадутся и объекты Header1 и Text1). |
© 2000-2024 Fox Club  |