|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
|
Переключение между ячейками TStringGrid по нажатию Enter17.12.2015, 12:57. Показов 2549. Ответов 13
Метки нет (Все метки)
Здравствуйте. Есть динамически создаваемые таблицы. Нужно сделать так, чтобы при вводе данных в ячейке любой из таблиц по нажатию Enter открывалось окно редактирования нижележащей ячейки (как в Excel). Мелочь, да, но это сильно повышает удобство пользования программой.
Так как таблицы динамические, видимо, нужно написать динамическое событие и подключать к нему вновь создаваемые таблицы. Алгоритм примерно следующий: 1. Проверить, какая клавиша была нажата (if (key==VK_Resume)); 2. Отследить, в какой таблице и в какой ячейке произошло событие (возможно, через TStringGrid(*Sender), ACol и ARow); 3. Закрыть окно редактирования текущей ячейки; 4. Переместить фокус на нижележащую ячейку; 5. Открыть окно редактирования выделенной ячейки. Только вот, как реализовать такой алгоритм - ума не приложу. И, главное, как такое событие создать? Через OnKeyPress? Помогите, пожалуйста!
0
|
|
| 17.12.2015, 12:57 | |
|
Ответы с готовыми решениями:
13
DataGridView переключение между ячейками при нажатии Enter в режиме редактирования
|
|
Супер-модератор
|
||||||
| 17.12.2015, 13:55 | ||||||
|
Не заморачивайся с созданием событий на каждый динамический компонент. Создай перехватчик, который
для всех возможных гридов, как бы они не были созданы, подменит функционал автоматически:
1
|
||||||
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
||||||
| 18.12.2015, 00:58 [ТС] | ||||||
|
Спасибо большое, volvo! Код заработал, очень красиво всё получилось. Но не без нюансов.
Как и ожидалось, Builder 6 твой код не переварил.
Погоревал, попечалился и пошёл ставить что-то поновее. В Rad Studio 10 их Builder мой проект вообще открывать отказался. Удалил его. Потом пошёл поставил XE2. Худо-бедно что-то открылось. Но теперь программа работает слегка по-другому. Раньше у меня шапка таблицы заполнялась в конструкторе формы, а выравнивание текста в ячейке было в OnDrawCell. Теперь же, в XE2, текст не выравнивается. Точнее выравнивается, но в ячейке остаются два текста: как был и выравненный .Не подскажешь напоследок, как это побороть?
0
|
||||||
|
Супер-модератор
|
|||||||
| 18.12.2015, 01:19 | |||||||
мне или тебе нужно вообще?
1
|
|||||||
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
||||||
| 18.12.2015, 10:44 [ТС] | ||||||
|
Хорошо, давай по порядку
1. Я решаю актуальную производственную задачу. По своей инициативе и в индивидуальном порядке Но это только пока. Если же что-то выстрелит... 2. Почему я этим занимаюсь. Тупо время есть, со старой работы уволился, на новую пока что не устроился. Есть знания, представление о проблемах отрасли, готовая рабочая программа в Excel, но кому он сдался. 3. Ты меня сильно выручаешь. Хочешь, задоначу тебе что-нибудь. Пиши в личку. Теперь, что касается данной темы. Договоримся, что речь идёт о Builder 6. Есть у меня 2 модуля программы. Один со статикой, в нём твой код отлично заработал. Во втором модуле, где таблицы динамические (про который я и писал в этой теме), компилятор выдаёт ошибку в обработчике события, где создаётся новая таблица.
В приложении в письму - модуль с динамикой, как он есть, рабочий. Пока что без твоего кода. В этом примере, кстати, выпадающие списки реализованы через ComboBox.
0
|
||||||
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
|
| 18.12.2015, 21:35 [ТС] | |
|
Слушай, это просто праздник какой-то! Да, всё отлично работает.
Получается, ты все эти функции переносишь в описание класса, чтобы не думать, когда и как их вызывать. Это, наверное, сейчас так принято, хороший тон в программировании. Я когда-то давно посещал курсы по C++, тогда всё было слегка по-другому. И ещё, с 6 Builder'ом пора завязывать, перехожу на XE2. Спасибо тебе большое! Пойду изучать твой код, хочу перенять стиль.Кликните здесь для просмотра всего текста
Там есть только одна помарка. При создании новой таблицы на форме не появляется полоса прокрутки. Лечится установкой свойства формы AutoScroll->True
Кликните здесь для просмотра всего текста
Странно, скачал твой архив, а просмотров - 0
0
|
|
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
||||||
| 19.12.2015, 17:16 [ТС] | ||||||
|
volvo, здравствуй! В продолжение этой темы хочу ещё кое-что спросить. Я взялся переделывать другой модуль программы с использованием твоего кода под Builder XE2. Вроде бы всё корректно перенёс, но почему-то вылетает ошибка в .h файле в твоём коде обработчика DrawCell. Будь так любезен, посмотри.
.h файл - 130 строка
[BCC32 Error] Unit1.h(130): E2342 Type mismatch in parameter 'lpchText' (wanted 'const char *', got 'wchar_t *') К сообщению прилагается два проекта: Data_old - это рабочий, как он был на Builder 6 Data - это новый на XE2, тот, который с ошибками.
0
|
||||||
|
Супер-модератор
|
||||||
| 19.12.2015, 18:07 | ||||||
Project->Options, на закладке Directories and Conditionals переключить _TCHAR maps to в позицию wchar_t. Там же в строке Conditional defines добавить STRICT (иначе линкер начнет вякать на отсутствие реализации PaintWindow). Ну, и. наконец, привести главный файл проекта в соответствие настройкам юникодности: Project->View source исправить в двух местах:
1
|
||||||
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
|
| 19.12.2015, 18:16 [ТС] | |
|
Спасибо! Заработало!
0
|
|
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
|
| 21.12.2015, 16:29 [ТС] | |
|
volvo, здравствуй. Не подскажешь ещё кое-что?
Смотри, мне нужно, чтобы на форме DataInput в таблице (столбец "Колонка №") был динамический выпадающий список, значения которого формируются в зависимости от количества таблиц на форме Geology. К примеру, на форме Geology есть 3 таблицы, тогда в выпадающем списке присутствуют значения "1,2,3" - порядковые номера. Добавили ещё таблицу - стало 1,2,3,4. Скажи, это вообще реально сделать? Или проще оставить костыли типа выпадающего списка с заведомо большим количеством значений (как оно сейчас есть)? К сообщению прилагается проект, в котором задействованы обе формы. Все изменения конструктора класса TStringGrid перенесены в DataUnit.h.
0
|
|
|
Супер-модератор
|
||||||||||||||||||||||
| 21.12.2015, 18:16 | ||||||||||||||||||||||
![]() 1) в DataUnit.h добавляем
1
|
||||||||||||||||||||||
|
1 / 1 / 2
Регистрация: 08.12.2015
Сообщений: 24
|
|
| 21.12.2015, 19:22 [ТС] | |
|
Ого, какое простое и изящное решение! Из файла проекта через заранее объявленную функцию передать значение счётчика в конструктор класса... Не думал, что такое вообще возможно.
Однако же, всё работает!Спасибо тебе огромное!
0
|
|
|
Супер-модератор
|
||
| 21.12.2015, 19:36 | ||
|
0
|
||
| 21.12.2015, 19:36 | |
|
Помогаю со студенческими работами здесь
14
Переход курсора между Edit по нажатию Enter
Передать фокус на TStringGrid по нажатию кнопки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|