发信人: 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毫秒