Delphi TEdit onClick-启用&;做其他事情

Delphi TEdit onClick-启用&;做其他事情,delphi,Delphi,您好,所以我想知道是否可以这样做: 启动时TEdit(Edit1)被禁用-因此Edit1.enabled:=false 当用户单击TEdit时,它将被启用,并执行其他操作,我尝试使用Edit1.onClick,但它似乎不起作用,因为它被禁用。禁用的控件通过单击传递到它下面的窗口。如果父项已启用,则可以在禁用编辑的父项上查找单击;获取单击和查询的位置(如果它位于控件上) 下面是一个检测单击表单上已禁用的编辑的示例。如果编辑由另一个容器(如面板)作为父对象,则需要进行相应调整 procedure

您好,所以我想知道是否可以这样做:


启动时TEdit(Edit1)被禁用-因此Edit1.enabled:=false


当用户单击TEdit时,它将被启用,并执行其他操作,我尝试使用Edit1.onClick,但它似乎不起作用,因为它被禁用。

禁用的控件通过单击传递到它下面的窗口。如果父项已启用,则可以在禁用编辑的父项上查找单击;获取单击和查询的位置(如果它位于控件上)

下面是一个检测单击表单上已禁用的编辑的示例。如果编辑由另一个容器(如面板)作为父对象,则需要进行相应调整

procedure TForm1.FormClick(Sender: TObject);
var
  Pt: TPoint;
  Wnd: HWND;
  Control: TControl;
begin
  Pt := ScreenToClient(SmallPointToPoint(types.SmallPoint(GetMessagePos)));
  Wnd := ChildWindowFromPoint(Handle, Pt);
  if Handle <> Wnd then begin
    Control := FindControl(Wnd);
    if (Control is TEdit) and not Control.Enabled then
      Control.Enabled := True;
  end;
end;
程序TForm1.FormClick(发送方:TObject);
变量
Pt:TPoint;
Wnd:HWND;
控制:t控制;
开始
Pt:=ScreenToClient(SmallPointToPoint(types.SmallPoint(GetMessagePos));
Wnd:=ChildWindowFromPoint(句柄,Pt);
如果句柄Wnd,则开始
控件:=FindControl(Wnd);
如果(控件为TEdit)且未启用控件。则
控件。已启用:=True;
结束;
结束;

事实上,如果控件被禁用,用户将无法与其交互。因此,无法单击禁用的控件。这是用户的期望,我认为挑战这种期望不是一个好主意。你的“实际”问题是什么?例如,如果希望在后台线程执行某些初始化工作时,在启动过程中禁用控件一段时间,正确的做法是在该工作完成时启用控件。@AndreasRejbrand Not for startup,我只是想让用户单击特定的TEdit,其中一个启用,而另一个不启用,因此用户选择了正确的TEdit,因为他们要编辑的值将来自不同的输入字段。这个程序就像一个用来分类n个东西的储藏室,你知道那里的人有时不是最聪明的,所以我必须让它非常容易使用,我猜所选的字段必须是正确的,而不是使用
Enabled
属性,只需使用
颜色
字体
属性。当控件被禁用时,会给用户一个视觉提示,提示用户不要单击。我经常使用使(DB)编辑为只读和将其颜色设置为btnFace的组合。这使得它的外观“足够禁用”,同时仍然允许人们复制文本、单击文本等。