![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |