- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有几个第三方控件(例如 Raize Components )具有关闭的“十字”按钮“选项”(例如页面控件)。我的要求更简单,我想将右上角对齐的十字“按钮”放在 TPanel 上并访问其单击事件。是否有一种简单的方法可以在不创建 TPanel 后代的情况下执行此操作,或者是否有我可以使用的付费或免费库组件?
最佳答案
我为你写了一个控件。
unit CloseButton;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, UxTheme;
type
TCloseButton = class(TCustomControl)
private
FMouseInside: boolean;
function MouseButtonDown: boolean;
protected
procedure Paint; override;
procedure MouseMove(Shift: TShiftState; X: Integer; Y: Integer); override;
procedure WndProc(var Message: TMessage); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X: Integer;
Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X: Integer;
Y: Integer); override;
public
constructor Create(AOwner: TComponent); override;
published
property Align;
property Anchors;
property Enabled;
property OnClick;
property OnMouseUp;
property OnMouseDown;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Rejbrand 2009', [TCloseButton]);
end;
{ TCloseButton }
constructor TCloseButton.Create(AOwner: TComponent);
begin
inherited;
Width := 32;
Height := 32;
end;
function TCloseButton.MouseButtonDown: boolean;
begin
MouseButtonDown := GetKeyState(VK_LBUTTON) and $8000 <> 0;
end;
procedure TCloseButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited;
Invalidate;
end;
procedure TCloseButton.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
inherited;
if not FMouseInside then
begin
FMouseInside := true;
Invalidate;
end;
end;
procedure TCloseButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited;
Invalidate;
end;
procedure TCloseButton.Paint;
function GetAeroState: cardinal;
begin
result := CBS_NORMAL;
if not Enabled then
result := CBS_DISABLED
else
if FMouseInside then
if MouseButtonDown then
result := CBS_PUSHED
else
result := CBS_HOT;
end;
function GetClassicState: cardinal;
begin
result := 0;
if not Enabled then
result := DFCS_INACTIVE
else
if FMouseInside then
if MouseButtonDown then
result := DFCS_PUSHED
else
result := DFCS_HOT;
end;
var
h: HTHEME;
begin
inherited;
if UseThemes then
begin
h := OpenThemeData(Handle, 'WINDOW');
if h <> 0 then
try
DrawThemeBackground(h,
Canvas.Handle,
WP_CLOSEBUTTON,
GetAeroState,
ClientRect,
nil);
finally
CloseThemeData(h);
end;
end
else
DrawFrameControl(Canvas.Handle,
ClientRect,
DFC_CAPTION,
DFCS_CAPTIONCLOSE or GetClassicState)
end;
procedure TCloseButton.WndProc(var Message: TMessage);
begin
inherited;
case Message.Msg of
WM_MOUSELEAVE:
begin
FMouseInside := false;
Invalidate;
end;
CM_ENABLEDCHANGED:
Invalidate;
end;
end;
end.
示例(启用和不启用主题):
只需将其放在右上角的 TPanel
中,并将 Anchors
设置为顶部和右侧即可。
关于delphi - 如何最好地创建一个右上角带有关闭 'cross' 按钮的 TPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550249/
你好,我怎样才能将一个 div 类移动到页面的右上角而不会使页面的侧面变长? 我的CSS代码: .nav ul { list-style: none; text-align: center; padd
在我为测试/学习 C# 编写的应用程序中,我使用隐藏/可见属性打开和关闭窗口。这是一个 WPF 应用程序。 在主窗口中,我有一个触发此方法的“关闭”按钮: public void buttonQuit
应该很简单……我想。 我有这样的设置: THE FIRST THE SECOND 我希望整个主 div 位于屏幕的右上角,当我调整浏览器大小时,我希望它保持在那里。我说的不是固定定位
我需要放置一个具有以下 DOM 结构的弹出式关闭图标 Content of the POPUP 我的输出应该是这样的: 定位应该适用于所有屏幕。请用这个 DOM 结构给我答案。 注意:弹出内容 di
我正在重写自定义 UIView 中的 drawRect: 方法,并且正在做一些自定义绘图。一切进展顺利,直到我需要将 PDF 资源(准确地说是矢量字形)绘制到上下文中。首先,我从文件中检索 PDF:
我正在尝试通过将某些表单设为无模式来使我的 VB.NET 应用程序更好用一些。 我想我已经弄清楚如何使用 dlg.Show() 和 dlg.Hide() 而不是调用 dlg.ShowDialog()。
在Android中使用MapBox,我试图找到左下角和右上角。我在他们的文档中找不到任何地方来检索此信息。 最佳答案 这行代码应该完成您想要做的事情: LatLngBounds 范围 = mapbox
调用时: AfxMessageBox(strMsg, MB_YESNO); 将显示带有"is"和“否”按钮的消息框。但是右上角的“X”(关闭按钮)是禁用的,按ESC没有效果。 这是因为唯一有效的结果是
我有一个 div,我想在 div 的右下角放一张图片,在左下角放一些图片。它们的高度不同,所以我想确保它们都与 div 的底部对齐。 首先,我使用以下方法使右下角对齐: position: ab
我是一名优秀的程序员,十分优秀!