还记得在delphi中的关于对话框中当你按下几个键后就可以自动运行另一个程序吗?他是如何实现的呢?

时间:2021-07-13 17:35:10
我也想在程序运行的同时,当用户按下某几个键后就运行另一个窗口,可是不知道该怎么做?清高手指教
还有一个就是 我打算在程序运行的时候,自动播放一个音乐,但是这个音乐文件必须单独存在,能否把这个音乐文件一同编进.exe中呢?

15 个解决方案

#1


你说的是彩蛋吧
按键判断很容易,直接在窗体OnKeyPress中判断,

添加文件进EXE请看下面:
通常在Delphi的应用程序中,我们会调用到很多的资源,例如图片,动画(AVI),声音,甚至于别的执行文件。当然,把这些资源分布到不同的目录不失为一个好办法,但是有没有可能把这些资源编译成标准的windows资源从而链接到一个执行文件里面呢? 

我们可以自己做一个RC文件,例如 sample.rc ,RC文件其实就是一个资源文件的描述文本,通过“记事本”程序创建就行了。然后可以输入一些我们要定义的资源,例如:

MEN BITMAP c:\bitmap\men.bitmap
ARJ EXEFILE c:\arj.exe
MOV AVI c:\mov.avi
然后用BRCC32把这个RC文件编译成sample.res(真正的资源文件)。

在Delphi的工程文件中使用 $R 编译指令让Delphi包括资源到EXE文件里面。

{$R sample.res}
这样我们就可以在这个单一的执行文件中调用资源了。举例如下:

EXEFILE:

procedure ExtractRes(ResType, ResName, ResNewName : String);
var 
Res : TResourceStream; 
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); Res.SavetoFile(ResNewName);
Res.Free; 
end;
AVI:

procedure LoadAVI;
begin
{Avi1是一个TAnimate类}
Avi1.ResName:='AVI';
Avi1.Active:=True;
end; 
  

#2


Dephi5中资源文件的创建和使用
http://www.ccw.com.cn/htm/app/aprog/01_3_2_2.asp

谈Delphi编程中资源文件的应用
http://www.138soft.com/htm/AuthorArt/myres.htm

#3


就是判断按键,然后show一个窗体。

#4


能举一个OnKeyPress的例吗?如同时按下ALT加上LOVE

#5


用OnKeyDown事件

form1的keypreview属性设为true 

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (ssAlt in Shift) and (chr(key) in ['a'..'z','A'..'Z','0'..'9']) then
 begin
   edit1.Text:=love;
   if LowerCase(love)='love' then
      form2.Show;
 end;
end;

#6


学习,学习~~~~~~~

#7


谢谢!!!!有机会请你吃饭!!

#8


还有高手在吗?我的目的并没有实现?帮帮我!!!

#9


其实1楼说的都差不多了~~

#10


我是想在按住ALT的同时依次按下L、O、V、E 四个键,然后出现另一个窗口

#11


帮楼主想了个笨方法,下面的代码是按完L和O后出message
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormShow(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  l,o,v,e:boolean;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if  (key=76) then l:=true;
    if (L) and (not o) then
    begin
        if (key=79) then o:=true;
    end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
    l:=False;
    o:=False;
    v:=False;
    e:=False;

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (l) and (o) then
    begin
        l:=False;
        o:=False;
        v:=False;
        e:=False;
        ShowMessage('haha');
    end;
end;

end.

#12


运行之后的的结果出来了吗?

#13


可以编译,但执行后什么反映都没有

#14


复活节彩蛋..呵呵

#15


以前抄来的..你看看

用户在窗体上按住ALT键不放,输入“HELLO”,则会出现一个消息框,提示你激活了复活节彩蛋,具体的彩蛋随便你设计了。下面是程序代码:注意别忘记将窗体FORM1的KeyPreview属性设定为True。 

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, 
 Graphics, Controls, Forms, Dialogs;

type
 TForm1 = class(TForm)
procedure FormKeyDown
 (Sender: TObject; var Key: Word;
 Shift: TShiftState);
 private
 { Private declarations }
 public
 { Public declarations }
 end;

var
 Form1: TForm1;
 keytp :string;
implementation

{$R *.DFM}

procedure TForm1.FormKeyDown
(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
//是否按下ALT键,只接收字符
if (shift=[ssALT]) and (key >=$41) 
 and (key< =$5A) then
 begin
 keytp:=keytp+chr(key);
 if keytp=HELLO then
 begin
 showmessage(你激活了复活节彩蛋);
 end;
 end;
end;

end.

#1


你说的是彩蛋吧
按键判断很容易,直接在窗体OnKeyPress中判断,

添加文件进EXE请看下面:
通常在Delphi的应用程序中,我们会调用到很多的资源,例如图片,动画(AVI),声音,甚至于别的执行文件。当然,把这些资源分布到不同的目录不失为一个好办法,但是有没有可能把这些资源编译成标准的windows资源从而链接到一个执行文件里面呢? 

我们可以自己做一个RC文件,例如 sample.rc ,RC文件其实就是一个资源文件的描述文本,通过“记事本”程序创建就行了。然后可以输入一些我们要定义的资源,例如:

MEN BITMAP c:\bitmap\men.bitmap
ARJ EXEFILE c:\arj.exe
MOV AVI c:\mov.avi
然后用BRCC32把这个RC文件编译成sample.res(真正的资源文件)。

在Delphi的工程文件中使用 $R 编译指令让Delphi包括资源到EXE文件里面。

{$R sample.res}
这样我们就可以在这个单一的执行文件中调用资源了。举例如下:

EXEFILE:

procedure ExtractRes(ResType, ResName, ResNewName : String);
var 
Res : TResourceStream; 
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); Res.SavetoFile(ResNewName);
Res.Free; 
end;
AVI:

procedure LoadAVI;
begin
{Avi1是一个TAnimate类}
Avi1.ResName:='AVI';
Avi1.Active:=True;
end; 
  

#2


Dephi5中资源文件的创建和使用
http://www.ccw.com.cn/htm/app/aprog/01_3_2_2.asp

谈Delphi编程中资源文件的应用
http://www.138soft.com/htm/AuthorArt/myres.htm

#3


就是判断按键,然后show一个窗体。

#4


能举一个OnKeyPress的例吗?如同时按下ALT加上LOVE

#5


用OnKeyDown事件

form1的keypreview属性设为true 

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (ssAlt in Shift) and (chr(key) in ['a'..'z','A'..'Z','0'..'9']) then
 begin
   edit1.Text:=love;
   if LowerCase(love)='love' then
      form2.Show;
 end;
end;

#6


学习,学习~~~~~~~

#7


谢谢!!!!有机会请你吃饭!!

#8


还有高手在吗?我的目的并没有实现?帮帮我!!!

#9


其实1楼说的都差不多了~~

#10


我是想在按住ALT的同时依次按下L、O、V、E 四个键,然后出现另一个窗口

#11


帮楼主想了个笨方法,下面的代码是按完L和O后出message
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormShow(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  l,o,v,e:boolean;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if  (key=76) then l:=true;
    if (L) and (not o) then
    begin
        if (key=79) then o:=true;
    end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
    l:=False;
    o:=False;
    v:=False;
    e:=False;

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (l) and (o) then
    begin
        l:=False;
        o:=False;
        v:=False;
        e:=False;
        ShowMessage('haha');
    end;
end;

end.

#12


运行之后的的结果出来了吗?

#13


可以编译,但执行后什么反映都没有

#14


复活节彩蛋..呵呵

#15


以前抄来的..你看看

用户在窗体上按住ALT键不放,输入“HELLO”,则会出现一个消息框,提示你激活了复活节彩蛋,具体的彩蛋随便你设计了。下面是程序代码:注意别忘记将窗体FORM1的KeyPreview属性设定为True。 

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, 
 Graphics, Controls, Forms, Dialogs;

type
 TForm1 = class(TForm)
procedure FormKeyDown
 (Sender: TObject; var Key: Word;
 Shift: TShiftState);
 private
 { Private declarations }
 public
 { Public declarations }
 end;

var
 Form1: TForm1;
 keytp :string;
implementation

{$R *.DFM}

procedure TForm1.FormKeyDown
(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
//是否按下ALT键,只接收字符
if (shift=[ssALT]) and (key >=$41) 
 and (key< =$5A) then
 begin
 keytp:=keytp+chr(key);
 if keytp=HELLO then
 begin
 showmessage(你激活了复活节彩蛋);
 end;
 end;
end;

end.