Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
ВнизКак получить длину имени класса получаемый GetClassName Найти похожие ветки
← →
izya (2009-08-17 14:43) [0]делаю так
...
W: Hwnd;
...GetClassName(W, Cs, GetWindowTextLength(W) + 1)
только GetWindowTextLength восврасщает длину заголовка а не имени класса окна
← →
Leonid Troyanovsky © (2009-08-17 14:55) [1]
> izya (17.08.09 14:43)
> не имени класса окна
А причем тут имя класса?
From msdn: WNDCLASS Structure:
The maximum length for lpszClassName is 256.
Реальная длина строки - результат, возвращаемый GetClassName.
--
Regards, LVT.
← →
izya (2009-08-17 15:12) [2]ну тогда зачем нужен третий параметр если всегда 256 писать? Хотел узнать точную длину, если можно, а не обрезать по #0
← →
Anatoly Podgoretsky © (2009-08-17 15:17) [3]
> If the function succeeds, the return value is the number
> of characters copied to the specified buffer.
← →
Юрий Зотов © (2009-08-17 16:52) [4]> 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 17:00) [5]> Юрий Зотов (17.08.2009 16:52:04) [4]
И почти всегда можно получить размер, если указать буфер меньшего размера, обычно 0, данная функция именно к этому классу относится, за исключением, того, что ошибка не возбуждается, просто значение урезается.
← →
Leonid Troyanovsky © (2009-08-17 17:31) [6]
> Юрий Зотов © (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.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c