如何返回一个无handle的控件的类名?(100分)

  • 主题发起人 主题发起人 jbas
  • 开始时间 开始时间
J

jbas

Unregistered / Unconfirmed
GUEST, unregistred user!
这样只能返回有handle的控件的classname,但对speedbutton就不行了,是否有办法实现,

procedure spybutton(var msg:tmessage);message CM_MOUSEENTER;

procedure TForm1.spybutton(var msg: tmessage);
var
xc:array[0..20] of char;
i:integer;
begin
if getclassname(windowfrompoint(mouse.CursorPos),xc,20)<>0 then
label1.Caption:=xc;
end;
-------------------------------
if form1.Components.ClassType=TSpeedbutton then
label2.Caption:='speed';这样能实现,但是要知道mouse下的就不行了。
 
非TWinControl没有 classname
 
to jsxjd:
>>非TWinControl没有 classname
对吗?下面可以得到其类名,但不能得到panel上的控件名。
unit Unitmyclass1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
Label3: TLabel;
Button2: TButton;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
BitBtn1: TBitBtn;
Image1: TImage;
private
{ Private declarations }
procedure MMsg(var msg:TMessage);message CM_MouseEnter;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MMsg(var msg: TMessage);
VAR
c : TControl;
p : tPoint;
begin
p:=ScreenToClient(mouse.CursorPos);
c:=ControlAtPos(p,true,true);
IF c <> NIL THEN
begin
label2.Caption := c.ClassName;
if c.ClassName='TSpeedButton' then
label3.Caption:=tspeedbutton(c).Caption;
end;
end;


end.
 
类名和在系统中注册的window className是两回事。
你如果自己用SDK开发一个windows程序就明白。
你最上面得到的是 window classname
 
speedbutton.ClassName不久可以返回类名吗?
 
已经解决!
 

Similar threads

S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
S
回复
0
查看
888
SUNSTONE的Delphi笔记
S
S
回复
0
查看
716
SUNSTONE的Delphi笔记
S
后退
顶部