|
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
|
||||||
Delphi 6-7 Заполнение ячеек в StringGrid07.07.2021, 23:53. Показов 6433. Ответов 33
Добрый день. Я в программировании новичок и в последний раз пользовался delphi 7 лет 7-8 назад, а сейчас захотелось для себя написать небольшую программку, но столкнулся с проблемами с заполнением ячеек в StringGrid.
Я написал простой калькулятор где по нажатию кнопки осуществляется подсчёт в блоках Edit(1-3) и всё прекрасно работает. Но я захотел, чтобы можно было посмотреть подробную информацию по этим расчётам. Сначала думал выводить таблицу в какой-нибудь Memo, но потом нашёл уже готовую таблицу StringGrid и решил выводить данные в неё, т.к. это показалось удобным. На скриншоте "Главное окно" показываю что получилось на данном этапе. Так вот, я не могу вспомнить или найти как написать несколько заполнений массива : 1) Простой массив с шагом 10. Т.е. должно выйти 10, 20, 30, 40 и тд до 10000 (колонка Количество акций) 2) Массив в котором бы ячейки заполнялись в результате операций между ячейками (колонка Доход за дивы и колонка Расходы на акции) 3) Выбор из массива числа по условию. Например ставлю в ячейку "Цель" 1000 а в ячейке "Достижение цели" должно выдать число из колонки "Расходы на акции" которое соответствует строке в колонке "доход за дивы") в данном примере выдаст 15000 Для понимания на скриншоте "Пример ексель" показано, что я хочу получить в итоге. Это основные проблемы с которыми я столкнулся, потратил 2 дня, чтобы найти их решение в похожих примерах, но к сожалению не смог. Поэтому обращаюсь за помощью сюда. Помогите написать код для заполнения этой таблицы. P.S. Есть ещё маленькие вопросы по самой таблице StringGrid: 1) почему-то её заполнение работает только если я код пишу в процедуре этой таблице. При попытке внести код в процедуру кнопки "Расчёт" просто выдаёт разные ошибки... Если бы получилось все расчёты завязать на эту кнопку, было бы прекрасно. 2) Сейчас у меня заполнение ячеек прописаны в процедуре этой таблице. И вывод данных происходит по нажатию на любую ячейку почему-то. Это такая фича или просто я не прописал что-то, чтобы хотя-бы шапка была написана всегда, а не после нажатия по ячейке? P.S.S. Прикладываю код программы, который работает на данном этапе и на всякий случай сами файлы.
0
|
||||||
| 07.07.2021, 23:53 | |
|
Ответы с готовыми решениями:
33
Заполнение ячеек StringGrid содержимым текстового файла Анимированное заполнение ячеек таблицы StringGrid разными способами |
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
|
|
| 11.07.2021, 09:18 | |
|
Я тоже не совсем понял, что и как там выбирать, потому и ничего не написал в ответ.
KiofST, можно в последнем сообщении написать, какая проблема ещё не решена, чтобы не искать по всей теме.
0
|
|
|
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
|
|
| 11.07.2021, 10:26 | |
Сообщение было отмечено KiofST как решение
Решение
Тут, IMHO, нужно немного изменить логику вывод результатов.
Не стоит городить вывод всей таблицы (а вдруг мне приспичило посмотреть стоимость 1000000 акций). Т.к. расчёты достаточно простые, можно поступить так: - ввести переменную диапазона просмотра (сколько строчек до цели и сколько после). Например при значении 3 будет выведено семь строк таблицы, где центральная строка и будет целью; - с учётом дискретного количества акций находим номер итерации: пока кол-во акций <= цели, добавляем то значение шага акций, которое указали. В итоге получим то ближайшее значение акций, которое не меньше цели. - от номера итерации отнимает значение диапазона и далее в цикле заполняем ячейки таблицы. Заполнение шапки лучше всего перенести в обработчик создания формы TForm1.OnCreate.
1
|
|
|
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
|
|
| 11.07.2021, 12:37 | |
Сообщение было отмечено KiofST как решение
Решение
Это работает так:
1
|
|
|
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
|
||
| 14.07.2021, 00:09 [ТС] | ||
|
Добавлено через 1 час 14 минут
Это действительно интересный способ решений! Я не знал, что можно реализовать с таким выбором, поэтому и хотел чтобы вся таблица была видна. Такой способ намного лучше, спасибо за помощь!
0
|
||
|
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
|
|||||||
| 14.07.2021, 13:03 [ТС] | |||||||
|
Сделал 3 скриншота с одинаковыми данными, кроме кол-ва акций для наглядности 1) Когда мы задаём значение в ячейку "Кол-во акций", то программа воспринимает это как шаг. И поэтому разброс получается слишком большой. Например я бы хотел купить 300 акций, но возможно +\- 50. Т.е. 250-350 акций. И хотелось бы визуально посмотреть на значения при таких количествах. Но из-за того, что программа считает кол-во как шаг, то я увижу 300, 600, 900 и тд. 2) Из-за того, что программа считает кол-во акций за шаг мы сталкиваемся с другой проблемой - не точный подсчёт "Достижение цели". Обратите внимание на скриншоты. На снимке 1 видно, что при таком расчёте программа считает, что 600 акций это минимальное необходимое. Но если уменьшить шаг как на снимках 2 и 3, то будет видно, что было бы достаточно и 360 акций всего. Может стоит добавить, в таком случае, ещё ячейку в которой можно было бы задать шаг? Например Шаг - 10. И он выдаст в таблице в колонке "Кол-во акций" 300 310 320 330. По сути всё останется также, просто шаг он будет брать не из количества. Отобразил ячейки в Снимке 5. Это точно решило бы первую проблему и кажется решает вторую тоже. Если посмотреть на снимок 4 (ексель), то видно что с шагом 10 он отобразит более точно. А Ваша идея с диапазоном отрежет всё лишнее от таблицы. Могу ли я Вас попросить написать этот блок с шагом? P.S. немного изменил Ваш код. Добавил сообщение об ошибки, при незаполненных ячейках и перенёс все элементы на Panel. Прикладываю код программы:
0
|
|||||||
|
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
|
|
| 14.07.2021, 13:31 | |
|
Всё правильно. Я так и рассчитывал алгоритм, что поле
Количество акций - это шаг таблицы (а не цель). В таблице как раз и выводится найденное расчёта по запросу в колонке Количество акций.
0
|
|
|
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
|
|||
| 14.07.2021, 14:14 [ТС] | |||
|
На снимке 1 видно, что при таком расчёте программа считает, что 90000 расход на акции это минимальное необходимое. Но если уменьшить шаг как на снимках 2 и 3, то будет видно, что было бы достаточно всего 54000 расхода на акций. Мне просто кажется, что задавать шаг таблицы через кол-во акций это не совсем корректно и я выше описывал почему. При таком расчёте отображается не истинные и очень грубые значения. Поэтому я и предлагаю добавить ячейку с возможностью выбора шага. И прошу Вас помочь с этим )
0
|
|||
|
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
|
| 14.07.2021, 16:02 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
|
||
| 14.07.2021, 17:00 [ТС] | ||
|
А максимальное количество акций лишнее. Лучше как предлагал товарищ roach1967 сделать диапазон просмотра.
0
|
||
|
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
|
|
| 14.07.2021, 17:37 | |
|
Вот ввёл все возможные обработчики для полей.
При двойном клике на таблице меняется цель. Так-же при вводе в поле Количество акций автоматически делается перерасчёт затрат/прибыли. При нажатии Enter рассчитывается новая в соответствии с заданными параметрами. В принципе, по всей программе расставил пояснения. --- Ну и небольшие косметические улучшения...
1
|
|
|
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
|
||
| 14.07.2021, 20:02 [ТС] | ||
|
Воу! Это прям великолепно выполнено... Единственное что, я заметил 2 небольших минуса, но они не критичные в целом. 1) Если мы задаём значения в ячейках как представлено на Снимке 1, то мы не сможем сделать расчёт, потому что нужно ввести обязательно "Цель", потом нажимаем кнопку расчёта и получаем результат как на Снимке 2. Это вызвано тем, что программа приоритетнее считает "Цель". И это логично и правильно, так оно и должно по идеи работать. Но получается, чтобы посмотреть диапазон вокруг нужного кол-ва акций, придётся писать в ячейку "Цель" приближенные значения к "доход за дивиденды". Как показано на Снимке 3. Было бы удобнее, если бы ячейка "Цель" была бы пустая(так наверное нельзя...) или хотя-бы равна 0, то в таблице бы отображался диапазон вокруг кол-ва акций. Визуально это выглядело бы как на Снимке 4 2)Вторая более мелкая деталь. Я в первом пункте написал, что придётся писать в ячейку "Цель" приближенные значения к "доход за дивиденды". Дело в том, что если написать ровно тоже самое число, то оно его перескакивает и идёт к следующему. Если при кол-ве 100 акций задать "Цель" = 384, а не 383 то выдаст результат как на Снимке 5. Я так полагаю где-то в Условии прописано "Если число меньше, тогда.. ", корректнее было бы наверно написать "Если число меньше или равно, тогда.. " _________________ Но как я и сказал, это всё в целом мелочи и работа выполнена прям очень сильно. Но если можно как-то эти мелочи подправить, то было бы здорово )
0
|
||
| 14.07.2021, 20:32 | |
|
Не по теме: Согласно орфографической норме русского языка правильно писать дивиденДы
0
|
|
|
985 / 465 / 234
Регистрация: 27.06.2014
Сообщений: 1,039
|
||||||
| 15.07.2021, 03:52 | ||||||
|
Ну почему-же, если ввести количество акций и нажать Enter, то автоматом рассчитается цель, даже если поле было пустым, то оно заполнится и будет заполнена таблица.
Добавлено через 10 минут А по поводу перескакивания, это происходит, видимо из-за округления. Можно заменить проверку итераций таким образом:
1
|
||||||
|
0 / 0 / 0
Регистрация: 01.07.2014
Сообщений: 61
|
|||
| 15.07.2021, 10:42 [ТС] | |||
|
0
|
|||
| 15.07.2021, 10:42 | |
|
StringGrid Цвет фона пустых ячеек и ячеек с текстом Отрисовка ячеек StringGrid Сложение ячеек в StringGrid Закрашивание ячеек StringGrid
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|