Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
| Atreides |
19.07.2012 11:44
Сообщение
#1
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: 0 |
Добрый день!
Нужно сравнить два ячейки в AdvStringGrid.Казалось, что может быть проще, но что-то у меня возникли трудности. Задача, есть две колонки в гриде "от" и "до". Пользователь может редактировать обе, но значения "до" не должно быть меньше "от" и соответственно "от" не должно превышать "до", строка значений "от" и "до" одинаковая, разница только в колонках. В итоге нельзя отпускать пользователя пока не введет корректно. Не удается привязать ни к одному событию, ибо если число многозначное условие срабатывает на первом символе и не дает ввести дальше. Есть еще варианты кроме просто сравнения? -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
| IUnknown |
19.07.2012 12:39
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата Казалось, что может быть проще Оказалось, что не казалось. Ничего проще в TAdvStringGrid-е быть действительно не может. У него есть событие OnEditCellDone, в котором можно проверять, какой именно столбец редактировался, сравнить данные с данными соседнего столбца, и, при необходимости, вернуть пользователя к редактированию через EditorMode = True |
| Atreides |
19.07.2012 12:56
Сообщение
#3
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: 0 |
Оказалось, что не казалось. Ничего проще в TAdvStringGrid-е быть действительно не может. У него есть событие OnEditCellDone, в котором можно проверять, какой именно столбец редактировался, сравнить данные с данными соседнего столбца, и, при необходимости, вернуть пользователя к редактированию через EditorMode = True Так, а можно немного подробней про EditorMode? Событие срабатывает только когда перескакиваю на другую ячейку (что логично), а вот как тогда остаться на той же в которой только что вводил? Значения второй колонки не могут быть больше значений значений третьей. Код procedure GridEditCellDone(Sender: TObject; ACol, ARow: Integer); begin Grid.EditorMode := False; if Grid.Cells[3,ARow] < Grid.Cells[2,ARow] then ShowMessage('Повторите ввод'); Grid.EditorMode := True; end; Типа как то так? -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
Atreides Сравнение в AdvStringGrid 19.07.2012 11:44
IUnknown У меня в Дельфи нет этого компонента, есть в Билде... 19.07.2012 13:05
Atreides Не владею С, вот попробовал. Вроде верно отрабатыв... 19.07.2012 13:23
IUnknown Установи активной ячейкой ту, которая была изначал... 19.07.2012 13:49
Atreides Я так догадываюсь, что он должен войти в режим вво... 19.07.2012 13:54
TarasBer > // В Дельфи можешь выделить это во вложенную ... 19.07.2012 15:13
IUnknown TarasBer, ты на самом деле думаешь, что Билдер (лю... 19.07.2012 16:09
TarasBer
[b]TarasBer, ты на самом деле думаешь, что Билдер... 20.07.2012 11:58
Гость Работает! Огромное спасибо!
Вопрос не в ... 19.07.2012 17:36
IUnknown // CanSelect := not (ACol in [0, 19]);
CanSe... 19.07.2012 17:56
Гость Все нравится! Огромное спасибо! 19.07.2012 20:04
Atreides Есть ли возможность запретить ввод с клавиатуры в ... 20.07.2012 10:30
IUnknown В событии AdvStringGrid1GetEditorType для тех стол... 20.07.2012 11:04![]() ![]() |
|
Текстовая версия | 8.12.2025 10:38 |