Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.18;
Скачать: CL | DM;

Вниз

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

Наверх




Память: 0.48 MB
Время: 0.013 c
15-1250014166
Kerk
2009-08-11 22:09
2009.10.18
Все-таки есть бритвы, а есть Бритвы...


1-1219743656
dmitry_12_08_74
2008-08-26 13:40
2009.10.18
Рисование на рабочем столе полупрозрачных объектов


2-1250318652
Константинов
2009-08-15 10:44
2009.10.18
работа с файлами *.adt и *.adi


15-1250594396
Vera
2009-08-18 15:19
2009.10.18
JvComponentBase


15-1250454604
Юрий
2009-08-17 00:30
2009.10.18
С днем рождения ! 17 августа 2009 понедельник