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

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

RxRichEdit [D6, D7, WinXP]


Joy ©   (2005-06-25 10:39:00) 

Скажите пожалуйста, как из  RxRichEdit программно вытащить картинку  и сохранить ее в файл? Как обратиться к одной картинке из нескольких в RxRichEdit? Как отследить положение картинки в тексте?


Ученик   (2005-06-26 17:36:00) [1]

Эксперименты на Delphi


procedure TForm1.Button2Click(Sender: TObject);
const
 IID_IDataObject: TGUID = '{0000010E-0000-0000-C000-000000000046}';
var
 DataObject: IDataObject;
 fm: TFORMATETC;
 i, iObjectCount: Integer;
 MetaFilePict: PMetaFilePict;
 ReObject: TReObject;
 RichEditOle: IRichEditOle;
 stgm: STGMEDIUM;
begin
 if SendMessage(JvRichEdit1.Handle, EM_GETOLEINTERFACE, 0, longint(@RichEditOle)) = 1 then begin
   ReObject.cbStruct := SizeOf(ReObject);
   iObjectCount := RichEditOle.GetObjectCount;
   for i := 0 to iObjectCount - 1 do begin
     Image1.Picture := nil;
     if RichEditOle.GetObject(i, ReObject, REO_GETOBJ_POLEOBJ) = S_OK then begin
       if reObject.oleobj.QueryInterface(IID_IDataObject, DataObject) = S_OK then begin
         fm.cfFormat := CF_BITMAP;
         fm.dwAspect := DVASPECT_CONTENT;
         fm.ptd      := nil;
         fm.lindex   := -1;
         fm.tymed    := TYMED_GDI;
         if DataObject.GetData(fm, stgm) = S_OK then begin
           if stgm.hBitmap 0 then try
             Image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BITMAP, stgm.hBitmap, 0)
           finally
             DeleteObject(stgm.hBitmap)
           end
         end else begin
           fm.cfFormat := CF_METAFILEPICT;
           fm.tymed    := TYMED_MFPICT;
           if DataObject.GetData(fm, stgm) = S_OK then begin
             Image1.Picture.Bitmap.Width  := Round((ReObject.sizel.cx / 2540) * 96);
             Image1.Picture.Bitmap.Height := Round((ReObject.sizel.cy / 2540) * 96);
             MetaFilePict := GlobalLock(stgm.hMetaFilePict);
             try
               with MetaFilePict^ do
                 if hMF 0 then try
                   with Image1.Picture.Bitmap do begin
                     SetMapMode(Canvas.Handle, MM_ANISOTROPIC);
                     SetViewportExtEx(Canvas.Handle, Width, Height, nil);
                     PlayMetaFile(Canvas.Handle, hMF)
                   end
                 finally
                   DeleteMetafile(hMF)
                 end
             finally
               GlobalUnlock(stgm.hMetaFilePict)
             end
           end
         end
       end
     end;
     ShowMessage('Object ¹ ' + IntToStr(i + 1))
   end
 end
end;


Ученик   (2005-06-26 12:44:00) [2]

Вариант на С++
http://www.codeguru.com/Cpp/misc/misc/msn/article.php/c3901,

раздел 1. How To Get Image Out of RichEditCtrl (Plus writing to bitmap file):


Наверх

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