Главная страница
    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.45 MB
Время: 0.038 c
15-1146952922
algorithm
2006-05-07 02:02
2006.06.04
алгоритм торрент-клиентского приложения


2-1148113941
varfolomey
2006-05-20 12:32
2006.06.04
Непонятное Access Violation


15-1147078723
QuickFinder
2006-05-08 12:58
2006.06.04
Cpp 2 Pas


3-1144221294
RomanH
2006-04-05 11:14
2006.06.04
Репликация данных


3-1144138909
Бульбаш
2006-04-04 12:21
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский