procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin for i := 0 to self.ControlCount -1 do begin if (UpperCase(self.Controls[i].ClassName)= 'TLABEL') THEN begin showmessage(Tlabel(TWinControl(self.Controls[i])).Name ) ; Tlabel(TWinControl(self.Controls[i])).Name := 'xxx'+inttostr(i) ; Tlabel(TWinControl(self.Controls[i])).Caption := 'hello'; end; end; end;
Sender.ClassName 类名.
var i: integer;
begin
for i := 0 to self.ControlCount -1 do
begin
if (UpperCase(self.Controls[i].ClassName)= 'TLABEL') THEN
begin
showmessage(Tlabel(TWinControl(self.Controls[i])).Name ) ;
Tlabel(TWinControl(self.Controls[i])).Name := 'xxx'+inttostr(i) ;
Tlabel(TWinControl(self.Controls[i])).Caption := 'hello';
end;
end;
end;
"这个control的名称", 是編程的時候, 為了方便記憶才記錄了,
到了運行時, 應該只有handle才能找到對應的控件了!至少, 你編碼時, 能控制本程序, 如
form1.edit1.text := 'xxx';
但編繹後, 應該只有一個對應的內存地址來表示 edit1 而已
LPTSTR lpClassName,
int nMaxCount
);就我知道的, 只有這個
如果針對特定的delphi程序, 也許有辦法, 但比較麻煩
Pt: TPoint;
CurrentHandle: THandle;
ClassName: array[0..1023] of Char;
S : array [0..99] of char;
ilen : integer;
begin GetCursorPos(Pt);
CurrentHandle := WindowFromPoint(Pt);
GetClassName(CurrentHandle, ClassName, Length(ClassName));
Caption := ClassName;
ilen := GetWindowTextLength(CurrentHandle); Edit1.Text := inttostr(ilen);
GetWindowText(CurrentHandle,S,ilen+2);
Edit2.Text := S;
end;以上这段程序对于delphi编写的程序可以读出输入框中的数据,但是对于其他windows程序
却读不出内容,不知道为何,请高手继续指点.