Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
2-1250700077
Lex_okha
2009-08-19 20:41
2009.10.18
Помогите решить проблему


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


15-1250014166
Kerk
2009-08-11 22:09
2009.10.18
Все-таки есть бритвы, а есть Бритвы...


15-1250138266
Сергей Давыдов
2009-08-13 08:37
2009.10.18
Оплачю разработку фунции преобразования! (50$)


2-1250322712
Ulugbek
2009-08-15 11:51
2009.10.18
Помогите как вставить кнопка в ячейке Dbgrid?




   Наверх