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