+ Ответить в теме
Показано с 1 по 6 из 6

Тема: Большая проблема для многих программистов (рисунок в RichEdit'е)

  1. #1
    Кандидат в умники LiS Включаюсь LiS Включаюсь LiS Включаюсь Аватар для LiS
    Регистрация
    23.03.2005
    Адрес
    Братск
    Возраст
    38
    Сообщений
    386
    Поблагодарил(а)
    199
    Получено благодарностей: 69 (сообщений: 36).

    По умолчанию Большая проблема для многих программистов (рисунок в RichEdit'е)

    Вот в общем-то сабж...
    Много облазил инета, и заметил что с данной проблемой сталкиваюсться очень много людей... и лишь единицы находят ответ...

    Проблема в следующем: Есть RichEdit, и нужно в него время от времени вставлять на определённые позиции рисунки (смайлы). Пишут что в RichEdit'е это сделать невозможно, нужно использовать TxRichEdit из RX библиотеки компонентов.. нашёл её.. установил... Нашёл якобы "рабочий код", которая вставляет рисунки в этот TxRichEdit... В итоге ничего не работает...

    Кто может мне дать дельный совет, как мне запихать этот несчастный рисунок в RichEdit

  2. #2
    Кандидат в умники JiF Включаюсь JiF Включаюсь JiF Включаюсь
    Регистрация
    20.05.2005
    Сообщений
    420
    Поблагодарил(а)
    0
    Получено благодарностей: 14 (сообщений: 9).

    По умолчанию

    приведи код сюда, который для TRxRichEdit . Я давно когда то делал, работало , сорцы потерялись

  3. #3
    Джедай nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь
    Регистрация
    22.01.2005
    Сообщений
    3,753
    Поблагодарил(а)
    419
    Получено благодарностей: 1,257 (сообщений: 528).
    Телевизор — это просто маленькое прозрачное окошко в трубе духовного мусоропровода. © В. Пелевин.

  4. #4
    Кандидат в умники LiS Включаюсь LiS Включаюсь LiS Включаюсь Аватар для LiS
    Регистрация
    23.03.2005
    Адрес
    Братск
    Возраст
    38
    Сообщений
    386
    Поблагодарил(а)
    199
    Получено благодарностей: 69 (сообщений: 36).

    По умолчанию

    Огромное спасибо, вот этот пример (http://articles.org.ru/cfaq/index.php?qid=238&catid=1) ОЧЕЕНЬ помог... Всё просто и сердито :cool:

  5. #5
    Кандидат в умники JiF Включаюсь JiF Включаюсь JiF Включаюсь
    Регистрация
    20.05.2005
    Сообщений
    420
    Поблагодарил(а)
    0
    Получено благодарностей: 14 (сообщений: 9).

    По умолчанию

    Мда , давайте в подобных темах выкладывать полные ответы на задаваемые вопросы (неограничиваться одной ссылкой ;)) ? (это намёк ;))

  6. #6
    Джедай nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь
    Регистрация
    22.01.2005
    Сообщений
    3,753
    Поблагодарил(а)
    419
    Получено благодарностей: 1,257 (сообщений: 528).

    По умолчанию

    Цитата Сообщение от _jf_
    Мда , давайте в подобных темах выкладывать полные ответы на задаваемые вопросы (неограничиваться одной ссылкой ;)) ? (это намёк ;))
    Вставка BitMap в RxRichEdit

    В теле программы прописываем следующую функцию:

    Код:
    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 {\pict\dibitmap ';
    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;

    Затем используем её:

    Код:
    PROCEDURE TForm1.RunClick(Sender: TObject);
    VAR    i: Integer;
                BitMap1, BitMap2: TBitMap;
                SS:TStringStream;
               BMP: TBitMap;
    BEGIN
    //Вставка картинки
    BMP := TBitMap.Create;
    TRY
    BMP.Assign(Image1.Picture.Bitmap);
    SS := TStringStream.Create(BitmapToRTF(BMP));
    TRY
    RichEdit1.PlainText := False;
    RichEdit1.StreamMode := [smSelection];
    RichEdit1.Lines.LoadFromStream(SS);
    RichEdit1.StreamMode := [];
    RichEdit1.Lines.SaveToFile('C:\Мои документы\temp.rtf');
    FINALLY
    SS.Free;
    END
    FINALLY
    BMP.Free;
    END;
    ShowMessage('Отчет сохранен: C:\Мои документы\temp.rtf');
    END;
    Телевизор — это просто маленькое прозрачное окошко в трубе духовного мусоропровода. © В. Пелевин.

+ Ответить в теме

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

     

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru
Администрация сайта не выражает согласия
с высказыванием участников форума и не несет
ответственности за их содержание.

Копирование любого материала возможно только
при наличии ссылки на сайт.