300分寻求!!!类于QQ那样的输入框实时把转义符变为表情的那样效果,存储转义符等,希望大家指点!!! ( 积分: 300 )

  • 主题发起人 主题发起人 delphigaoren
  • 开始时间 开始时间
D

delphigaoren

Unregistered / Unconfirmed
GUEST, unregistred user!
300分寻求!!!类于QQ那样的输入框实时把转义符变为表情的那样效果,存储转义符等,希望大家指点,最好有代码提示!!!
 
使用RichEdit,当输入为/的时候开始累计后续输入的字符,当符合要求的时候自动插入图片进行替换,实现起来应该不难
 
看看这个,是你想要的 源代码也有。
http://www.2ccc.com/article.asp?articleid=3725
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
redt1: TRichEdit;
procedure redt1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
IsSpecialString:Boolean;
SpecialString :string;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
IsSpecialString :=False;
SpecialString :='';
end;

function GetCharFromVirtualKey(Key: Word): string;
var//http://delphi.about.com/od/adptips2006/qt/vkey2char.htm
keyboardState: TKeyboardState;
asciiResult: Integer;
begin
GetKeyboardState(keyboardState) ;

SetLength(Result, 2) ;
asciiResult := ToAscii(key, MapVirtualKey(key, 0), keyboardState, @Result[1], 0) ;
case asciiResult of
0: Result := '';
1: SetLength(Result, 1) ;
2:;
else
Result := '';
end;
end;

procedure TForm1.redt1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not IsSpecialString then
begin
SpecialString :='';
if GetCharFromVirtualKey(Key)='/' then
begin
IsSpecialString :=True;
SpecialString :=GetCharFromVirtualKey(Key);
end;
end
else begin
if Key=VK_BACK then
SpecialString :=Copy(SpecialString,1,Length(SpecialString)-1)
else
SpecialString :=SpecialString +GetCharFromVirtualKey(Key);
if SpecialString='/Test' then
begin
IsSpecialString :=False;

redt1.SelLength :=0;
redt1.SelStart :=redt1.SelStart -Length(SpecialString) +1;
redt1.SelLength :=Length(SpecialString);
redt1.SelText :='Test is Ok http://www.yesky.com/TLimages/smile/face01.gif';

SpecialString :='';
end;
end;

Caption :=SpecialString;
end;

end.
 
上面只是替换特殊字符串为另一个特殊字符串,楼主可以自行更改这个具体的替换内容,呵呵

程序思路和结构应该如上所示.
 
dawnsong,
我不太明白你的意思!!
还有人有其它的的办法吗?
 
使用RichEdit,当输入为/的时候开始累计后续输入的字符,当符合要求的时候自动插入图片进行替换,实现起来应该不难
 
如楼上说说。
你在插入的时候判断就可以了。可以使用第三方的RXLIB的RICHEDIT2.0,对图像支持不错的。
在插入的时候判断前面的字符是否转义字符。如果是就切换并替换成图片。。
 
转义符是怎么存放的,存放在哪里???要是我删除输入框中 的图片,转义符的顺序是不是乱了???
 
那就取字符串被!
使用POS函数判断一段字符串中是否包含"/",
接着就是你自己的想法了
 
转义符是怎么存放的,存放在哪里???要是我删除输入框中 的图片,转义符的顺序是不是乱了???
 
楼主有自己的思路么?运行下我写的那么短的代码,试试看,我只不过没有使用图片而已,这个转义字符串应该都是自己定义的,你可以定义一个list,然后在这个里面寻找判断然后转换
 
你们所说的方法很难实现,在鼠标响应图片转义符就容易错,
网上
http://visa.yculblog.com/post.661952.html
是用ole放入图片
我想请请教你们可不可以分析ole里面内容后再转为指定转义符呢????
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部