小问题,老大们帮帮忙!

wenyin 2002-05-16 02:39:49
1.我在Delphi 6中建了一个MainForm和一个ChildForm,然后加了一个ActionList控件,控件包含一个WindowsClose操作,但是我不知道如何添加代码使这个操作能关闭掉ChildForm。
2.Delphi 6的ActionList中的FileOpen已经带了Dialog,我在MainForm中点击了Open过后弹出了对话框,选择文件后能打开。问题是打开了文件过后此Dialog又自动弹出。怎么办?
3.Delphi 6的ImageList是不是有问题哦?我在MainMenu中指定了的编号没有什么用,图标一点都没有显示,还是文字。
...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenyin 2002-05-17
  • 打赏
  • 举报
回复
哦,问题我已经找到了。其实是一个逻辑问题,程序的语法没有问题的。
关键的地方在:
procedure TMainForm.FileOpen1BeforeExecute(Sender: TObject);
begin
if FileOpen1.Dialog.Execute then
begin
{CreateChildForm是自定义的私有函数,用于建立一个MDIChild}
CreateChildForm(FileOpen1.Dialog.FileName);
end;
end;
我查阅了一下BeforeExecute的Help,原文是这样写的:
Occurs immediately before the dialog appears.

property BeforeExecute: TNotifyEvent;

Description

Write a BeforeExecute event handler to initialize the dialog immediately before it executes. When the action fires, it generates a BeforeExecute event, and then executes its associated dialog.
翻译一下:
在对话框出现前就马上出现的。
特性 BeforeExecute: TNotifyEvent;
描述
在对话框执行前就对它立即运行的初始化BeforeExecute操作。即当动作被激活的时候,它产生一个BeforeExecute事件并执行它的关联对话框。

问题就在:当动作被激活的时候,它产生一个BeforeExecute事件并执行它的关联对话框。
在上述的代码中我已经添加了一个BeforeExecute事件,就是建立一个MDIChild,并且打开对话框中选中的文件,然后它再关联一个操作。那么,关联的是什么操作呢?就是OnAccept,而OnAccept默认的操作(尽管你没有添加任何的代码)就是打开对话框并接受选点文件。所以就会出现上面所说的情况了。知道了问题就好办了,先把FileOpen1的BeforeExecute事件清空,再添加一个OnAccept事件。问题解决了,OnAccept事件代码如下:

procedure TMainForm.FileOpen1Accept(Sender: TObject);
begin
CreateChildForm(FileOpen1.Dialog.FileName);
end;
wenyin 2002-05-17
  • 打赏
  • 举报
回复
我的代码是:

procedure TMainForm.FileOpen1BeforeExecute(Sender: TObject);
begin
if FileOpen1.Dialog.Execute then
begin
{CreateChildForm是自定义的私有函数,用于建立一个MDIChild}
CreateChildForm(FileOpen1.Dialog.FileName);

end;
end;

现在的问题是,打开一个文件后,OpenDialog不会自动关闭。要我手动关闭或双击一文件或点击“打开”(一文件)才关闭。怎么搞的哦?
以下是我的全部代码:


unit UnitMDI;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ImgList, ActnList, StdActns, Menus;

type
TMainForm = class(TForm)
ImageList1: TImageList;
StatusBar1: TStatusBar;
ActionList1: TActionList;
FileOpen1: TFileOpen;
FileNew1: TAction;
MainMenu1: TMainMenu;
F1: TMenuItem;
N1: TMenuItem;
O1: TMenuItem;
FileExit1: TFileExit;
X1: TMenuItem;
N2: TMenuItem;
ViewStatuBar1: TAction;
V1: TMenuItem;
ViewStatuBar11: TMenuItem;
WindowClose1: TWindowClose;
W1: TMenuItem;
L1: TMenuItem;
procedure X1Click(Sender: TObject);
procedure ViewStatuBar1Execute(Sender: TObject);
procedure FileOpen1BeforeExecute(Sender: TObject);
procedure FileNew1Execute(Sender: TObject);
procedure WindowClose1Execute(Sender: TObject);
private
{ Private declarations }
procedure CreateChildForm(const Name: String);
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

{$R *.dfm}

uses UnitChild;

procedure TMainForm.CreateChildForm(const Name: String);
var
Child: TChildForm;
begin
Child:=TChildForm.Create(Application);
Child.Caption:=Name;
if FileExists(Name) Then
Child.Memo1.Lines.LoadFromFile(Name);
end;

procedure TMainForm.X1Click(Sender: TObject);
begin
Close;
end;

procedure TMainForm.ViewStatuBar1Execute(Sender: TObject);
begin
ViewStatuBar1.Checked:=NOT ViewStatuBar1.Checked;
StatusBar1.Visible:=NOT StatusBar1.Visible;
end;

procedure TMainForm.FileOpen1BeforeExecute(Sender: TObject);
begin
if FileOpen1.Dialog.Execute then
begin
CreateChildForm(FileOpen1.Dialog.FileName);

end;
end;

procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
CreateChildForm('文档' + inttostr(MDIChildCount + 1));
end;

procedure TMainForm.WindowClose1Execute(Sender: TObject);
begin
if Assigned(ActiveMDIChild) then
ActiveMDIChild.Close;
end;

end.
wenyin 2002-05-17
  • 打赏
  • 举报
回复
1、3的问题解决了,我就是指的是MDIchild谢谢了,不好意思我没有说清楚。
但是2还是不行哦。我没有用自己的对话框,是FileOpen包装好了的。到底该如何解决呢?
短歌如风 2002-05-16
  • 打赏
  • 举报
回复
1.你的ChildForm是指什么?如果是MDIChild的话,应该这样写:
if Assigned(ActiveMDIChild) then
ActiveMDIChild.Close;
2.不要使用自己的对话框,在Action的OnAccept中这样写:
procedure TForm1.FileOpen1Accept(Sender: TObject);
begin
ShowMessage((Sender as TFileOpen).Dialog.FileName);
end;
或者不用FileOpen,使用自己的Action.
3.我试过了没有问题.是不是你忘了设置MainMenu的Images属性?还有,在菜单编辑器中是不显示图标的.
wenyin 2002-05-16
  • 打赏
  • 举报
回复
不会吧,来个人回答一下嘛!在下先谢谢了!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧