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

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

Как получить длину имени класса получаемый 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.


Наверх

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