![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
тупое неравенство - не мгу разобраться
Звоновский © (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.