Jer*_*dge 2 delphi toolbar windows-7 delphi-xe2
我正在构建一个"仪表板"应用程序,它始终可以在任何给定监视器的任何边缘看到,即使其他应用程序最大化也是如此.我不一定需要它"总是在顶部"(虽然我会)但我需要将它作为我自己的桌面工具栏,就像Windows任务栏一样.即使应用程序最大化,窗口也在此区域内,使此窗口始终可见(桌面区域更小).
如何让我的应用程序的主窗体对齐到这样的屏幕边缘?
PS - 我不需要对所有额外的粗糙处理进行回答,例如屏幕分辨率的变化......我只需要知道如何将它作为"屏幕的一部分"首先对齐.
您正在寻找应用程序桌面工具栏,这是Windows任务栏内部使用的工具栏.它涉及创建一个具有特定样式的窗口,正确设置,然后使用它进行通信SHAppBarMessage
.
它可能会变得相当复杂,但是有一些免费的组件可用于源(一个在Torry,或另一个在DelphiPages),它们具有基本的shell来帮助您入门.
AppBar.pas
第二个链接单元的一个例子(根据链接的文本,它是带有源的免费软件 - 我用它来创建一个应用程序启动器任务栏,其中包含带有应用程序图标和从.lnk
文件读取的描述的按钮):
type
TAppBarMessage = (abmNew, abmRemove, abmQueryPos, abmSetPos, abmGetState,
abmGetTaskBarPos, abmActivate, abmGetAutoHideBar,
abmSetAutoHideBar, abmWindowPosChanged);
TAppBarEdge = (abeLeft, abeTop, abeRight, abeBottom, abeUnknown, abeFloat);
...
function TAppBar.AppBarMessage(abMessage: TAppBarMessage;
abEdge: TAppBarEdge; lParam: LPARAM; bRect: Boolean; var rc: TRect): UINT;
var
abd: TAppBarData;
begin
// Initialize an APPBARDATA structure
abd.cbSize := sizeof(abd);
abd.hWnd := Handle;
abd.uCallbackMessage := WM_APPBARNOTIFY;
abd.uEdge := Ord(abEdge);
if bRect then
abd.rc := rc
else
abd.rc := Rect(0, 0, 0, 0);
abd.lParam := lParam;
Result := SHAppBarMessage(Ord(abMessage), abd);
// If the caller passed a rectangle, return the updated rectangle
if bRect then
rc := abd.rc;
end;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1611 次 |
最近记录: |