不管是静态创建的还是动态创建的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.
附上程序代码: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.
解决方法:
procedure TForm1.Button2Click(Sender: TObject);
var
hd:thandle;
begin
hd:=FindWindow(0,'查找');
if hd<>0 then
DestroyWindow( hd); //释放查找窗口
RxRichEdit1.Free;end;
倒是发现rxrichedit的lines有问题。
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;
结帖了。