请问一个捕捉消息的问题(10分)

  • 主题发起人 主题发起人 awfigsk
  • 开始时间 开始时间
A

awfigsk

Unregistered / Unconfirmed
GUEST, unregistred user!
当在一个表单时,只有一个memo控件,并且memo控件align属性设为alclient,这时,表单全部
被memo控件遮住,有一个这样的问题:
当我设置了表单的OnKeyPress属性,
procedure TForm1.FormKeyPress(Sender: TObject
var Key: Char);
begin
if Msg.CharCode=VK_ESCAPE then
showmessage('成功');
end;
但是我按了ESCAPE键,并不会出现提示框,[red]我不想在memo的onkepress事件设置该提示框,?
(原因:如果表单上的控件没有onkeypress事件时,但它遮住了表单,那只有在表单的
onkeypress事件中设置了)[/red]请问有没有其他办法捕捉该escape按下的消息.
 
将form1.keyprebiew=true 试一试
 
如果表单全屏,那该如何?
 
一样可以捕获消息的,你试一试拉吗?
 
我刚刚试过一样可以捕获!
 
不是放大,是全屏,就像超级解霸一样.
 
procedure TForm1.FormKeyPress(Sender: TObject
var Key: Char);
begin
if key=#27 then
showmessage('成功');
end;
是全屏,你利用上面的代码试一试!
 
我的表单有一个ActiveX控件,和一个Edit控件,当运行时,光标在EDIT时,会响应按键,但光标
在ActiveX控件时,就不会响应按键了,这是为什么?上面讲的方法我都用了,还是没有用.
 
你的ActiveX是否有问题那?
我看不到里面怎么实现,把ActiveX 的源代码可以给我吗?
我给你看看?
一般情况下可以实现的。
 
这是电脑爱好者上的一个FLASH播放器的程序.全屏后,我按ESC键没有用.还请您指点一下.
unit main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, ShellCtrls, OleCtrls,
ShockwaveFlashObjects_TLB, ToolWin, ImgList;

type
TForm1 = class(TForm)
ShellTreeView1: TShellTreeView;
Splitter1: TSplitter;
ShockwaveFlash1: TShockwaveFlash;
ImageList1: TImageList;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
procedure ShellTreeView1AddFolder(Sender: TObject;
AFolder: TShellFolder
var CanAdd: Boolean);
procedure ShellTreeView1Change(Sender: TObject
Node: TTreeNode);
procedure FormResize(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject
var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SYSCOMMAND;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ShellTreeView1AddFolder(Sender: TObject;
AFolder: TShellFolder
var CanAdd: Boolean);
begin
if not AFolder.IsFolder then
if UpperCase(ExtractFileExt(AFolder.PathName))<>'.SWF' then
CanAdd:=False;
end;

procedure TForm1.ShellTreeView1Change(Sender: TObject
Node: TTreeNode);
begin
if not ShellTreeView1.SelectedFolder.IsFolder then
begin
if Uppercase(ExtractFileExt(ShellTreeView1.selectedFolder.PathName))='.SWF' then
begin
ShockWaveFlash1.BGColor:='-1';
ShockWaveFlash1.Movie:=ShellTreeView1.SelectedFolder.PathName;
ToolButton1.Enabled:=True;
end
else
ToolButton1.Enabled:=false
end
else
ToolButton1.Enabled:=False;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
Activecontrol:=nil;
ActiveControl:=ShockWaveFlash1;
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
var
FilePathName:string;
Bitmap:TBitmap;
i:integer;
begin
FilePathName:=ShellTreeView1.SelectedFolder.PathName;
Bitmap:=TBitmap.Create;
try
Bitmap.Width:=ShockWaveFlash1.Width;
Bitmap.Height:=ShockWaveFlash1.Height;
ShockWaveFlash1.PaintTo(Bitmap.Canvas.Handle,0,0);
i:=0;
while (FileExists(FilePathName+intToStr(i)+'.bmp')) do
inc(i);
Bitmap.SaveToFile(FilePathName+intToStr(i)+'.bmp');
finally
Bitmap.Free;
end;
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType=SC_MAXIMIZE) then
begin
SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) and not WS_CAPTION);
ShellTreeView1.Visible:=False;
ToolBar1.Visible:=False;
Splitter1.Visible:=False;
self.WindowState:=wsMaximized;
end
else
DefaultHandler(Msg);
end


procedure TForm1.FormKeyDown(Sender: TObject
var Key: Word;
Shift: TShiftState);
begin
if Key=VK_ESCAPE then
begin
Showmessage('ok');
SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) or WS_CAPTION);
Splitter1.Visible:=True;
ShellTreeView1.Visible:=True;
ToolBar1.Visible:=True;
self.WindowState:=wsNormal;
end;
end;

end
 
其中出现的问题就和我上面所说的一样
 
将窗体的
VIEW AS TEXT
文件贴上,让我运行调试
 
flash的控件.
 
ShockwaveFlashObjects_TLB,这个库单元那,我运行不起来,没办法调试
 
不用了,我自己做成了.谢谢!分数奉上!.
 
后退
顶部