Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.11.2015, 04:18
AlSh17 AlSh17 вне форума
Прохожий
 
Регистрация: 27.11.2015
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
Печаль Отображение изображений из БД на форму

Доброго времени суток! Вопрос такой, и мучает очень!(
В БД есть таблица, содержащая индексы и изображения (объект OLE). Необходимо отображать все изображения на форме. И кликая, допустим, на одно из них оно копируется в таблицу с изображениями. Примерно как мы выбираем из изобилия смайлов нужный нам, и он отображается в нашем поле для текста сообщения. И еще эти выбранные изображения должны сохраняться в БД как последовательность, т.е. в одном поле последовательность индексов на изображения.
Подкиньте идеек как это сделать, свежим взглядом, так сказать, посмотрите, пожалуйста.
P.S. была идея изображения поместить в DrawGrid, т.к. изображений немало упорядочить немного и еще в DBCtrlGrid была идея поместить, но не увенчалось успехом, может что не правильно делала...(
Ответить с цитированием
  #2  
Старый 27.11.2015, 20:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,105
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Если это что-то типа смайлов, то там сделано немного по другому. На самом деле там передается некоторая комбинация символов, которую уже клиент разпознаёт и вместо этих символов выводит изображение из своего списка. А уж как ты этот список будешь хранить - дело десятое.
Ответить с цитированием
  #3  
Старый 28.11.2015, 03:14
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Как сохранять
Код:
 uses Jpeg;
procedure PictureToGraphicField(D: TDataSet; F: TField);
var
     FileName: TFileName;
     Bmp: TBitmap;
     jpg: TJPEGImage;
begin
   D:= F.DataSet; // множество данных, которое содержит поле F
   if D.Active then // если таблица открыта, то
    if D.RecordCount > 0 then // если в таблице есть записи, то
     if OpenPictureDialog1.Execute then // если файл картинки выбран, то
      begin
       if not (D.State in [dsEdit]) then D.Edit; // перевод таблицы в режим редактирования
       FileName:= OpenPictureDialog1.FileName; // имя файла с картинкой
       try
        Bmp:= TBitmap.Create; // создаем Bitmap в памяти
        jpg:= TJPEGImage.Create; // создаем JPEG
        jpg.CompressionQuality:= 100; // качество сжатия изображения
        jpg.Compress; // сжатие
        jpg.LoadFromFile(FileName); // загрузка
        bmp.Assign(jpg); // передача из JPEG в BMP
        F.Assign(bmp); // передача картинки из Bitmap в поле "Каринка"
        D.Post; // сохранение записи
       except // в случае исключительной ситуции делать:
        ShowMessage('Не удалось загрузить картинку.'); // сообщение об ошибке
        FreeAndNil(jpg); // освобождение памяти, занятой JPEG
        FreeAndNil(bmp); // освобождение памяти, занятой Bitmap
       end;
      end;

end;
использование
Код:
PictureToGraphicField(DataSource.DataSet,DataSource.DataSet.FieldByName('Картинка'));
Ответить с цитированием
  #4  
Старый 29.11.2015, 02:55
AlSh17 AlSh17 вне форума
Прохожий
 
Регистрация: 27.11.2015
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо, очень полезная вещь, она мне пригодится
Но все же основная проблема не решена
У меня в БД есть таблица (Element), где хранятся изображения. Мне нужно "вытащить эти изображения" (все) на форму. Пусть коряво, но у меня получилось пока только так:
Код:
procedure TForm1.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var Im1: TBitmap;
begin
Im1:=TBitmap.Create;
if  (Column.FieldName='Symbol' ) then begin
with  DBGrid2.Canvas do begin
Brush.Color:=clWhite;
FillRect(Rect);
if (data.DataForm.Element.FieldByName('Ind').Value=1)
then begin
ImageList1.GetBitmap(0,Im1);
end else begin
ImageList1.GetBitmap(1,Im1);
end;
Draw(round((Rect.Left+Rect.Right-Im1.Width)/2),Rect.Top,Im1);
end;
end;
end;
Следующая задача передо мной это то, что я, грубо говоря, двойным нажатием мыши кликаю на ячейку с изображением в таблице и оно переносится в другую таблицу. Я могу сколько угодно добавлять из 1-ой таблицы во вторую изображений в ОДНУ ячейку (это важно), затем перевести фокус на др.ячейку и там также добавлять изображения. И вот из этой другой (второй) таблицы изображения автоматически заносятся в БД в таблицу (Tabl). Т.о. получается что таблица с изображениями это справочник своего рода, а в главной таблице хранятся индексы изображений
как то так

прошу Вас о помощи, и буду рада даже малейшей
Ответить с цитированием
  #5  
Старый 29.11.2015, 20:26
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от AlSh17
...Мне нужно "вытащить эти изображения" (все) на форму...
Вот набросок как это можно сделать
Вложения
Тип файла: zip Element.zip (354.4 Кбайт, 14 просмотров)
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
AlSh17 (30.11.2015)
  #6  
Старый 30.11.2015, 02:13
AlSh17 AlSh17 вне форума
Прохожий
 
Регистрация: 27.11.2015
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ваши наброски работают, спасибо!)
Но только я вставляю в свой код пишет такую ошибку: Project raised exception class EAccessViolation with message 'Access Violation at address 0052bafa in module Project1.exe. Read of address 000002f4'
Я и Ваш полностью модуль добавляла в проект и копировала, не помогло. Изменяла - аналогичный результат(
И еще, этот вопрос покажется глупым, но у Вас БД изображения хранятся как двоичные данные, как Вы это сделали? У меня тот же тип данных, но хранится как "Пакет"
Ответить с цитированием
  #7  
Старый 01.12.2015, 12:11
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от AlSh17
...изображения хранятся как двоичные данные...
Собсно вся инфа уже в топке, функция заноса приведена, но если что-то непонятно, то вот небольшая переработка того же самого, только с управлением содержимым таблиц
Вложения
Тип файла: zip AlSh17.zip (274.7 Кбайт, 15 просмотров)
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
AlSh17 (02.12.2015)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:11.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025