Форум: "WinAPI";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.061 c