|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Отображение изображений из БД на форму
Доброго времени суток! Вопрос такой, и мучает очень!(
В БД есть таблица, содержащая индексы и изображения (объект OLE). Необходимо отображать все изображения на форме. И кликая, допустим, на одно из них оно копируется в таблицу с изображениями. Примерно как мы выбираем из изобилия смайлов нужный нам, и он отображается в нашем поле для текста сообщения. И еще эти выбранные изображения должны сохраняться в БД как последовательность, т.е. в одном поле последовательность индексов на изображения. Подкиньте идеек как это сделать, свежим взглядом, так сказать, посмотрите, пожалуйста. P.S. была идея изображения поместить в DrawGrid, т.к. изображений немало упорядочить немного и еще в DBCtrlGrid была идея поместить, но не увенчалось успехом, может что не правильно делала...( |
#2
|
|||
|
|||
Если это что-то типа смайлов, то там сделано немного по другому. На самом деле там передается некоторая комбинация символов, которую уже клиент разпознаёт и вместо этих символов выводит изображение из своего списка. А уж как ты этот список будешь хранить - дело десятое.
|
#3
|
||||
|
||||
Как сохранять
Код:
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
|
|||
|
|||
Спасибо, очень полезная вещь, она мне пригодится
Но все же основная проблема не решена У меня в БД есть таблица (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; как то так прошу Вас о помощи, и буду рада даже малейшей |
#5
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
AlSh17 (30.11.2015)
|
#6
|
|||
|
|||
Ваши наброски работают, спасибо!)
Но только я вставляю в свой код пишет такую ошибку: Project raised exception class EAccessViolation with message 'Access Violation at address 0052bafa in module Project1.exe. Read of address 000002f4' Я и Ваш полностью модуль добавляла в проект и копировала, не помогло. Изменяла - аналогичный результат( И еще, этот вопрос покажется глупым, но у Вас БД изображения хранятся как двоичные данные, как Вы это сделали? У меня тот же тип данных, но хранится как "Пакет" |
#7
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
AlSh17 (02.12.2015)
|
#8
|
|||
|
|||
Не работает кнопка сохранения в БД - ни ошибок ничего не выдает, а тем не менее не сохранят(((
|
#9
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#10
|
|||
|
|||
Поняла Желание есть, нет времени и дается тяжко
спасибо Вам за помощь) Теоретические вопросы задам: 1. У Вас кликая на табл. DBGrid2 столбец Theard в ScrollBox2 появляются сохраненные в БД изображения, я так поняла выделяется вся строка, а т.к. там всего один столбец картинки появляются. у меня их больше чем 1 столбец, поэтому появляется ошибки о несоответствии типов. Можно ли сделать так чтобы выделяя всю строку в ScrollBox2 заносились картинки из одной ячейки где хранятся индексы? 2. Можно ли вывести на печать документ, шаблон его в MS Word, из Delphi? я читала что это возможно, но для этого какие нужны компоненты на форму кидать? их дополнительно скачивать нужно? 3. Можно ли с помощью команды SQL Insert добавить запись в БД где информация находится в определенных столбах, а не полностью описывать все поля что есть и всем им присваивать значения? Последний раз редактировалось AlSh17, 05.12.2015 в 00:07. |
#11
|
||||
|
||||
Оффтоп:
Извнт, не умею на гуще гадать, мож выходит что я думаю одно, а вы - вероятно совсем другое, диалог слепого с глухим, и точно не знаю, может уже тупиковая ветка образовалась По теме: принцип примерно такой - в tabl.theard чисто текстовая инфа, там просто через разделитель (,) идут индексы картинок из Element.ID, при считывании происходит разбор этой строки и показ на ScrollBox2 картинок по этим значениям из каталога, самих рисунков там нет Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#12
|
|||
|
|||
Цитата:
Еще такой вопрос возник: печать и вывод информации в MS Word я осилила, а вот вывод изображений из ScrollBox2 нет( не подскажите через что и как это реализовывать?Пожалуйста. Последний раз редактировалось AlSh17, 07.12.2015 в 03:00. |
#13
|
||||
|
||||
Цитата:
Код:
procedure TForm1.DBGrid2CellClick(Column: TColumn); begin if Column.FieldName = 'thread' then zgr(Column.Field.AsString); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#14
|
|||
|
|||
Не работает когда просто не реагирует на клик, когда ошибку выдает
Не знаете ли Вы как из Scrollbox2 изображения в документ ворда перекинуть программно? получается я заполняю данными DBEdit, Scrollbox2 изображениями и все это дружно кидается в ворд. данные из DBEdit благополучно переносятся из проги в ворд, а вот изображения нет |
#15
|
||||
|
||||
Цитата:
Код:
Clipboard.Assign(DBImage1.Picture); vstart:=1; vend:=2; WordDocument1.Frames.Add(WordDocument1.Range(vstart,vend)); i:=1; WordDocument1.Frames.Item(i).Height:=DBImage1.Height; WordDocument1.Frames.Item(i).Width:=DBImage1.Width; WordDocument1.Frames.Item(i).Select; WordApplication1.Selection.Paste; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |