![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Просто перевести метафайл в Битмап...