![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вытащить текст из дочернего окна [D7, WinXP]
Tanya © (2006-08-01 20:33:00)Есть хендл окна, в котором находятся дочерние окна, Edit-ы, кнопки и т.д., вот как из них всех вытащить текст? Функция GetWindowText вытаскивает почему-то пустой текст. Делаю я так:
function EnumChildProc(hwnd: Hwnd; lParam: Longint): Longint; stdcall;
var
sText: array [0..MAX_PATH] of Char;
begin
Form1.Memo1.Lines.Add('#' + IntToStr(hwnd));
GetWindowText(hwnd, sText, SizeOf(sText));
Form1.Memo1.Lines.Add(sText);
Result := 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
EnumChildWindows(sHWND, @EnumChildProc, 0);
end;
Мастера, подскажите пожалуйста..
Ketmar (2006-08-10 15:58:00) [1]> [28] Tanya (10.08.06 15:46)
нет, а мнеоткуда знать, что в той строке? вот я и намекаю, что телепатор в ремонте.
Tanya (2006-08-10 15:51:00) [2]странно, у меня даже не компилируется...(((
clickmaker (2006-08-10 15:49:00) [3]
> с "Integer" работает а с "LParam" нет?
с LParam тоже работает
Tanya (2006-08-10 15:46:00) [4]Блин, я не понимаю причем здесь 17-я строка...((( Ketmar, что там?
Ketmar (2006-08-10 15:24:00) [5]17-я строка.
Tanya (2006-08-10 15:21:00) [6]Интересно, почему с "Integer" работает а с "LParam" нет? Объясните плиз
Tanya (2006-08-10 03:03:00) [7]Поменяла "LParam" на "Integer", т.е. сделала так и заработало:
var
pText: string;
TextLen: Integer;
...
TextLen := SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);
SetLength(pText, TextLen);
if TextLen > 0 then SendMessage(hwnd, WM_GETTEXT, TextLen + 1, Integer(PChar(pText)));
Tanya (2006-08-10 03:00:00) [8]Что-то я не пойму никак в чем ошибка...((( Курсор становится после слова "LPARAM(" перед PChar
Ketmar (2006-08-08 22:22:00) [9]намекаю более прозрачно: 17-я строка.
Tanya (2006-08-08 22:01:00) [10]да, на эту строку и показывает:
if TextLen > 0 then SendMessage(hwnd, WM_GETTEXT, TextLen + 1, LPARAM(PChar(pText)));
Ketmar (2006-08-08 18:02:00) [11]ошибка в 66-й строке, аднака.
Tanya (2006-08-08 17:12:00) [12]Что-то у меня не компилится такой код:
var
pText: string;
TextLen: Integer;
...
TextLen := SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);
SetLength(pText, TextLen);
if TextLen > 0 then SendMessage(hwnd, WM_GETTEXT, TextLen + 1, LPARAM(PChar(pText)));
пишет: [Error] Unit1.pas(66): Missing operator or semicolon
Я и так пробовала: LPARAM(@pText[1]) вместо LPARAM(PChar(pText))
Ketmar (2006-08-02 17:53:00) [13]> [17] begin...end © (02.08.06 17:42)
ну и ещё: ноль потому, что "за время пути собака могла похудеть". хоть это и маловероятно.
Ketmar (2006-08-02 17:52:00) [14]> [17] begin...end © (02.08.06 17:42)
ноль -- по причине слабой памяти. %-) не уверен в том, что оно его само пропишет. а GetMem() память не обнуляет.
[13] -- потому что опять же, насколько я помню, PChar() иногда выделяет для строки временный буфер. но и тут могу наврать -- проверял давно. а Delphi дома. %-)
begin...end (2006-08-02 17:42:00) [15]> Ketmar © (02.08.06 14:01) [8]
Зачем писать завершающий ноль вручную?
> Ketmar © (02.08.06 16:48) [13]
Почему?
Leonid Troyanovsky (2006-08-02 17:25:00) [16]
> Ketmar © (02.08.06 16:48) [13]
> LPARAM(@pText[1]), если уж на то пошло. %-)
Не, это уж слишком пошло.
Можно б было представить Pointer(pText),
но длину строки, все равно, надо проверять.
--
Regards, LVT.
Leonid Troyanovsky (2006-08-02 17:21:00) [17]
> Leonid Troyanovsky © (02.08.06 17:19) [14]
> SendMessage(hwnd, WM_GETTEXT, TextLen+1, PChar(pText));
Фу-ты, LParam(PChar(pText)),
sorry.
--
Regards, LVT.
Leonid Troyanovsky (2006-08-02 17:19:00) [18]
> Stakan © (02.08.06 13:50) [7]
> TextLen := SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0) +
> 1;
> SetLength(pText, TextLen);
> SendMessage(hwnd, WM_GETTEXT, TextLen, PChar(pText));
TextLen := SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);
SetLength(pText, TextLen);
if TextLen > 0 then
SendMessage(hwnd, WM_GETTEXT, TextLen+1, PChar(pText));
--
Regards, LVT.
Ketmar (2006-08-02 16:48:00) [19]> [11] Stakan © (02.08.06 16:36)
LPARAM(@pText[1]), если уж на то пошло. %-)
Германн (2006-08-02 16:39:00) [20]
> Зато у тебя Есть GetMem, но нет FreeMem (и указания, что
> его нужно использовать тоже), а это уже хуже.
>
А ему это и не нужно :-)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1154358587&n=3