Quantcast
Channel: Сообщество PHP DevelStudio - среда разработки программ
Viewing all articles
Browse latest Browse all 6336

Типа новая DevelStudio / SoulEngine

$
0
0
Появилось время что-то переписать, подумал создать тему похвастаться что ли...
Или мож поступят какие-то ещё предложения идеи и т.п.
Ну и вообще делаю я эту тему, чтобы не забросить опять писанину. Наобещаю тут всего и нужно будет выполнять обещания =)
Многое относится и к самой DS, основы DS, как там всё работает и т.п., так что можете и почитать если интересно...


Весь функционал SE будет переписываться основательно, но принципы меняться не будут, всё также останется работать на куче функций, без крутого ООП, так как на php4delphi делать ООП - это насилие мозга.
Во первых в php4delphi почти нет ничего для создания ООП, а я добавлял некоторые штуки простого описания классов, аргументов и т.д., но этого не достаточно для магии.
Так что пока так, а потом как пойдёт, возможно всё на C++ Builder перекочует...
Так как щас просто нет столько времени, чтобы всё с нуля писать на C++ Builder.


Ну и короче ближе к теме. Делаю новые сборки SE.

В SE:
- Исправил пару мелких багов с определением текущей папки (progDir) и т.п., и то это временно, там вообще нужно будет переписать алгоритм работы проекта.
- Новые функции SE будут теперь работать как с указателем, так и с свойством объекта self, а т.е. не нудно будет париться на счёт того передаётся self или объект.
Есть ещё мысль работать по имени объекта, но думаю это не приживётся, так что будет специальная функция поиска, типа как в DS функция c(). А также есть мысль сделать селекторы в функции поиска, подобные селекторам CSS, тогда придётся работать с группами и т.п., это может будет, но походит на какое-то баловство.
- Ну и добавляются по мере надобности те самые новые переработанные функции с обновлёнными багами.

В DS:
- Все компоненты (и всё вообще, включая ds) также будут переписаны под новый функционал SE.
- Уже работает некоторый базовый функционал DS, классы и т.п.

Есть базовый класс TComponent, от которого отходят все остальные классы компонентов Delphi VCL.
Ну как в DS. В этом классе описаны всякие конструкторы, сетеры, гетеры и т.п.
Переменная $class_name_vcl (неустоявшиеся имя) будет отвечать за то, какой компонент создать конструктору.
Если мы будем делать свой особый класс и наследовать например форму TForm, то переменная останется от класса формы и не требуется её объявлять в новом классе (даже вообще не желательно в пользовательских классах её объявлять, так как в ней должен быть только тот класс, который существует в SE и под который написана оболочка).
Пример:
PHP код:

/* класс унаследованный от TComponent, основной смысловой нагрузки не несёт,
создан пока просто забегая в будущие, мож пригодится,
та и вообще просто такая иерархия классов в delphi, там ещё куча подобных классов */
class TControl extends TComponent {
    
    protected 
$class_name_vcl __CLASS__;
}
/* класс формы из SE, тут пока без дополнительного функционала, для работы спец.функций...
но форма уже вполне рабочая */
class TForm extends TControl {
    
    protected 
$class_name_vcl __CLASS__;
}
/* своя форма, с какими-нибудь модификациями при конструкторе и т.п.
класс указывать не требуется, так как создаётся форма TForm, а класса TMyForm в SE не существует... */
class TMyForm extends TForm {



- Появится фишка у подобных Items/Strings/Lines и т.п. свойств.
Фишка заключается в работе с объектом как с массивом.
Такая фишка позволит писать Delphi подобный код.
Пример (уже рабочий):
PHP код:

$menu = new TMainMenu($fmMain); 

$item = new TMenuItem($fmMain);
$item->caption 'Файл';
$menu->items[] = $item//так работает

$item = new TMenuItem($fmMain);
$item->caption 'Правка';
$menu->items->add($item); //и так работает

    
$item = new TMenuItem($fmMain);
    
$item->caption 'Создать';
    
$menu->items[0]->add($item); //и подпункт к меню "файл" можем добавить

    
$item = new TMenuItem($fmMain);
    
$item->caption 'Открыть';
    
$menu->items[0][] = $item//или так подпункт к меню "файл"

        
$item = new TMenuItem($fmMain);
        
$item->caption 'Файл PHP';
        
$menu->items[0][1][] = $item//подпункт к меню "Открыть"
        
$menu->items[0][1][0]->caption 'Файл TXT'//можем поменять заголовок
        
$menu->items[0]->items[1]->items[0]->caption 'Файл TXT'//можно и так обращаться

/* работает count как с массивами
а также работает unset, isset, foreach, next, current, end и т.д.
обычный объект как массив */
precount($menu->items) );
precount($menu->items[0]) ); 

Ну и пока всё, может показаться мало, но это основа, а все классы штампуются один за другим, например вот TMainMenu.
Пишу пока части студии и что требуется, то и добавляю, а потом добавится и всё остальное.

Много короче планов, пока все раскрывать не буду, а то вдруг не сделаю что-то XD.



Сборки выкладывать пока планов нет, так как мало что готово, всё ещё может меняться и т.д.

Я вот ещё использую пространство имён, хотя думаю от этого избавиться, из-за возможных багов с бкомпилером или т.п. Хотя вряд ли.
Например, примерно так будут выглядеть функции:
Код:

SE\VCL\Create()
SE\VCL\Destroy()
SE\VCL\PropGet()
SE\VCL\PropSet()
SE\VCL\PropType()
SE\VCL\PropList()
SE\VCL\PropExists()


Viewing all articles
Browse latest Browse all 6336

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>