![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
как я уже понял любой контрол на форме - это окно.
с том числе и обычная кнопка, это окно, имеющее свой handle, и получающее сообщения от винды. а имеет ли любое окно Canvas, или это уже добавляется вручную? вот к примеру так ли работает кнопка?: 1. создается окно 2. это окно начинает получать сообщения от винды 3. когда оно получит сообщение что мышка нажата (а оно его получит только если мышка будет именно над этим окном, правильно?) то нарисует изображение нажатой мышки и запустит процедуру OnClick я примерно представляю как ловить сообщения, у меня вопрос в том, как создать окно, и как быть с канвасом? пытался пошарить в VCL как создаются кнопки, запутался в иерархии. ибо TButton с своем Create добавляет только пару строчек и inherited. его предок - тоже самое, и т.д. я знаю про CreateWindow, но не знаю какой там параметр указать, чтоб создалось окно без заголовка. кому не влом разложите, пожалуйста, по полочкам, как создать TButton с нуля. и прокоментируйте мой пост, в чем я прав, в чем не прав =) |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 11.02.2008
Сообщений: 69
|
![]()
Если Вы имеете ввиду динамическое создание объектов, то например так.
Код:
|
![]() |
![]() |
![]() |
#3 | |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
![]()
Создать массив кнопок
Цитата:
if (Sender as TButton).name = 'Button1' then и какое то действие if (Sender as TButton).name = 'Button2' then и какое то действие либо if (Sender as TButton).caption = 'Button 1' then и какое то действие if (Sender as TButton).caption = 'Button 2' then и какое то действие либо Case (Sender as TButton).tag of 1:и какое то действие 2:и какое то действие end; Последний раз редактировалось Aliens_wolfs; 22.06.2011 в 09:39. |
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
хаха =), спасибо, конечно за внимание, и за отклики,
однако имел в виду совсем другое... динамическое создание готовых объектов VCL я изучил уже давно. и так же давно меня перестал устраивать внешний вид этих объектов, и я занялся созданием своих контролов. здесь "контролов" следует понимать в очень общем смысле, т.е. "элементов управления", ибо по принципу действия и организации мои объекты имеют мало общего с привычными вам "контролами". я создал неведомую ё***ю систему, переопределил класс формы, для работы своих компонентов (чуть позже я расскажу что это за система). и система работала! =) и прекрасно работала! до тех пор, пока я не начал использовать TThread... все пошло наперекосяк =( мои компоненты благополучно загибались, но стандартные, так же присутствовавшие на форме продолжали стабильно работать, программа не висла, висли мои компоненты. ну и вся эта история навела меня на мысль, что нужно сделать свои компоненты как стандартные - по принципу окон и сообщений. под созданием TButton я имел в виду написание своего класса, аналогичного ему, а не создание экземпляра готового класса VCL =) |
![]() |
![]() |
![]() |
#5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#6 | ||
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]() Цитата:
Цитата:
![]()
пыщь
|
||
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
в поток я вынес...
а что я вынес? прога кое-чего скачивает, на это нужно время, и в это время, разумеется окно не должно висеть, и все кнопочки должны весело подмигивать если водить по ним мышкой. по мере скачивания прога сообщает одному из компонентов чего она качает, а он в свою очередь отрисовывает себя на канвасе формы (у меня все объекты отрисовывают себя на канвасе) я уже запихнул с синхронизацию все что можно, все обращения к моим компонентам, но все-равно работает нестабильно. Да! JTG, "Canvas does not allow drawing", но далеко не каждый раз, что затрудняет отладку. в основном происходит то, что мои компоненты перестают рисоваться. программа работает, форму таскаешь, за экран уводишь - канвас стирается и больше не перерисовывается кстати, у меня еще такой вопрос, wcx: twndclass; wcx.lpfnwndproc := @mainwndproc; // адрес оконной процедуры... как его получить? есть TForm1.MainWndProc, как я понимаю это procedure of object (?) как мне получить указатель на эту процедуру, чтоб потом запихать его в wcx.lpfnwndproc ? |
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
![]()
Насчет потока.
В потоке нельзя делать прямое обращение к объектам которые делают визуальные действия, будет всегда ошибка или не правильно работать. С ними нужно работать через функции и обращаться к ним с потока желательно методом Synchronize. На счет функции TForm1.MainWndProc Посмотри эту ссылку. http://www.delphisources.ru/pages/fa...only_api2.html Пример: Поток без синхронизации Цитата:
Последний раз редактировалось Aliens_wolfs; 22.06.2011 в 16:08. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Аналог array of TButton | ZBEP | Visual C++ | 2 | 27.09.2010 09:52 |
TButton со всеми вытекающими... | PoM4ik | Компоненты Delphi | 9 | 25.08.2010 20:32 |
Цвет TButton | guffer | Общие вопросы Delphi | 3 | 18.08.2009 12:00 |
Компонент TButton... | slim5 | Помощь студентам | 7 | 17.06.2008 17:58 |
цвет caption в Tbutton | EdNovice | Компоненты Delphi | 5 | 31.05.2008 22:57 |