Вниз
Скачать: CL | DM;

Metafile в RichEdit   Найти похожие ветки 

← →
Andr-04   (2006-03-11 13:57) [0]

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


← →
[lamer]barmaglo   (2006-03-11 23:35) [1]

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


← →
Andr-04   (2006-03-12 08:11) [2]

Можно, но рационально ли это? Особенно, если учесть две особенности: 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;

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


← →
Andr-04   (2006-03-12 08:15) [3]

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


← →
Andr-04   (2006-03-14 11:09) [4]

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



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.032 c
2-1147666221
Rubey
2006-05-15 08:10
2006.06.04
Обновление главной формы


2-1147784851
ttt_111
2006-05-16 17:07
2006.06.04
Маска вывода вещественного числа.


2-1147776239
alexss
2006-05-16 14:43
2006.06.04
проблема с ShellExecute


15-1147322759
pavelf
2006-05-11 08:45
2006.06.04
Удаление папки


2-1147853173
stud
2006-05-17 12:06
2006.06.04
странности с параметром ADO




   Наверх