Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
7 / 4 / 2
Регистрация: 26.11.2012
Сообщений: 114

Вывод данных из БД в виде сетки (н-р 5х5)

14.03.2013, 23:54. Показов 1787. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, скажу сразу ничего похожего не нагуглил (может искал плохо)...
Есть у меня в программе список файлов с иконками выглядит так: (DBGridEh, названия берутся из БД Access)
Скрин
Вот собственно вопрос: как можно, и вообще возможно ли реализовать отображение в таком виде:
Как должно быть

Опишу нюансы: название картинки хранится в БД, также название тоже хранится в БД. Еще необходимо, чтобы при нажатии на определенную иконку или название открывался файл (это все реализовано в DBGridEh, но вот тут возможно ли?) мне нужно знать хотя - бы какой компонент позволяет реализовать такое? Или может можно выбрать какой - то вариант вида DBGridEh... В общем если кто поможет, спасибо большое за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2013, 23:54
Ответы с готовыми решениями:

Вывод данных из базы данных MySQL в PHP в виде дерева.
У нас в сети решили сделать портал-базу по рефератам. Все я сделал остались две траблы, про первую я здесь и пишу. Итак, имеется база с...

данные в Excel в виде сетки
Каким образом лучше разместить данные, выбранные с помощью рекордсета в сетку, подобную Excel. Пользователь привык работать с экселевскими...

Заполнение таблицы в виде сетки
Такая проблема:Нужно заполнять расписание игр в виде сетки. Для примера: Номер корта 1 2 3 4 ...

15
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
15.03.2013, 01:54
Не в гриде. Возьми ListView, и в цикле заполни данными из БД.
1
7 / 4 / 2
Регистрация: 26.11.2012
Сообщений: 114
15.03.2013, 02:53  [ТС]
заполнить не проблема, пробовал в стринггриде, но вот как сделать действие аналогичное действию в дбгриде, т.е. при клике на поле query переходит на эту запись? Надеюсь ясно выразиося... Реально ли?

Добавлено через 11 минут
хотя и насчет этого мысля появилась, вот теперь вопрос: как в листвью (первый раз с ним сталкиваюсь) добавлять элемент при этом сразу прописав для него и картинку (не из ImageList'a) и Caption? Заранее спасибо)
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
15.03.2013, 04:16
Цитата Сообщение от ildar6994 Посмотреть сообщение
т.е. при клике на поле query переходит на эту запись
Не понял?
Поясняй какой именно результат должен быть?
1
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
15.03.2013, 08:36
У StringGrid помимо свойства Cells есть свойство Objects. Для хранения ссылок (указателей).
Каждый элемент Objects "синхронизирован" (совпадает по координатам в сетке) с соответствующим элементом из Cells.
Но в Objects можно держать и целочисленные значения (указатели - и есть целые числа).
Если каждая запись в таблице БД имеет уникальный идентификатор (в Аксессе называют "счетчик"), то
каждой ячейке в StringGrid можно сопоставить свой идентификатор.
Например так (где-то в цикле):
Delphi
1
  StringGrid1.Objects[C, R] := TObject(ADOQuery1.FieldByName('id').AsInteger);
Для позиционирования указателя в датасете на нужную запись, когда выделена какая-то определенная ячейка можно применить метод Locate,
используя сохраненный идентификатор:
Delphi
1
ADOQuery1.Locate('id',Integer(StringGrid1.Objects[StringGrid1.Col, StringGrid1.Row]),[]);
Похожим образом можно использовать свойство Data, которое в ListView есть у каждого ListItem.
как в листвью ...прописав для него и картинку (не из ImageList'a)
Без ImageList'a никак. В ListView нет отдельного хранилища для картинок. А что, собственно, мешает вначале загрузить в ImageList изображения и затем их использовать в ListView?
1
7 / 4 / 2
Регистрация: 26.11.2012
Сообщений: 114
15.03.2013, 11:19  [ТС]
Скандербег, спасибо, но все-таки от StringGrid'a отказался, т.к. не получилось сделать вид, который нужен..
Насчет локейта как раз таки и додумался, только в ListView, в нем по-любому будет Caption (Название из БД) так вот это название само по себе униакально и поэтому можно осуществлять поиск по нему)
Но вот хранить это негде будет поэтому просто при клике на элемент ListView будет происходить локейт и все)
Вот только осталось разобраться с изображениями думаю так:
Есть общий цикл, который заполняет листвью данными из бд, происходит как-то так (пока просто наброски):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
  Item: TListItem;
begin
for i:=0 to adoquery1.recordcount do
begin
  Item := ListView.Items.Add;
  Item.Caption := AdoQuery1.FieldByName('Название').AsString;
  ImgaeList1.Items.Add('icons\'+AdoQuery1.FieldByName('Иконка').AsString)//путь до иконки
  ВОТ ТУТ ВОПРОС: КАК УЗНАТЬ С КАКИМ ImageIndex'ом добавилась картинка в ImageList??
  Item.ImageIndex:=...
end;
end;
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
15.03.2013, 11:57
Все очень просто предыдущий + 1. Начинается с 0.
1
7 / 4 / 2
Регистрация: 26.11.2012
Сообщений: 114
15.03.2013, 12:08  [ТС]
все разобрался уже))
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
15.03.2013, 12:12
ВОТ ТУТ ВОПРОС: КАК УЗНАТЬ С КАКИМ ImageIndex'ом добавилась картинка в ImageList??
У ImageList нет свойства Items.
При добавлении изображения методом ImageList.Add, он возвращает индекс добавленного в список изображения.
Можно узнать индекс последней добавленной картинки с помощью свойства ImageList.Count.

Но добавлять картинки ImageList из файлов не умеет. Для этого нужно создать TBitmap (или TIcon), загрузить картинку из файла в этот объект, затем вставить его в ImageList.

Ваша задача достаточно трудоемка, какие-бы компоненты не использовались, с тем чтобы показывать и картинки и подписи под ними.
По крайней мере, три из них можно назвать: ListView, DrawGrid и DBGridEh.
Да, последний компонент (если он может показывать картинки в ячейках) тоже можно приспособить, но не совсем тривиальным способом.
И каждый из них требует немалого ковыряния.
1
7 / 4 / 2
Регистрация: 26.11.2012
Сообщений: 114
15.03.2013, 12:36  [ТС]
Скандербег, уже все сделал, оказалось намного проще чем думал) ImageList грузит иконки из файлов так:
Delphi
1
ImageList1.LoadFromFile(ExtractFilePath(Application.ExeName)+'icons\'+AdoQuery1.FieldByName('Иконка').AsString);
Locate поставил на OnSelectItem:
Delphi
1
  AdoQuery1.Locate('Название', Item.Caption, [loCaseInsensitive, loPartialKey]);
А индекс картинки определяется так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var i,s:Integer; Item: TListItem;
begin
  Imagelist1.Clear;
  s:=0;
for i:=0 to ADOQuery1.RecordCount-1 do
begin
...
  Item.ImageIndex:=s;
  s:=s+1;
...
end;
end;
Все работает более чем отлично!) Спасибо за помощь)

0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
15.03.2013, 12:43
А ты пишешь лаунчер?
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
15.03.2013, 12:49
ImageList грузит иконки из файлов так:
И то правда. Виноват, забыл.
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
15.03.2013, 12:53
Вот все руки не доходят
0
7 / 4 / 2
Регистрация: 26.11.2012
Сообщений: 114
15.03.2013, 13:16  [ТС]
rdama, я пишу каталогизатор приложений с описанием и т.д. для приложений Android, с подгрузкой описания с сайта и т.д.)) вот предложили сделать новый вид, завелся этой идеей))

Добавлено через 2 минуты
делал в отдельном проекте, дабы не испортить основной, теперь осталось интегрировать это в основной...

Добавлено через 3 минуты
rdama, а в командую строку отправляется через CreateProcess? или как?
Удобная штука иметь под рукой командную строку например с помощью горячих клавиш, часто ей пользуюсь и постоянно CTRL+R>cmd))
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
15.03.2013, 13:28
Delphi
1
ShellExecute(Handle,'open','cmd.exe',PChar('/u /c ' + _cmd_text.Text),nil,SW_SHOW);
_cmd_text.Text Соответственно команда передаваемая в консоль
1
7 / 4 / 2
Регистрация: 26.11.2012
Сообщений: 114
15.03.2013, 13:46  [ТС]
rdama, аа вон оно как) спасибо, может пригодиться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2013, 13:46
Помогаю со студенческими работами здесь

Дана матрица 5х5. Вывести ее в нижнем треугольном виде.
Дана матрица 5х5. Вывести ее в нижнем треугольном виде.

Суммирование данных и вывод данных в виде отчёта
Здравствуйте !!! Нужно сделать вот что,в базе есть таблица "Статистика повреждений". В ней нужно сделать так, чтобы при...

Вывод данных в виде таблиц
Нужно составить таблицу перевода градусов (от 1 до 180 с шагом 10) в радианы. Помогаю другу с решением, сам я в C++ не волоку. Надеюсь на...

Вывод данных из БД в виде таблицы
Доброго времени суток! В общем имеется БД с фото. Нужно из нее вывести фото вряд по три штуки ну и вниз уже сколько будет получаться. ...

Вывод данных в виде таблицы
как оформить сделать по простому что бы выводили данными в виде таблицы вроде как можно использовать echo "<tr><td...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru