Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Отображение рисунка в DBImage  (Прочитано 19219 раз)
0 Пользователей и 1 Гость смотрят эту тему.
murad.88
Гость
« : 19-11-2008 10:09 » 

Как отобразить в DBImage рисунок находяшийся в  *.mdb (Access)
БД имеет  поле 'Photo'  тип данных 'Поле объекта OLE' в это  поле я вставляю BMP, и нужно этот рисунок отобразить в DBImage
Зарее Спапасибо Всем !!
Записан
murad.88
Гость
« Ответ #1 : 19-11-2008 13:40 » 

Пишу след. код:

Код: (Delphi)
procedure TForm4.ADOTable1AfterScroll(DataSet: TDataSet);
var
Bitmap: TBitmap;
BS: TADOBlobStream;
begin
try
BS:= TADOBlobStream.Create(DataModule2.ADOTable1.FieldByName('Photo'), bmRead);
BS.Seek(78, soFromBeginning);
Bitmap:= TBitmap.Create;
Bitmap.LoadFromStream(BS);
DBImage1.Picture.Graphic:= Bitmap;
finally
Bitmap.Free;
BS.Free;
end;
end;

Но вылетает Ошибка:  Incompatible types: 'TBlobField' and 'TField'
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 19-11-2008 16:08 » 

Что в USES?
Записан

С уважением, Oldy.
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #3 : 19-11-2008 17:26 » 

Ну если используется DBImage, то зачем вообще так делать? Тогда DBImage надо связать с соответствующим полем 'Photo'. А если уж таким способом делать, то лучше с TImage:
Код:
Image1.Picture.Assign(TBlobField(DataModule2.ADOTable1.FieldByName('Photo')));
« Последнее редактирование: 20-11-2008 10:42 от zubr » Записан
murad.88
Гость
« Ответ #4 : 20-11-2008 09:35 » 

Ну если используется DBImage, то зачем вообще так делать? Тогда DBImage надо связать с соответствующим полем 'Photo'. А

Так когда я связываю с полем Photo в свойствах DBImage то выходит ошибка "bitmap image  is not valid".
Записан
murad.88
Гость
« Ответ #5 : 20-11-2008 09:37 » 

Что в USES?

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, DBCtrls, Buttons, Grids, DBGrids, DB,
  ComCtrls, TabNotBk, ADODB;
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #6 : 20-11-2008 10:37 » 

murad.88, значит у тебя в БД не битмап (bmp), а возможно какой то другой формат (jpg, gif, png и т. п.). Если это так тогда надо сначала получить имидж в нужном формате, к примеру:
Код:
  If TBlobField(query.FieldByName('Photo')).BlobSize>0 then
  begin
   jpg:=TJpegImage.Create;
   try
    jpg.Assign(TBlobField(query.FieldByName('Photo')));
    Image1.Picture.Assign(jpg);
   finally
    jpg.Free;
   end;
  end;
P.S. Извини неправильно код написал в своем предыдущем посте, уже исправил.
Записан
murad.88
Гость
« Ответ #7 : 20-11-2008 19:04 » 

Вряд ли там другой формат, если только сам Access не изменил его при загрузки  bmp-шника  в поле Photo
Спасибо zubr, твой пример мне пригодился  в другом моменте написания кода !! Улыбаюсь
Но я уже разобрался с загрузкой изображения.
Код:
  procedure TForm4.DBImage1Click(Sender: TObject);
var
Bitmap: TBitmap;
BS: TADOBlobStream;
begin
try
     BS:= TADOBlobStream.Create(TBlobField(DataModule2.ADOTable1.FieldByName('Photo')), bmRead);
     BS.Seek(82, soFromBeginning);
  Bitmap:= TBitmap.Create;
  Bitmap.LoadFromStream(BS);
  DBImage1.Picture.Graphic:= Bitmap;
finally
Bitmap.Free;
BS.Free;
end;
end;
Только вот проблема возникла  в DMImage постояyно отображается рисунок первого поля DBGrid.
Не знаю на какое событие надо реагировать чтоб в DBImage отображался тот рисунок где находится текущий указатель  компоненте DBGrid.
« Последнее редактирование: 21-11-2008 09:53 от murad.88 » Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #8 : 20-11-2008 20:42 » 

murad.88, ты же правильно в предыдущем примере делал - в событии ADOTable1AfterScroll.
Записан
murad.88
Гость
« Ответ #9 : 21-11-2008 00:32 » 

ты же правильно в предыдущем примере делал - в событии ADOTable1AfterScroll.

Не знаю почему  А черт его знает... но возникала ИС  при ADOTable1AfterScroll, а вот ADOQuery1BeforeScroll все нормально 
« Последнее редактирование: 21-11-2008 00:35 от murad.88 » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines