delphi中实现窗体在按win+D时不最小化的代码

合集下载

delphi固定窗体的方法

delphi固定窗体的方法

delphi固定窗体的方法
固定Delphi窗体,其实就像是把一个调皮的窗口锁在屏幕上,
不让它乱跑乱跳。

这里有几个小妙招,让你的窗体乖乖听话。

妙招一,一键锁窗。

想要让窗体老实待着?给它设置个模态窗口属性就行了。

这样
一来,其他窗口都得排队等着,直到这个窗口被关闭才能露脸。

妙招二,禁止缩放。

不想让别人乱动你的窗口大小?很简单,把最大化按钮藏起来,或者干脆禁止缩放。

这样,你的窗口就能保持最美的样子了。

妙招三,锁住位置。

有时候,你可能希望窗口始终出现在屏幕的某个位置。

那就把
窗体的起始位置设好,然后禁止移动。

这样一来,你的窗口就会像
个乖巧的孩子,始终待在你指定的地方。

妙招四,全屏显示。

想要让窗口占据整个屏幕?那就把边框去掉,让窗口最大化。

这样一来,你的窗口就能像个大屏幕一样,展示你想要的内容了。

妙招五,代码控制。

如果你觉得上面的方法还不够过瘾,那就试试通过代码来控制窗口的行为吧。

你可以编写一些事件处理程序,当窗口试图改变大小或位置时,立即把它恢复到原来的状态。

这样一来,你的窗口就能像个听话的机器人,完全按照你的意愿行动了。

怎么样?这些妙招是不是让你的Delphi窗体变得更听话了?快去试试吧!。

delphi问题解答方案

delphi问题解答方案

delphi问题解答方案1、怎么样在delphi中调动其它*.exe文件?例如:winexec(''d:\Project1.exe'',sw_show);====================================== ========================================2、如何让工程运行时主窗体就是最大化的?答:设置主窗体的WindowsState属性为wsMaximized就可以了!wsNormal 窗体以普通状态显示wsMinimized 窗体以最小化状态显示。

wsMaximized 窗体以最大化状态显示。

====================================== ========================================3、我想先->闪现窗体->主窗体->登录窗体,工程源文件怎么设置?答:⒈开始一个新工程。

给表格起名为MainForm,MainForm的单元起名为Main, 工程文件起名为Test。

⒉在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件的onClick事件创建一个过程,并在过程的begin和end之间插入Close语句。

⒊在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm 的单元起名为Move。

⒋为便于演示,在MoveForm中插入一个Label部件,设置其Caption 属性为“欢迎进入本系统”。

5.下一步修改工程的源代码。

选择View/Project Source,修改begin和end之间的语句如下:程序清单Test.Dprprogram Testusesforms,Main in ''MAIN.PAS'',Move in ''Move.PAS''{$R *.RES}beginMoveForm:=TMoveForm.Create(Application);MoveForm.Show;MoveForm.Update;Application.CreateForm(TMainForm,MainForm);MoveForm.Hide;MoveForm.Free;Application.Run;end.第一条语句创建了对象,该对象存在内存中,但还不能看见,为了让它出现并更新它的内容,调用对象的Show和Update成员函数:Show和Update。

Delphi自定义窗体(最大化、最小化、关闭、窗体的移动)

Delphi自定义窗体(最大化、最小化、关闭、窗体的移动)

Delphi自定义窗体(最大化、最小化、关闭、窗体的移动)Uses ShellAPI;1、//最小化procedure TForm1.btn1Click(Sender: TObject);varI, J, X, Y: Word;begin//第一种:最小化在屏幕的左下角,不是常见的最小化// WindowState := wsMinimized;//第儿种:最小化在任务栏里面,是常见的最小化postmessage(Self.Handle,WM_SYSCOMMAND,SC_MINIMIZ E,0);end;2、//最大化/正常的按钮procedure TForm1.btn2Click(Sender: TObject);varabd: TAppBarData;beginif WindowState = wsMaximized thenWindowState := wsNormalelsebeginWindowState := wsMaximized; // BorderStyle为 bsNoneabd.cbSize := sizeof(abd);SHAppBarMessage(ABM_GETTASKBARPOS, abd); //读取任务的区域Self.Height := Self.Height - (abd.rc.Bottom - abd.rc.Top); //预留出任务的位置end;end;3、//关闭procedure TForm1.btn3Click(Sender: TObject);beginClose;end;4、//窗体的移动procedure TForm1.lbl1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);beginif Button=Mbleft thenbeginReleaseCapture;Perform(WM_NCLBUTTONDOWN,HTCAPTION,0);//消息处理end;end;5、//查找应用程序中已经创建的窗体function FindForm(FormName: string): TForm;vari:Integer;beginResult := nil;for i:=0 to ponentCount-1 dobeginif ponents[i].Name = FormName thenbeginResult := TForm(ponents[i]);Break; end; end; end;。

windows窗口和按钮Delphi为Windows窗 口标题栏添加新按钮

windows窗口和按钮Delphi为Windows窗 口标题栏添加新按钮

windows窗口和按钮:Delphi为Windows窗口标题栏添加新按钮疯狂代码 / ĵ:http://Delphi/Article45154.html张海航 ; ; 对于我们熟悉标准windows窗口来讲标题栏上般包含有3个按钮即最大化按钮最小化按钮和关闭按钮你想不想在Windows窗口标题栏上添加个新自定义按钮满足你个性化需求从而也使自己窗口更具特色呢?! 下面我们就讨论下在delphi中如何给窗口标题栏上添加新按钮 、实现起来要定义以下过程: 1、 定义DrawCaptButton过程这个过程功能是在指定位置画出按钮 在过程中要使用win32GetMetrics得到窗口大小和标题按钮大小;使用delphiBounds定义个矩形这个矩形就是新按钮位置;再定义个小矩形这个矩形是为了填写文本;最后就delphi中比较有用drawbuttonface把按钮画出来 2、 每次我们对窗口进行操作例如最大化操作或最小化操作新按钮就会消失为了解决这个问题我们对所有消息要进行处理给每个消息编写个过程对按钮进行重画 A、定义WMNCPa(var Msg:TWMNCPa)过程处理消息WM_NCPa B、定义WMNCActivate(var Msg :TWMNCActivate)过程处理消息WM_NCACTIVATE C、定义WMSetText(var Msg:TWMSetText)过程处理消息WM_SETTEXT D、定义WMNCHitTest(var Msg :TWMNCHitTest)过程处理消息WM_NCHITTEST ; ; E、定义WMNCLButtonDown(var Msg : TWMNCLButtonDown)过程处理消息WM_NCLBUTTONDOWN 2、 具体源如下: 我们结合源来讲述过程实现从中可以看出对win32以及drawbuttonface使用思路方法 unit Main; ; ; erface uses Windows, Buttons, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = (TForm) procedure FormResize(Sender: TObject); private CaptionBtn : TRect; procedure DrawCaptButton; procedure WMNCPa(var Msg : TWMNCPa); message WM_NCPa; procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE; procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT; procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST; procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); messageWM_NCLBUTTONDOWN; public { Public declarations } end; var Form1: TForm1; implementation const htCaptionBtn = htSizeLast + 1; {$R *.DFM} procedure TForm1.DrawCaptButton; file://drawcapbuttton过程具体实现 var xFrame, yFrame, xSize, ySize : Integer; R : TRect; begin xFrame := GetMetrics(SM_CXFRAME); yFrame := GetMetrics(SM_CYFRAME); file://把窗口宽度置于变量xFrame,把窗口高度置于变量yFrame xSize:= GetMetrics(SM_CXSIZE); ySize:= GetMetrics(SM_CYSIZE); // 把标题栏按钮宽度置于变量xSize,把标题栏按钮高度置于变量ySize CaptionBtn := Bounds(Width - xFrame - 4*xSize + 2, yFrame + 2, xSize - 2, ySize - 4); file://定义出新标题按钮位置值放在变量CaptionBtn中 Canvas.Handle := GetWindowDC(Self.Handle); file://得到窗口句柄 ; ; := 'Symbol'; Canvas.Font.Color := clBlue; Canvas.Font.Style := [fsBold]; Canvas.Pen.Color := clYellow; Canvas.Brush.Color := clBtnFace; file://定义画布字体、画笔、刷子等属性 try DrawButtonFace(Canvas, CaptionBtn, 1, bsAutoDetect, False, False, False); file://在画布上画出定义按钮 R := Bounds(Width - xFrame - 4 * xSize + 2, yFrame + 3, xSize - 6, ySize - 7); file://在新按钮上画出个小矩形 with CaptionBtn do Canvas.TextRect(R, R.Left + 2, R.Top - 1, 'W'); file://在上面画出小矩形上填写个'w' finally ReleaseDC(Self.Handle, Canvas.Handle); Canvas.Handle := 0; file://容错处理如果出现异常把句柄释放掉 end; end; procedure TForm1.WMNCPa(var Msg : TWMNCPa); //WMNCPa过程具体实现该过程在绘制窗口时被 begin inherited;//继承默认消息处理 DrawCaptButton;//对按钮进行重画 end; procedure TForm1. (var Msg : TWMNCActivate); // WMNCActivate过程和WMNCPa过程实现思路方法相同该过程在窗口非客户区要更改为激活状态或非激活状态时被 begin inherited; DrawCaptButton; end; procedure TForm1.WMSetText(var Msg : TWMSetText); // WMSetText过程和WMNCPa过程实现思路方法相同该过程在设置窗口文本时被 begin inherited; DrawCaptButton; end; procedure TForm1.WMNCHitTest(var Msg : TWMNCHitTest); file:// WMNCHitTest过程和WMNCPa过程实现思路方法相同该过程在光标移动或鼠标按钮被按下或鼠标按钮被释放时 begin inherited; with Msg do PtInRect(CaptionBtn, Po(XPos - Left, YPos - Top)) then Result := htCaptionBtn;//判断鼠标所在位置是否在新按钮矩形范围内如果在返回新按钮标识值 end; procedure TForm1.WMNCLButtonDown(var Msg : TWMNCLButtonDown); // WMNCLButtonDown过程和WMNCPa过程实现思路方法相同当光标处于窗口非客户区范围内鼠标左键被按下时该过程 begin inherited; (Msg.HitTest = htCaptionBtn) then ShowMessage('你点击是标题栏上新按钮'); file://判断被点击是否是新按钮如果是显示上面信息在这里你可以按你需要编写代码 end; procedure TForm1.FormResize(Sender: TObject); begin Perform(WM_NCACTIVATE, Word(Active), 0); ; ; file://如果窗口大小改变则重画标题栏 end; end.; ; 3、 执行结果 如图1-1所示标题栏上出现个新按钮 通过以上举例过程相信你能根据自己具体要求利用Delphi设计出别具特色Windows窗口来! 2008-12-26 2:39:17疯狂代码 /。

delephi winexec函数

delephi winexec函数

delephi winexec函数
WinExec函数是Delphi中的一个内置函数,用于在Windows操作系统中执行外部程序。

它的语法为:WinExec(filename, flags),其中filename是要执行的程序的文件名,flags是指定如何执行程序的标志。

WinExec函数的返回值是一个整数,表示程序是否成功执行。

如果返回值为0,则表示程序执行失败。

如果返回值是大于31的正整数,则表示程序执行成功。

WinExec函数的标志参数可以是以下值之一:
SW_HIDE:隐藏窗口,即在后台执行程序。

SW_SHOW:显示窗口,即前台执行程序。

SW_MINIMIZE:最小化窗口,即将窗口最小化到任务栏中。

SW_MAXIMIZE:最大化窗口,即将窗口最大化到全屏幕。

SW_SHOWNORMAL:还原窗口,即将窗口还原到正常大小。

WinExec函数可以用于许多实际应用,如在Delphi程序中启动其他程序、启动浏览器打开网页、启动邮件客户端发送邮件等等。

但需要注意的是,使用WinExec函数要谨慎,应该确保被执行的程序是可靠的,并且应该避免将用户输入的参数直接传递给WinExec函数,以免被恶意程序利用。

- 1 -。

delphi截取被遮挡的Window画面

delphi截取被遮挡的Window画面
Self.Left := Screen.Width-Self.Width;
Self.Top := Screen.Height-Self.Height-50;
Self.FormStyle := fsStayOnTop;
Self.Image1.Left := 2;
Self.Image1.Top := 2;
只要不是最小化的窗口无论它被遮挡一部分还是全部无论它的位置是否超出屏幕边界都可以抓到
delphi截取被遮挡的Window画面
只要不是最小化的窗口,无论它被遮挡一部分还是全部,无论它的位置是否超出屏幕边界,都可以抓到
下面是代码:
function PrintWindow(Wnd: HWND; hDCBlt: HDC; nFlags: DWord): Bool; stdcall external 'user32.dll';
Cap := Self.Edit1.Text;
Self.Timer1.Interval := 50;
Self.Timer1.Enabled := True;
end;
SelectObject(DC1, hBMP);
PrintWindow(H, DC1, 0);
//image1.Canvas.Handle:=dc1;
//image1.Refresh;
Self.Image1.Height := Round((R.Bottom-R.Top) * (Self.Image1.Width / (R.Right-R.Left)));
Self.Image1.Picture.Bitmap.Handle:= hBMP;
Self.Image1.Refresh;
DeleteDC(DC1);

delphi 代码中设置控件的方法

delphi 代码中设置控件的方法

delphi 代码中设置控件的方法Delphi是一种基于面向对象的编程语言,广泛应用于Windows操作系统中的软件开发中。

通过Delphi代码的编写,开发人员可以有效地设置控件的属性和方法,以实现用户界面的设计和功能的实现。

本文将按照研究方案进行实验或调查,并对采集到的数据进行整理和分析。

在已有研究成果的基础上,将提出一些新的观点和方法,为解决实际问题提供有价值的参考。

1. 引言我们将介绍Delphi语言以及它在软件开发领域的应用。

随后,我们将阐述Delphi中设置控件的方法,包括属性和方法的使用。

2. Delphi中设置控件的方法我们将详细介绍Delphi中如何设置控件的方法,包括以下内容:- 属性设置:通过设置控件属性,开发人员可以更改控件的外观和行为。

我们将介绍如何在Delphi代码中设置控件属性,包括大小、位置、字体、背景色等。

- 事件处理:控件可以响应用户的操作,如点击按钮、输入文本等。

我们将介绍如何使用事件处理程序来实现这些功能。

- 方法调用:通过调用控件的方法,我们可以在代码中执行特定的操作。

我们将介绍如何调用控件的方法,包括显示消息框、打开文件等。

3. 实验设计我们将设计一个实验来验证Delphi中设置控件的方法的有效性。

实验的目的是测试不同控件设置方法的性能和效果。

4. 数据的采集与整理在实验中,我们将采集数据,并将其整理成可用于分析的格式。

我们将说明数据的采集方法和数据的整理过程。

5. 数据分析与结果在这一部分,我们将对采集到的数据进行分析。

我们将使用统计学方法和图表来呈现数据的分析结果,并得出结论。

6. 创新与发展在已有研究成果的基础上,我们将提出一些新的观点和方法。

我们将思考如何改进Delphi中设置控件的方法,以提高编写代码的效率和可读性。

7. 实际问题的解决我们将探讨如何将我们的研究成果应用于实际问题的解决。

我们将分析实际问题,并提供相关的建议和解决方案。

8. 结论在本文的我们将总结我们的研究成果,并给出未来进一步研究的建议。

怎样在DELPHI中使用API函数

怎样在DELPHI中使用API函数

怎样在DELPHI中使用API函数在Delphi中,可以使用API函数实现许多功能,例如文件操作、窗口管理、注册表操作、网络通信等。

以下是一些常见的示例:1.文件操作:在Delphi中,使用API函数可以执行各种文件操作,例如创建、移动、复制和删除文件。

以下是一个创建文件的示例代码:```pascalprocedure CreateFileExample;varhFile: THandle;beginhFile := CreateFile('C:\example.txt', GENERIC_WRITE, 0, nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);if hFile <> INVALID_HANDLE_VALUE thenbegin//文件创建成功,执行其他操作...CloseHandle(hFile);end;end;```2.窗口管理:使用API函数可以管理窗口,例如最大化、最小化、激活和关闭窗口。

以下是一个最大化窗口的示例代码:```pascalprocedure MaximizeWindowExample(hWnd: HWND);beginShowWindow(hWnd, SW_MAXIMIZE);end;```3.注册表操作:API函数可以用于读取和写入注册表项。

以下是一个读取注册表项的示例代码:```pascalprocedure ReadRegistryExample;varhKey: HKEY;RegValue: DWORD;beginif RegOpenKeyEx(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows', 0, KEY_READ, hKey) = ERROR_SUCCESS thenbeginbegin//注册表项读取成功,执行其他操作...end;RegCloseKey(hKey);end;end;```4.网络通信:API函数可以用于建立和管理网络连接,例如连接到远程服务器、发送和接收网络数据等。

(1条消息)DelphiDll插件窗体中遇到的各种问题

(1条消息)DelphiDll插件窗体中遇到的各种问题

(1条消息)DelphiDll插件窗体中遇到的各种问题最近在公司写一个外壳程序,调用DLL插件把FORM嵌入到EXE 中的一个PANEL中,其中遇到了不少的问题,大部分已经解决,还有几个至今没有找到解决方法,有待研究,也希望知道解决方法的富翁共享一下研究成果.以下列出的问题及解决方法仅针对我写的程序(DLL插件把FORM 嵌入到EXE中的一个PANEL中),和自己的解决方法.从遇到的问题看出,DELPHI封装了太多的东西,有时候直接使用API会有意想不到的效果.经验:DLL与EXE之间的通讯应该全部使用消息.第一个问题:Tab键和Enter键在DLL的FORM中无效原始程序://frmDll为DLL中的FORM,frmEXE为EXE主窗体,下同//下面的代码为什么直接引用Exe中的Form又引用Dll中的Form?只是为了方便阅读,实际只是传递一个句柄,下同//panWorkSpace为Exe中的一个TPanel,DLL中的窗体要嵌入其中frmDll.WindowState := wsMaximized;frmDll.BorderStyle := bsNone;windows.SetParent(frmDll.Handle,frmExe.panWorkSpace.H andle);发现Tab及Enter键在嵌入的FORM中无效,去掉frmDll.BorderStyle := bsNone;后正常,但我不需要标题,就用API解决frmDll.WindowState := wsMaximized;SetWindowLong(frmDll.Handle,GWL_STYLE,GetWindowLong(frmDll.Handle,GWL_STYLE) and not (WS_CAPTION or WS_THICKFRAME));windows.SetParent(frmDll.Handle,frmExe.panWorkSpace.H andle);其中WS_CAPTION和WS_THICKFRAME分别表示标题栏和边框,问题解决.第二个问题:DLL窗体的ResizeEXE主窗体改变尺寸时,窗体中的Panel也会跟着变(Panel.Align 设为了alClient),但其中嵌入的DLL窗体不会跟着变,解决方法: //exe窗口接收消息并改变子窗体大小//FChildWindowList为TList,子窗体的结构信息列表Type//子窗体一些信息的结构体PFormInfo = ^TFormInfo;TFormInfo = recordHandle : HWND;Parent : HWND;Style : HWND;end;TfrmExe = class(TForm)privateprocedure WMSize(var Message:TWMSize);message WM_Size;end;procedure TfrmExe.WMSize(var Message: TWMSize);//ReSize消息vari : Integer;rc : TRect;begininherited;if GetWindowRect(panWorkSpace.Handle,rc) thenif Assigned(FChildWindowList) thenfor i := 0 to FChildWindowList.Count - 1 doSetWindowPos(PFormInfo(FChildWindowList[i]).Handle, 0, 0, 0, rc.Right - rc.Left, rc.Bottom - rc.Top,SWP_NOACTIVATE);end;第三个问题:焦点在DLL中的窗体时,切换到其它应用程序,再点击任务栏上Application对象的按钮,不能切换过来焦点在DLL中的窗体时,切换到其它应用程序,再点击任务栏上Application对象的按钮,不能切换过来,EXE主窗体不最小化,切换到其它程序,直接点嵌入的DLL窗体,DLL窗体获得焦点,发现Application 对象在任务栏上的按钮是被按下去了,但是EXE窗体并没有被提到最前,还有,DLL窗体得到焦点时,EXE窗体的标题栏变为灰色,这些都是不符合使用习惯的,虽然不影响使用,但我觉得还是要解决.1.DLL窗体得到焦点时,EXE窗体的标题栏变为灰色的解决方法.DLL窗体TfrmDll=class(TForm)privateprocedure WMActivate(var Message : TMessage);message WM_ACTIVATE;end;procedure TfrmDll.WMActivate(var Message: TMessage);begininherited;SendMessage(frmEXE.Handle, WM_NCACTIVATE, Integer(True), 0);end;2.焦点的问题解决方法把下面这个单元加入工程//===================================== ======================================== =// Unit Name: AppHandler// Author : ysai// Date : 2003-06-05// Purpose : 处理焦点问题// History ://===================================== ======================================== =unit AppHandler;interfaceusesWindows, Messages, SysUtils,Forms;implementationvarOldWProc : TFNWndProc;function NewWndProc(Handle : HWND;Msg : Integer;wParam : Longint;lParam : Longint):Longint; stdcall;beginResult := 0;case Msg ofWM_ACTIVATEAPP : //嵌入到主窗口的DLL中的窗口得到焦点不会把程序提前begincase wParam of0 : //应用程序失去焦点beginif Assigned(Application.MainForm)and (GetWindowLong(Application.Handle, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) thenSendMessage(Application.MainForm.Handle,WM_NCACTIVATE,Integer(False),0);//失去焦点把标题栏变灰end;1 : //应用程序得到焦点beginif Assigned(Application.MainForm)and (GetWindowLong(Application.Handle, GWL_EXSTYLE)and WS_EX_TOOLWINDOW = 0) thenSendMessage(Application.MainForm.Handle,WM_ACTIVATE,WA_ACTIVE,1);//注意,这里设为1,后面会用到end; //case wParamend;Result := CallWindowProc(OldWProc, Handle, Msg, wParam, lParam);end; //msg : WM_ACTIVATEAPPelseResult := CallWindowProc(OldWProc, Handle, Msg, wParam, lParam);end; //case msgend;initialization//取代应用程序的消息处理OldWProc := TFNWndProc(SetWindowLong(Application.Handle,GWL_WNDPROC,Longint(@NewWndProc)));finalization//还原消息处理过程if OldWProc <> nil thenSetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(OldWProc));end.//单元结束//EXE程序主窗口TfrmEXE = class(TForm)privateprocedure WMActivate(var Message : TMessage);message WM_ACTIVATE;end;procedure TfrmExe.WMActivate(var Message: TMessage);//激话消息,Message.lParam=1时是OAAppHandler单元发来的,激活子窗口varhWindow : HWND;begininherited;if Message.lParam = 1 then //如果是1就是AppHander发出的消息,将焦点设到活动子窗体beginhWindow := GetActiveChildWindowHandle;//这个函数得到活动子窗体//如果有子窗口而且不存在模态显示的窗体则把焦点移到子窗体上if (hWindow > 0) and IsWindowEnabled(Application.Handle) thenwindows.SetForegroundWindow(hWindow);end;end;第四个问题:SpeedButton在DLL中鼠标离开不会恢复平面(ShowModal时不会出现)(未解决)SpeedButton.Flat设为真时,在DLL中鼠标离开不会恢复平面状态,而ShowModal时不会出现,不知道原因,应该是消息处理得不好,不知道有没有人解决过又一个焦点问题:焦点在DLL窗体时,按Alt+Tab,对话框里出来的程序中竟然没有EXE程序!焦点在EXE窗体上时没问题,焦点在DLL窗体上时,用Alt+T ab不会出现EXE应用程序的图标,切换到其它任务后,也不能用Alt+Tab切换回来!这是个比较大的BUG,还未找到原因用spy++看了一下,按下Alt+Tab键,窗体收到了一个WM_CANCELMODE消息,我想,既然焦点在exe窗体上时可以看到图标,而在dll上看不到,那么我在收到这个消息时把焦点给设到exe上不就可以了?事实证明这点是可行的,代码如下:TDllForm = class(TForm)privateprocedure WMCancelMode(var Message : TMessage);message WM_CANCELMODE;end;procedure TDllForm.WMCancelMode(var Message: TMessage);//处理Alt+Tab键弹出的对话框中没有应用程序图标问题beginSetForegroundWindow(exeForm.Handle); //把exe窗体设为当前有焦点的窗体end;现在不论焦点在exe的窗体上还是dll的窗体上,按Alt+Tab出现的对话框中都有应用程序的图标,但不同的是,焦点在exe的窗体上时按Alt+Tab,默认激活的是下一个应用程序,而焦点在dll窗体上时按Alt+Tab,默认激活的是第一个,也就是应用程序本身,实际激活的是exe 窗体.虽然还是不怎么习惯,但总算把它给弄出来了,以后有好的解决方法再贴上来.Hint的问题(未解决)焦点在Dll中的窗体时,鼠标移动到控件上不会显示控件的Hint,而且Application.OnHint事件也不会发生,但是焦点在Exe窗体上时,把鼠标放在Dll窗体中的控件上却能显示Hint.原因还未找到:( ALT+TAB解决了,但是那是键盘,鼠标操作还是有问题焦点在DLL中时,用鼠标点其它应用程序,失去焦点了,再按ALT+TAB,那个该死的应用程序图标又没了,焦虑中....。

delphi窗口最小化最大化

delphi窗口最小化最大化

delphi窗口最小化最大化var hwnd: hwnd;//句柄PostMessage(hwnd,WM_SYSCOMMAND, SC_MINIMIZE,0); //最小化PostMessage(hwnd,WM_SYSCOMMAND, SC_MAXIMIZE,0);//最大化PostMessage(hwnd,WM_SYSCOMMAND, SC_CLOSE,0);//关闭窗口最小化时将释放占用的资源PostMessage(hwnd,WM_SYSCOMMAND, SC_MINIMIZE,0)比showwindow(hwnd,SW_MINIMIZE)好用在控制别的应用程序的时候,经常需要等待直到某个功能结束,例如:打开一个窗口-->等待直到窗口结束这个时候就可以用到SendMessage如果在打开这个窗口后仍然需要对该窗口的界面进行设置,比如Edit的value等等,比如:打开一个窗口-->控制窗口的control的属性这个时候就需要PostMessage使用一个钩子程序截获消息后,使用SendMessage把消息发送到主处理程序进行处理,但是在主处理程序还没有完成任务的时候,被设置钩子的程序进入了停止的状态,不可以处理WM_PAINT,WM_MOVE,.......等的基本信息,必须要等SendMessage发送出的消息完成后,才能继续运行,整个界面一片空白,把钩子消息设置成PostMessage的发送消息形式后,问题解决!我查了MSDN对这两个API的定义,PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。

PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值。

使用这两个发送消息函数的最重要的是要看你的程序是否要对消息的滞后性关注否,PostMessage 会造成消息的滞后性,而SendMessage则不会,但如果SendMessage消息处理失败,则会造成程序停止!1,PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。

Delphi编程:Window消息大全使用详解(2)

Delphi编程:Window消息大全使用详解(2)

Delphi编程:Window消息大全使用详解(2)--------------------------------------------------------------------------------à′?′£oE酷 [2004-1-13][35]WM_INITMENUPOPUP = $0117;当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部WM_MENUSELECT = $011F;当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)WM_MENUCHAR = $0120;当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者;WM_ENTERIDLE = $0121;当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待WM_MENURBUTTONUP = $0122;WM_MENUDRAG = $0123;WM_MENUGETOBJECT = $0124;WM_UNINITMENUPOPUP = $0125;WM_MENUCOMMAND = $0126;WM_CHANGEUISTATE = $0127;WM_UPDATEUISTATE = $0128;WM_QUERYUISTATE = $0129;WM_CTLCOLORMSGBOX = $0132;在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色WM_CTLCOLOREDIT = $0133;当一个编辑型控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色WM_CTLCOLORLISTBOX = $0134;当一个列表框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色WM_CTLCOLORBTN = $0135;当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色WM_CTLCOLORDLG = $0136;当一个对话框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色WM_CTLCOLORSCROLLBAR= $0137;当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色WM_CTLCOLORSTATIC = $0138;当一个静态控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色WM_MOUSEFIRST = $0200;WM_MOUSEMOVE = $0200;// 移动鼠标WM_LBUTTONDOWN = $0201;//按下鼠标左键WM_LBUTTONUP = $0202;//释放鼠标左键WM_LBUTTONDBLCLK = $0203;//双击鼠标左键WM_RBUTTONDOWN = $0204;//按下鼠标右键WM_RBUTTONUP = $0205;//释放鼠标右键WM_RBUTTONDBLCLK = $0206;//双击鼠标右键WM_MBUTTONDOWN = $0207;//按下鼠标中键WM_MBUTTONUP = $0208;//释放鼠标中键WM_MBUTTONDBLCLK = $0209;//双击鼠标中键WM_MOUSEWHEEL = $020A;当鼠标轮子转动时发送此消息个当前有焦点的控件WM_MOUSELAST = $020A;WM_PARENTNOTIFY = $0210;当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口WM_ENTERMENULOOP = $0211;发送此消息通知应用程序的主窗口that已经进入了菜单循环模式WM_EXITMENULOOP = $0212;发送此消息通知应用程序的主窗口that已退出了菜单循环模式WM_NEXTMENU = $0213;WM_SIZING = 532;当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置也可以修改他们WM_CAPTURECHANGED = 533;发送此消息给窗口当它失去捕获的鼠标时;WM_MOVING = 534;当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置也可以修改他们;WM_POWERBROADCAST = 536;此消息发送给应用程序来通知它有关电源管理事件;WM_DEVICECHANGE = 537;当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序WM_IME_STARTCOMPOSITION = $010D;WM_IME_ENDCOMPOSITION = $010E;WM_IME_COMPOSITION = $010F;WM_IME_KEYLAST = $010F;WM_IME_SETCONTEXT = $0281;WM_IME_NOTIFY = $0282;WM_IME_CONTROL = $0283;WM_IME_COMPOSITIONFULL = $0284;WM_IME_SELECT = $0285;WM_IME_CHAR = $0286;WM_IME_REQUEST = $0288;WM_IME_KEYDOWN = $0290;WM_IME_KEYUP = $0291;WM_MDICREATE = $0220;应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口WM_MDIDESTROY = $0221;应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口WM_MDIACTIVATE = $0222;应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它;WM_MDIRESTORE = $0223;程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小WM_MDINEXT = $0224;程序发送此消息给MDI客户窗口激活下一个或前一个窗口WM_MDIMAXIMIZE = $0225;程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;WM_MDITILE = $0226;程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口WM_MDICASCADE = $0227;程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口WM_MDIICONARRANGE = $0228;程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口WM_MDIGETACTIVE = $0229;程序发送此消息给MDI客户窗口来找到激活的子窗口的句柄WM_MDISETMENU = $0230;程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单WM_ENTERSIZEMOVE = $0231;WM_EXITSIZEMOVE = $0232;WM_DROPFILES = $0233;WM_MDIREFRESHMENU = $0234;WM_MOUSEHOVER = $02A1;WM_MOUSELEAVE = $02A3;WM_CUT = $0300;程序发送此消息给一个编辑框或combobox来删除当前选择的文本WM_COPY = $0301;程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板WM_PASTE = $0302;程序发送此消息给editcontrol或combobox从剪贴板中得到数据WM_CLEAR = $0303;程序发送此消息给editcontrol或combobox清除当前选择的内容;WM_UNDO = $0304;程序发送此消息给editcontrol或combobox撤消最后一次操作WM_RENDERFORMAT = $0305;WM_RENDERALLFORMATS = $0306;WM_DESTROYCLIPBOARD = $0307;当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者WM_DRAWCLIPBOARD = $0308;当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容;WM_PAINTCLIPBOARD = $0309;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;WM_VSCROLLCLIPBOARD = $030A;WM_SIZECLIPBOARD = $030B;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;WM_ASKCBFORMATNAME = $030C;通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字WM_CHANGECBCHAIN = $030D;当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;WM_HSCROLLCLIPBOARD = $030E;此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图象并更新滚动条的值;WM_QUERYNEWPALETTE = $030F;此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板WM_PALETTEISCHANGING= $0310;当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序WM_PALETTECHANGED = $0311;此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此来改变系统调色板WM_HOTKEY = $0312;当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息WM_PRINT = 791;应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分;WM_PRINTCLIENT = 792;WM_HANDHELDFIRST = 856;WM_HANDHELDLAST = 863;WM_PENWINFIRST = $0380;WM_PENWINLAST = $038F;WM_COALESCE_FIRST = $0390;WM_COALESCE_LAST = $039F;WM_DDE_FIRST = $03E0;WM_DDE_INITIATE = WM_DDE_FIRST + 0;一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;WM_DDE_TERMINATE = WM_DDE_FIRST + 1;一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话;WM_DDE_ADVISE = WM_DDE_FIRST + 2;一个DDE客户程序提交此消息给一个DDE服务程序来请求服务器每当数据项改变时更新它WM_DDE_UNADVISE = WM_DDE_FIRST + 3;一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个特殊的剪贴板格式的项WM_DDE_ACK = WM_DDE_FIRST + 4;此消息通知一个DDE(动态数据交换)程序已收到并正在处理WM_DDE_POKE, WM_DDE_EXECUTE, WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIAT消息WM_DDE_DATA = WM_DDE_FIRST + 5;一个DDE服务程序提交此消息给DDE客户程序来传递个一数据项给客户或通知客户的一条可用数据项WM_DDE_REQUEST = WM_DDE_FIRST + 6;一个DDE客户程序提交此消息给一个DDE服务程序来请求一个数据项的值;WM_DDE_POKE = WM_DDE_FIRST + 7;一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项;服务器通过答复WM_DDE_ACK消息提示是否它接收这个数据项;WM_DDE_EXECUTE = WM_DDE_FIRST + 8;一个DDE客户程序提交此消息给一个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被处理,服务器通过提交WM_DDE_ACK消息来作回应;WM_DDE_LAST = WM_DDE_FIRST + 8;WM_APP = $8000;WM_USER = $0400;此消息能帮助应用程序自定义私有消息;/////////////////////////////////////////////////////////////////////通知消息(Notification message)是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。

delphi 代码中设置控件的方法 -回复

delphi 代码中设置控件的方法 -回复

delphi 代码中设置控件的方法-回复Delphi代码中设置控件的方法在Delphi中,设置控件是编写桌面应用程序的基本任务之一。

通过设置控件的属性,可以实现对其外观、大小、位置、行为和其他一些与用户交互相关的方面进行控制。

本文将一步一步地解释Delphi中设置控件的方法。

第一步:添加控件到窗体首先,在Delphi中,我们需要在窗体上添加控件。

这可以通过拖放控件到窗体设计视图上或者通过编程方式创建控件来实现。

拖放方式是最常用的方法。

在Delphi的窗体设计视图中,从工具箱中选择所需的控件,将鼠标拖动到窗体上,并释放鼠标按钮。

这将在窗体上创建一个新的控件实例。

编程方式创建控件需要用到Delphi的组件对象模型(Component Object Model, COM)。

首先,需要选择所需的控件类型,然后使用代码创建该控件的实例。

第二步:设置控件属性添加控件到窗体后,可以开始设置控件的属性。

在Delphi中,可以通过属性编辑器或代码来设置控件的属性。

使用属性编辑器属性编辑器是Delphi中设置控件属性的常用方法。

可以在组件面板中选中相应的控件,然后在对象检查器面板中查看和编辑控件的属性。

属性可以按字母顺序或按类别进行排序,以便更轻松地找到所需的属性。

使用代码通过编程方式设置控件属性可以使用Delphi的对象模型。

可以在代码中使用控件实例的属性或方法来设置相应的属性。

以下是一个示例,演示了如何以代码方式设置一个编辑框的背景颜色:pascalEdit1.Color := clYellow;本示例将编辑框(Edit1)的背景颜色设置为黄色。

以此方式,通过为控件实例调用属性和方法,可以对控件的各个属性进行设置。

例如,可以设置控件的字体、大小、位置、可见性等等。

第三步:设置控件事件处理程序除了设置控件的属性外,还可以为其添加事件处理程序,以响应用户的交互。

Delphi中的事件处理程序是一个特殊的方法,用于处理控件与用户之间的交互。

Delphi关闭指定窗口标题的窗口

Delphi关闭指定窗口标题的窗口

Delphi关闭指定窗口标题的窗口Delphi 关闭指定窗口标题的窗口━━━━━━━━━━━━━━━━━━━━━━━━━━我在程序中想每隔30秒自动关闭指定窗口标题的窗口。

如IE窗口,脚本提示错误窗口,上网时的下载工具提示等等procedure TForm1.Button2Click(Sender: TObject);varhWndClose: HWnd; //存储指定的外部应用程序窗口句柄str: String; //存储指定的外部应用程序的窗口名beginstr := InputBox('提示','请输入应用程序窗口標題:',''); //获取要关闭的应用程序窗口名if str <> '' thenbeginhWndClose := FindWindow(nil, PChar(str)); //根据窗口名查找要关闭的窗口句柄if hWndClose <> 0 then ////如果查找成功,则发送消息,关闭指定的窗口SendMessage(hWndClose,WM_CLOSE,0,0)else //否则,给出提示信息ShowMessage('没找到指定的应用程序,所以无法关闭!');end;end;sendmessage(findwindow(nil,'str'),WM_CLOSE,0,0);就可以啦!!程序已经写完了,用findwindow或者findwindowex都可以获取窗口具柄,findwindow是顶级窗口句柄不获取字窗口的,findwindowex则可以获取子窗口的。

Delphi控制Word编程手记

Delphi控制Word编程手记

Delphi控制Word编程手记前几日对软件“文件整理助手”进行了完善。

该软件有文本文件合并,文本文件内容的替换、插入、删除、为特定行首/尾添加字符、清理空行等,以及文件批量替换、改名等功能。

一同事见后,希望能对Word文件进行合并。

尽管Word的“插入文件”可以实现这个功能,但不能在插入文件时调整插入的顺序,也不能控制插入的新文件是否另起一页。

Word虽然功能强大,但还是有一定的局限性。

当然,通过VBA录入脚本、编写宏代码也许可以实现这些复杂的功能。

但囿于其缺乏通用性和移植性,对于不善于编程的人来说,还是存在诸多不便。

因此,打算做一个“Word文档合并器”。

刚做出这个决定时,以为很简单,因为Delphi的Servers组件页有WordApplication、WordDocument等控件,通过它们来控制全不是那么回事!以前做过涉及到Excel的小程序,没觉得有多难。

首次跟Word打交道,竟给我来了个大大的下马威。

以前用过函数,用过过程,也用过带参数的函数、带参数的过程。

见过参数多的,但没见过打开、保存Word时尽然要用多达15个、16个参数的函数、过程。

而且这些参数青一色地被定义为OleVariant类型,哪些应该是字符串,哪些应该是布尔型,或者专门为Word程序和文档定义的变量类型,没有详细的、系统的资料,只好摸着石头过河,慢慢研究了。

经过几翻碰壁、几翻查证、几翻试验,把要实现的功能一步步拆解,逐一进行调试,通过后再重新组合起来试验。

经过拆解、调试、组装三步曲之后,总算是完成了“Word文档合并器”这样一个小小的软件。

为避免下次还重复这种繁琐的基础工作,现将有关技术要点总结于下:(本程序在Word2003中调试通过,其他版本未进行测试。

网上找的一些资料在过程调用、函数语句及参数个数上有出入,可能与Word版本不一样有关。

)说明:主窗体中放置以下三个与Word有关的控件:Word: TWordApplication; //Word应用程序接口Document1: TWordDocument; //Word文档ole_ShowDoc: TOleContainer; //用以显示Word文档【一】相关Word组件这里仅整理Delphi通过自身所提供的Server组件连接Office (Word)的有关资料,其他方法暂不研究。

C#窗体编程不显示最小化、最大化、关闭按钮的方法

C#窗体编程不显示最小化、最大化、关闭按钮的方法

C#窗体编程不显示最小化、最大化、关闭按钮的方法本文介绍在C#窗体编程时,如何设置不显示右上角的最小化最大化关闭按钮。

可以通过this.ControlBox这个属性的值来控制。

对于最大化和最小化按钮,在C#窗体开发时,各一个属性来启用或禁用这两个按钮。

对于最大化来说,this.MaximizeBox=false即可禁用最大化按钮。

而这里的this是指窗体对象本身。

而this.MinimizeBox=false即可禁用最小化按钮。

上面说了怎么禁用最大化、最小化按钮,但要注意,如果最小化、最大化两个按钮都被禁用时,这两个按钮在右上角都不显示。

如果只是禁用其中一个,那么这两个按钮都还在右上角,只是被禁用的那个显示为灰色不可用状态。

至于关闭按钮,C#窗体编程中,并没有单独一个属性来按钮它。

那么如何将右上角的这最小化最大化三个关闭按钮全部不显示呢?我们可以将这三个按钮当作一组ControlBox,将this.ControlBox=false即可同时禁用这三个按钮。

一旦这三个按钮都被禁用了,那就都不显示了。

所以,C#窗体设置不显示右上角的最小化最大化关闭按钮,是不是很简单?但要注意的,如果关闭按钮被禁用了,这个窗口就无法通过系统自带的功能来关闭了。

你必须再写一个关闭功能。

比如写一个按钮,onClick事件设置为this.Close();就可以了。

您可能感兴趣的文章:•C#动态生成按钮及定义按钮事件的方法•C#键盘输入回车键实现点击按钮效果的方法•C#中Winform窗体Form的关闭按钮变灰色的方法•C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法•c# winform取消右上角关闭按钮的实现方法•c#重写TabControl控件实现关闭按钮的方法•一个事半功倍的c#方法动态注册按钮事件•C#通过反射获取当前工程中所有窗体并打开的方法•C#实现利用反射简化给类字段赋值的方法•C#利用反射技术实现去掉按钮选中时的边框效果。

如何使用Delphi实现无边界窗体的移动

如何使用Delphi实现无边界窗体的移动

在⽤Delphi制作Windows程序的窗体时,窗体的边界有四种选择:对话框式(bsDialog),单边固定式(bsSingle),双边可变式(bsSizeable),⽆边界式(bsNone)。

当设置为bsNone时,窗体也就没有标题条,很显然,程序运⾏以后就⽆法移动窗体了。

事实上,⽆边界窗体是很有⽤的,例如,象Word⾥⾯的浮动式⼯具箱其实就是⽆边界窗体,它可以⼤⼤节约屏幕空间。

那么,如何⽤Delphi实现这个功能呢?显然,这需要修改Windows的内部消息,也就是说,需要把“MouseDownonForm”这个消息改为“MouseDownonCaption”,这其中有三个关键:捕捉MouseDown消息、判断光标位置、发送MouseDown消息。

如果光标在窗体中,则发送MouseDownonCaption消息。

在Delphi的对象巡检器中列出的所有事件是不能捕捉到Windows消息的,因为这些都是已经发出的消息,⽆法修改了。

捕捉Win dows消息有两种办法:⼀个就是增加⼀个消息处理句柄,直接处理Windows消息;另⼀个是对消息进⾏过滤,滤出所需消息。

第⼆个办法⽐较常⽤,适⽤于各种情况,下⾯就是移动⽆边界窗体程序⽚断,加注释部分是⼿动加⼊的: unitUnit1; : type TForm1Κclass(TForm) procedureFormCreate(Sender:TObject); : public {申明消息过滤过程} procedureAppMessage(varMsg:TMsg;varHandled:Boolean); : implementation procedureTForm1.FormCreate(Sender:TObject); begin {捕捉消息:将程序的收到消息事件与消息过滤过程关联起来} Application.OnMessage:ΚAppMessage; end; procedureTForm1.AppMessage(varMsg:TMsg;varHandled:Boolean); begin {如果⿏标左键按下的话} ifMsg.messageΚWM—LButtonDownthen begin {判断光标是否在⽤户⼯作区内} ifDefWindowProc(Handle,WM—NCHitTest,0,GetMessagePos)ΚHTClientthen begin {发出⿏标在⽤户标题栏内被按下的消息} SendMessage(Handle,WM—NCLButtonDown, HTCaption,GetMessagePos); Handled:Κtrue;{消息处理完毕,窗体不再接受M ouseDown及Click事件,如果为false,程序的运⾏稍微有些不正常。

delphi dxcalloutpopup 控件用法

delphi dxcalloutpopup 控件用法

delphi dxcalloutpopup 控件用法Delphi是一种基于Object Pascal语言的高级集成开发环境(IDE),它是一种非常流行的Windows应用程序开发工具。

Delphi提供了许多强大的控件,其中一个非常有用的控件是`TDXCallOutPopup`。

`TDXCallOutPopup`是一个带有气泡框的弹出式控件,可以用于显示通知、提示或者其他简短的信息。

使用`TDXCallOutPopup`控件非常简单。

首先,需要在Delphi的设计器中放置一个`TDXCallOutManager`组件。

`TDXCallOutManager`是一个管理`TDXCallOutPopup`控件的组件,它可以处理多个弹出式控件的显示和隐藏。

将`TDXCallOutManager`组件放置在你的窗体上,并调整它的属性以满足你的需求。

然后,将`TDXCallOutPopup`控件放置在窗体上。

可以通过右键单击Delphi设计器中的`TDXCallOutManager`组件,并选择"New CallOut"来创建一个新的`TDXCallOutPopup`控件。

将`TDXCallOutPopup`控件的属性调整为你需要的外观和行为。

例如,你可以设置`Caption`属性为弹出控件的标题,设置`Text`属性为弹出控件的文本内容,设置`Delay`属性为弹出控件的显示延迟时间。

接下来,通过编程的方式控制`TDXCallOutPopup`控件的显示和隐藏。

可以使用`TDXCallOutManager`组件的`GetCallOutPopup`方法来获取`TDXCallOutPopup`控件的实例,并通过调用`Visible`属性来显示或隐藏弹出控件。

例如,可以将一个按钮控件的点击事件与`TDXCallOutPopup`控件的显示和隐藏操作关联起来。

除了上述的基本使用方法之外,`TDXCallOutPopup`控件还有一些其他的属性和事件可供使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由hWnd参数标识的窗口不是激活窗口。
如果未将一个非激活窗口设定到z序的顶端,应用程序不能激活该窗口。应用程序可以无任何限制地改变被激活窗口在Z序中的位置,或激活一个窗口并将其移到最高级窗口的顶部或非最高级窗口的顶部。
如果一个顶层窗口被重定位到z序的底部(HWND_BOTTOM)或在任何非最高序的窗口之后,该窗口就不再是最顶层窗口。当一个最顶层窗口被置为非最顶级,则它的所有者窗口和所属者窗口均为非最顶层窗口。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
查看该参数的使用方法,请看说明部分。
x:以客户坐标指定窗口新位置的左边界。
Y:以客户坐标指定窗口新位置的顶边界。
cx:以像素指定窗口的新的宽度。
cy:以像素指定窗口的新的高度。
HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_NOTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
如果HWND_TOPMOST和HWND_NOTOPMOST标志均未指定,即应用程序要求窗口在激ቤተ መጻሕፍቲ ባይዱ的同时改变其在Z序中的位置时,在参数hWndinsertAfter中指定的值只有在下列条件中才使用:
在hWndlnsertAfter参数中没有设定HWND_NOTOPMOST和HWND_TOPMOST标志。
SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
SWP_HIDEWINDOW;隐藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。
当在这个函数中的nFlags参数里指定了SWP_FRAMECHANGED标志时,WindowsCE重画窗口的整个非客户区,这可能会改变客户区的大小。这也是重新计算客户区的唯一途径,也是通过调用SetwindowLong函数改变窗口风格后通常使用的方法。
SetWindowPos将使WM_WINDOWPOSCHANGED消息向窗口发送,在这个消息中传递的标志与传递给函数的相同。这个函数不传递其他消息。
SWP_SHOWWINDOW:显示窗口。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误消息,请调用GetLastError函数。
备注:如果设置了SWP_SHOWWINDOW和SWP_HIDEWINDOW标志,则窗口不能被移动和改变大小。如果使用SetWindowLoog改变了窗口的某些数据,则必须调用函数SetWindowPos来作真正的改变。使用下列的组合标志:SWP_NOMOVEISWP_NOSIZEISWP_FRAMECHANGED。
Windows CE 1.0不支持在hWndlnsertAber参数中的HWND_TOPMOST和HWND_NOTOPMOST常量。
Windows CE1.0不支持在fuFags参数中的SWP_DRAWFRAME和SWP_NOCOPYBITS标志。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h库文件:eser32lib
not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW);
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;
SetWindowPos
函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。
procedure TForm1.FormCreate(Sender: TObject);
begin
/////////////////////////////以下代码实现按win+D时不最小化
with Application do
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) and
uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
SWP_ASNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。
SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。
SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。
一个非最顶端窗口可以拥有一个最顶端窗口,但反之则不可以。任何属于顶层窗口的窗口(例如一个对话框)本身就被置为顶层窗口,以确保所有被属窗口都在它们的所有者之上。
如果应用程序不在前台,但应该位于前台,就应调用SetForegroundWindow函数来设置。
Windows CE:如果这是一个可见的顶层窗口,并且未指定SWP_NOACTIVATE标志,则这个函数将激活窗口、如果这是当前的激活窗口,并且指定了SWP_NOACTIVATE或SWP_HIDEWINDOW标志,则激活另外一个可见的顶层窗口。
函数原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);
参数:
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:
有两种方法将窗口设为最顶层窗口:一种是将参数hWndlnsertAfter设置为HWND_TOPMOST并确保没有设置SWP_NOZORDER标志;另一种是设置窗口在Z序中的位置以使其在其他存在的窗口之上。当一个窗口被置为最顶层窗口时,属于它的所有窗口均为最顶层窗口,而它的所有者的z序并不改变。
SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。
SWP_NOMOVE:维持当前位置(忽略X和Y参数)。
SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。
SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。
SWP_NOREPOSITION;与SWP_NOOWNERZORDER标志相同。
SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。
SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。
相关文档
最新文档