Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RichEdit и OLE. [D7, XP]


VAD*Anti Gopn!k ©   (2008-01-06 23:53:00) 

Доброе время суток.
Вставляю картинку в RichEdit:
...
procedure TImageDataObject.InsertBitmap(Wnd: HWND; Bitmap: HBITMAP);
var
 OleClientSite: IOleClientSite;
 RichEditOLE: IRichEditOLE;
 Storage: IStorage;
 LockBytes: ILockBytes;
 OleObject: IOleObject;
 ReObject: TReobject;
 clsid: TGUID;
begin
 if (SendMessage(wnd, EM_GETOLEINTERFACE, 0, Cardinal(@RichEditOle)) = 0) then Exit;
 FBmp := CopyImage(Bitmap, IMAGE_BITMAP, 0, 0, 0);
 if FBmp = 0 then Exit;
 try
   SetBitmap(Fbmp);
   RichEditOle.GetClientSite(OleClientSite);
   if (OleClientSite = nil) then Exit;
   CreateILockBytesOnHGlobal(0, True, LockBytes);
   if (LockBytes = nil) then exit;
   if (StgCreateDocfileOnILockBytes(LockBytes, STGM_SHARE_EXCLUSIVE or STGM_CREATE or STGM_READWRITE, 0, Storage) <> S_OK) then
   begin
     LockBytes._Release;
     Exit;
   end;
   if (Storage = nil) then exit;
   OleObject := GetOleObject(OleClientSite, Storage);
   if (OleObject = nil) then exit;
   OleSetContainedObject(OleObject, TRUE);
   ZeroMemory(@reobject, SizeOf(TReobject));
   reobject.cbStruct := SizeOf(TReobject);
   OleObject.GetUserClassID(clsid);
   reobject.clsid := clsid;
   reobject.cp := REO_CP_SELECTION;
   reobject.dvaspect := DVASPECT_CONTENT;
   reobject.poleobj := OleObject;
   reobject.polesite := OleClientSite;
   reobject.pstg := Storage;
   RichEditOle.InsertObject(reobject);
 finally
   DeleteObject(FBmp);
 end
end;

procedure InsertBitmapToRE(Wnd: HWND; bmp:HBITMAP);
begin
 with TImageDataObject.Create do
 try
   InsertBitmap(Wnd, Bmp);
 finally
   Free;
 end
end;
...

При попытке прокрутить richedit ничего не получается :( Как это можно сделать?? Прокручиваю так:
RichEdit1.SelLength := 0;
RichEdit1.SelStart := Length(RichEdit1.Text);
RichEdit1.Perform(EM_SCROLLCARET, 0, 0);

Спасибо за внимание.


XerSon   (2008-01-08 05:25:00) [1]

usesMessages.

SendMessage(RichEdit1.Handle, WM_VSCROLL, SB_LINEDOWN, 1);


Наверх

Титульная страница Поиск, карта сайта Написать письмо