Вернул назад, тк нашел некорректности в работе.
Этот топик читают: Гость
Разработчик
Ответов: 26148
Рейтинг: 2126
|
|||
карма: 22 |
|
Ответов: 2265
Рейтинг: 676
|
|||
nesco, смотри что нашел, может поможет. Тестирую на двух схемах из справки о MST_UseEditCtrl. Вот такой правкой (так для тестирования):
nesco писал(а): По крайней мере, в коде именно так -- выдает ячейку, по которой клацнули, а не которую редактировали. Так и в описании к точке написано -- выдает в поток содержимое текущей ячейки, а текущей ячейкой будет как раз та, по которой клацнули.Мне эти данные не нужны и не могу себе представить для чего они. Нужны данные до начала редактирования и в конце редактирования конкретно той ячейки которую редактируют сторонние контролы. До начала редактирования можно получить с Cell сохранив в Memory, а данные после редактирования можно получить с Memory перед внесением в ячейку doSetData. Как по мне то onEscCell должен выдавать данные после редактирования редактированной ячейки. Это будет полезно если нужно сравнить данные до редактирования и после. Зачем нужны данные новой выбранной ячейки не понятно. Вот такая схема нужна чтоб узнать нужно ли вносить данные в базу данных, если данные ячейки были изменены. И ложные срабатывания onEscCell вносят ненужные записи.
Еще думаю не помешало бы doStop что бы принудительно завершить редактирование и вызвать onEscCell. Редактировалось 2 раз(а), последний 2024-12-06 10:49:37 |
|||
карма: 11 |
|
Ответов: 793
Рейтинг: 168
|
|||
sla8a писал(а): Нужны данные до начала редактирования и в конце редактирования конкретно той ячейки которую редактируют сторонние контролы. До начала редактирования можно получить с Cell сохранив в Memory, а данные после редактирования можно получить с Memory перед внесением в ячейку doSetData.
Как по мне то onEscCell должен выдавать данные после редактирования редактированной ячейки. Это будет полезно если нужно сравнить данные до редактирования и после. Зачем нужны данные новой выбранной ячейки не понятно. Вот такая схема нужна чтоб узнать нужно ли вносить данные в базу данных, если данные ячейки были изменены. И ложные срабатывания onEscCell вносят ненужные записи. А почему для этих целей нельзя использовать точки onBeforeLineChange и onLineChange?
|
|||
карма: 16 |
|
Ответов: 2265
Рейтинг: 676
|
|||
Gunta, если речь о таком использовании, то не работает:
Если вопрос о том чтоб использовать эти события, то думаю что не нужно этого делать. Лучше чтоб MST_UseEditCtrl выдавал эти события, раз он ответственен за редактирование сторонними контролами. Редактировалось 2 раз(а), последний 2024-12-06 12:11:17 |
|||
карма: 11 |
|
Разработчик
Ответов: 26148
Рейтинг: 2126
|
|||
sla8a писал(а): Еще думаю не помешало бы doStop что бы принудительно завершить редактирование и вызвать onEscCellТак, это добавим, это мелочи. Я кое-чего с выдачей данных придумал, буду тестить. Хорошо, что ты накидал тестовую схему, не помешает протестировать на ней. |
|||
карма: 22 |
|
Ответов: 2265
Рейтинг: 676
|
|||
nesco, вот еще схема для наглядности и понимания вывода сообщений при потери фокуса у дополнительного контрола.
Если начать редактирование (вывести доп. контрол) и потерять фокус (нажать Tab к примеру), то должно произойти onEscCell причем только один раз. Узнает об этом MST_UseEditCtrl сам или ему помочь сделав doStop уже не так важно. Пользователь может сам настроить какие контролы пошлют события об окончании редактирования (потеря фокуса, нажатая кнопка, выбранный пункт). Еще заметил что хорошо бы перемещать ползунок и делать ячейку видимой по возможности. Можно увидеть начав редактирование столбца Описания. Ячейка в не зоне видимости, а размер ячейки выдается полностью. Редактировалось 2 раз(а), последний 2024-12-06 14:31:21 |
|||
карма: 11 |
|
Разработчик
Ответов: 26148
Рейтинг: 2126
|
|||
sla8a писал(а): Еще заметил что хорошо бы перемещать ползунок и делать ячейку видимой по возможности. Можно увидеть начав редактирование столбца Описания. Ячейка в не зоне видимости, а размер ячейки выдается полностьюНи хрена не понял, но очень интересно --- Добавлено в 2024-12-06 17:58:50 Хотя, понял, что имеется в виду. Ну, тут пока не знаю, как это привязать к коду. Думать надо, может че и получится. --- Добавлено в 2024-12-06 18:41:53 Кстати, есть нормальный компонент ChanelSwitch, нафига ты используешь дремучий набор компонентов для переключения? Редактировалось 2 раз(а), последний 2024-12-06 18:41:53 |
|||
карма: 22 |
|
Ответов: 2265
Рейтинг: 676
|
|||
nesco писал(а): Хотя, понял, что имеется в виду. Попробую поточнее объяснить, чтоб не возникло недопонимания. Если самая крайняя правая ячейка отображается на таблице не полностью (ширина всей таблицы меньше чем общая ширина всех колонок) и её начать редактировать, то хорошо бы чтоб ползунок по горизонтали сдвинул таблицу в то положение когда вся яцейка будет в виде ой области таблицы. Точно так же если сдвинуть ползунок в такое положение чтоб ячейка была частично скрыта слева. nesco писал(а): нафига ты используешь дремучий набор |
|||
карма: 11 |
|
Разработчик
Ответов: 26148
Рейтинг: 2126
|
|||
Я вот этого не понял
Это должно обрабатываться при doStop в MST_UseEditCtrl И если еще не закончено редактирование (было onEnterCell) Сделать onStop и после onEscCell --- Добавлено в 2024-12-07 03:19:17 sla8a писал(а): Точно так же если сдвинуть ползунок в такое положение чтоб ячейка была частично скрыта слеваЯ уже реализовал этот режим. Проблема будет только в принудительном изменении размера таблицы по ширине -- ячейка раздвинется, а вот контрол нет. Пока этот вопрос открыт. Редактировалось 1 раз(а), последний 2024-12-07 03:19:17 |
|||
карма: 22 |
|
Ответов: 2265
Рейтинг: 676
|
|||
nesco писал(а): Я вот этого не понял Если будет начато редактирование, контрол отобразится над ячейкой и получит фокус. Но нажав Tab или курсором ткнув в другой контрол на форме можно потерять фокус с контрола над ячейкой. Получается что редактирование закончено, но MST_UseEditCtrl не знает об этом и не выдаст сообщение onEscCell. Таблица уже потеряла фокус и отдала его контролу. И если продолжить работать с таблицей, то onEscCell отработает, но это может и не произойти. Конечно контрол может сам себя закрыть при потери фокуса, но MST_UseEditCtrl так и не узнает что редактирование закончено и событие onEscCell будет отложено и произойдёт точно не после закончания редактирования. |
|||
карма: 11 |
|
Разработчик
Ответов: 26148
Рейтинг: 2126
|
|||
??? Кто бы мне столько налил, что бы я это до конца понял
|
|||
карма: 22 |
|
Ответов: 2265
Рейтинг: 676
|
|||
Ну не умею я объяснять
|
|||
карма: 11 |
|
Разработчик
Ответов: 26148
Рейтинг: 2126
|
|||
Короче, пока некий висняк с решением. Вроде как работает твоя правка, но только в определенных случаях. Есть случаи, когда все начисто перестает работать. Попробую покопать дальше.
|
|||
карма: 22 |
|
Ответов: 2265
Рейтинг: 676
|
|||
nesco писал(а): Есть случаи, когда все начисто перестает работать. |
|||
карма: 11 |
|
Разработчик
Ответов: 26148
Рейтинг: 2126
|
|||
sla8a писал(а): Что это за случаи?Один из таких -- лажание мыши, откуда получается срабатывание входа через раз. И проверять надо на ячеестой структуре, те на самой сложной, а не на строковой, включая перемещение по ячейкам клавишами. Я вообще подумываю о смене алгоритма обработчика. |
|||
карма: 22 |
|