Работа с окнами в DELPHI.
Не могу разобрать код. Он меняет все Edit-ы на форме, Button-ы, Label-ы. Не пойму, что, какая строка, и параметр обозначает. И как сделать чтоб нужный мне Edit, Label, Button,Image или что мне нужно меняло свой текст, клик, изо.
function EnumWindowProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
begin
Result := BOOL(SendMessage(hwnd, WM_SETTEXT, 0, Integer(PAnsiChar(s))));
if not Result then
OutputDebugString(PAnsiChar(IntToStr(GetLastError)));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hWindow: HWND;
begin
s:=edit1.Text;
hWindow := FindWindow(PAnsiChar('TForm2'),nil); //ìåíÿåò è áàòòîí òîæå
if hWindow > 0 then
EnumChildWindows(hWindow, @EnumWindowProc, 0);
Button1Click обработчик события нажатия на кнопку, в нем:
в переменную s копируется содержимое edit1.Text
s:=edit1.Text;
Ищет окно с именем класса TForm2, если такое окно будет найдено в переменную hWindow функция вернет его дескриптор окна (или обработчик, как удобнее)
hWindow := FindWindow(PAnsiChar('TForm2'),nil);
Если дескриптор имеется (>0), т. е. функция FindWindow нашла окно с именем класса TForm2
if hWindow > 0 then
то вызывается функция WinAPI EnumChildWindows, которая перебирает все дочерние у окна у окна с дескриптором hWindow. В функцию передается указатель на функцию обратного вызова EnumWindowProc, эта функция будет вызываться для каждого найденного дочернего окна (контрола на форме)
EnumChildWindows(hWindow, @EnumWindowProc, 0);
Когда очередное дочернее окно найдено, вызывается EnumWindowProc, в нем, hwnd будет содержать дескриптор найденного окна или контрола, для найденного окна происходит отправка сообщения окну или управлению с дескриптором hwnd:
Result := BOOL(SendMessage(hwnd, WM_SETTEXT, 0, Integer(PAnsiChar(s))));
Это сообщение WM_SETTEXT устанавливает текст из переменной s, если конечно обработка WM_SETTEXT в окне или контроле поддерживается.
Если отправка сообщения была не удачной:
if not Result then
OutputDebugString(PAnsiChar(IntToStr(GetLastError)));
то вызывается функция обработки ошибок.