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

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

Кнопка ПУСК [D7, Win2k]


Lessa ©   (2004-06-02 21:50:00) 

Подскажите ответ: на событие формы onCreate код
Image := TPicture.create;
Image.bitmap.LoadFromFile('NewButton.BMP');
StartButton := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);
oldBitmap := SendMessage(StartButton, BM_SetImage, 0, Image.bitmap.handle);


Должен меняться заголовок кнопки ПУСК. Но ничего не происходит. То есть старая картинка исчезает, а новая не появляется. Голая кнопка надоедает, старая -- неинтересно (восстанавливаю на onDestroy). И еще. Перемещаться она тоже отказывается. Из-за чего это и что можно сделать?


GanibalLector   (2004-06-03 22:08:00) [1]

А...знакомо.
Вот тут теже грабли http://forums.realcoding.net/topic2022.html


DVM   (2004-06-03 20:45:00) [2]


> Lessa   (03.06.04 19:46) [15]

Как уже сказали, надо заменить оконную процедуру кнопки на свою. Но эта процедура должна быть в том же адресном пространстве, что и кнопка. В чужое АП можно попасть с пом любого хука. Заменив процедуру кнопки на свою, надо везде, кроме как в WM_PAINT вызывать старую процедуру, а для WM_PAINT свою. Только следует учесть, что при этом пропадет и рамка кнопки, которую тоже надо будет дорисовать, учитывая ее текущее состояние. Что до XP - там есть стандартные средства в виде тем оформления, в остальных системах так как я написал.
Вобщем возни полно.


Lessa   (2004-06-03 19:46:00) [3]

картинку сменить МОЖНО, но опять-таки на доли секунды. Смутное подозрение витает в воздухе, что это винда мне противостоит... но докажу завтра, попробую тот же опыт на winME.

Что за маниакальная привычка к аккуратности у вин2000!.. Все ставит на место.


DeadMeat   (2004-06-03 19:37:00) [4]

> [12] Lessa   (03.06.04 17:46)
> но охотно соглашается ходить "голой"
Какаято кнопка для нудистов...
А вообще надо переопределить процедуру "получения сообщений" этой кнопки, т.е. WindowProc

---
...Death Is Only The Begining...


Clickmaker   (2004-06-03 19:23:00) [5]


> Lessa   (03.06.04 17:46) [12]

Ну просто детектив какой-то :)


Lessa   (2004-06-03 17:46:00) [6]

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

???


Lessa   (2004-06-03 14:46:00) [7]

Так как насчет сабжа? Упрямость кнопки просто раздражает. Может, у кого-то была подобная проблема?

Или, если нет, подскажите, как отловить нажатие на нее.


DVM   (2004-06-03 13:31:00) [8]

>Нет. Она со стилем BS_BITMAP

В XP без этого стиля. Там хоть эта кнопка и стандартная, но оконная прцедура ее переопределена, там картинка и рисуется вероятно.


Lessa   (2004-06-03 12:10:00) [9]

там только статьи


Игорь Шевченко   (2004-06-03 11:54:00) [10]


> P.S. код не мой, а взят с сайта delphiworld, причем там
> клятвенно заверяют, что все работает в лучшем виде.


Тогда наверное, разумно там задать вопрос ?


Lessa   (2004-06-03 10:59:00) [11]

О! Вот это открытие! Кнопка перемещается на доли секунды, а потом снова становится на место!!! Почему?!

P.S. код не мой, а взят с сайта delphiworld, причем там клятвенно заверяют, что все работает в лучшем виде.


Clickmaker   (2004-06-03 10:13:00) [12]


> DVM ©   (02.06.04 23:44) [4]
> >Lessa   (02.06.04 21:50)  
> во-первых, кнопка Пуск OWNER DRAW

Нет. Она со стилем BS_BITMAP


Lessa   (2004-06-03 09:37:00) [13]

Да?.. Но ведь рисунок-то исчезает.


DVM   (2004-06-02 23:44:00) [14]

>Lessa   (02.06.04 21:50) 
во-первых, кнопка Пуск OWNER DRAW, т.е ей глубоко по барабану, кто и что там за рисунок на нее помещает - рисунок сий рисует родитель кнопки.
во-вторых риунок ваш в другом адресном пространстве.


Игорь Шевченко   (2004-06-02 22:29:00) [15]

А проверять, что функции FindWindow возвращают, не поможет ?


Lessa   (2004-06-02 22:04:00) [16]

MoveWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil),
             300, 0, 80, 22, true);

Вот так


Игорь Шевченко   (2004-06-02 22:01:00) [17]


> И еще. Перемещаться она тоже отказывается.


Это как понимать ?


Наверх

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