Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.14;
Скачать: CL | DM;

Вниз

Blob & TOleContainer   Найти похожие ветки 

 
AndrewG ©   (2009-07-13 19:51) [0]

В блоб поле находится файл ворда.

Stream : TMemoryStream;
(datamodule1.IBTCharTest.fieldbyname("Col1")as TBlobField).SaveToStream(stream);
stream.Seek(0, sofrombeginning);
OleContainer1.LoadFromStream(stream);

Выдает ошибку
Invalid stream format.

Подскажите, как правильно загрузить в олеконтейнер?


 
Игорь Шевченко ©   (2009-07-13 20:26) [1]

через файл, например


 
AndrewG ©   (2009-07-13 20:29) [2]

хотелось бы из потока


 
Игорь Шевченко ©   (2009-07-13 20:51) [3]

тогда изучай:
http://delphimaster.net/view/15-1245321411/


 
СовестьДМ ©   (2009-07-13 22:17) [4]

не надо ходить по этой ссылке - там несколько про другое


> AndrewG ©   (13.07.09 19:51) 

дело в том, что файл есть лишь внедренный объект, а не сам контейнер и поэтому потоку нужен контейнерный префикс
uses ActiveX;
...
const s = "BDOC";
...
Stream, stream2 : TMemoryStream;
...
Stream:=TMemoryStream.Create;
(datamodule1.IBTCharTest.fieldbyname("Col1")as TBlobField).SaveToStream(stream);
Stream.Position:=0;

stream2:=TMemoryStream.Create;
stream2.Write(s[1],4);
i:=DVASPECT_CONTENT;
stream2.Write(i,4);
i:=Stream.Size;
stream2.Write(i,4);
stream2.CopyFrom(Stream,Stream.Size);

OleContainer1.LoadFromStream(stream2);
OleContainer1.DoVerb(ovShow);

Stream.Free;
stream2.Free;


 
СовестьДМ ©   (2009-07-13 22:19) [5]

...перед LoadFromStream надо stream2.Position:=0;


 
Amoeba ©   (2009-07-13 23:19) [6]

Готовое решение подойдет?

unit DBOleContainer;
{Author: Sergei V. Trepalin, 27 September 1998
E-mail: trep@trep.home.chg.ru
        trep@ipac1.sherna.msk.su

Free component. If some changes in source code will be made,
                one has to highlight changes by any means}

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 OleCtnrs, DB, DBCtrls;

type
 TDBOleContainer = class(TOleContainer)
 private
   FDataLink: TFieldDataLink;
   FAutoDisplay: Boolean;
   FFocused: Boolean;
   FObjectLoaded: Boolean;
   FDummy:integer;
   FFromActivate:boolean;
   procedure DataChange(Sender: TObject);
   function GetDataField: string;
   function GetDataSource: TDataSource;
   function GetField: TField;
   function GetReadOnly: Boolean;
   procedure SetDataField(const Value: string);
   procedure SetDataSource(Value: TDataSource);
   procedure SetReadOnly(Value: Boolean);
   procedure SetAutoDisplay(Value: Boolean);
   procedure SetFocused(Value: Boolean);
   procedure UpdateData(Sender: TObject);
   procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
   procedure CMExit(var Message: TCMExit); message CM_EXIT;
   procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;
   procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
   procedure DoDeactivate(Sender:TObject);
 protected
   procedure Loaded; override;
   procedure Notification(AComponent: TComponent;
     Operation: TOperation); override;
   procedure LoadObject; virtual;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   property Field: TField read GetField;
   function InsertObjectDialog:boolean;
   procedure DestroyObject;
 published
   { Published declarations }
   property DataSource:TDataSource read GetDataSource write SetDataSource;
   property DataField:string read GetDataField write SetDataField;
   property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
   property AutoDisplay: Boolean read FAutoDisplay write SetAutoDisplay default True;
   property AutoActivate:integer read FDummy;
 end;

procedure Register;


 
Amoeba ©   (2009-07-13 23:20) [7]

Удалено модератором
Примечание: Не устраивай помойку из форума, такие объемы кода заменяй ссылкой на внешний ресурс


 
AndrewG ©   (2009-07-14 11:40) [8]

Получилось, но не все.
Компонент установил.
Указал датасоурс.
Но при datasource ondatachange в Dbolecontainer ничего не загружается
При дабл клике открывается окно вставки объекта, что понятно , ведь  
if Assigned(OleObjectInterface) вернет фолс
Подскажите что не так делаю?

Спасибо за верхние ответы.


 
AndrewG ©   (2009-07-15 10:23) [9]

Никаких больше идей в тему???
(((


 
СовестьДМ ©   (2009-07-15 18:58) [10]


> Никаких больше идей в тему???

установи какой-нибудь ещё компонент глядишь полегчает


 
AndrewG ©   (2009-07-15 22:02) [11]

Спасибо 2 СовестьДМ ,будем использовать

> СовестьДМ ©   (13.07.09 22:17) [4]

Еще вопросик возник: как сохранить из олеконтейнера в блоб поле, чтобы после извлечении из блоба.сейвтуфайл документ мог открываться MSWord


 
AndrewG ©   (2009-07-15 22:06) [12]

ПС: без записи на диск получится?


 
Игорь Шевченко ©   (2009-07-16 01:01) [13]

через стрим



Страницы: 1 вся ветка

Текущий архив: 2010.11.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1279196387
PinDOS
2010-07-15 16:19
2010.11.14
Динамический список


3-1247562063
ziArt
2009-07-14 13:01
2010.11.14
Сортировка и SQL


15-1280731176
nod32
2010-08-02 10:39
2010.11.14
создание самопального сервера обновлений nod32


15-1280521768
Юрий
2010-07-31 00:29
2010.11.14
С днем рождения ! 31 июля 2010 суббота


2-1282080138
подмастерье
2010-08-18 01:22
2010.11.14
Изменение свойств формы