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

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

Metafile в RichEdit


Andr-04 ©   (2006-03-11 13:57:00) 

Задаю третий вопрос! Функция BitmapToRTF по интернету распространена довольно широко. А вот функции MetafileToRTF нету! Никто не может меня направить на путь истинный?


Andr-04   (2006-03-14 11:09:00) [1]

Удалено модератором
Примечание: Создание пустых сообщений


Andr-04   (2006-03-12 08:15:00) [2]

Да, забыл сказать, я программирую в KOL, но принципиального значения это не имеет, так как из передаваемой переменной Pict я беру только Handle.


Andr-04   (2006-03-12 08:11:00) [3]

Можно, но рационально ли это? Особенно, если учесть две особенности: 1. При преобразовании векторного формата к растровому происходит потеря его качества (у метафайлов даже конкретного размера длины и высоты нету), к тому же мне этот RichEdit потом потребуется распечатать, переводя его в метафайл. 2. Зачем переводить в Bitmap, если RTF напрямую поддерживает метафыйлы мезо всяких посредников в виде Bitmap'ов? Вот написал один умный человек функцию BitmapToRTF (MetafileToRTF, видимо, ему была не нужна) и неужели её теперь пихать куда надо и куда не надо? Неужели написать MetafileToRTF нереально? Я, конечно, сам начал это писать, но у меня ничего не работает. На всякий случай приведу свой код:

function MetafileToRTF(Pict: PMetaFile): String;
var
 bi, bb, rtf: String;
 bis, bbs: Cardinal;
 RefDC: HDC;
 achar: ShortString;
 hexpict: string;
 I: Integer;
begin
 bis:=Sizeof(TEnhMetaheader);
 SetLength(bi, bis);
 GetObject(Pict.Handle, bis, @PChar(bi)^);
 RefDC:=GetDC(0);
 bbs := GetWinMetaFileBits(Pict.Handle, 0, nil, MM_ANISOTROPIC, RefDC);
 SetLength(bb, bbs);
 GetWinMetaFileBits(Pict.Handle, bbs, @PChar(bb)^, MM_ANISOTROPIC, RefDC);
 ReleaseDC(0, RefDC);
 rtf := '{\rtf1 {\pict\wmetafile '; {собственно, меня смущает в том числе и эта строчка. Если вместо wmetafile использовать dibitmap, то картина даже немного красевее - проверьте сами!}
 SetLength(hexpict, (bbs + bis) * 2);
 I := 2;
 for bis := 1 to length(bi) do
 begin
   achar := Format('%x', [Integer(bi[bis])]);
   if Length(achar) = 1 then
     achar := '0' + achar;
   hexpict[I - 1] := achar[1];
   hexpict[I] := achar[2];
   Inc(I, 2);
 end;
 for bbs := 1 to Length(bb) do
 begin
   achar := Format('%x', [Integer(bb[bbs])]);
   if Length(achar) = 1 then
     achar := '0' + achar;
   hexpict[I - 1] := achar[1];
   hexpict[I] := achar[2];
   Inc(I, 2);
 end;
 rtf := rtf + hexpict + ' }}';
 Result := rtf;
end;

Может, всё-таки у кто-нибудь получится? Буду ждать!


[lamer]barmaglo   (2006-03-11 23:35:00) [4]

Просто перевести метафайл в Битмап...


Наверх

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