菜单的不同项目的功能互换 (7千字)
虽然我是个门外汉,我也要学一学pe diy 。我用DaFixer的文章中谈到的同一窗体中的不同按钮的功能互换的方法尝试了一个DELPHI
软件,真的很棒!另外,我又试了菜单的不同项目的功能互换,也成功了。
下面是一个改动播放MP3的小程序的过程:
1、主菜单:文件
菜单项目:打开、播放、重播、暂停、退出
2、
Delphi源代码(摘自《时尚编程百例会》
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, MPlayer, jpeg, Menus;
type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
OpenDialog1: TOpenDialog;
Timer1: TTimer;
Label1: TLabel;
MainMenu1: TMainMenu;{主菜单,下面是各个项目}
N1: TMenuItem;{文件}
N2: TMenuItem;{打开}
N3: TMenuItem;{播放}
N4: TMenuItem;{重播}
N5: TMenuItem;{暂停}
N6: TMenuItem;{退出}
procedure Timer1Timer(Sender: TObject);
procedure N2Click(Sender: TObject);{打开}
procedure N3Click(Sender: TObject);{播放}
procedure N4Click(Sender: TObject);{重播}
procedure N5Click(Sender: TObject);{暂停}
procedure N6Click(Sender: TObject);{退出}
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
endposition:integer;
implementation
{$R *.DFM}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if mediaplayer1.position=endposition then
begin
mediaplayer1.rewind;
mediaplayer1.play;
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
opendialog1.FileName:='*.mp3';
if opendialog1.Execute then
begin
mediaplayer1.Close;
mediaplayer1.filename:=opendialog1.filename;
label1.caption:='当前播放文件:'+Extractfilename(opendialog1.filename);
mediaplayer1.open;
mediaplayer1.next;
endposition:=mediaplayer1.position;
mediaplayer1.rewind;
N3.enabled:=true;
N4.enabled:=false;
N6.enabled:=false;
end;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
if mediaplayer1.mode=mppaused then
begin
mediaplayer1.Resume;
end
else
begin
mediaplayer1.play;
end;
N6.Enabled:=true;
N4.enabled:=true;
timer1.Enabled:=true;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
mediaplayer1.Rewind;
mediaplayer1.Play;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
mediaplayer1.Pause;
N4.Enabled:=false;
N6.enabled:=false;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
mediaplayer1.close;
close;
end;
end.
3、下面是在WinHex9.92中复制下来的相关信息:
(复制的方法是选中区域后,点EDIT--COPY BLOCK--EDITOR DISPLAY ,再粘贴到所需处.)
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00418672 54 46 6F 72 6D 31 05 46 6F 72 6D 31 04 4C 65 TForm1.Form1.Le
00418688 66 74 03 0E 01 03 54 6F 70 03 31 01 05 57 69 64 ft....Top.1..Wid
00418704 74 68 03 61 01 06 48 65 69 67 68 74 03 99 00 07 th.a..Height.?.
00418720 43 61 70 74 69 6F 6E 06 09 4D 50 33 B2 A5 B7 A2 Caption..MP3播放
00418736 C6 F7 05 43 6F 6C 6F 72 07 09 63 6C 42 74 6E 46 器.Color..clBtnF
00418752 61 63 65 0C 46 6F 6E 74 2E 43 68 61 72 73 65 74 ace.Font.Charset
00418768 07 0F 44 45 46 41 55 4C 54 5F 43 48 41 52 53 45 ..DEFAULT_CHARSE
00418784 54 0A 46 6F 6E 74 2E 43 6F 6C 6F 72 07 0C 63 6C T.Font.Color..cl
00418800 57 69 6E 64 6F 77 54 65 78 74 0B 46 6F 6E 74 2E WindowText.Font.
00418816 48 65 69 67 68 74 02 F5 09 46 6F 6E 74 2E 4E 61 Height.?Font.Na
00418832 6D 65 06 0D 4D 53 20 53 61 6E 73 20 53 65 72 69 me..MS Sans Seri
00418848 66 0A 46 6F 6E 74 2E 53 74 79 6C 65 0B 00 04 4D f.Font.Style...M
00418864 65 6E 75 07 09 4D 61 69 6E 4D 65 6E 75 31 0E 4F enu..MainMenu1.O
00418880 6C 64 43 72 65 61 74 65 4F 72 64 65 72 08 0D 50 ldCreateOrder..P
00418896 69 78 65 6C 73 50 65 72 49 6E 63 68 02 60 0A 54 ixelsPerInch.`.T
00418912 65 78 74 48 65 69 67 68 74 02 0D 00 06 54 4C 61 extHeight....TLa
00418928 62 65 6C 06 4C 61 62 65 6C 31 04 4C 65 66 74 02 bel.Label1.Left.
00418944 18 03 54 6F 70 02 10 05 57 69 64 74 68 02 03 06 ..Top...Width...
00418960 48 65 69 67 68 74 02 0D 00 00 0C 54 4D 65 64 69 Height.....TMedi
00418976 61 50 6C 61 79 65 72 0C 4D 65 64 69 61 50 6C 61 aPlayer.MediaPla
00418992 79 65 72 31 04 4C 65 66 74 02 40 03 54 6F 70 02 yer1.Left.@.Top.
00419008 20 05 57 69 64 74 68 03 FD 00 06 48 65 69 67 68 .Width.?.Heigh
00419024 74 02 1E 08 54 61 62 4F 72 64 65 72 02 00 00 00 t...TabOrder....
00419040 0B 54 4F 70 65 6E 44 69 61 6C 6F 67 0B 4F 70 65 .TOpenDialog.Ope
00419056 6E 44 69 61 6C 6F 67 31 04 4C 65 66 74 03 98 00 nDialog1.Left.?
00419072 03 54 6F 70 02 38 00 00 06 54 54 69 6D 65 72 06 .Top.8...TTimer.
00419088 54 69 6D 65 72 31 07 4F 6E 54 69 6D 65 72 07 0B Timer1.OnTimer..
00419104 54 69 6D 65 72 31 54 69 6D 65 72 04 4C 65 66 74 Timer1Timer.Left
00419120 03 B8 00 03 54 6F 70 02 38 00 00 09 54 4D 61 69 .?.Top.8...TMai
00419136 6E 4D 65 6E 75 09 4D 61 69 6E 4D 65 6E 75 31 04 nMenu.MainMenu1.
00419152 4C 65 66 74 02 78 03 54 6F 70 02 38 00 09 54 4D Left.x.Top.8..TM
00419168 65 6E 75 49 74 65 6D 02 4E 31 07 43 61 70 74 69 enuItem.N1.Capti
00419184 6F 6E 06 04 CE C4 BC FE 08 53 68 6F 72 74 43 75 on..文件.ShortCu
00419200 74 03 46 40 00 09 54 4D 65 6E 75 49 74 65 6D 02 t.F@..TMenuItem.
00419216 4E 32 07 43 61 70 74 69 6F 6E 06 04 B4 F2 BF AA N2.Caption..打开
00419232 08 53 68 6F 72 74 43 75 74 03 4F 40 07 4F 6E 43 .ShortCut.O@.OnC
00419248 6C 69 63 6B 07 07 4E 32 43 6C 69 63 6B 00 00 09 lick..N2Click...---A
00419264 54 4D 65 6E 75 49 74 65 6D 02 4E 33 07 43 61 70 TMenuItem.N3.Cap
00419280 74 69 6F 6E 06 04 B2 A5 B7 C5 08 53 68 6F 72 74 tion..播放.Short
00419296 43 75 74 03 50 40 07 4F 6E 43 6C 69 63 6B 07 07 Cut.P@.OnClick..
00419312 4E 33 43 6C 69 63 6B 00 00 09 54 4D 65 6E 75 49 N3Click...TMenuI--B
00419328 74 65 6D 02 4E 34 07 43 61 70 74 69 6F 6E 06 04 tem.N4.Caption..
00419344 D6 D8 B2 A5 08 53 68 6F 72 74 43 75 74 03 52 40 重播.ShortCut.R@
00419360 07 4F 6E 43 6C 69 63 6B 07 07 4E 34 43 6C 69 63 .OnClick..N4Clic-C
00419376 6B 00 00 09 54 4D 65 6E 75 49 74 65 6D 02 4E 35 k...TMenuItem.N5
00419392 07 43 61 70 74 69 6F 6E 06 04 D4 DD CD A3 08 53 .Caption..暂停.S
00419408 68 6F 72 74 43 75 74 03 50 40 07 4F 6E 43 6C 69 hortCut.P@.OnCli
00419424 63 6B 07 07 4E 35 43 6C 69 63 6B 00 00 09 54 4D ck..N5Click...TM--D
00419440 65 6E 75 49 74 65 6D 02 4E 36 07 43 61 70 74 69 enuItem.N6.Capti
00419456 6F 6E 06 04 CD CB B3 F6 08 53 68 6F 72 74 43 75 on..退出.ShortCu
00419472 74 03 45 40 07 4F 6E 43 6C 69 63 6B 07 07 4E 36 t.E@.OnClick..N6--E
00419488 43 6C 69 63 6B 00 00 00 00 00 00 00 00 00 02 00 Click...........
4、
只要在上面A、B、C、D、E五处分别把N2Click、N3Click、N4Click、N5Click、N6Click中的
2、3、4、5、6几个数字交叉改动一下,就实现了菜单的不同项目的功能互换。
但是如何加上原软件中没有的功能(如:把“关于”菜单的功能改为播放一首MP3)该怎么办,请大家告诉我。
感谢upfeed1和+DaFixer的文章,同时向pll261致敬。
