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

Вниз

кнопки и иконки   Найти похожие ветки 

 
alexey1   (2002-02-28 15:25) [0]

И снова всем привет!
Перехожу сразу к вопросу.
Мне нужно создать кнопку в чужом окне, и выложить на эту кнопку
иконку или 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
ИЛИ Я НЕ ПРАВ????

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


 
VuDZ ©   (2002-02-28 15:30) [1]

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


 
Raptor ©   (2002-02-28 21:30) [2]

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



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

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

Наверх




Память: 0.47 MB
Время: 0.01 c
14-2680
Cobalt
2002-03-26 16:10
2002.05.02
Безопасность в локальной сети


7-2704
Mewerik
2002-01-30 15:39
2002.05.02
Помогите плизззз!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


4-2712
Frogkiller
2002-02-28 10:47
2002.05.02
Как запустить еще один поток?


1-2522
crush
2002-04-21 10:47
2002.05.02
Компоненты в стиле Windows XP


4-2726
alexey1
2002-02-26 23:18
2002.05.02
win api