Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Отображение смайлов в RichView


Автор: Andreyzpr 24.7.2007, 13:31
Многие ищут, как в программе выводить смайлы
Я и сам интересовался по этому вопросу, и видел у других такие вопросы..
Вот, кому надо, вылаживаю исходный код, где с помощью компонента RichView программа поддерживает смайлы - довольно простой код... RichView довольно хороший компонет, поэтому для тех, кто пишет чат как раз!

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, StdCtrls, RVStyle, RVScroll, RichView;

type
  TForm1 = class(TForm)
    rv: TRichView;
    RVStyle1: TRVStyle;
    Memo1: TMemo;
    Button1: TButton;
    ImageList1: TImageList;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    function SmileNo(Smile:String) : Integer;
    procedure AddWithIcons( s: String; StyleNo: Integer; var ParaNo: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AddWithIcons( s: String; StyleNo: Integer; var ParaNo: Integer);
var s2: String;
    p: Integer;
    smile:String;
begin
  s2 := '';
  while s<>'' do
  begin
    p := Pos(':', s);
    if p=0 then
    begin
      rv.AddNL(s2+s, StyleNo, ParaNo);
      ParaNo := -1;
      exit;
    end;
    if (Length(s)>p) and (s[p+1] in [')','1','2', '3', '4', '5', '6', '7', '?', '!', '(']) then
    begin
      s2 := s2+Copy(s, 1, p-1);
      if s2<>'' then
      begin
        rv.AddNL(s2, StyleNo, ParaNo);
        s2 := '';
        ParaNo := -1;
      end;
      rv.AddBulletEx( '', SmileNo(s[p+1]), ImageList1, ParaNo);
      ParaNo := -1;
      s := Copy(s, p+2, Length(s));
    end
    else
    begin
      s2 := Copy(s, 1, p);
      s := Copy(s, p+1, Length(s));
    end;
  end;
  if s2<>'' then
    begin
      rv.AddNL(s2, StyleNo, ParaNo);
      s2 := '';
      ParaNo := -1;
    end;
end;

function TForm1.SmileNo(Smile:String) : Integer;
begin
if Smile = ')' then SmileNo:=0;
if Smile = '1' then SmileNo:=1;
if Smile = '2' then SmileNo:=2;
if Smile = '3' then SmileNo:=3;
if Smile = '4' then SmileNo:=4;
if Smile = '5' then SmileNo:=5;
if Smile = '6' then SmileNo:=6;
if Smile = '7' then SmileNo:=7;
if Smile = '?' then SmileNo:=8;
if Smile = '!' then SmileNo:=9;
if Smile = '(' then SmileNo:=10;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ParaNo:Integer;
begin
rv.AddNL('', 0, 0);
ParaNo:=-1;
AddWithIcons(Memo1.Text, 0, ParaNo);
rv.FormatTail;
Memo1.Clear;
end;


удачи в проектах ;-)

Автор: ALeXandrK 30.7.2007, 18:12
Спасибо smile 

Автор: Yanis 30.7.2007, 18:19
Блин, ну вот если бы в RichEdit смайлы, а тут… smile 

Автор: Andreyzpr 1.8.2007, 19:02
Yanis, а у меня нету этого компонента..
есть TRichViewEdit... нада поискать буит ;)

Автор: Yanis 1.8.2007, 20:06
Цитата(Andreyzpr @  1.8.2007,  20:02 Найти цитируемый пост)
Yanis, а у меня нету этого компонента..

smile
Почему?
Обычно он сидит на закладке Win32.

Автор: aktuba 2.8.2007, 03:08
Цитата

Yanis, а у меня нету этого компонента..
есть TRichViewEdit... нада поискать буит ;) 


А ты в стандартных посмотри внимательнее =))))))

Автор: Andreyzpr 9.8.2007, 14:08
У меня есть вкладка Win 3.1 а не Win32
в ней нету :( :( :(

Автор: Yanis 9.8.2007, 17:40
Скопируй на форму:
Код
object RichEdit1: TRichEdit
end

Автор: BaD_SeCt0R 9.8.2007, 19:58
  TRichEdit = class(TCustomRichEdit)  // модуль ComCtrls    smile 

Автор: Andreyzpr 10.8.2007, 16:25
Yanis, [Error] Unit1.pas(19): Declaration expected but 'OBJECT' found

Автор: Yanis 10.8.2007, 18:29
Andreyzpr
На форму скопируй, а не в код.

Автор: Gwire 10.8.2007, 20:51
Это из Delphi6

Автор: Andreyzpr 11.8.2007, 18:35
А, все, нашол....
не, того компонента вообще незнаю, не работал с ним :( :( :(

Автор: darkgrey 22.1.2009, 19:51
одна проблема, весь текст отображается в одну строку а в том месте где должен быть переход на новую строку появляется два квадратика
я так понял это из-за того что из Memo мы отдаем текст многострочный, а в переменную 's' он присваевается однострочный
а вот как это исправить незнаю((

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)