不管是静态创建的还是动态创建的RxRichEdit,当执行RxRichEdit.FindDialog(''); 在查找框开着的前提下再执行RxRichEdit.Free的话就会出现内存报错,而且是死循环,把错误对话框按掉又弹出来。但是如果在查找框开着的时候直接关闭程序,则不会报错。不知道大家有没有碰到过?有没有什么解决方法?
附上程序代码:unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, RxRichEd;type
  TForm1 = class(TForm)
    RxRichEdit1: TRxRichEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  RxRichEdit1.FindDialog('');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  RxRichEdit1.Free;
end;end.

解决方案 »

  1.   

    这个是正常的啊.查找窗口与RxRichEdit1是关连的,它不关闭,直接free RxRichEdit1是要出错的,而关闭程序前,是先关闭查找窗口,所以不出错
    解决方法:
    procedure TForm1.Button2Click(Sender: TObject);
    var
     hd:thandle;
    begin
      hd:=FindWindow(0,'查找');
      if hd<>0  then
         DestroyWindow( hd);  //释放查找窗口
      RxRichEdit1.Free;end;
      

  2.   

    用了几年的rxrichedit,还没碰到过这事儿,惭愧。
    倒是发现rxrichedit的lines有问题。
      

  3.   

    谢谢ls两位,问题解决,贴上解决办法:var tDialog: TFindDialog;procedure TForm1.Button1Click(Sender: TObject);
    begin
      tDialog:=RxRichEdit1.FindDialog('');
    end;  procedure TForm1.Button2Click(Sender: TObject);
    begin
      if Assigned(tDialog) then
      begin
        tDialog.CloseDialog;
        Application.ProcessMessages;
      end;
      RxRichEdit1.Free;
    end;procedure TForm1.RxRichEdit1CloseFindDialog(Sender: TObject;
      Dialog: TFindDialog);
    begin
      tDialog:=nil;
    end;
    结帖了。