判断窗体控件是不是tedit,如果是判断是否为空,是则提示之,不知道你要的是不是这样的 var i : Integer; begin for i := 0 to ComponentCount - 1 do begin if Components[i] is TEdit then begin if (Components[i] as TEdit).Text= '' then begin ShowMessage((Components[i] as TEdit).Name +'is Null!') Continue; end; end; end; end;
唉,我又一个非常好的例子。但是是cpp写的,看来不适合你。算了。
如果只是判断VCL控件的话,判断它是不是从TEDIT继承下来的就可以了. if control1 is TEDIT then
搂住是判断自己工程中的窗体还是已经打开的应用程序的窗体? 其他应用程序的窗体可以使这这末做 hForm := FindWindowEx(0, 0, nil,'窗体名'); if hForm <> 0 then begin hEdit := FindWindowEx(hForm, 0, 'TEdit', nil); if hEdit <> 0 then 找不到也就不是TEdit 就为空现在是只能找到 不能判断焦点是不是在上边 判断焦点一般的api好像解决不了问题因为它是消息机制的 你可能要用钩子
function GetSysFocus: Integer; var hFgWin, FgThreadID, hFocusWin: Integer; begin hFgWin := GetForegroundWindow; FgThreadID := GetWindowThreadProcessID(hFgWin, nil); if AttachThreadInput(GetCurrentThreadID, FgThreadID, True) then begin hFocusWin := GetFocus; Result := GetFocus; AttachThreadInput(GetCurrentThreadID, FgThreadID, False); end else Result := GetFocus; end;
你试一下下面的吧,不一定都行。 function IsEdit(Handle: HWND): boolean; begin if SendMessage(Handle, WM_Char, 65, 0) <> 0 then Result := True else Result := False; end;一般来说能够输入文本的窗口都对WM_Char消息进行处理而且返回值都不为零,但其他的都不对WM_Char消息进行处理,所以SendMessage的返回值为零。
var
i : Integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if Components[i] is TEdit then
begin
if (Components[i] as TEdit).Text= '' then
begin
ShowMessage((Components[i] as TEdit).Name +'is Null!')
Continue;
end;
end;
end;
end;
if control1 is TEDIT then
hForm := FindWindowEx(0, 0, nil,'窗体名');
if hForm <> 0 then
begin
hEdit := FindWindowEx(hForm, 0, 'TEdit', nil);
if hEdit <> 0 then
找不到也就不是TEdit 就为空现在是只能找到 不能判断焦点是不是在上边 判断焦点一般的api好像解决不了问题因为它是消息机制的 你可能要用钩子
我可能是还没有说明确我的用意.我是想直接根据焦点所在控件的句柄判断出其是不是具有文本输入的特性,如TEDIT,TMEMO等.若根据类名一个一个判断的话,若要不是DELPHI的标准类,或是对其的继承,那就没有作用了.
var
hFgWin, FgThreadID, hFocusWin: Integer;
begin
hFgWin := GetForegroundWindow;
FgThreadID := GetWindowThreadProcessID(hFgWin, nil);
if AttachThreadInput(GetCurrentThreadID, FgThreadID, True) then
begin
hFocusWin := GetFocus;
Result := GetFocus;
AttachThreadInput(GetCurrentThreadID, FgThreadID, False);
end
else
Result := GetFocus;
end;
function IsEdit(Handle: HWND): boolean;
begin
if SendMessage(Handle, WM_Char, 65, 0) <> 0 then
Result := True
else
Result := False;
end;一般来说能够输入文本的窗口都对WM_Char消息进行处理而且返回值都不为零,但其他的都不对WM_Char消息进行处理,所以SendMessage的返回值为零。
如果输入VCL的 ReadOnly =True的话
SendMessage的返回结果是0,判断结果就错了呀