Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.46 MB
Время: 0.05 c
2-1147849669
Creative
2006-05-17 11:07
2006.06.04
программа не входит в цикл


2-1147785899
Dr. Genius
2006-05-16 17:24
2006.06.04
Ошибка при использовании NMSMTP


2-1147686560
Cherman
2006-05-15 13:49
2006.06.04
OpenDialog


2-1148063993
Golik
2006-05-19 22:39
2006.06.04
Запрос ! где ошибка ?


2-1147692000
Ткаченко Сергей
2006-05-15 15:20
2006.06.04
Минимизация программы в трей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский