![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить длину имени класса получаемый GetClassName
izya © (2009-08-17 14:43:00)делаю так
...
W: Hwnd;
...
GetClassName(W, Cs, GetWindowTextLength(W) + 1)
только GetWindowTextLengthвосврасщает длину заголовка а не имени класса окна
Leonid Troyanovsky (2009-08-17 17:31:00) [1]
> Юрий Зотов © (17.08.09 16:52) [4]
> SetLength(S, 256);
Я бы здесь написал
var
buf: array[0..256] of Char;
num: Longint;
begin
num := GetClassName(wnd, buf, Hi(buf));
Win32Check(num <> 0);
SetString(Result, buf, num);
end;
бо, в буфер пишется и завершающий #0.
--
Regards, LVT.
Anatoly Podgoretsky (2009-08-17 17:00:00) [2]> Юрий Зотов (17.08.2009 16:52:04) [4]
И почти всегда можно получить размер, если указать буфер меньшего размера, обычно 0, данная функция именно к этому классу относится, за исключением, того, что ошибка не возбуждается, просто значение урезается.
Юрий Зотов (2009-08-17 16:52:00) [3]> izya (17.08.09 15:12) [2]
> зачем нужен третий параметр если всегда 256 писать?
Не обязательно всегда писать 256. Мы же сами выделяем буфер - какой хотим, такой и выделим. А параметр нужен, чтобы функция знала размер выделеного для нее буфера и не вылезала за его пределы. Иначе запортится память с непредсказуемыми последствиями.
Вообще, указание адреса и размера буфера в параметрах функций используется очень часто. Это, можно сказать, классика.
Обычно я использую такой прием:
var
S: string;
...
SetLength(S, 256);
SetLength(S, GetClassName(Wnd, @S[1], Length(S)));
Anatoly Podgoretsky (2009-08-17 15:17:00) [4]
> If the function succeeds, the return value is the number
> of characters copied to the specified buffer.
izya (2009-08-17 15:12:00) [5]ну тогда зачем нужен третий параметр если всегда 256 писать? Хотел узнать точную длину, если можно, а не обрезать по #0
Leonid Troyanovsky (2009-08-17 14:55:00) [6]
> izya (17.08.09 14:43)
> не имени класса окна
А причем тут имя класса?
From msdn: WNDCLASS Structure:
The maximum length for lpszClassName is 256.
Реальная длина строки - результат, возвращаемый GetClassName.
--
Regards, LVT.