![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#61 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
Забавно. А каким образом он появился? Ты его под что-то другое разрабатывал?
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#62 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Неа. Сама Алиса появилась как шутка. Сидел, пнимаиш, на заводе. Делать нечего. Скучал. А тут в инете кто-то завел спор о Книге Дракона. Ну и понеслась - Война Гиков. Кто что нес, иногда такую чушь что прям ужос. ОкадЭмики хреновы. Одни кричали что это невозможно без комманды суперкакеров, другие говорили что это вообще бессмысленно и хлопотно и не окупится, третиь еще что-то выдумывали... Я и решил, все равно делать нече, попробую ка я ченить сделать неожиданное. Например написать компилятор, который бы попрал все теоретические основы, писанные до сих пор светилами общества. Саботаж прям такой устроить. Писькин бунт. Ну а тут еще и корреспондентом журнала стал. Так родилась статья "Компилятор домашнего приготовления". Ссыль в топе. А не, вру. Нема ссыли.
Ну вот: http://www.programmersclub.ru/%D0%9A...D%D0%B8%D1%8F/ Ну или вот: http://allfiles.ws/tag/kompilyator-d...rigotovleniya/ Остатки того сильного проекта. Плюс повлияла работа с Автолиспом из Автокада. Вот так и получилось что я попытался разработать свою концепцию создания ПО, дабы показать что вообще-то ниче сложного в этом нет. Так что как и Кернигана получилось начать с баловства. Наверное если бы журнал не закрылся я бы там докрутился до серьезного более менее компилятора, но... увы. Хотя не жалею. Интерпретаторы сейчас в моде. Нативный код всетки устаревает по концепциям по мере развития ИТ индустрии.
I'm learning to live...
|
![]() |
![]() |
![]() |
#63 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
Да, годная мотивация.
![]() Цитата:
Чтобы получить результат, нужно вкладываться. А мир, по большому счету, вкладывался только в один компилируемый язык. Ну хорошо, полтора языка. Этот язык сложен, но это ведь не единственный компилируемый язык! Теперь, как мне кажется, в мире наблюдается реннесанс компилируемых языков, фиксирующий достижения и простоту интерпретируемых языков в родном для процессора коде. Если сделать годный компилируемый язык, можно попасть в струю.
В разработке: воспроизводственный контур ИТ
|
|
![]() |
![]() |
![]() |
#64 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#65 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
![]() Цитата:
Цитата:
Я уж как нибудь без мейнстрима обойдусь. А то занесет еще куда Билл свой messageBox не гонял...
I'm learning to live...
|
|||
![]() |
![]() |
![]() |
#66 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Тут спрашивали не буду ли я оснащать Алису работой с ДЛЛ.
Оснастил. На базовом уровне. Так сказать прощадку для старта подготовил. Как показала практика, и это тоже не является какой-то сверхсложной задачей. Итак, пример: Код:
Вызов функции принимает в качестве параметра модель вызова и список параметров. Имя параметра - тип. Пока реализовал два: integer и pchar. По факту integer попадает как 4байтовое значение в стек, а pchar как указатель на значение. Результат функции тоже возвращается. Теперь исходник. Создал допкласс: Код:
DLLName - имя библы. На всяк случай. DLLParam - стек подготовленных параметров для функции: Код:
Код:
Теперь сам вызов. Пока реализована только stdcall модель, как самая популярная в виндухе. Код:
I'm learning to live...
Последний раз редактировалось Stilet; 08.05.2015 в 21:36. |
![]() |
![]() |
![]() |
#67 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Функции формирования списка и его очистки такие:
Код:
Код:
Ну и все. Исходник в топе править не буду, а скомпиленное перезалью. Если у кого есть идеи, как лучше сделать - подсказывайте.
I'm learning to live...
|
![]() |
![]() |
![]() |
#68 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Добавил наконец то графический интерфейс, который позволит мне теперь разрабатывать визуальные программы со всеми удобствами. Сделал это на базе браузера винды, чтоб особо не париться. Подключил эксплорер компонентом, и им управляю из кода Алисы. Естественно на события, возникающие на компонентах страницы, отображаемой в браузере Алиса реагирует, и выполняет свой код. По факту я получил IE со своим скриптовым движком.
Для начала опишу простейший пример скрипта: Код:
Компонент explorer с именем MyIE, чтоб к нему можно было обращаться из Алисы. Его событие onready - готовность документа к работе. Т.е. документ полностью загружен, и распарсен. MyForm.MyIE.style.css - функция. которая формирует CSS документа, как ей укажешь в виде строки. MyForm.MyIE.body.write - что-то дописывает в InnerHTML тела документа. В основном больше пока ничего не реализовано по поводу методов работы, это я дальше сделаю. Сам факт что это есть в качестве стартапа - уже хорошо. События описываются с помошью приставки if в качестве атрибутов тега: Код:
В примере по клику на элемент вызовется функция disp.Jmak, которой передастся именованный параметр korrname. И получаю я в результате следующее: Безымянный.jpg Т.е. Алиса реагирует на события на странице браузера. Это гораздо удобнее. чем создавать с нуля свой набор компонентов для интерфейса, а если учесть возможности самого HTML+JS+CSS то ЯВУ получает достаточно серьезные возможности. Я своим знакомым все чаще говорю теперь что больше не пишу на Делфи. Теперь я действительно смогу на 98% перейти на свою платформу, и реализовывать проекты только на ней. Остальные 2% - допил в Лазарусе ЯВУ, но это не в счет. ![]() Ниже я представлю реализацию компонента браузера и его описание... P.S. В топе экзешник обновлен. Чтоб Алиса отработала с GUI нужно передать ей параметр gui=ie для активации браузера.
I'm learning to live...
Последний раз редактировалось Stilet; 21.05.2015 в 17:09. |
![]() |
![]() |
![]() |
#69 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Для начала надо сказать спасибо вот этой теме: http://www.freepascal.ru/forum/viewt...t=7271&p=55469
Все основное бралось из нее, за что авторам респект и уважуха. Я не очень много подобных примеров видел в интернете. Сам модуль, описывающий браузер я прикрепил вложением, поэтому тут опишу его основные моменты. Чтоб создать OLE в окошке необходимо изрядно попотеть. Микрософтовци как всегда сделали все массонскими путями, коих разгадать достаточно непросто, хотя и можно, если иметь терпение. Чтоб получить окошко необходимо сам компонент описать кучей интерфейсов:
Далее вызов OleCreate, с передачей ей класса браузера, IID_IOleObject-а параметра отрисовки (OLERENDER_DRAW), и переменных, которые являются реализацией описанных в списке выше интерфейсов создает сам визуальный компонент, помещая на него ссыль в переменку типа IOleObject. После функцией DoVerb уже можно будет показать его на форме, передав ей хендл формы и область RECT, в которой браузер отрисуется. По идее все. Компонент готов. Далее можно получить движок, запросив интерфейс IID_IWebBrowser2, который разместился на форме, и можно с ним работать. Я сразу же после этого создаю чистую страничку: Код:
Все это можно увидеть в конструкторе TIExplorer.Create, в который я передаю родителя - форму. Чтоб работать с страницей интерактивно, необходимо было присоседится к ней, получив DOM, и расставив события. Делать это можно только после того, как браузер все загрузит. За это отвечает реализация интерфейса TWebBrowserEvent, а точнее метод Invoke. Сам интерфейс назначается браузеру методом Advise, который есть у интерфейса IConnectionPoint. Происходит это так: Код:
IDispatch, которая будет интерфейсом, в теле которого будет описан код, реагирующий на события в браузере. Этот интерфейс-обработчик у меня описан как TWebBrowserEvent = class(TInterfacedObject, IDispatch) Как для самого браузера так и для событий клика и нажатия клавиши. По факту на каждое событие нужен свой интерфейс. Каждый интерфейс события должен будет в методе QueryInterface возвращать свою переменную-интерфейс, назначенную как обработчик на реакцию события, поэтому их нужно несколько. Возможно я ошибаюсь, и достаточно одного интерфейса на все все события, но как так сделать я не понял. Не важно. Главный интерфейс, привязанный к самому браузеру обрабатывает событие полной загрузки страницы, и назначает обработчики событий. Выглядит это так: Код:
I'm learning to live...
Последний раз редактировалось Stilet; 21.05.2015 в 17:14. |
![]() |
![]() |
![]() |
#70 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Навесив таким образом событие на сам браузер и реакцию для обработки его элементов переходим к самим интерфейсам, ловящим события конкретных типов (Клик и нажатие клавиши)
Код:
Код:
Таким образом не сложно допилить кучу всяких реакций на остальные события, работающие в JS. Мне пока не требуется, и буду делать это по мере необходимости. Сам компонент я тут описывать не стану, думаю достаточно заглянуть в прикрепленный файл, найти там описание TIExplorer=class(TWinControl), чтоб понять как его подключить к форме. Вот как-то так... IE всетки полезный браузер несмотря на его кривость, и может послужить в достаточно серьезных проектах в качестве машинки для GUI. Я думаю многие согласятся, что описать интерфейс пользователя на HTML не составляет большого труда, так что можно его юзать достаточно эффективно.
I'm learning to live...
Последний раз редактировалось Stilet; 21.05.2015 в 17:16. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хочу написать программу для себя | Marishka.S | Помощь студентам | 7 | 02.10.2011 17:23 |