发信人: lofe ()感激生活(), 信区: BorlandDev
标 题: 控制窗体 (转载)
发信站: 哈工大紫丁香 (2000年09月01日18:52:27 星期五), 站内信件
【 以下文字转载自 VisualProgram 讨论区 】
【 原文由 alias 所发表 】
BorderIcons 下的几个子属性值全改为 False;2、修改 Form 的 BorderStyle 的值为
bsSingle ;3、为了让窗口不能移动,可以自已拦下 WM_NCHITTEST 消息, 对该消息的
处理为:一概回应鼠标点在窗口的 Client 区域, 相信这个视窗就呆呆的不会动了。
详情可以查一下 Win32API Help 的 CreateWindow() 与 WM_NCHITTEST 的说明。
下面是一个例子, 请参考看看:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure WMNCHitTest(var Msg: TMessage); message WM_NCHITTEST;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Close; // 不可少, 因为已经没有其他方法能关闭此窗口了
end;
procedure TForm1.WMNCHitTest(var Msg: TMessage);
begin
inherited; // 这样,移动就不可能了...
Msg.Result := HTCLIENT;
end;
end.
限制FORM的大小
使用过DELPHI的朋友都会注意到DELPHI本身最上面的窗口,
当它极大时只占屏幕的一小部分,它是如何实现的呢,请看下面的说明:
1)在FORM私有声明部分加上如下一行:
procedure WMGetMinMaxInfo( var Message:TWMGetMinMaxInfo ); message
WM_GETMINMAXINFO;
2)在声明部分加上如下几行:
procedure TForm1.WMGetMinMaxInfo( var Message :TWMGetMinMaxInfo );
begin
with Message.MinMaxInfo^ do
begin
ptMaxSize.X := 200; {最大化时宽度}
ptMaxSize.Y := 200; {最大化时高度}
ptMaxPosition.X := 99; {最大化时左上角横坐标}
ptMaxPosition.Y := 99; {最大化时左上角纵坐标}
end;
Message.Result := 0; {告诉Windows你改变了 minmaxinfo}
inherited;
end;
动态修改显示器分辨率
Windows提供给我们两个API函数,可以动态调整显示器的分辨率,他们是
EnumDisplaySettings() 和ChangeDisplaySettings(),下面这个例子就是了
function DynamicResolution(X, Y: word): BOOL;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := X;
lpDevMode.dmPelsHeight := Y;
Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DynamicResolution(640, 480) then
ShowMessage('Now is 640*480');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if DynamicResolution(800, 600) then
ShowMessage('Now is 800*600');
end;
回车替Tab下移控件
需要用回车键代替TAB键下移一个控件时,把KeyPress设为True,加入下列代码拦截击
键:
Procedure TForm1.FormKeyPress(Sender:Tobject;Var Key:Char);
Begin
if key=#13 then { 判断是按执行键}
if not (ActiveControl is TDbgrid) Then
Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end else
if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
begin
With TDbgrid(ActiveControl) Do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1{ 移动到下一字段}
else Selectedindex:=0;
end;
End;
模拟按键
让 WIN95 模拟按了一个按键,例如按下 ENTER或者 TAB 键?
PostMessage(Object.Handle, WM_KEYDOWN, VK_TAB, 0);
隐藏桌面上的图标
var
hDesktop : THandle;
begin
hDesktop := FindWindow('Progman', nil);
ShowWindow(hDesktop, SW_HIDE);
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: mig.bbs@smth.org]
--
※ 转载:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: club.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.434毫秒