Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вытащить текст из дочернего окна [D7, WinXP]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо