Главная страница
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.016 c
11-1206625817
andreil
2008-03-27 16:50
2009.10.18
Проблема с видимостью элементов :(


2-1250069271
kirill_2009
2009-08-12 13:27
2009.10.18
биты(


1-1219825246
tytus
2008-08-27 12:20
2009.10.18
TFrxMemoView - OnBeforePrint - поставить знак "минус"


15-1250235878
Taur
2009-08-14 11:44
2009.10.18
Delphi 2005 Не корректно отображается код


3-1228252748
istok2
2008-12-03 00:19
2009.10.18
проблема с TIBScript