![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Atreides |
![]()
Сообщение
#1
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Добрый день!
Нужно сравнить два ячейки в AdvStringGrid.Казалось, что может быть проще, но что-то у меня возникли трудности. Задача, есть две колонки в гриде "от" и "до". Пользователь может редактировать обе, но значения "до" не должно быть меньше "от" и соответственно "от" не должно превышать "до", строка значений "от" и "до" одинаковая, разница только в колонках. В итоге нельзя отпускать пользователя пока не введет корректно. Не удается привязать ни к одному событию, ибо если число многозначное условие срабатывает на первом символе и не дает ввести дальше. Есть еще варианты кроме просто сравнения? -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Казалось, что может быть проще Оказалось, что не казалось. Ничего проще в TAdvStringGrid-е быть действительно не может. У него есть событие OnEditCellDone, в котором можно проверять, какой именно столбец редактировался, сравнить данные с данными соседнего столбца, и, при необходимости, вернуть пользователя к редактированию через EditorMode = True |
Atreides |
![]()
Сообщение
#3
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Оказалось, что не казалось. Ничего проще в 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; Типа как то так? -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
![]() |
Текстовая версия | 11.08.2025 19:32 |