Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.28;
Скачать: CL | DM;

Вниз

Подскажите пожалуйста!   Найти похожие ветки 

 
Alex870   (2001-11-26 21:27) [0]

Привет всем! Помогите пожалуйста разобраться с такой задачей: Запущено приложение,имеющее элементы SPEEDBUTTON (у которых нет дескриптора), могу ли я из своей программы вызвать "Click" данного элемента. Есть так же главное меню, в котором команды этх кнопок дублируются, но к сожелению и оно дескриптора не имеет.Заранее всем спасибо!


 
ggsoft ©   (2001-11-26 22:00) [1]

Если забросишь на форму ActionList, закладка Standart палитры компонентов и свяжешь элементы меню и
SpeedButton-ы с соответствующими «акциями», тогда легко
можно вызвать ActionMenuFile1.Execute;.

С уважением, Евгений!


 
Alex870   (2001-11-26 22:07) [2]

Спасибо Евгений, но дело в том, что меню находится не на моем приложении.Если знаешь, как отправляются и принимаются сообщения от подобных элементов системой, напиши, буду очень признателен!
Alex870@newmail.ru


 
ggsoft ©   (2001-11-26 22:53) [3]

Нет, Alex870, к сожалению не знаю как послать, а от элементов меню сообщения посылаются в окно в виде WM_COMMAND, посмотри Help по WinAPI - формирование (из чего состоит) WPARAM и LPARAM, возможно SendMessageTimeout(...). Но обработает ли его окно - не знаю. Под W2K работает (по-моему) функция <SendThreadMessage(...)>, почему под W2K - описание в MSDN не нашел, хотя в литературе читал.

С уважением, Евгений!


 
Alex870 ©   (2001-11-28 22:31) [4]

Привет Евгений, если ещё читаешь этот "чат". Самая главная проблема-это получить дескриптор, потом можно пользоваться и wm_command и другими функциями. Т.е. на счет wparam b lparam это всего лишь комманда и парамтр(параметры её), но в любо случае нужно знать хендл...
Если чё нароешь, пиши. Спасибо за ответ!
Алексей.


 
Donal ©   (2001-11-29 11:06) [5]

GetMenu (hWnd);


 
ggsoft ©   (2001-11-29 19:54) [6]

to Alex870.

Например, вот так, если с меню чужого окна.


procedure TForm2.N1Click(Sender: TObject);
var
hwndWindow: HWND;
hmnClassMenu, hmnSubMenu: HMENU;
dwDummy: DWORD;
begin
//получяем Handle нужного окна
hwndWindow := FindWindow("Some cool class", "And window name");
//если нашли его
if hwndWindow <> 0 then begin
//получить описатель меню класса, т. е. искомого окна
hmnClassMenu := GetMenu(hwndWindow);
//получить описатель первого подменю (например - 0 т. е. обычно "File")
hmnSubMenu := GetSubMenu(hmnClassMenu, 0{for example});
//послать сообщение окну. Почему не SendMessage(...)? А вдруг это общение окно будет очень долго обрабатывать и твое приложение "зависнет", так что в любом случае через 5 секунд продолжим работу.
SendMessageTimeout(hwndWindow,
WM_COMMAND,
//в старшем слове WPARAM - содержится ID меню.
//так и получим его из известного субменю("File")
MAKEWPARAM(0, GetMenuItemID(hmnSubMenu, 1{for example})),
0,
SMTO_ABORTIFHUNG,
5000,
dwDummy);
end
else ShowMessage("No requsted window found");
end;

Да только зачем все это - какой интерес.

С уважением, Евгений!

PS. Не проверял, но должно работать!



Страницы: 1 вся ветка

Текущий архив: 2002.01.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
4-90423
Люк
2001-11-29 12:59
2002.01.28
Управление памятью


4-90410
hn
2001-11-27 16:50
2002.01.28
gethostbyaddr


6-90329
Alexandr
2001-11-05 12:14
2002.01.28
Print Server и печать из-под DOS


3-90231
Кнопка
2001-12-07 09:32
2002.01.28
Поиск в базе данных (Очень срочно!!!)


7-90393
rel
2001-10-16 18:30
2002.01.28
Модемы