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

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

тупое неравенство - не мгу разобраться


Звоновский ©   (2008-01-29 00:43:00) 

if LowerCase(BuffTxt) = LowerCase(PChar(CmdRec^.ChldClss))  then       beginSendDebugMsg('h='+IntToStr(h)+' GetClassName = '+BuffTxt);
end;


Должно быть равно, но не равняется и немогу ничего поделать.


Семеныч   (2008-01-29 08:29:00) [1]

> Звоновский   (29.01.08 02:10) [11]

> как заранее узнать длину буфера

Заранее - никак. Но ее возвращает GetClassName.

var
 BuffTxt: String;
begin
 SetLength(BuffTxt, MAXCHAR);
 SetLength(BuffTxt, GetClassName(H, PChar(BuffTxt), MAXCHAR));
 ... // Здесь имеем "чистую" строку BuffTxt, уже без мусора


Звоновский   (2008-01-29 02:10:00) [2]

Вот еще хороший вопрос как заранее узнать длину буфера, если есть такие способы....?


Звоновский   (2008-01-29 02:06:00) [3]

> Семеныч   (29.01.08 01:43) [8]

Да стакими парараметрами вызывал

Var BuffTxt: String;

SetLength(BuffTxt,MAXCHAR);
GetClassName(h,PChar(BuffTxt),MAXCHAR);

Если нужно взять текст то длину буфера подгонял через
GetWindowTextLength(h);
а тут так оставил, вот на свои грабли и наступил..


Германн   (2008-01-29 01:57:00) [4]


> Звоновский   (29.01.08 01:36) [7]
>
> Судя по наличию  #101#100#105#116#0#
>
> Одно паражает откуда в имени класса Мульть-строка?
>

А это что за зверь "Мульть-строка"?
И как объявлена переменная BuffTxt?


Семеныч   (2008-01-29 01:43:00) [5]

> Звоновский   (29.01.08 01:36) [7]

Это нормальная ASCIIZ-строка. У Вас как-то странно BuffTxt формируется Похоже на PChar, помять для которого была выделена с запасом, а потом не была обрезана по первому нулю.

Зачем тут вообще PСhar'ы нужны? Почему со строками не работать? Никаких бы проблем не было.


Звоновский   (2008-01-29 01:36:00) [6]

Судя по наличию  #101#100#105#116# 0#

Одно паражает откуда в имени класса Мульть-строка?


Звоновский   (2008-01-29 01:33:00) [7]

Я разгадал загадку неравенства

St1:=LowerCase((BuffTxt));
St2:=LowerCase(PChar(CmdRec^.ChldClss));

for i:=1 to length(St1) do StOrd1:=StOrd1+'#'+IntToStr(Ord(St1[i]));
for i:=1 to Length(St2) do StOrd2:=StOrd2+'#'+IntToStr(Ord(St2[i]));

SendDebugMsg('StOrd1 = '+StOrd1);
SendDebugMsg('StOrd2 = '+StOrd2);


4. PID: 5068 CmdRec^.ChldClss = edit
5. PID: 5068 BuffTxt = edit
6. PID: 5068 StOrd1 = #101#100#105#116#0#109#49#12#99#108#105#101#110#116#104#101#105#103#104#116#3#16 9#1#11#99#108#105#101#110#116#119#105#100#116#104#3#117#2#5#99#111#108#111#114#7 #9#99#108#98#116#110#102#97#99#101#12#102#111#110#116#46#99#104#97#114#115#101#1 16#7#15#100#101#102#97#117#108#116#95#99#104#97#114#115#101#116#10#102#111#110#1 16#46#99#111#108#111#114#7#12#99#108#119#105#110#100#111#119#116#101#120#116#11# 102#111#110#116#46#104#101#105#103#104#116#2#245#9#102#0
7. PID: 5068 StOrd2 = #101#100#105#116


Семеныч   (2008-01-29 01:23:00) [8]

А там пробелов в начале и в конце, часом, нет?

AnsiLowerCase( Trunc(String(BuffTxt)))
AnsiLowerCase( Trunc(String(PChar(CmdRec^.ChldClss))))


Звоновский   (2008-01-29 01:12:00) [9]

сделал как говорили

SendDebugMsg('CmdRec^.ChldClss = '+AnsiLowerCase(String(PChar(CmdRec^.ChldClss))));
SendDebugMsg('BuffTxt = '+AnsiLowerCase(String(BuffTxt)));

Вернул, - все впорядке
4. PID: 6116 CmdRec^.ChldClss = edit
5. PID: 6116 BuffTxt = edit

if AnsiLowerCase(String(BuffTxt)) = AnsiLowerCase(String(PChar(CmdRec^.ChldClss)))  then begin
 SendDebugMsg('h='+IntToStr(h)+' GetClassName = '+BuffTxt);
 SendDebugMsg('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
end;


Но равенство не наступает :((


Семеныч   (2008-01-29 00:58:00) [10]

Помотрите, что показывает отладчик в BuffTxt и в CmdRec^.ChldClss

И попробуйте привести к строке:
AnsiLowerCase( String(PChar(CmdRec^.ChldClss)))


Звоновский   (2008-01-29 00:54:00) [11]

Нет аснгл.
пеперед этим вызывал

SendDebugMsg('CmdRec^.ChldClss = '+LowerCase(PChar(CmdRec^.ChldClss)));
SendDebugMsg('BuffTxt = '+LowerCase(BuffTxt));


В он вернул:

4. PID: 5560 CmdRec^.ChldClss = edit
5. PID: 5560 BuffTxt = edit


Семеныч   (2008-01-29 00:48:00) [12]

Текст русский? Тогда AnsiLowerCase.


Наверх

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