-
>NoUser © (22.03.17 18:25) [19]
Ну зачем извращать. Речь шла об оконной процедуре.
-
dmk © (22.03.17 13:15) [6]
> Мне надо им петлю сообщений вставить. Чтобы они WM_MOUSE.
> .... получали. Вроде как компоненты, но окна они не имеют.
>
OpenGL уже изобретен и даже с исходниками. И всякие там GLScene тоже с исходниками. Не понимаю, зачем при таком изобилии готовых решений изобретать велосипеды которые будут ехать медленно и неровно.
-
Игорь, патриотизм штука заразная. Хочу свое ;)
-
А на самом деле класс кроссплатформенный в будущем и привязка к системе и т.д. очень нежелательна. Посему куча ассамблера и соответствующие отступления.
-
dmk © (22.03.17 19:50) [22]
Дело не в патриотизме, а в том, что в современном мире исходников столько, что решение почти любой проблемы несколькими способами можно найти в интернетах.
-
Можно и найти и купить - не спорю.
Часто сталкивался с проблемой прекращения поддержки исходников или компонентов.
-
dmk © (23.03.17 12:14) [25]
Я не про готовый вариант, а про реализацию идей, методы решения проблем и т.п. Это не надо покупать и опасаться прекращения поддержки.
-
Я не понял. Сообщения может принимать только окно. Изображения выводить можно тоже только на окно. На невидимое окно выводить невозможно. У вас есть окно или нету? Или оно типа чужое?
Делайте ваш кросплатформенный класс, добавляйте в поля TForm1 его экземпляр, вызывайте его методы в нужных событиях. И всё, нет?
-
Поздно увидел другую вашу тему, вам там уже показали что-то подобное тому что я имел ввиду...
Могу лишь посоветовать глянуть как работает AGG. Там кроссплатформенное ядро имеет лёгкие обёртки к разным ОС, в том числе делает окно на WinAPI и рисует на нём и получает управление клавиатуры/мыши.
-
>D7 (28.03.17 21:59) [27]
Окна нет, но есть HWND созданный с помощью AllocateHWND.
Класс от TObject. Рисуется в памяти. Не TCanvas.
-
> Класс от TObject. Рисуется в памяти. Не TCanvas.
Это я как раз сразу понял. Хорошая идея, одобряю, сам когда-то думал про подобное.
> Окна нет, но есть HWND созданный с помощью AllocateHWND.
А вот зачем такие свистопляски с окном - не понимаю.
Я не сталкивался с подобной функцией прежде, прогуглил её - это походу какой-то метод из VCL. Который в итоге создаёт окно при помощи CreateWindowEx().
Уверен что будет удачнее взять "минимальный WindowsAPI-проект" - и вперёд, допиливаем лёгонькую обёртку. Небольшую часть кода можно из TApplication взять.
-
>А вот зачем такие свистопляски с окном - не понимаю.
Для того, чтобы классу без окна сообщения принимать.
-
Что в вашем понимании есть "класс без окна"? Окнами в любом случае владеет только ОС.
А вы говорите что вызываете метод "Forms.AllocateHWnd()" (он же "Classes.AllocateHWnd())"? Ну так вы этим как раз создали окно.
Какого-то системного VCL-класса с какой-то системной VCL-WndProc по-умолчанию. Но я так понял вы вроде хотите как раз избавляться от VCL?
Сделаю к выходным пример как бы предложил делать я, а там посмотрите и решите сами.
-
>Ну так вы этим как раз создали окно.
Это все условности. По правилам Windows окном считается класс с оконной процедурой.
У меня ее нет. Ибо не нужна. Это дочерний объект-неокно.
-
Вот пример дочерних объектов не окон с поведением окон ;)
https://hostingkartinok.com/show-image.php?id=97725fa53a628a8e4b5f2c99ae984ed2Работают также как и системные. Почти никаких различий.
Рисуются на любом контексте. Пока готово 3 компонета. Тут еще CheckBox не виден.
Скролл бары за 3 дня сделал. Почти как FMX, но не FMX. ПРивязки к WIndows почти нет ;)
Своя базовая бибилотека и никаких системных вызовов кроме BitBlt и сообщений о мышке.
Переносится хоть под линукс, хоть под DOS с небольшой доработкой ввода-вывода.
-
У меня даже шрифты свои. Пока растровые, но все же ;)
-
И никаких оконных функций и прочей мутатени ;)
-
> По правилам Windows окном считается класс с оконной процедурой
Без комментариев.
> И никаких оконных функций и прочей мутатени ;)
Таких фреймворков уже миллионы. Зачем нужен еще один с граблями - я не понимаю.
-
>Без комментариев.
Ну тогда черный квадрат малевича тоже окно :)
>Зачем нужен еще один с граблями - я не понимаю.
Дык свое. У меня софтина на нем пишется. Большая :)
Если намертво к windows привязаться потом тошно переделывать будет,
а слово портирование забыть придется.
-
> По правилам Windows окном считается класс с оконной процедурой.
Это чего это, где же такое написано?
В исходниках ОС может и класс, а со стороны прикладного программиста это - чёрный ящик, имеющий некий ID.
На вашем скриншоте я вижу обычное окно с рамкой.
Да, на его клиентской области выводится своё крутое кросплатфоменное, но через BitBlt() оно выводится на обычное окно. Можете взять Spy++ и проверить.
Кстати можно заменить BitBlt() на StretchDIBits(), слышал мнение что оно чуток эффективнее, хотя сам не проверял не тестировал.
В общем до понедельника сделаю тестовый мини-проект.