IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Правильный WM_LButtonClick
TarasBer
сообщение 20.06.2011 14:11
Сообщение #21


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


http://msdn.microsoft.com/en-us/library/ms645478(VS.85).aspx


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 20.06.2011 16:43
Сообщение #22


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


2 Unconnected: smile.gif

Смотри: (Показать/Скрыть)
А теперь - внимание, вопрос: не запуская этот код - подумай, он будет работать или нет? Чем чревато, в общем, все плюсы и минусы - в студию... У меня Delphi 2009 под WinXP, если что. Итак?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 20.06.2011 16:45
Сообщение #23


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Procedure clickng(w:THandle);
begin
postmessage(winh,WM_COMMAND,MAKEWPARAM(GetDlgCtrlID(w),BN_CLICKED),winh);
end;

так надо? Вроде не напутал с hi\low в wparam.

added: ну вообще должен работать, только при отправке WM_COMMAND в lParam должно быть Handle to the control window - я так понял, хэндл самого окна, а не кнопки..
Тут сделано две Callback-процедуры - а у меня одна, смысл её искать окно с определённым кэпшном на другом окне (то есть и окно на раб. столе найдет, и кнопку на окне).
Вообще как-то по-интересному - где-то в lParam втыкается просто хэндл, где-то с Makelparam.. А, ещё для русских строк у меня работает только ANSIUppercase.

Сообщение отредактировано: Unconnected - 20.06.2011 17:19


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 20.06.2011 17:44
Сообщение #24


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
только при отправке WM_COMMAND в lParam должно быть Handle to the control window - я так понял, хэндл самого окна, а не кнопки..
Да ладно... Control window - это оно и есть, окно контрола, т.е, кнопки...

Цитата
Тут сделано две Callback-процедуры - а у меня одна, смысл её искать окно с определённым кэпшном на другом окне
Смысл - в том, что не надо путать EnumWindows и EnumChildWindows. Каждый занимается своим делом: EnumWindows ищет нужную форму на десктопе, а EnumChildWindows - на найденной форме ищет дочерний контрол. Опять же, ты можешь делать как хочешь, но если ты используешь функции не по назначению - потом не удивляйся некорректному поведению программы.
Цитата
а у меня одна
А желания она не исполняет? Еду из холодильника не может достать и подогреть? Почему одна функция (заметь, CALLBACK-функция) должна решать несколько задач? Я предпочитаю "divide and conquer" ©

Цитата
Вообще как-то по-интересному - где-то в lParam втыкается просто хэндл, где-то с Makelparam
Ну, передай в PostMessage тоже с MakeLParam... Работоспособности это не меняет...

Цитата
А, ещё для русских строк у меня работает только ANSIUppercase.
У тебя это тоже присутствует, кстати. Твой AnsiUpperCase не работает для русских строк на моей машине, ибо у меня ANSI-страница - другая.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 21.06.2011 1:50
Сообщение #25


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ок, разделяю и властвую) То есть, Uppercase далеко не универсальный? Что с этим можно сделать?.. Из-за этого опять могут вылезти непонятки, в других моментах..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 21.06.2011 8:39
Сообщение #26


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
То есть, Uppercase далеко не универсальный? Что с этим можно сделать?
Это зависит от версии компилятора. По крайней мере D2009 и выше позволяют написать:
if Pos(WideUpperCase(WideString(sCaptionToFind)), WideUpperCase(WideString(GetText(h)))) > 0 then
// ...
, и это работает, если исходник сохранен в UTF8 (я вообще взял себе за привычку все исходники сохранять в UTF8, а не в ANSI, не только дельфийские)

В принципе, можно было бы и убрать эту промежуточную конвертацию в WideString, это уже чтоб наверняка...

Сообщение отредактировано: IUnknown - 21.06.2011 8:41
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 22.06.2011 1:13
Сообщение #27


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ого, а у меня D7.. короче решил не заморачиваться, сделал перекрывающую функцию, надеюсь будет на всех машинах с русским языком работать:

Function upppercase(s:string):string;
var i:integer;
begin
for i:=1 to length(s) do begin
if (s[i] in ['a'..'z']) or (s[i] in ['à'..'ÿ']) then s[i]:=chr(ord(s[i])-32);
end;
result:=s;
end;


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
skyjumping
сообщение 1.10.2012 19:17
Сообщение #28


Гость






так то оно так..
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 29.03.2024 14:26
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"