| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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 Откуда: ИНТЕГРО
  | 
		 | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		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; | 	 
  _________________ С уважением, Руслан Гадеев
 
Видео уроки ИнГео
 
Документация ИнГео
 
Обновления ИнГео
 
Интегропедия | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |