Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1250845434
Priest
2009-08-21 13:03
2009.10.18
RS-232 возвращает данные в формате float. Как перевести?


15-1245585239
Кто б сомневался
2009-06-21 15:53
2009.10.18
Автозапуск на Vista и цифровая подпись


15-1250510423
Художник
2009-08-17 16:00
2009.10.18
Изменить толщину пера при растривании вектора


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


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский