Главная страница
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.48 MB
Время: 0.01 c
14-2676
Hurin
2002-03-27 12:24
2002.05.02
Подлая DLL


1-2602
dull
2002-04-19 17:22
2002.05.02
группа програмистов (2 чел.) ищет работу на Delphi


1-2516
anacronix
2002-04-20 18:23
2002.05.02
Ввод текста в Edit1 в любом регистре


3-2455
Roman_Tutov
2002-04-10 17:33
2002.05.02
dBase & cp1251


1-2538
LazorenkoX
2002-04-18 10:21
2002.05.02
Рисование в консоли