Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255

Загрузка базы из текстового файла в StringGrid с возможностью выбора

20.05.2020, 14:25. Показов 5283. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется вот такая программа в которой есть StringGrid со столбцами «буквы» и «цифры».
В папке с программой в папке db есть файл текстовой базы db.txt, он имеет такую же структуру — столбец «буквы» и столбец «цифры».

Необходимо сделать так чтобы при нажатии на любую ячейку столбца «буквы» появлялся выпадающий список и в нем отображались данные из столбца «буквы» файла db.txt. После того как значение в выпадающем списке выбрано в ячейке этой строки в столбце «цифры» должно появиться значение для этой ячейки из файла db.txt.

Как это сделать?
Миниатюры
Загрузка базы из текстового файла в StringGrid с возможностью выбора  
Вложения
Тип файла: 7z пример.7z (3.66 Мб, 9 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2020, 14:25
Ответы с готовыми решениями:

Шифрование текста c возможностью выбора любого текстового файла
Система шифрования текста. Для шифрования использовать метод подстановки, заключающийся в замене одних букв алфавита на другие, простейший...

Загрузка данных из файла с возможностью выбора файла
Всем доброго времени суток. У меня возник такой вопрос как организовать выбор файла с данными на языке СИ, пришла мысль в голову, что можно...

Загрузка из текстового файла в StringGrid
доброго времени суток! помогите пожалуйста новичку с решением задачи. задача такова: имеются StringGrid и текстовый файл следующего...

36
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
20.05.2020, 21:39
Студворк — интернет-сервис помощи студентам
В таком случае на кой черт у тебя в "базе" столько лишней информации? Приведи ее в нормальный вид, а не обрабатывай этот сброд информации. Как читать из XML - я показал, дорабатывай сам, коль мое решение тебе не нравится. До свидания...
0
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
20.05.2020, 21:55  [ТС]
volvo, это обычная база которая получается когда сохраняешь её из StringGrid. вносишь значения и сохраняешь их. получается такой файл базы.
вот думал как сделать нужный функционал с такой базой.
0
6003 / 4578 / 1096
Регистрация: 29.08.2013
Сообщений: 28,273
Записей в блоге: 3
20.05.2020, 22:32
meteor12, извини, но тебе дали готовый 100% работающий код, а ты даже спасибо не сказал

Цитата Сообщение от meteor12 Посмотреть сообщение
работает не совсем так
а сам исправить не можешь?
0
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
20.05.2020, 23:58  [ТС]
volvo, спасибо вам огромное за помощь. ваше решение очень хорошее. оно нравится.

но также изначально пытался выяснить как сделать чтобы в столбец "цифры" автоматически цифры из базы подставлялись.
у меня опыта в этом мало.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
21.05.2020, 00:07
Лучший ответ Сообщение было отмечено meteor12 как решение

Решение

Вот это нужно было?
Вложения
Тип файла: 7z db_strgrid_v2.7z (117.2 Кб, 18 просмотров)
1
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
21.05.2020, 17:06  [ТС]
volvo, да!
спасибо! супер круто!
огромное спасибо за помощь!
буду разбираться в коде и учиться!
0
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
23.05.2020, 13:35  [ТС]
volvo, когда в StringGrid указываю Columns например 5, то значение ColCount автоматически ставиться 6. и всегда так получает на 1 больше. если пытаюсь там вручную указать нужное значение пишет что это нельзя поменять. почему так? как сделать чтобы эти значения были одинаковые?

Добавлено через 5 минут
Все разобрался сам. ))))
0
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
23.05.2020, 17:21  [ТС]
Чтобы текст был в несколько строк в шапке таблицы тут как сделать? Подскажите пожалуйста.

Ставлю галочку MultiLine, но результата никакого - все одну строку.

Это здесь тоже не срабатывает:

Pascal
1
2
3
4
5
6
7
8
9
procedure TForm1.StringGrid1PrepareCanvas(sender: TObject; aCol, aRow: Integer;
  aState: TGridDrawState);
var
  MyTextStyle: TTextStyle;
begin
  MyTextStyle := StringGrid1.Canvas.TextStyle;
  MyTextStyle.SingleLine := false;
  StringGrid1.Canvas.TextStyle := MyTextStyle;
end;
Миниатюры
Загрузка базы из текстового файла в StringGrid с возможностью выбора  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
23.05.2020, 17:38
meteor12, 1) пишешь вот такой OnPrepareCanvas для Stringgrid-а:
Pascal
1
2
3
4
5
6
7
8
9
procedure TForm1.StringGrid1PrepareCanvas(sender: TObject; aCol, aRow: Integer;
  aState: TGridDrawState);
var
  MyTextStyle: TTextStyle;
begin
  MyTextStyle := StringGrid1.Canvas.TextStyle;
  MyTextStyle.SingleLine := false;
  StringGrid1.Canvas.TextStyle := MyTextStyle;
end;
, который разрешит гриду отображать многострочные заголовки/ячейки

2) в самом txt-файле добавляешь туда, где нужен перенос строки, комбинацию: &# 13;&# 10; без пробелов !!!, скажем:

XML
1
        <cell7 column="1" row="0" text="буквы&# 13;&# 10;(да, буквы)"/>
3) в OnCreate формы увеличиваешь высоту заголовка, чтобы туда поместилось более одной строки:
Pascal
1
  StringGrid1.RowHeights[0] := 50;
4) по желанию, можно выставить в Title (именно там, где у тебя на скриншоте выделено) Alignment в taCenter, чтобы было красивее.

И запускаешь:
Миниатюры
Загрузка базы из текстового файла в StringGrid с возможностью выбора  
1
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
23.05.2020, 18:59  [ТС]
volvo, спасибо большое! все отлично работает!

Добавлено через 58 минут
volvo, добавил в таблицу еще столбец, но он не имеет отношения к базе данных. в этом столбце в шапке текст на две строки не распределяется. еще что-то в код нужно добавить?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
23.05.2020, 19:04
А как, собственно, ты в шапку этого столбца заносишь текст? Я вот так попробовал:
Pascal
1
StringGrid1.Columns[3].Title.Caption := 'Новый' + sLineBreak + 'столбец';
, что я делаю не так?
Миниатюры
Загрузка базы из текстового файла в StringGrid с возможностью выбора  
1
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
23.05.2020, 19:45  [ТС]
volvo, спасибо большое! все отлично работает!
0
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
24.05.2020, 20:01  [ТС]
volvo, Получается одна интересная особенность в программе.
Если количество строк в таблице меньше чем количество строк в базе данных, то выдается ошибка или предупреждение при компиляции.
Как сделать чтобы в таблице можно было задавать любое количество строк независимо от количества строк в базе данных?
Что нужно подправить в программе?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
24.05.2020, 20:24
Нельзя этого сделать. По крайней мере в момент заполнения ячеек из БД в гриде должно быть не меньше строк/столбцов, чем необходимо для данных из базы. Любая попытка обратиться к ячейке с индексом, большим чем colcount/rowcount в Лазарусе - немедленная ошибка. Это не Дельфи, где так можно было. И мне поведение Лазаруса нравится больше.
1
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
24.05.2020, 20:55  [ТС]
volvo, Спасибо за информацию.

Есть интересная идея. Если например сделать процедуру задающую определенное количество строк в таблице. И потом добавлять её в FormCreate уже в самом конце после того как база загрузилась. В таком случае эта процедура установит нужное количество строк в таблице. Или может процедуру такую писать не нужно, может есть команда такая в lazarus?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
25.05.2020, 00:24
Зачем тебе надо, чтобы в таблице, в которой есть 7 строк данных, отображалось, например, три строки? Почему не все 7? Пускай нужно будет прокручивать (это регулируется установкой высоты StringList-а).

Не боишься, что как только ты уменьшишь число строк, то потеряешь все данные, хранящиеся в этих строках, ибо Лазарус посчитает (принимая во внимание то, что я написал выше), что данные больше не нужны, и можно сделать точно так же, как делается с SetLength динамического массива, когда размер уменьшается - потом нельзя гарантировать сохранности данных, память отдается системе, и любое обращение к ней - ходьба по минному полю. Может, повезет, а может - не повезет.
1
84 / 2 / 1
Регистрация: 07.04.2018
Сообщений: 255
25.05.2020, 12:44  [ТС]
volvo, Спасибо за информацию! Учту!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2020, 12:44

Загрузка данных из Excel и текстового файла в StringGrid (Borland Builder C++)
Здравствуйте! Не подскажите как осуществить загрузку данных из Excel и текстового файла в StringGrid?

StringGrid неправильно отображает русские буквы из текстового файла базы txt
StringGrid неправильно отображает русские буквы из текстового файла базы txt. Программу писал когда была установлена винда 8.1. Все...

Импорт XLS файла в PHP/MYSQL с возможностью выбора файла из окна дерева каталогов
Здрасьте! В проекте подключена библиотека PHPExcel. Имеется файл XLS, экспортированный из БД Mysql (подготовленный для будущего...

Сохранение из StringGrid массива в файл и загрузка из файла в StringGrid
Всем доброго времени суток =) У меня есть загрузка массива из StringGrid на Delphi 2010: //загрузка из файла procedure...

Загрузка файла с Интернета с возможностью дозагрузки
Добрый день! Как можно загрузить файл с Интернета с возможностью дозагрузки? И как узнать скорость скачивания данного файла?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru