- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个相当大的项目,该项目使用自定义表单,并且想自己绘制这些表单的非客户区域。我无法使用 vcl-styles,因为许多表单需要有一个标题栏和边框,其颜色是在运行时选择的,据我所知,样式的设计是应用程序范围内的。
到目前为止,我所完成的工作是绘制标题栏和边框,在标题上绘制,禁用最小化、最大化和关闭按钮,并将它们替换为我自己的按钮。我通过拦截 WM_NCPaint 和 WM_NCACTIVATE 消息并在处理 WM_NCACTIVATE 时在继承的关键字之后调用我自己的过程来实现此目的,并发送 WM_ACTIVATE 消息而不处理 WM_NCPAINT 消息,如下所示:
SendMessage(Handle, WM_NCACTIVATE, ORD(active), -1);
我这样做的原因是因为我无法让 TMainMenu 一致地绘制自身,在单步执行代码后,似乎正确处理的 WM_NCACTIVATE 消息绘制了主菜单。我尝试的另一种方法是在主菜单上调用 UpdateItems,但这没有给出任何结果。
我通过处理 WM_NCHITTEST 消息来停用右上角的按钮,如下所示:
procedure TBasicForm.WMNCHITTEST(var message : TMessage);
begin
inherited;
case message.Result of
HTMINBUTTONE, HTMAXBUTTON, HTCLOSE: message.Result := HTCAPTION;
end;
end;
我通过处理 WM_NCLBUTTONDOWN 获得了自己的按钮(在处理 WM_NCACTIVATE 时调用的过程中绘制),这不是一个完美的解决方案,但可以轻松改进。 (我相信我不需要详细说明这一点。
不过到目前为止,这听起来相当不错。
直接的问题是,我该如何解决这三个问题?不过,我可能会以完全错误的方式处理这个问题,在这种情况下,问题是,如何实现自定义绘制的标题栏和边框,最好不要过多干扰边框和标题栏的功能,主菜单是否正确绘制?
正如我所说,这是一个相当大的项目,包含许多表单,因此在表单设计器中更改内容是我最不考虑做的事情之一。
要重现我遇到的问题,请创建一个新表单并按照我之前所述处理 WM_NCHITTEST、WM_NCACTIVATE 和 WM_NCPAINT。
...
procedure WMNCHITTEST(var message : TMessage); message WM_NCHITTEST;
procedure WMNCACTIVATE(var message : TMessage); message WM_NCACTIVATE;
procedure WMNCPAINT(var message : TMessage); message WM_NCPAINT;
...
implementation
...
procedure TBasicForm.WMNCHITTEST(var message : TMessage);
begin
inherited;
case message.Result of
HTMINBUTTONE, HTMAXBUTTON, HTCLOSE: message.Result := HTCAPTION;
end;
end;
procedure TBasicForm.WMNCACTIVATE(var message : TMessage);
begin
inherited;
Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := clRed;
Canvas.Rectangle(0, 0, Width, GetSystemMetric(SM_CYCAPTION) + GetSystemMetric(SM_CYBORDER));
Canvas.Rectangle(0, 0, GetSystemMetric(SM_CXBORDER), Height);
Canvas.Rectangle(Width - GetSystemMetric(SM_CXBORDER), 0, Width, Height);
Canvas.Rectangle(Width - GetSystemMetric(SM_CXBORDER), Heigth - GetSystemMetric(SM_CYBORDER), Width, Height);
end;
procedure TBasicForm.WMNCPAINT(var message : TMessage);
begin
SendMessage(Handle, WM_NCACTIVATE, ORD(active), -1);
end;
...
现在,向项目添加第二个表单,确保创建两个表单并在两个表单之间重复切换焦点(也尝试单击第二个表单,然后单击第一个表单的自定义绘制标题栏),这应该会导致在一些闪烁中,关闭、最小和最大按钮出现。关闭表单(按 alt + f4)应简要显示原始标题栏。
最佳答案
编写一个适当的类来绘制表单的非客户区域需要大量工作,您已经处理了一些涉及的基本窗口消息,但还有更多工作。根据我的经验,这些是我的建议。
A。当以某种方式在表单之间切换焦点时,有相当多的闪烁。
问。这个问题可能有很多原因,但主要是在 Canvas 上多次调用绘制方法,您可以使用位图缓冲区(TBitmap)将所有标题栏绘制到 Canvas 上来克服这个问题位图,最后仅在传递位图后调用 Canvas.Draw。
A。有时,原始的右上角按钮会出现,但它们不再对鼠标使用react。
查看下一个问题的答案。
A。关闭表单时,标题栏(仅标题栏)将恢复到原来的外观。
问 这是因为当表单恢复或调整大小时,您需要使表单的 NC 区域失效,因此您必须添加对一些附加消息的支持,如 WM_WINDOWPOSCHANGING、WM_SIZE、WM_MOVE、WM_NCMOUSEMOVE、 WM_NCLBUTTONDOWN、WM_NCRBUTTONDOWN 等
为了避免所有这些工作,您可以使用 VCL 样式,为此您必须重写 TFormStyleHook 类并实现一组自定义样式 Hook ,并应用到您想要自定义标题的表单中bar 使用 RegisterStyleHook 方法,如下所示
TStyleManager.Engine.RegisterStyleHook(TMyForm1, TMyCustomformStyleHook1);
TStyleManager.Engine.RegisterStyleHook(TMyForm2, TMyCustomformStyleHook2);
关于delphi - 在运行时创建自定义标题栏和边框,TMainMenu 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919039/
我使用 Runtime.getRuntime().exec 来运行 perl 程序。现在我想在执行过程中显示百分比进度条,然后在perl程序执行完成后,它应该关闭进度条。我该怎么做? Runtime.
我已广泛搜索该网站,但找不到答案。请我是新手,我需要你的帮助。 我想创建一个固定的导航栏,但每次在我的 CSS 样式表中放置一个固定的规则时,导航栏都会消失。这是我的 html 代码:
Here's a nice jsFiddle illustrating the problem 我正在尝试创建一个标题栏元素... 永远只有 1 行高 在右上角有始终存在的控件 在左上角有一个标题,如
int fd = open(JOYSTICK_NAME, O_RDONLY | O_NONBLOCK); O_RDONLY 和 O_NONBLOCK 之间的栏是什么意思?我在 OpenGL/GLUT
我注意到我的网页在页脚之后和页面底部有一个空白/栏: 我试图通过使用 Chrome 中的 inspect 元素来查找此问题的原因,但找不到任何内容。我正在使用 Boostrap,这是我的页脚 HTML
我已经对这个主题进行了一些研究,但我找不到完整的解决方案,因此,我一步一步地尝试和错误,我终于找到了如何实现这些结果:透明或彩色Actionbar 和 Statusbar。请参阅下面的答案。 最佳答案
Highcharts 教程中的经典示例是: $(function () { $('#container').highcharts({ chart: { type: 'bar'
注意 :这与 iOS 13 中使用的新默认模态呈现样式无关。 我有一个奇怪的问题,显示模态 UINavigationController . 考虑一个 UIViewController位于 UINav
我需要帮助了解如何在加载页面时隐藏 iPad 地址栏或顶部的整个地址栏。 我正在开发基于在线客户管理系统的系统,需要隐藏 iPad 地址栏,因为它在查看网站时会占用大量空间。 问候涡流 已经尝试了以下
我在向栏中添加文本时遇到了一些问题。我想在栏上方显示值,但我无法向每个栏添加文本。 现在我的dom结构是: g rect rect rect 我想要什么: g g.bar rect
我有 ListView ,数据将从数据表显示在 ListView 中像这样我已经完成了但是我在数据行 6 有问题 dt = classes.xxxxx.GetData(sql,
我使用 opposite 属性将 xAxis 向右移动。条形图怎么可能也从右侧开始? 谢谢! Highcharts.chart('absoluteInterruptions', { chart:
我得到了这张图片,我想在我的导航 Controller 中使用它: 我是这样设置的(根据 this 问题的建议): UINavigationBar *theBar = self.navigationC
这个问题在这里已经有了答案: How to disable breadcrumbs in Eclipse (11 个答案) 关闭 9 年前。 有谁知道如何删除我在 Eclipse 中用红色圈出的栏?
总而言之,我的应用程序中有一个浏览器,我希望它只启动 5 个网站,仅此而已。有没有办法让我的浏览器通过设置自定义字符串来启动 5 个网站,例如 if {用户键入此字符串} 转到该网站,然后 else
我想在我的应用程序中实现一个进度条。发生的过程是应用程序将一个目录复制到 iOS 文档目录中。通常需要 7-10 秒(iPhone 4 测试)。我对进度条的理解是你在事情发生时更新进度条。但是根据目录
我正在寻找一种创建交互式子弹图的方法,它允许用户单击图中的任意位置并设置一个标记,然后根据该标记所在的位置计算一些简单的值。例如,我希望它看起来类似于: http://www.usrecordings
我目前在一个网站上工作,我有一张人的照片。在图片的右侧,我想要名称和描述。名称应与描述具有不同的背景。我上传了一张它应该是什么样子的图片:http://www.tiikoni.com/tis/view
我将 div 栏设置为不滚动,因此它将始终显示在网站顶部。在这个栏内,我有另一个 div 框,里面有两个按钮,它们向右浮动,所以它们总是在右上角。 问题是我希望按钮居中于页面的右上角而不是右上角。相反
因此,我在我的网站中使用了一个选择栏。我试图在悬停时更改选项的背景颜色。此外,如果有人知道设置垂直 slider 样式的好方法,那就太棒了。 这是我正在尝试做的事情的 fiddle : http://
我是一名优秀的程序员,十分优秀!