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

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

кнопки и иконки [D5, D6, Win95/98, WinME, Win2k, WinXP]


alexey1 ©   (2002-02-28 15:25:00) 

И снова всем привет!
Перехожу сразу к вопросу.
Мне нужно создать кнопку в чужом окне, и выложить на эту кнопку
иконку или bmp-шку
Значит кнопку создавать я умею и делаю это так:

var
Form1: TForm1;
alexbutton : Tbutton;
procedure TForm1.Button1Click(Sender: TObject);
var
aa:hwnd;
begin
aa:=findwindow(........);
alexbutton := Tutton.Create(self);
alexbutton.Caption:="Ё";
alexbutton.ParentWindow:=aa//handle окно владельца кнопки
alexbutton.Height:=25;alexbutton.Width:=25;
end;

а теперь, ВЫ , наверное, спросите - а почему нельзя сделать через
speedbutton или bitbtn?:

var
Form1: TForm1;
alexbutton : Tbitbtn;
procedure TForm1.Button1Click(Sender: TObject);
var
aa:hwnd;
begin
aa:=findwindow(........);
alexbutton := Tbitbtn.Create(self);
alexbutton.Caption:="Ё";
alexbutton.gryph..................
alexbutton.ParentWindow:=aa//handle окно владельца кнопки
alexbutton.Height:=25;alexbutton.Width:=25;
end;

При использовании данного кода происходит странное:
закрывается Explorer и несколько программ, возможно даже зависание.

А у speedbutton свойство PARENTWINDOW вообще отсутсвует.

Так что не знаю как решить эту проблему.
Я УВЕРЕН ЧТО через API НА ЛЮБОЙ ОБЬЕКТ МОЖНО ВЫЛОЖИТЬ ICO ИЛИ BMP
ИЛИ Я НЕ ПРАВ????

Заранее благодарен!!!!!!!!!!


Raptor   (2002-02-28 21:30:00) [1]

Во первых, в самом деле иконка должна быть в адр. простр. процесса, которому принадлежит окно.
Во вторых, забудь про VCL в таких вещах. Создавай кнопку с помощью CreateWindowEx(...,BUTTON,...,BS_ICON,...).
В третьих, что тебе с кнопки которая будет только красоватся на чужом окне, а отслеживать ее события ты не сможешь. Придется подменять процедуру окна этого окна (каламбурчик вышел :-) ), что повлечет за собой необходимость внедрения в адр. протр. чужого процесса. Ведь новая процедура окна тоже должна находится в адр. простр. подопытного процесса.
Или еще вариант - ставить хук на нить, которой принадлежит окно, и прехватывать сообщения WM_COMMAND посылаемые твоей кнопкой этому окну.
Как видишь, здесь проблем немало.


VuDZ   (2002-02-28 15:30:00) [2]

это иконка должна быть в адресном пространстве другого приложения (того, в котором ты эту кнопку делаешь)


Наверх

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