Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3 4

Как принять сообщения в класс без окна?


dmk ©   (22.03.17 18:28[20]

>NoUser ©   (22.03.17 18:25) [19]

Ну зачем извращать. Речь шла об оконной процедуре.


Игорь Шевченко ©   (22.03.17 19:16[21]

dmk ©   (22.03.17 13:15) [6]


> Мне надо им петлю сообщений вставить. Чтобы они WM_MOUSE.
> .... получали. Вроде как компоненты, но окна они не имеют.
>


OpenGL уже изобретен и даже с исходниками. И всякие там GLScene тоже с исходниками. Не понимаю, зачем при таком изобилии готовых решений изобретать велосипеды которые будут ехать медленно и неровно.


dmk ©   (22.03.17 19:50[22]

Игорь, патриотизм штука заразная. Хочу свое ;)


dmk ©   (22.03.17 19:53[23]

А на самом деле класс кроссплатформенный в будущем и привязка к системе и т.д. очень нежелательна. Посему куча ассамблера и соответствующие отступления.


Игорь Шевченко ©   (23.03.17 10:23[24]

dmk ©   (22.03.17 19:50) [22]

Дело не в патриотизме, а в том, что в современном мире исходников столько, что решение почти любой проблемы несколькими способами можно найти в интернетах.


dmk ©   (23.03.17 12:14[25]

Можно и найти и купить - не спорю.
Часто сталкивался с проблемой прекращения поддержки исходников или компонентов.


Игорь Шевченко ©   (23.03.17 12:21[26]

dmk ©   (23.03.17 12:14) [25]

Я не про готовый вариант, а про реализацию идей, методы решения проблем и т.п. Это не надо покупать и опасаться прекращения поддержки.


D7   (28.03.17 21:59[27]

Я не понял. Сообщения может принимать только окно. Изображения выводить можно тоже только на окно. На невидимое окно выводить невозможно. У вас есть окно или нету? Или оно типа чужое?
Делайте ваш кросплатформенный класс, добавляйте в поля TForm1 его экземпляр, вызывайте его методы в нужных событиях. И всё, нет?


D7   (28.03.17 22:39[28]

Поздно увидел другую вашу тему, вам там уже показали что-то подобное тому что я имел ввиду...

Могу лишь посоветовать глянуть как работает AGG. Там кроссплатформенное ядро имеет лёгкие обёртки к разным ОС, в том числе делает окно на WinAPI и рисует на нём и получает управление клавиатуры/мыши.


dmk ©   (29.03.17 01:45[29]

>D7   (28.03.17 21:59) [27]

Окна нет, но есть HWND созданный с помощью AllocateHWND.
Класс от TObject. Рисуется в памяти. Не TCanvas.


D7   (29.03.17 02:46[30]

> Класс от TObject. Рисуется в памяти. Не TCanvas.

Это я как раз сразу понял. Хорошая идея, одобряю, сам когда-то думал про подобное.

> Окна нет, но есть HWND созданный с помощью AllocateHWND.

А вот зачем такие свистопляски с окном - не понимаю.
Я не сталкивался с подобной функцией прежде, прогуглил её - это походу какой-то метод из VCL. Который в итоге создаёт окно при помощи CreateWindowEx().
Уверен что будет удачнее взять "минимальный WindowsAPI-проект" - и вперёд, допиливаем лёгонькую обёртку. Небольшую часть кода можно из TApplication взять.


dmk ©   (29.03.17 02:55[31]

>А вот зачем такие свистопляски с окном - не понимаю.
Для того, чтобы классу без окна сообщения принимать.


D7   (29.03.17 16:56[32]

Что в вашем понимании есть "класс без окна"? Окнами в любом случае владеет только ОС.
А вы говорите что вызываете метод "Forms.AllocateHWnd()" (он же "Classes.AllocateHWnd())"? Ну так вы этим как раз создали окно.
Какого-то системного VCL-класса с какой-то системной VCL-WndProc по-умолчанию. Но я так понял вы вроде хотите как раз избавляться от VCL?

Сделаю к выходным пример как бы предложил делать я, а там посмотрите и решите сами.


dmk ©   (29.03.17 18:35[33]

>Ну так вы этим как раз создали окно.
Это все условности. По правилам Windows окном считается класс с оконной процедурой.
У меня ее нет. Ибо не нужна. Это дочерний объект-неокно.


dmk ©   (29.03.17 20:02[34]

Вот пример дочерних объектов не окон с поведением окон ;)
https://hostingkartinok.com/show-image.php?id=97725fa53a628a8e4b5f2c99ae984ed2

Работают также как и системные. Почти никаких различий.
Рисуются на любом контексте. Пока готово 3 компонета. Тут еще CheckBox не виден.
Скролл бары за 3 дня сделал. Почти как FMX, но не FMX. ПРивязки к WIndows почти нет ;)
Своя базовая бибилотека и никаких системных вызовов кроме BitBlt и сообщений о мышке.
Переносится хоть под линукс, хоть под DOS с небольшой доработкой ввода-вывода.


dmk ©   (29.03.17 20:04[35]

У меня даже шрифты свои. Пока растровые, но все же ;)


dmk ©   (29.03.17 20:07[36]

И никаких оконных функций и прочей мутатени ;)


Игорь Шевченко ©   (29.03.17 21:34[37]


> По правилам Windows окном считается класс с оконной процедурой


Без комментариев.


> И никаких оконных функций и прочей мутатени ;)


Таких фреймворков уже миллионы. Зачем нужен еще один с граблями - я не понимаю.


dmk ©   (29.03.17 22:02[38]

>Без комментариев.
Ну тогда черный квадрат малевича тоже окно :)

>Зачем нужен еще один с граблями - я не понимаю.
Дык свое. У меня софтина на нем пишется. Большая :)
Если намертво к windows привязаться потом тошно переделывать будет,
а слово портирование забыть придется.


D7   (29.03.17 22:11[39]

> По правилам Windows окном считается класс с оконной процедурой.

Это чего это, где же такое написано?
В исходниках ОС может и класс, а со стороны прикладного программиста это - чёрный ящик, имеющий некий ID.

На вашем скриншоте я вижу обычное окно с рамкой.
Да, на его клиентской области выводится своё крутое кросплатфоменное, но через BitBlt() оно выводится на обычное окно. Можете взять Spy++ и проверить.
Кстати можно заменить BitBlt() на StretchDIBits(), слышал мнение что оно чуток эффективнее, хотя сам не проверял не тестировал.

В общем до понедельника сделаю тестовый мини-проект.


Страницы: 1 2 3 4 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо