Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid.MouseDown / 24 сообщений из 24, страница 1 из 1
21.05.2004, 10:20
    #32527503
malec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
IF nButton=2
DO mnurah.mpr
ENDIF

В гриде 3 записи. Если щёлкать на одной из них - Grid.MouseDown не сработывает. На пустом месте - работает.

Кто-нибудь - подскажите в чём дело и как сделать нормально.
Да, у меня такаяже ситуация и на Grid.DblClick.

Что я не то делаю.
...
Рейтинг: 0 / 0
21.05.2004, 10:29
    #32527526
Grid.MouseDown
Когда в Grid'e выделена ячейка, и Вы щёлкаете по ней мышью, то сообщение о событие посылается контролу в этой ячейке, а не контейнеру (Grid). Поэтому обработку события нужно выполнять в контроле ячейки (если Вы ничего не меняли - то это TextBox).
Код обработки события нужно написать в соответствующих методах для каждого TextBox'a Grid'a, из которого нужно вызвать меню (Ваш пример)
...
Рейтинг: 0 / 0
21.05.2004, 10:34
    #32527544
malec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Сделал так как вы сказали. Не работает ГАД!!!
Может быть потому что я в Refresh настраиваю Grid сам?
...
Рейтинг: 0 / 0
21.05.2004, 10:59
    #32527613
Grid.MouseDown
Я бы рекомендовал использовать метод RightClick. Метод вызывается при нажатии на правую кнопку мыши.

> я в Refresh настраиваю Grid сам

А где и как Вы это делаете, можно посмотреть?
...
Рейтинг: 0 / 0
21.05.2004, 13:51
    #32528123
malec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
this.ColumnCount =4

this.column1.header1.Alignment= 6
this.column2.header1.Alignment= 6
this.column3.header1.Alignment= 6
this.column4.header1.Alignment= 6

this.column1.header1.Caption="? ???."
this.column2.header1.Caption="????"
this.column3.header1.Caption="???????"
this.column4.header1.Caption="?????"

this.column1.Width=50
this.column2.Width=80
this.column3.Width=340
this.column4.Width=90

this.column1.ControlSource='tmprah.numrah'
this.column2.ControlSource='tmprah.datopl'
this.column3.ControlSource='tmprah.name'
this.column4.ControlSource='tmprah.summa'
this.column1.Alignment = 4
this.column2.Alignment = 4
this.column3.Alignment = 4
this.column4.Alignment = 4
...
Рейтинг: 0 / 0
21.05.2004, 14:12
    #32528193
Grid.MouseDown
Я так понимаю, что Grid Вы создаёте в конструкторе форм, там же присваиваете свойству RecordSource имя таблицы (курсора) и в методе MouseDown прописываете код вызова меню.
А в колонках Grid'a поля записи выводятся в том же порядке, в котором они описаны в таблице.

Так же в конструкторе форм в методы TextBox'ов Вы так же прописываете некоторый код.

Что происходит потом?
В методе Refresh Grid'a вы пишете:

this.ColumnCount = 4

По этой команде Grid заново создаёт коллекцию объектов Column, и, соответсвенно, вложенных в них объектов TextBox. То есть всё, что Вы сделали в констукторе форм, бесследно исчезает (кроме собственно настроек для самого объекта-контейнера Grid).

Действительно ли нужно изменять количество колонок в Grid'e?
Если нет, то удалите из Вашего метода Refresh указанную выше строку, и всё заработает.
...
Рейтинг: 0 / 0
21.05.2004, 14:45
    #32528290
malec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Увы, не пошло. Та же ситуация. Могу скинуть форму, может Вы незамутнённым взглядом найдёте ошибку или выход.
...
Рейтинг: 0 / 0
21.05.2004, 15:11
    #32528382
Grid.MouseDown
Давайте. Упакуйте форму и приложите к сообщению. Так же более подробно пропишите, что хотите поиметь.
...
Рейтинг: 0 / 0
21.05.2004, 16:15
    #32528620
malec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Высылаю весь проэкт. Интересно было бы услышать мнение,
т.к. в Visual Foxpro начал писать недавно.
...
Рейтинг: 0 / 0
21.05.2004, 16:50
    #32528708
Grid.MouseDown
Скачал.
К сожалению, сегодня уже не успеваю ответить - рабочий день закончился.
Посмотрю дома и отвечу в понедельник.
...
Рейтинг: 0 / 0
21.05.2004, 17:04
    #32528736
malec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Добро ! До понедельника!!!!
...
Рейтинг: 0 / 0
21.05.2004, 17:17
    #32528767
FM32YO aka KID
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
а почему в проджекте при компиляции сне выдает
GENERATOR: Menu MNURAH is invalid LINE NUMBER: 676
и нет возможности глянуть это меню...
и тут
IF nButton=2
DO mnurah.mpr
ENDIF

самого файла mnurah.mpr
в проджекте нету.... а открыть его тоже не могу... ибо Menu file is invalid...
я туплю или все же в этом проблема?
...
Рейтинг: 0 / 0
21.05.2004, 17:27
    #32528780
FM32YO aka KID
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
2 Malec

ух ты!!! Да мы оказывается живем в одном городе!!!! пиши на мыло или в аську 263662089
приятно встретить земляка!!!
...
Рейтинг: 0 / 0
21.05.2004, 17:57
    #32528841
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Какая версия FoxPro?
...
Рейтинг: 0 / 0
21.05.2004, 18:06
    #32528856
FM32YO aka KID
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
конец работы очень спешу вот прикрепленный пример.. грид и на нем по правой кнопке мыши вызывается меню...
1 - мень есть shortcut
2 - mpr файл с меню ДОЛЖЕН существовать..
у тебя же его вроде как нету.. то есть НЕ скомпилен...

Надеюсь я Правильно понял ЧТО тебе нужно???
Если что пиши!!
Вадим
...
Рейтинг: 0 / 0
24.05.2004, 09:29
    #32529964
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Сначала о той ошибке, которая стала причиной данной темы.

Дело в том, что у Grid есть такая особенность, что если произвести замену RecordSource, то произойдет сброс вообще ВСЕХ настроек Grid, в том числе и свойств и методов вложенных объектов (Column, Header, TextBox). Чтобы избежать этой неприятности надо ПЕРЕД изменением источника данных обязательно его обнулить. Т.е. в данном случае надо поступить так:

Событие FrmScreen.Container1.Command5.Click()

This.parent.Grid1.RecordSource =''

SELECT ... FROM ...

This.parent.Grid1.RecordSource ='tmprah'

В этом случае все созданные методы внутри Grid остануться работоспособными. Более того, остануться неизменными все настройки столбцов. Надо будет восставновить только ControlSource столбцов.

==========================================

Далее я хотел пройтись по найденным ошибкам, но на втором десятке понял, что это бессмысленное занятие. Поэтому попытаюсь описать не сами ошибки, а их причины.

Основная проблема в том, что Вы используете стиль программирования процедурного языка в объектно-ориентированной среде. В принципе, можно и так (программа ведь работает!). НО! Такой подход фактически связывает как программиста, так и пользователя по рукам и ногам. "Шаг вправо, шаг влево - побег!". Мало того, что сужается инструментарий средств как пользователя, так и программиста, но такую программу крайне сложно развивать (вносить улучшения, модификации).

Принципиальное отличие объектно-ориентированного подхода от процедурного заключается в том, что программа "собирается" из максимально независимых друг от друга объектов. Т.е., например, форме, по большому счету, должно быть абсолютно все-равно из какого места программы она была вызвана. У нее есть набор входных параметров и набор выходных параметров. Вот при помощи них и происходит "сборка" программы.

У Вас же явный "процедурный" стиль. Когда модули вызываются строго в определенном месте и, более того, они жестко завязаны на определеное состояние среды окружения (вместо того, чтобы формировать эту среду для каждого модуля в отдельности).

Еще один пласт ошибок связан со слабым знанием собственно языка программирования. Имею в виду команды и функции. Многие проблемы просто не возникли бы, если бы Вы знали, что существуют альтернативные пути решения (другие команды и функции), а также некоторые особенности работы тех или иных команд. В FoxPro фактически под каждую задачу есть как минимум 2...3 альтернативные команды. Настоятельно рекомендую при чтении описания к той или иной команде обащать внимание на разделы "Remarks" (особенности использования) и "See Also" (альтернативные решения)

Следующая проблема заключается в том, что Вашу программу практически невозможно отлаживать! Впрочем, в большой степени - это проблема "процедурного" стиля программирования. Но надо же было предусмотреть возможность запуска программы в режиме отладки. Нельзя же после каждой проверки заново запускать среду FoxPro. Для проверки, как именно была запущена среда FoxPro, можно использовать, например, _VFP.StartMode или какой-либо другой способ.

Интерфейс программы, мяго говоря, далек от совершенства. Можно, конечно, списать это на личные вкусы и предпочтения. Но ведь Вы делаете программу не для себя, а для кого-то другого. Вы уверены, что ваши "фокусы" с интерфейсом "обрадуют" конечного пользователя? Подробно, о стиле пользовательского интерфеса можно почитать в книге на сайте

http://www.uibook1.ru/

Еще советовал бы почитать размещенные здесь статьи по FoxPro специально для начинающих:

http://www.foxclub.ru/kb/index.php?sid=45732&aktion=anzeigen&rubrik=004
...
Рейтинг: 0 / 0
24.05.2004, 10:00
    #32530037
malec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Фокс 8.0 с сервис паком 1. Потому и меню не открывается.

Только что пришёл на работу. Буду разбираться с твоими пожеланиями! Спасибо за помощь.
...
Рейтинг: 0 / 0
24.05.2004, 10:05
    #32530045
Grid.MouseDown
to malec

Возвращаю Ваш проект с исправлениями. Ошибка была в том, что Grid в форме frmaddrah блокировался в методе Click кнопки Command2 (Додати).
См. правку в mainprg.prg - используемый мною приём запуска приложения, а так же в TreeViewTovar.Expand и Command2.Click формы frmaddrah.
В объекты Grid.ColumnN.Text1 в метод RigthClick вставлен код вызова контекстного меню.

Успехов!!!
...
Рейтинг: 0 / 0
24.05.2004, 10:08
    #32530051
malec
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Для Вячеслава Клепинина.

Спасибо!!! Будем посмотреть!
...
Рейтинг: 0 / 0
24.05.2004, 10:19
    #32530083
FM32YO aka KID
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
2 ВладимирМ

если честно мне очень стыдно... но нельзя ли по-подробней о системе отладки программы... Вы имеете в виду вставлять в проблемных местах
AERROR + MESSAGEBOX с выводом возникших ошибок или нечто более сложное...
я, увы также ожибки нахожу именно запустив среду ВФП, что не есть хорошо...

2 Malec

Коллега и землак - приятно встретиться на далеком форуме.....
отзовись!
...
Рейтинг: 0 / 0
24.05.2004, 10:34
    #32530129
Grid.MouseDown
to ВладимирМ

Ну нельзя же так - сразу фэйсом об тэйбл. Ну учится человек - надо порадоваться этому!
Появится опыт - и GUI научится делать красивый. Тем более, если заказчики будут требовательные.
...
Рейтинг: 0 / 0
24.05.2004, 10:43
    #32530153
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Вообще-то, мне тоже было бы интересно послушать про методологические аспекты отладки в изложении ВладимираМ.
...
Рейтинг: 0 / 0
24.05.2004, 10:53
    #32530182
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
FM32YO aka KID
Все несколько проще. Как правило, в режиме отладки нужны несколько другие настройки. Вот в головном модуле и пишешь что-то вроде

IF _VFP.StartMode=0
* Запуск из среды FoxPro
ELSE
* Другой способ запуска (скорее всего EXE или APP)
ENDIF

Можно еще посмотреть расширение запущеной проги

IF PROGRAM(-1)=1 AND INLIST(UPPER(JustExt(SYS(16))),"EXE","APP")=.F.
* Если попали сюда - это значит, что данная программа запущена в режиме отладки
* т.е. как PRG или FXP. Значит, необходимо сделать кое-какие настройки
* Задание тестовых значений параметров для отладки
ELSE
ENDIF

Можно еще несколько вариантов такой проверки сделать.

Соответсвенно и настройки делаешь. Например, давать команду QUIT в режиме отладки - последнее дело. Что так и будешь перегружаться или комментарии ставить?

Ну, а на ошибке выскочит окно сообщения и можно сделать Suspend и перейти в окно Debugger, чтобы посмотреть в чем собственно ошибка.

Еще почитай описание о полезной команде ASSERT, факт работы которой определяется глобальной настройкой

SET ASSERT ON/OFF

Вячеслав Клепинин
Про GUI - это уже я "до кучи". Действительно, не принципиально. Пользователи и без меня от души "посоветуют"
...
Рейтинг: 0 / 0
24.05.2004, 11:21
    #32530260
FM32YO aka KID
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Grid.MouseDown
Спасибо! хотя я проверяю программы свои поблочно.. и, так как блоки часто независимы особых ожибок не вылазило... но все равно благодарен!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Grid.MouseDown / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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