Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
3-2442
toorick
2002-04-09 16:15
2002.05.02
таблица открыта


1-2565
vadim2
2002-04-19 11:45
2002.05.02
где посмотреть исходник функции Pos(Substr;S: string) ?


1-2544
Zool
2002-04-17 18:25
2002.05.02
Народ, вопрос...............


3-2459
php@bigmir.net
2002-04-10 23:10
2002.05.02
Поиск в таблице


1-2514
f0rm
2002-04-16 23:52
2002.05.02
Ну помогите же!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский