All pastes #368174 Raw Edit

Mine

public text v1 · immutable
#368174 ·published 2007-02-22 21:55 UTC
rendered paste body
if a user writes ":(" then smile.bmp replace there but when smile.bmp  created in rxrichbox cursor had first position 
i want when user writes":(" then replace there smile.bmp


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    re: TRxRichEdit;
    Image1: TImage;
    Memo1: TMemo;
    Edit1: TEdit;
    procedure reKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
    ax:string;
    x:integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
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.reKeyPress(Sender: TObject; var Key: Char);
var
 ss:TStringStream;
 aci:string;
 v:integer;
begin
  if key=':' then begin
    ax:=key;
  end
  else if ax<>'' then begin
   if key='(' then begin
        SS := TStringStream.Create(BitmapToRTF(image1.Picture.Bitmap));
        RE.PlainText := False;
        RE.StreamMode := [smSelection];
        RE.Lines.LoadFromStream(SS);
        SS.Free;
        ax:='';
   end;
  end;
end;

end.