1.RichEdit无限撤消已经问了好久了还是没有人解答,今天厚脸皮再问一次网上看到的方法是再Form的Create中加入RichEdit.Perform(EM_SETUNDOLIMIT,100,0)设定100次撤消,然后用RichEdit.Perform(EM_UNDO,0,0)代替RichEdit.Undo经测试无效然后有看到说SendMessage(RichEdit.Handle,EM_SETUNDOLIMIT,100,0)的方法,经测试无效有有人说要先设定EM_SETTEXTMODE和TM_MULTILEVELUNDO,两个设定后还是没有用~~~~~~我确信我用的就是RichEdit2,因为打开Lib文件夹下的RichEdit.pas文件,从开头部分看到了RichEdit2字样.请高手解决一下(不用三方控件)2.RichEdit关键字高亮3.RichEdit复制和粘贴问题只有复制和粘贴事件,怎样控制只复制文本(不复制格式)或复制文本和格式全部呢.(比如Dreamweaver中的"复制"和"复制文本"这样)4.整行高亮5.放图片就是怎么在RichEdit中放图片,我试了很久都不行.
麻烦各位了,分不够我可以再加,很急啊!(以上全是Delphi7)

解决方案 »

  1.   

    这些要求,rxRichEdit都可以实现我们专门做文字处理的,从不用richedit,都用rx
      

  2.   

    第一,你看到的pas中的richedit2,并不是指使用20版本的richedit。
    你只要再看仔细些就会发现了。
    你所说的那些,都是正确的,只不过是因为delphi中使用的是RICHEDIT 1.0的版本,所以都无效罢了。
    使用rx的吧。都有了。不用再自己开发。
      

  3.   

    但是不用三方控件就不能实现吗??我有个VS.net 2003 用了richedit可以无限撤消。也就是说我系统里面得richedit确实是2.0版的那么为什么delphi不能识别(楼上是这个意思吧)能不能改下pas文件实现??(以前听说BCB6.0就可以)
      

  4.   

    其实,你只要用用rxRichEdit,就会知道Richedit有多烂了
      

  5.   

    晕,到底rxRichEdit是个什么东西。能不能给个例程或下载
    但是,我还是非常想知道不用三方控件实现的方法!!!(因为我以前看到过这样一个程序,但是无源码……………………)
      

  6.   

    摘要:在RxRichEdit中插入图片的完美解决方法(不使用剪贴板) 
     
     
    例程如下:设Form1上控件RxRichEdit1和Button1。InsertBitmapIntoRxRichEdit使用方法请见Button1Click方法。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, RxRichEd;type
      TForm1 = class(TForm)
        Button1: TButton;
        RxRichEdit1: TRxRichEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses
      JPEG;{$R *.dfm}function ConvertBitmapToRTF(const Bitmap: TBitmap): string;
    var
      bi, bb: string;
      bis, bbs: Cardinal;
      achar: string[2];
      Buffer: string;
      I: Integer;
    type
      PWord = ^Word;
    begin
      GetDIBSizes(Bitmap.Handle, bis, bbs);
      SetLength(bi, bis);
      SetLength(bb, bbs);
      GetDIB(Bitmap.Handle, Bitmap.Palette, PChar(bi)^, PChar(bb)^);
      SetLength(Buffer, (Length(bb) + Length(bi)) * 2);
      i := 1;
      for bis := 1 to Length(bi) do
      begin
        achar := IntToHex(Integer(bi[bis]), 2);
        PWord(@Buffer[i])^ := PWord(@achar[1])^;
        inc(i, 2);
      end;
      for bbs := 1 to Length(bb) do
      begin
        achar := IntToHex(Integer(bb[bbs]), 2);
        PWord(@Buffer[i])^ := PWord(@achar[1])^;
        inc(i, 2);
      end;
      Result := '{\rtf1 {\pict\dibitmap ' + Buffer + ' }}';
    end;procedure InsertBitmapIntoRxRichEdit(const Bitmap: TBitmap; const RxRichEdit:
      TRxRichEdit); overload;
    begin
      RxRichEdit.SelText := ConvertBitmapToRTF(Bitmap);
      RxRichEdit.SelLength := 0;
      RxRichEdit.SelStart := RxRichEdit.SelStart + 1;
    end;procedure InsertBitmapIntoRxRichEdit(const GraphicFileName: string; const
      RxRichEdit: TRxRichEdit); overload;
    var
      Bitmap: TBitmap;  Graphic: TPicture;
    begin
      Graphic := TPicture.Create;
      try
        Graphic.LoadFromFile(GraphicFileName);    if Graphic.Graphic is TBitmap then
          Bitmap := Graphic.Bitmap
        else
        begin
          Bitmap := TBitmap.Create;
          Bitmap.Assign(Graphic.Graphic);
        end;    InsertBitmapIntoRxRichEdit(Bitmap, RxRichEdit);
      finally
        if Bitmap <> Graphic.Bitmap then
          FreeAndNil(Bitmap);    FreeAndNil(Graphic);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      //InsertBitmapIntoRxRichEdit('C:\Temp\Untitled.bmp', RxRichEdit1);
      InsertBitmapIntoRxRichEdit('C:\Temp\Untitled-8.jpg', RxRichEdit1);
      RxRichEdit1.SetFocus;
    end;
    end.
     
     
      

  7.   

    看来lz对编辑器的要求比较复杂,虽然richedit都能实现,但是毕竟麻烦。建议lz使用MSHtml Editor,使用Html格式的文本,这些问题都很迎刃而解。