![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отобразить рисунок в обычном RichEdit? [D7, WinXP]
Denizzz © (2005-06-10 13:41:00)Как отобразить (вставить) рисунок (например смайлик) в обычном RichEdit?
Eraser (2005-06-10 16:46:00) [1]Dimich1978 (10.06.05 16:42) [3]
У меня данный код не работал... я не стал с этим заморачиваться и перешёл на JvRichEdit, там есть спец. ф-я.
Имаге запихать по вышеописанном коду картинку
Из имэджа получить "картинку" можно так Image.Picture.Bitmap.
В имэджлисте есть ф-я... по моему GetBitmap.
Dimich1978 (2005-06-10 16:42:00) [2]не пойму правда как из Имаге запихать по вышеописанном коду картинку...сто лет не программил и мне подскажите как сделать чтобы это все заработало, желательно не из имиджа, а из ИмагеЛиста.
Dimich1978 (2005-06-10 16:30:00) [3]Вставляем битмап в RichEdit или RichTextBox.
Ниже представлен пример, который можно применить к RxRichEdit, RichEditEx, RichEdit98, и Microsoft RichTextBox (поставляемый с VB5+) не прибегая к использованию буфера обмена или OLE:
function BitmapToRTF(pict: TBitmap): string;
var
bi,bb,rtf: string;
bis,bbs: Cardinal;
achar: ShortString;
hexpict: string;
I: Integer;
begin
GetDIBSizes(pict.Handle,bis,bbs);
SetLength(bi,bis);
SetLength(bb,bbs);
GetDIB(pict.Handle,pict.Palette,PChar(bi)^,PChar(bb)^);
rtf := '{rtf1 {pictdibitmap ';
SetLength(hexpict,(Length(bb) + Length(bi)) * 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;
А вот пример использования этой функции:
{SS это TStringStream, RE это TRxRichEdit, а BMP это TBitmap содержащий картинку.}
SS := TStringStream.Create(BitmapToRTF(BMP));
RE.PlainText := False;
RE.StreamMode := [smSelection];
RE.Lines.LoadFromStream(SS);
SS.Free;
Eraser (2005-06-10 13:43:00) [4]Denizzz (10.06.05 13:41)
Стандартный не подойдёт. Использовать Rx/JvRichEdit.