万望delphi高手指点一下窗体调用中的问题!
unitmain;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Fo...
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TmainForm = class(TForm)
TreeView1: TTreeView;
CheckBox1: TCheckBox;
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
mainForm: TmainForm;
header:string;//用来存储Treeview1节点的项目字符串
implementation
uses version;
{$R *.dfm}
procedure TmainForm.CheckBox1Click(Sender: TObject);
begin
if Treeview1.Selected.Level<>1 then
begin
showmessage('请先在文选列表中选择篇目');
Treeview1.SetFocus ;
end
else
begin
header:=TreeView1.Selected.Text;//把篇目字符串赋给变量
if application.MessageBox(pchar(concat('您可以自己先尝试翻译一下再参考翻译文本,效果可能会更好'
+#13+#10+#10+' 您现在就要看《',header,'》的译文吗?')),'提示',mb_yesno)=idYes then
begin
Version.Show ;
end;
end;
end;
end.
------------
unit version;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TversionForm = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
versionForm: TversionForm;
implementation
uses main;
{$R *.dfm}
procedure TversionForm.FormCreate(Sender: TObject);
var
strAdd:string;
begin
header:=TreeView1.Selected.Text ;//取得点击主窗体treeview节点时的标题文本
{问题出在这一句,运行就说TreeView1:未声明的标识符}
strAdd:=concat(header,'译文'); //在原标题字符串后增加“译文”
memo1.Lines.LoadFromFile('f:\text\strAdd.rtf');
end;
procedure TversionForm.Button1Click(Sender: TObject);
begin
versionform.Close;//关闭窗体
end;
end.
说明:想实现的功能:点击主窗体按钮,在另一窗体显示文本
外行切勿添乱!!
按123avc123 说述,解决了一些问题,并且把memo换成了richedit1.但仍没有解决根本问题-出现异常信息:找不到richedit1.Lines.LoadFromFile('f:\text\strAdd.rtf');文件。反复检查F盘的文件无误。并且在主窗体中是可以显示的。那么问题仍然存在于两窗体的调用中(好像是strAdd:=concat(header,'译文');)中的header的置主窗体传不过来.
请高手能否亲自做一做? 展开
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TmainForm = class(TForm)
TreeView1: TTreeView;
CheckBox1: TCheckBox;
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
mainForm: TmainForm;
header:string;//用来存储Treeview1节点的项目字符串
implementation
uses version;
{$R *.dfm}
procedure TmainForm.CheckBox1Click(Sender: TObject);
begin
if Treeview1.Selected.Level<>1 then
begin
showmessage('请先在文选列表中选择篇目');
Treeview1.SetFocus ;
end
else
begin
header:=TreeView1.Selected.Text;//把篇目字符串赋给变量
if application.MessageBox(pchar(concat('您可以自己先尝试翻译一下再参考翻译文本,效果可能会更好'
+#13+#10+#10+' 您现在就要看《',header,'》的译文吗?')),'提示',mb_yesno)=idYes then
begin
Version.Show ;
end;
end;
end;
end.
------------
unit version;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TversionForm = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
versionForm: TversionForm;
implementation
uses main;
{$R *.dfm}
procedure TversionForm.FormCreate(Sender: TObject);
var
strAdd:string;
begin
header:=TreeView1.Selected.Text ;//取得点击主窗体treeview节点时的标题文本
{问题出在这一句,运行就说TreeView1:未声明的标识符}
strAdd:=concat(header,'译文'); //在原标题字符串后增加“译文”
memo1.Lines.LoadFromFile('f:\text\strAdd.rtf');
end;
procedure TversionForm.Button1Click(Sender: TObject);
begin
versionform.Close;//关闭窗体
end;
end.
说明:想实现的功能:点击主窗体按钮,在另一窗体显示文本
外行切勿添乱!!
按123avc123 说述,解决了一些问题,并且把memo换成了richedit1.但仍没有解决根本问题-出现异常信息:找不到richedit1.Lines.LoadFromFile('f:\text\strAdd.rtf');文件。反复检查F盘的文件无误。并且在主窗体中是可以显示的。那么问题仍然存在于两窗体的调用中(好像是strAdd:=concat(header,'译文');)中的header的置主窗体传不过来.
请高手能否亲自做一做? 展开
展开全部
绝对引用
header:=mainform.TreeView1.Selected.Text;
其实,你的变量header,在versionForm的show之前不是已经取得了TreeView1.Selected.Text的值了吗?那么在versionForm的Create之前,干嘛还要取一次呢?直接strAdd:=header不就行了吗?
另外,在mainform里面,Version.Show;,是不是应该改为versionform.show;呢?
我试过了,代码是没有问题的。不过strAdd:=concat(header,'译文')这句并没有什么用处,因为在代码中strAdd没有使用出来。但这行没有出现问题。编译能正常通过。
我现在怀疑你的窗体构造有问题。因为你的versionForm在Create的时候要调用mainform的东西,所以versionform不能让程序一运行就自动构造。你只能把versionform设置为手动创建。在mainform的versionform.Show这行之前,先创建versionform,然后再show出来。
header:=mainform.TreeView1.Selected.Text;
其实,你的变量header,在versionForm的show之前不是已经取得了TreeView1.Selected.Text的值了吗?那么在versionForm的Create之前,干嘛还要取一次呢?直接strAdd:=header不就行了吗?
另外,在mainform里面,Version.Show;,是不是应该改为versionform.show;呢?
我试过了,代码是没有问题的。不过strAdd:=concat(header,'译文')这句并没有什么用处,因为在代码中strAdd没有使用出来。但这行没有出现问题。编译能正常通过。
我现在怀疑你的窗体构造有问题。因为你的versionForm在Create的时候要调用mainform的东西,所以versionform不能让程序一运行就自动构造。你只能把versionform设置为手动创建。在mainform的versionform.Show这行之前,先创建versionform,然后再show出来。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询