【发布时间】:2014-10-16 19:30:10
【问题描述】:
我已经知道并且已经使用这些方法创建了一个可以移动的没有边框的表单。 Move form without border style
我正在使用 WMNCHitTest 覆盖。 MouseDown 事件根本不起作用。
这个表格非常简单,它显示一个倒计时,一个每秒变化的数字,仅此而已。使用带有大字体的大 TLabel 绘制的数字。
但是我也使用 Delphi 的标准表单属性使这个表单透明。 现在,如果我尝试单击表格来移动它,我唯一可以使用的区域是绘制变化数字的线条,即使它们不那么细,这也不实用。 我希望用户能够通过单击数字附近的任意位置(例如在“0”或“8”内)将数字移动到屏幕的任何位置。
我会考虑在数字上画一个透明的矩形,作为可点击区域,但效果是一样的,点击会通过。
我知道一个应用程序可以做到这一点,所以这是可能的,但是如何?
procedure TfrmCountDown.Timer1Timer(Sender: TObject);
begin
iCount := iCount - 1;
lblTime.Caption := FormatFloat('00', iCount);
end;
procedure TfrmCountDown.FormCreate(Sender: TObject);
begin
iCount := 60;
BorderStyle:=bsNone;
Self.Color := clGray;
Self.TransparentColor := true;
Self.TransparentColorValue := clGray;
end;
procedure TfrmCountDown.WMNCHitTest(var Message: TWMNCHitTest);
var
Pt: TPoint;
begin
Pt := ScreenToClient(SmallPointToPoint(Message.Pos));
if Pt.Y < 160 then
Message.Result := HTCAPTION
else
inherited;
end;
【问题讨论】:
-
可以让我们重现您要求我们解决的问题的信息(表单的代码和属性设置)在哪里? (注意:我没有否决您的问题,但就目前而言,这是一个“请给我代码”的问题,要求我们调试我们看不到的代码。)
-
我会放代码,但这不是调试或故障排除的东西,任何人都知道答案,或者不知道。你能同意吗?
-
这是要调试的东西。 “我正在使用 WMNCHitTest 覆盖……我使表单透明……现在,如果我尝试单击表单来移动它,它就不起作用了。”是对存在问题的代码的描述,但您没有提供允许我们重现问题以进行调试的详细信息。
-
我已经添加了代码 ;)
-
肯,但这就是我解释的!大声笑....我说“如果我尝试单击表单来移动它,我唯一可以使用的区域是绘制变化数字的线条”和“我希望用户能够将数字移动到通过单击数字附近的任意位置(例如在“0”或“8”内),可以在屏幕的任何位置。”
标签: delphi transparency vcl