求助(100分)

  • 主题发起人 zhanggok
  • 开始时间
Z

zhanggok

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一本书上的代码


unit EditForm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes,

Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;

type
TMainForm = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
PopupMenu: TPopupMenu;
procedure FormCreate(Sender: TObject);
procedure UndoItemClick(Sender: TObject);
procedure CutItemClick(Sender: TObject);
procedure CopyItemClick(Sender: TObject);
procedure PasteItemClick(Sender: TObject);
procedure DelItemClick(Sender: TObject);
procedure AllItemClick(Sender: TObject);
procedure PopupMenuPopup(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;
edit :tedit;
implementation

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
var
NewItem:TmenuItem;
begin
MainForm.Caption:='标签和菜';
label1.FocusControl:=Edit1; //使标签和控件相关联
label1.Caption:='服务器名(&S):';
label2.FocusControl:=Edit2;
label2.Caption:='用 户 名(&U):';
label3.FocusControl:=Edit3;
label3.Caption:=' 密 码:(&P)';
edit1.Text:='';
edit1.CharCase:=ecUpperCase; //使输入字符自动变大写
edit2.Text:='';
edit3.Text:='';
edit3.PasswordChar:='*'; //设置密码输入样式
//下面创建子菜单,同时关联处理事件
NewItem:=TmenuItem.Create(Self);
NewItem.Caption:='撤销';
popupmenu.Items.Insert(0,NewItem);
NewItem.OnClick := UndoItemClick;
NewItem:=TmenuItem.Create(Self);
NewItem.Caption:='-';
popupmenu.Items.Insert(1,NewItem);
NewItem:=TmenuItem.Create(Self);
NewItem.Caption:='剪切';
popupmenu.Items.Insert(2,NewItem);
NewItem.OnClick := CutItemClick;
NewItem:=TmenuItem.Create(Self);
NewItem.Caption:='复制';
popupmenu.Items.Insert(3,NewItem);
NewItem.OnClick := CopyItemClick;
NewItem:=TmenuItem.Create(Self);
NewItem.Caption:='粘贴';
popupmenu.Items.Insert(4,NewItem);
NewItem.OnClick :=PasteItemClick;;
NewItem:=TmenuItem.Create(Self);
NewItem.Caption:='删除';
popupmenu.Items.Insert(5,NewItem);//创建一项
NewItem.OnClick := DelItemClick; //关联click事


NewItem:=TmenuItem.Create(Self);
NewItem.Caption:='-';
popupmenu.Items.Insert(6,NewItem);
NewItem:=TmenuItem.Create(Self);
NewItem.Caption:='全选';
popupmenu.Items.Insert(7,NewItem);
NewItem.OnClick := AllItemClick;
end;

procedure TMainForm.UndoItemClick(Sender: TObject);
begin
with Sender as TMenuItem do
edit.Undo(); //取消上一次的输入
end;

procedure TMainForm.CopyItemClick(Sender: TObject);
begin
with Sender as TMenuItem do
edit.CopyToClipboard(); //拷贝到剪贴板
end;
procedure TMainForm.PasteItemClick(Sender:

TObject);
begin
with Sender as TMenuItem do
edit.PasteFromClipboard(); //从剪贴板上

粘贴
end;
procedure TMainForm.DelItemClick(Sender: TObject);
begin
with Sender as TMenuItem do
edit.ClearSelection(); //清除选择内容
end;
procedure TMainForm.AllItemClick(Sender: TObject);
begin
with Sender as TMenuItem do
edit.SelectAll(); //选择全部内容
end;
procedure TMainForm.CutItemClick(Sender: TObject);
begin
with Sender as TMenuItem do
edit.CutToClipboard(); //剪切到剪贴板
end;
procedure TMainForm.PopupMenuPopup(Sender:

TObject);
begin
//菜单弹出时,得到焦点所在地edit组件
if edit1.Focused=True then
edit:=edit1;
if edit2.Focused=True then
edit:=edit2;
if edit3.Focused=True then
edit:=edit3;
end;
end.


其中with Sender as TMenuItem do
edit.Undo();
代表什么意思我只知AS是强制转换undo()是取消修改如果不用WITH应如何写.为什么这样写当click菜单时可以取消修改,也就是它们之间是如何关联的.
 
这里没有
with Sender as TMenuItem do
好像也应该没什么关系。注释掉试试如何?


》为什么这样写当click菜单时可以取消修改,也就是它们之间是如何关联的.
edit.Undo(); 不就是当前Edit(edit1、2or3)的操纵吗?

procedure TMainForm.PopupMenuPopup(Sender:
TObject);
begin
//菜单弹出时,得到焦点所在地edit组件
if edit1.Focused=True then
edit:=edit1;
if edit2.Focused=True then
edit:=edit2;
if edit3.Focused=True then
edit:=edit3;
end;
这里不是指明了edit代表的控件吗?
 
(Sender as TMenuItem).edit.Undo();

你应该明白了
在一个with叙述中可以省略栏位指示
 
AS是安全转换不是强制转换
强制转换应该是 TMenuItem(Sender)
with Sender as TMenuItem do
edit.Undo();
这种写法让人有点儿不可理解.
在这儿其实直接 edit.Undo就可以了
不用with时可以这样
(sender as TMenuItem).Caption:='test';
 
为什么要进行转换,如不转换sender又代表什么
 
Sender就是发送此消息的对象啊
比如:
procedure TMainForm.CutItemClick(Sender: TObject);
^^^^^^^^
这里的Sender就是CutItem
procedure TMainForm.OtherItemClick(Sender: TObject);
^^^^^^^^^^
这里的Sender就是OtherItem
你发现这里的规律没有
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
441
import
I
I
回复
0
查看
711
import
I
I
回复
0
查看
392
import
I
I
回复
0
查看
487
import
I
顶部