Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: 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 вся ветка

Текущий архив: 2006.06.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.097 c
3-1144992872
gvv
2006-04-14 09:34
2006.06.04
коннект к ДБФ файлам при помощи АДО D5


6-1139192754
Delphi_is_cool
2006-02-06 05:25
2006.06.04
Определить ip dialup сервера


6-1138784691
piople
2006-02-01 12:04
2006.06.04
ISAPI + UpLoad


9-1130941735
Кирилл_
2005-11-02 17:28
2006.06.04
GLScene


2-1147852228
dest81
2006-05-17 11:50
2006.06.04
Задержка меньше 1 мс