powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Memo - поле в гриде
25 сообщений из 30, страница 1 из 2
Memo - поле в гриде
    #39097252
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем дня!

Существует форма frm2, открытая в форме верхнего уровня frm1, в frm1 также существует тулбар с кнопками навигации и управления, в частности, открывающие для редактирования и сохраняющие изменения при редактировании в форме frm2.

На форме frm2 существует grid, с помощью которого редактируется таблица, одно из полей которой - мемо-поле. Очень часто возникает ситуация, когда пользователь двойным кликом раскрывает мемо-поле, редактирует его, а затем не закрыв сразу жмет кнопку на тулбаре, что вызывает сразу же дебаггер и множество судорожных кликов куда попало и приводит к таск-манагеру.

Подскажите, как правильно разрешить такую проблему?
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39097539
Penner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. отказаться от стандартного редактирования и сделать свое
2. у пользивателя НИКОГДА не должен выскакивать DEBUG
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39097556
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Penner1. отказаться от стандартного редактирования и сделать свое
2. у пользивателя НИКОГДА не должен выскакивать DEBUG

Привет,

Сразу поясню, что мой уровень очень низкий, я можно сказать, иду на ощупь.

1. Редактирование и есть мое. Кнопки тулбара отправляют на методы активной формы. Формы моего приложения нельзя сделать на весь экран в силу некоторых причин. Поэтому бывает такая ситуация, когда пользователь щелкает мышью вне формы, где-то на форме верхнего уровня Frm1, тогда нужная форма, назовем ее Frm2, становится неактивна, и нажатие кнопок тулбара к к нужным эффектам не ведет.
Что бы избежать этого я придумал такую проверку для кнопки SAVE:

Код: sql
1.
2.
3.
4.
5.
6.
IF _screen.ActiveForm.hWnd=form1.hWnd && Фокус ушел на форму верхнего уровня
	MESSAGEBOX('Ни одно окно не активно! Выберите нужное окно!',48,'ВНИМАНИЕ!',6000)
	RETURN
ELSE
_screen.ActiveForm.Save()
ENDIF



Однако столкнулся с тем, что при редактировании мемо-поля пользователь не закрывает его, а сразу жмет на save, что приводит к появлению дебагера с ошибкой "Свойство hWnd не найдено".

2. Тут я категорически согласен, почитал про обработчик ошибок, что-то такое наваял и загнал туда ошибку 1743 с дополнительным комментом "Возможно не закрыто мемо-поле". Теперь дебаггер не появляется, а только мое окошко, но вопрос остался открытым.

Может можно как-то придумать, что-бы предотвратить любую возможность пользователя выйти куда-либо за пределы мемо-поля, пока оно развернуто?
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39097607
Penner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
редактировании мемо-поля тоже должно быть свое
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39097836
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pennerредактировании мемо-поля тоже должно быть свое

Каким образом? Можно как-то развернуть ответ ?
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39097842
Penner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Modal Form + Memoedit + 2 Button
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39098328
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PennerModal Form + Memoedit + 2 Button

Если речь идет о том, что бы всю форму сделать модальной, так это не очень желательное решение.

Нет ли другого способа?
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39098847
BearS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1.Обычная форма, не обязательно модальная
2. В форме объект Grid, можно ReadOnly...
3. В этой же форме EditMemo, при перемещении в гриде Memo поле изменяется
4. Способы редактирования - их много, как вариант вызов еще одной формы с нужными полями для редактирования...
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39099335
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BearS1.Обычная форма, не обязательно модальная
2. В форме объект Grid, можно ReadOnly...
3. В этой же форме EditMemo, при перемещении в гриде Memo поле изменяется
4. Способы редактирования - их много, как вариант вызов еще одной формы с нужными полями для редактирования...


Добрый день,

так мемо-поле в гриде, они одновременно редактируются, если ReadOnly - то как же тогда?

Что такое EditMemo? Не нашел в хелпе
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39099345
Edit Box
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39099471
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BearS, Penner, Ffffffffffffffffffffffff

Господа, спасибо за подсказки и терпение, немного почитаю и попробую разобраться с Edit Box.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39100084
BearS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitryKn,
одна из многих концепций работы с данными таблиц(ы), есть и другие подходы, может быть такой:
- есть форма, на ней грид только для чтения для защиты от случайного редактирования.
при этом грид может и не отображать все поля таблицы, коих может быть очень много и в гриде их редактировать не очень удобно...
- при вызове режима редактирования, способов много, горячая клавиша, кнопка, тулбар вызывается форма редактирования и в ней все необходимые поля и контролы для редактирования. эта же форма используется и для добавления новой записи. у нее два режима ввод и редактирование. при редактировании форма запоминает номер записи или id записи.
editbox для мемо поля в вызываемой форме.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39100311
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BearSDmitryKn,
одна из многих концепций работы с данными таблиц(ы), есть и другие подходы, может быть такой:
- есть форма, на ней грид только для чтения для защиты от случайного редактирования.
при этом грид может и не отображать все поля таблицы, коих может быть очень много и в гриде их редактировать не очень удобно...
- при вызове режима редактирования, способов много, горячая клавиша, кнопка, тулбар вызывается форма редактирования и в ней все необходимые поля и контролы для редактирования. эта же форма используется и для добавления новой записи. у нее два режима ввод и редактирование. при редактировании форма запоминает номер записи или id записи.
editbox для мемо поля в вызываемой форме.

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

Editor, вызываемый двойным кликом по мемо-поле - устраивает более чем, единственное, что хотелось бы сделать - это что бы в режиме редактирования он приобретал бы что-то вроде модальной формы, т.е. пока он открыт пользователь никуда попасть вообще не может, пока не закроет. Настроек этого Editora я не нашел, сейчас смотрю на editbox в том плане, что если двойной клик на ячейке грида, то должен открыться editbox, возможно окошко ему какое-то сделать, пока еще нет решения.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39100791
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKnEditor, вызываемый двойным кликом по мемо-поле - устраивает более чем, единственное, что хотелось бы сделать - это что бы в режиме редактирования он приобретал бы что-то вроде модальной формы, т.е. пока он открыт пользователь никуда попасть вообще не может, пока не закроет. Настроек этого Editora я не нашел, сейчас смотрю на editbox в том плане, что если двойной клик на ячейке грида, то должен открыться editbox, возможно окошко ему какое-то сделать, пока еще нет решения.
Есть устаревшая настройка

SET WINDOW OF MEMO TO [<окно>]

Команда указывает <окно>, которое можно использовать по умолчанию для редактирования мемо-поля в командах APPEND, BROWSE, CHANGE, EDIT, GET/READ или MODIFY MEMO. Ввод команды без параметра <окно> отменяет назначение

В том числе, эта настройка будет работать и для Grid. Т.е. указанное "окно" - это и есть тот самый "Editor"

Обычно "окно" задается через команду DEFINE WINDOW, хотя можно приспособить и модальную форму. Однако лучше сделать по другому.

Справа от Grid расположи один объект EditBox, куда и выводи содержимое мемо текущей записи. Просто в качестве ControlSource укажи нужное memo-поле.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39101147
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЕсть устаревшая настройка

SET WINDOW OF MEMO TO [<окно>]

Команда указывает <окно>, которое можно использовать по умолчанию для редактирования мемо-поля в командах APPEND, BROWSE, CHANGE, EDIT, GET/READ или MODIFY MEMO. Ввод команды без параметра <окно> отменяет назначение

В том числе, эта настройка будет работать и для Grid. Т.е. указанное "окно" - это и есть тот самый "Editor"


Задавать и настраивать окна для мемо с большего освоил, но модальными так и не сделал, т.е. задачу свою не решил, к сожалению.

Обычно "окно" задается через команду DEFINE WINDOW, хотя можно приспособить и модальную форму. Однако лучше сделать по другому.


А как приспособить модальную форму? Очень было бы правильно
Справа от Grid расположи один объект EditBox, куда и выводи содержимое мемо текущей записи. Просто в качестве ControlSource укажи нужное memo-поле.

К сожалению, места нет на форме уже, куда бы еще довольно крупный editbox воткнуть, почти всю форму грид занимает.


Владимир, спасибо большое, я по крайней мере освоил как описывать и запускать окна для мемо, уже есть какой-то результат ))

Там с помощью параметра NAME можно задавать окну свойства как объекту, т.е. форме, описание окна я положил в Init формы, в которой грид.
Однако получается так, что пока само мемо-поле в состоянии ReadOnly , то изменить WindowType на 1 (modal) я не могу - поскольку readonly, а модальность нужна всегда, и когда readonly, и когда нет.

В любом случае, если ничего не придумаю, уже можно сделать проверку на наличие окна и вывести сообщение пользователю.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39101431
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKn,

По ссылке пример, на дочерней форме вместо textBox-a положи EditBox.

Как правильно обновить форму?
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39102321
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWistDmitryKn,

По ссылке пример, на дочерней форме вместо textBox-a положи EditBox.

Как правильно обновить форму?

Привет, спасибо за полезную ссылку, много интересного открыл )

Однако столкнулся опять с трудностями. Не могу вызвать форму. Вызов по моему плану должен был происходить из DbClick текстбокса грида, как сразу, так и через пользовательский метод на форме, все одно никак. Поле - мемо, и видимо встроенные процедуры перехватывают и открывают editor VFP.

Заменил в гриде в колонке с мемо-полем textbox на editbox, в этом случае editor не появлялся, но и форма не вызывается. Пытался по DbClick изменить размеры и параметры editbox - тоже ничего.

Пытался по совету Владимира М задать окно - очень все красиво получается, только не могу его модальным сделать.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39102356
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitryKn...
Однако столкнулся опять с трудностями. Не могу вызвать форму...


Вообще-то могу. Прошу меня извинить, я просто не проставил In-toplevel-form, она отлично вызывается и модальна, по сути все прекрасно работает, спасибо PaulWist за ссылку с примером.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39103461
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Все у меня работает, только не дает покоя один вопрос. Я взял и подставил из примера код, да только не понимаю, что в нем.

Из моей формы с гридом frm2 вызывается форма, назовем ее frmEditor, с editbox - ом.
Вызов:
Код: sql
1.
DO FORM editor NAME frmeditor WITH this



А в Init дочерней формы :
Код: sql
1.
2.
LPARAMETERS loform
thisform.AddProperty('ParentForm',loform)



Это все работает, только смысл последнего кода для меня закрыт. Просто из любви к искусству, может поясните, как и чего работает в нем и где про это читать?
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39103519
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще вопрос по мемо-полю в гриде.

Теперь у меня в гриде в колонке с мемо-полем встроен editbox вместо текстбокса. Возник такой эффект, когда был встроен текстбокс пользоатель мог перемещать курсор в одной строке по ячейкам грида при нажатии клавиш tab, enter и стрелки. После замены на editbox "залипает" в ячейке с мемо, выйти из нее возможно только с помощью tab или уже кликом мыши на другой ячейке.

Как вернуть, что бы клавиши работали как раньше и сохранить editbox в гриде ?
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39105399
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitryKn,
Вообще убери из грида Мемо поле, оно все равно не видно в таблице. На форму помести кнопку, например "Ред. Прим." с вызовом другой модальной формы в которой редактируется текст примечания, и по кнопке "Сохранить" переставляешь ALIAS на таблицу c твоим memo и Repla- сишь текст в него.

То есть в новой модальной форме будет обычный editBox и кнопка сохранить со свойством terminate или ThisForm.Release в Valid
Плюс в том же Valid ставишь

sele XXX - (твоя таблица)
Replace YYY with This.Value (присваеиваем значение из editBox в твое поле)

Если же юзер нажмет крестик на окне , то значение не сохраняется. Так даже лучше.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39105510
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DMITRY_PEREDISTYDmitryKn,
Вообще убери из грида Мемо поле, оно все равно не видно в таблице. На форму помести кнопку, например "Ред. Прим." с вызовом другой модальной формы в которой редактируется текст примечания, и по кнопке "Сохранить" переставляешь ALIAS на таблицу c твоим memo и Repla- сишь текст в него.

То есть в новой модальной форме будет обычный editBox и кнопка сохранить со свойством terminate или ThisForm.Release в Valid
Плюс в том же Valid ставишь

sele XXX - (твоя таблица)
Replace YYY with This.Value (присваеиваем значение из editBox в твое поле)

Если же юзер нажмет крестик на окне , то значение не сохраняется. Так даже лучше.

Добрый день, тезка )

так нет, конечно же, мемо-поля в гриде, просто мемо-поле controlsourse колонки грида, и в нем , в гриде , editbox вместо текстбокса, но ввод-чтение содержимого мемо-поля происходит, как ты и советуешь, и коллеги ранее, в отдельной модальной форме с еще одним editbox-ом. Тут уже вопросов не возникает.

Другое дело, что пришлось в гриде заменить textbox на editbox, что бы корректно вызывалась модальная форма, если вызывать ее из текстбокса, то одновременно с ней вызывается и editor, т.е. встроенное окошко мемо-поля VFP. Теперь в гриде едитбокс, но при прохождении курсора по строке грида с помощью стрелок или enter, он на этом едитбоксе "залипает", видимо, из-за свойств самого едитбокса, только tab дает возможность перемещения. Т.е. при если курсор попал на это поле, то с помощью стрелок нельзя перейти ни на строки выше-ниже, ни на ячейки влево-вправо. А прописывать активацию соседних ячеек по keypress - громоздко и не очень правильно, имхо, должна быть какое-то иное решение, настройка там, или что-то еще, просто я не в курсе и нарыть не могу.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39105558
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрать столбец с мемо-полем из грида ваще. Если хочется все таки что-то показывать пользователю добавить столбец с вычисляемым полм с, например - Left(myMemo,250), и стандартным текстбоксом
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39105634
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BurnУбрать столбец с мемо-полем из грида ваще. Если хочется все таки что-то показывать пользователю добавить столбец с вычисляемым полм с, например - Left(myMemo,250), и стандартным текстбоксом

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

стандартный текстбокс приводит к одновременному вызову окошка Editor VFP и моей модальной формы. А вот едитбокс - вызывает форму нормально, но не удобная навигация.

Может, можно вызов стандартного окошка Editor как-то отключить? Тогда текстбокс вернуть можно, в остальном он устраивает более чем.
...
Рейтинг: 0 / 0
Memo - поле в гриде
    #39106087
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Может, можно вызов стандартного окошка Editor как-то отключить? Тогда текстбокс вернуть можно, в остальном он устраивает более чем.
Обрабатываете коды нажатых кнопок самостоятельно.

Но ващето Владимир уже указал правильное решение:
Однако лучше сделать по другому. Справа от Grid расположи один объект EditBox, куда и выводи содержимое мемо текущей записи. Просто в качестве ControlSource укажи нужное memo-поле.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Memo - поле в гриде
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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