Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

отображение картинок

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
the bat



Зарегистрирован: 11.10.2006
Сообщения: 14

СообщениеДобавлено: Ср 20 Июн 2007 13:59    Заголовок сообщения: отображение картинок Ответить с цитатой

проблема с отображением на форме в Delphi картинок из семантических таблиц:
var SearchQueryResults:IIngeoSemDBDataSet;
Image:OleVariant;
Image:=SearchQueryResults.Fields.Item['Поле3'].Value;
В итоге в Image записывается последовательность из 7-ми символов, которые даже не похожи на заголовок фалйа *.bmp, записанного в поле 'Поле3'. Что я не так делаю?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RuslanG



Зарегистрирован: 10.07.2005
Сообщения: 171
Откуда: ИНТЕГРО

СообщениеДобавлено: Ср 20 Июн 2007 15:09    Заголовок сообщения: Ответить с цитатой

Какую БД используете?
_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
the bat



Зарегистрирован: 11.10.2006
Сообщения: 14

СообщениеДобавлено: Ср 20 Июн 2007 15:37    Заголовок сообщения: Ответить с цитатой

Paradox
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RuslanG



Зарегистрирован: 10.07.2005
Сообщения: 171
Откуда: ИНТЕГРО

СообщениеДобавлено: Ср 20 Июн 2007 17:16    Заголовок сообщения: Ответить с цитатой

Формат данных, содержащийся в поле типа "Рисунок":
- Заголовок (TGraphicHeader)
- Данные, зависящие от типа графического формата
Ниже приведен пример считывания графических данных из поля и отображение в компоненте TImage.
Код:
type
   TVariantReader = class(TCustomMemoryStream)
   private
      FData: OleVariant;
   public
      constructor Create(const aData: OleVariant);
      destructor Destroy; override;
   end;
constructor TVariantReader.Create(const aData: OleVariant);
var
   aLength: Integer;
   aPointer: Pointer;
begin
   inherited Create;
   FData := aData;
   aLength := VarArrayHighBound(FData, 1) - VarArrayLowBound(FData, 1) + 1;
   aPointer := VarArrayLock(FData);
   SetPointer(aPointer, aLength);
end;
destructor TVariantReader.Destroy;
begin
   VarArrayUnlock(FData);
   inherited;
end;
procedure TTestForm.IngeoImageTestClick(Sender: TObject);
type
   TGraphicHeader = record
      Count: Word;   //Fixed at 1
      HType: Word;   //Fixed at $0100. Наш код = $AF00 + 01(Icon) 02(Metafile)
      Size: Longint; //Size not including header
   end;
var
   aHeader: TGraphicHeader;
   aSize: Longint;
   aSearchQueryResults: IIngeoSemDbDataSet;
   anIngeoImage: OleVariant;
   aData: TVariantReader;
begin
   aSearchQueryResults := FIngeo.ActiveDb.SemTableFromID('000A00001397').SemDbTable.SelectData('Field1', '', '');
   anIngeoImage := aSearchQueryResults.Fields['Field1'].Value;
   if VarIsNull(anIngeoImage) then
      Image.Picture.Bitmap := nil
   else begin
      aData := TVariantReader.Create(anIngeoImage);
      try
         Image.Picture.Graphic := nil; //Очистка изображения
         aSize := aData.Size;
         if aSize > 0 then begin
            if aSize >= SizeOf(TGraphicHeader) then begin
               aData.ReadBuffer(aHeader, SizeOf(aHeader));
               if (aHeader.Count = 1) and ((aHeader.HType = $AF01) or (aHeader.HType = $AF02)) and
                  (aHeader.Size = aSize - SizeOf(aHeader))
               then begin
                  if aHeader.HType = $AF01 then
                     Image.Picture.Icon.LoadFromStream(aData)
                  else
                     Image.Picture.Metafile.LoadFromStream(aData);
                  Exit;
               end
               else if (aHeader.Count <> 1) or (aHeader.HType <> $0100) or
               (aHeader.Size <> aSize - SizeOf(aHeader))
               then
                  aData.Position := 0;
            end;
            Image.Picture.Bitmap.LoadFromStream(aData);
         end;
      finally
         aData.Free
      end;
   end;
end;

_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB