powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по Grid
13 сообщений из 13, страница 1 из 1
Вопрос по Grid
    #33055377
Ответьте, кто может, пожалуйста. В grid вставляю элемент своего класса (комбинированная кнопка с полем ввода), после этого видна только активная ячейка (имеется в виду с данными). Если поставить Sparse в .F., то на первый взгляд вроде-бы ничего, но при попытке изменить размер колонки, в которую вставлен элемент, начинается ерунда. Размер элемента меняется только для активной ячейки (события Resize переописано в классе вставляемого объекта), при прокрутке таблицы влево-вправо элементы отрисовываются некорректно (события рисования нигде не переописаны), да и выглядит это не очень красиво - сплошные кнопки.
Кто знает, как реализовать вставку элемента корректно с отображением содержимого неактивной ячейки в обычном текстовом поле, желательно при Sparse=.T., и чтобы он отрабатывал изменение размеров.
Дополнительный вопрос - можно ли во время работы программы записывать методы её экранных элементов (не в design-mode)?
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33055595
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для вставки таких комбинированных объектов в столбец Grid следует использовать не объект Container, а объект Control. По сути, это то же самое, но к элементам лежащим внутри Control нельзя обратиться извне Control.

Хотя, возможно еще одним решением может быть разделение кнопки и поля ввода по разным столбцам Grid. Т.е. без объединяющего контейнера.

Насчет динамического формирования метода.

Для версии VFP8 и выше существует функция BindEvents(), которая увязывает событие и метод. Т.е. при наступлении некоего события должен быть выполнен также и указанный метод.

Для младших версий единственный выход - это предварительное создание класса нужного объекта с нужными событиями и методами. В программе используется экземпляр этого класса. Например, объект Column для Grid.

В данном форуме уже рассматривалась проблема как создать класс Colunm. Он может быть создан только программно. Нет возможности создать его через дезайнер классов.
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33056370
ВладимируМ. Немного не понял ответ.
Основной вопрос я решил при Sparse=.F. Данные корректно отображаются. Просто при всех соответствующих событиях написал Grid.Refresh. А что произойдёт, если вставляемый комбинированный объект будет в родителе класса Control? В чём будет отличие визуально (работает, поэтому не хочется трогать)? кроме того, мне в принципе требуется извне доступ к отдельным объектам комбинированного объекта.

А вот второй вопрос хотел задать ещё раз (он не относится к первому) - имелось в виду можно ли программно написать метод (не при создании класса), т.е. менять код метода, также, как свойство (хотя бы только код пустого метода)? BindEvents вряд ли спасёт положение, с тем же успехом я могу просто в классе заготовить избыточное количество методов и выполнять их по ситуации.
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33056386
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Алекс_Лена_Лиза!

Бог ты мой, сколько вас тута :)

> В чём будет отличие визуально

Попробуй :)
Хотя IMHO ничего "сложного" в грид лучше не пихать. Себе дороже.

> А вот второй вопрос хотел задать ещё раз

Дык чего экономишь то :) Задал бы в отдельной ветке. Так удобнее :)

> можно ли программно написать метод

Нет, в Runtime нельзя "написать метод".
Всё что можно - сводится к:
- макроподстановке
- созданию, компиляции и исполнению кода. Т.е. ExecScript() начиная с VFP7 или создание файла+COMPILE+DO ... в VFP6 SP3 или runcode.prg в более древних.

Естественно, что в ЛЮБОМ случае (если НЕ пользоваться BindEvents конечно) требуется кой какая "системная поддержка" со стороны используемых классов - т.е. на базовых классах сделать никак нельзя - на своих классах - через вызов какого-либо "менеджера динамически генерируемого кода" - можно.

у и как общее замечание. IMHO диамическая генерация ВСЕГО кода методов нужна в 0.000001% случаев - т.е. ПРАКТИЧЕСКИ - никогда. Максимум что "генерируется в рантайме" это мелкие куски кода - тексты SQL запросов например, обращения к динамически созданным контролам и т.п.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33057173
Igor Korolyov
Hi Алекс_Лена_Лиза!

и как общее замечание. IMHO диамическая генерация ВСЕГО кода методов нужна в 0.000001% случаев - т.е. ПРАКТИЧЕСКИ - никогда. Максимум что "генерируется в рантайме" это мелкие куски кода - тексты SQL запросов например, обращения к динамически созданным контролам и т.п.

Posted via ActualForum NNTP Server 1.1

Ясен пень, я не хотел генерировать всё приложение с нуля. Вопрос был задан так на всякий случай. В принципе подойдёт макроподстановка свойства (возможно частичная) в метод, где свойство меняется извне класса. Контролы и SQL и так динамические в проекте, просто класс может быть использован во многих формах и каждая могла бы вызвать один и тот же метод класса, но код этого метода был бы разный. Сделать это можно многими способами, но хотелось узнать нет ли стандартного. Спасибо за пояснение.
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33057386
Попробовал Control как родительский класс. Визуально отличий не заметил. Работает также (при Sparse=.T. по-прежнему данные светятся только у активной ячейки, у остальных пустое поле), только пришлось дописывать метод класса для изменения свойства ControlSource у объекта Text1 внутри класса. В чём должны были проявиться изменения?
Можно ли сделать так, чтобы у активной ячейки был внедрённый собственный класс (как сейчас), а у неактивной - стандартный Text1?
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33057518
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли сделать так, чтобы у активной ячейки был внедрённый собственный класс (как сейчас), а у неактивной - стандартный Text1?
Почему бы и нет. Свойство DynamicCurrentControl у Column-а не зря придумано
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33057659
Burn
Почему бы и нет. Свойство DynamicCurrentControl у Column-а не зря придумано
Это конечно классно и я уже раньше пытался его использовать, но как туда записать имя моего Control - на попытку сделать это программно он ругается со страшной силой (хотя такая же запись для CurrentControl работает). Запись типа DynamicCurrentControl='THISFORM.Grid2.Column1.Proba1' (где Proba1 - имя внедрённого класса - название самого класса, естественно, другое) не проходит - не ругается, но и не реагирует. Какой вообще должен быть формат записи у этого свойства и поможет ли оно в моём случае - разве оно не заставить изменить значения для всей колонки и результат будет как и раньше - для активной ячейки все данные светятся, а остальные пустые?
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33057756
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а у меня всё проходит
делаю тексбокс с измененым цветом в выбраном состоянии и кидаю на колонку .Теперь там два объекта . В свойстве пишу
iif(recno()%2=0,text1,mytext)
и почему-то работает
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33057840
В общем то, конечно, виноваты мои кривые ручки. Я писал 'Proba1', а надо было '"Proba1"'.
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33057929
А как можно в запрос DynamicCurrentControl подсунуть сравнение с активной ячейкой? В этом свойстве кроме Recno() ещё что-нибудь можно проверить? Запоминание предыдущей активной ячейки помогает не очень хорошо, т.к. его RECNO() меняется несколько позже после события AfterRowColumnChange (хотя ещё не все возможности исчерпаны).
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33057987
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри здесь

Как выделить всю активную строку Grid

Думаю, сможешь адаптировать описанное там решение к твоему случаю. По сути, то же самое.
...
Рейтинг: 0 / 0
Вопрос по Grid
    #33058300
Всё таки не смог добиться корректной работы. При попытке отследить номер активной строки то, что надо подсвечивается только при втором возникновении события AfterRowColumnChange, а при попытке добавить проверку колонки вообще перестало появляться то, что надо. Результат - определяю координаты ячейки - и вешаю сверху кнопку.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вопрос по Grid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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