|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.05.2015, 15:44 | #61 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,830
|
Забавно. А каким образом он появился? Ты его под что-то другое разрабатывал?
В разработке: воспроизводственный контур ИТ
|
04.05.2015, 16:21 | #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...
|
04.05.2015, 16:44 | #63 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,830
|
Да, годная мотивация.
Цитата:
Чтобы получить результат, нужно вкладываться. А мир, по большому счету, вкладывался только в один компилируемый язык. Ну хорошо, полтора языка. Этот язык сложен, но это ведь не единственный компилируемый язык! Теперь, как мне кажется, в мире наблюдается реннесанс компилируемых языков, фиксирующий достижения и простоту интерпретируемых языков в родном для процессора коде. Если сделать годный компилируемый язык, можно попасть в струю.
В разработке: воспроизводственный контур ИТ
|
|
04.05.2015, 17:01 | #64 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
|
|
04.05.2015, 17:38 | #65 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
Цитата:
Я уж как нибудь без мейнстрима обойдусь. А то занесет еще куда Билл свой messageBox не гонял...
I'm learning to live...
|
|||
08.05.2015, 21:27 | #66 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Функции из DLL.
Тут спрашивали не буду ли я оснащать Алису работой с ДЛЛ.
Оснастил. На базовом уровне. Так сказать прощадку для старта подготовил. Как показала практика, и это тоже не является какой-то сверхсложной задачей. Итак, пример: Код:
Вызов функции принимает в качестве параметра модель вызова и список параметров. Имя параметра - тип. Пока реализовал два: integer и pchar. По факту integer попадает как 4байтовое значение в стек, а pchar как указатель на значение. Результат функции тоже возвращается. Теперь исходник. Создал допкласс: Код:
DLLName - имя библы. На всяк случай. DLLParam - стек подготовленных параметров для функции: Код:
Код:
Теперь сам вызов. Пока реализована только stdcall модель, как самая популярная в виндухе. Код:
I'm learning to live...
Последний раз редактировалось Stilet; 08.05.2015 в 21:36. |
08.05.2015, 21:36 | #67 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Функции из DLL (продолжение).
Функции формирования списка и его очистки такие:
Код:
Код:
Ну и все. Исходник в топе править не буду, а скомпиленное перезалью. Если у кого есть идеи, как лучше сделать - подсказывайте.
I'm learning to live...
|
21.05.2015, 16:16 | #68 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
GUI в качестве HTML браузера (на базе IE)
Добавил наконец то графический интерфейс, который позволит мне теперь разрабатывать визуальные программы со всеми удобствами. Сделал это на базе браузера винды, чтоб особо не париться. Подключил эксплорер компонентом, и им управляю из кода Алисы. Естественно на события, возникающие на компонентах страницы, отображаемой в браузере Алиса реагирует, и выполняет свой код. По факту я получил 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. |
21.05.2015, 16:51 | #69 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
GUI в качестве HTML браузера (на базе IE) - Кишки
Для начала надо сказать спасибо вот этой теме: 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. |
21.05.2015, 17:07 | #70 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
GUI в качестве HTML браузера (на базе IE) - Кишки 2
Навесив таким образом событие на сам браузер и реакцию для обработки его элементов переходим к самим интерфейсам, ловящим события конкретных типов (Клик и нажатие клавиши)
Код:
Код:
Таким образом не сложно допилить кучу всяких реакций на остальные события, работающие в 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 |