编写一个控件(类似memo),有两个属性file和text,在窗体设计时设置好file,text中显示file的内容,但希望运行时text所显示的内容根据fil

E

eon_ian

Unregistered / Unconfirmed
GUEST, unregistred user!
编写一个控件(类似memo),有两个属性file和text,在窗体设计时设置好file,text中显示file的内容,但希望运行时text所显示的内容根据file内容的变化(file名字不变)而变化。那么这个控件载入file的代码(类似:text:=loadformfile(file))应该写在哪里(200分)<br />
 
加入一个TShellChangeNotifier(D7中)就可以监视file的变动了.
 
不需要实时的根据File的内容更新,而是在每次运行程序时装载(只在运行时装载一次即可)。
但因为控件是在设计时已经生成(Create)的,所以不可能写在Create里。
 
控件:
unit FileMemo;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;

type
TFileMemo = class(TMemo)
private
FFileName: String;
FText: String;
protected
procedure SetFileName(Value: String);
public
constructor Create(AOwner: TComponent); override;
published
property FileName: String read FFileName write SetFileName;
property text: String read FText;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Mr.Nono', [TFileMemo]);
end;

{ TFileMemo }

constructor TFileMemo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FText := '';
if FFileName &lt;&gt; '' then
begin
if FileExists(FFileName) then Self.Lines.LoadFromFile(FFileName);
FText := Self.Lines.Text;
end;
end;

procedure TFileMemo.SetFileName(Value: String);
begin
if Value &lt;&gt; '' then
begin
FFileName := Value;
FText := '';
if Self.Lines.Count &gt; 0 then Self.Lines.Clear;
if FileExists(FFileName) then
begin
Self.Lines.LoadFromFile(FFileName);
FText := Self.Lines.Text;
end;
end;
end;

end.

使用:设置他的FileName属性就可以了
如果要在程序里面动态改变其内容,则如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
FileMemo1.FileName := OpenDialog1.FileName;
end;
这时候 memo里面显示的就是filename的内容了
 
这个程序就是我现在的程序,我需要的是在运行时不需要对FileName赋值
(因为在做界面时已经赋值),但可以通过替换同名的文件的方式来使
运行时显示的Text不一样。
比如我的FileName已经指定为C:/mydoc.txt(在设计时指定)
但如果我更改了mydoc.txt的内容,则重新运行程序时,这个控件Text中内容也会
随着改变。
 
本来这个控件就是在运行时才装载文件的内容的,哪个地方不正确呢?
我已经试过了,好像可以满足你的要求阿[?]
 
我想你试一试就知道了
 
不允许有Button1click事件,要求在设计时指定了FileName(通过属性编辑器)
 
你现在运行的结果是什么?
如果你在设计时指定FileName为C:/mydoc.txt,但后来更改了mydoc.txt的内容,
再重新运行程序时,这个控件Text中内容还是原来的内容吗?
我试验的结果是更改以后的内容阿
 
放到formcreat或formshow事件中
 
接受答案了.
 
顶部