
Сообщение от
Devel
Этот тоже все это умеет. Там уже версия 1+ есть, для php 5.3
А тогда почему в 2.0.0.6 оно не работало?

Сообщение от
roxblnfk
Если это $Form1->button вместо c('Form1->button') , то я уже оценил

Нее, даже рядом не стояло. В той модели ооп работой с формами даже не пахло.
Это совершенно другая идея, хотя выросла она вобщем то из той. Вернее она ещё не совсем выросла, я всё ещё продолжаю её совершенствовать
Короче вот архив приложенный, как это работает, исходники программы кладутся в папочку scripts_source (в нём же смотреть новую модель), далее там же есть файл dd.bat в нём прописать правильный путь к php.exe, в файле "compile.php" сам компилятор в байткод, если его можно так назвать. В нём вписываются сами файлики.. После компиляции файлики помещаются в папочку data ДА ДА! Иначе вы не сможете их прицепить к exe, ds упорно ругается на байткод. В папочку скриптс кладётся маленький пхп файл заглушка который потом при старте подключает эти байт-компилированные файлы из ресурсов exe'шника.. Вуаля готово. Программу можно не собирать в 1 exe, ту хрень что в папке дата окажется смело можно с программой класть рядом, всё равно ваши пхп файлики трудно будет превратить в исходник.
Теперь про модель. Я позже наверное создам отдельную тему, но суть этой новой модели:
1) в самой дс строяться только формы и компоненты (мне так удобней)
2) не одного события в самой дс вы не найдёте, их там просто нет.
3) всем компонентам и формам даются нормальные имена (можете не давать если не хотите, но я привык писать "правильные" программы)
4) вся логика работы формы находится в классе который называется FormNameClass
5) на каждую форму создаётся свой класс и свой файл который повторяет имя этой формы.
События на форму цепляются в объекте так:
Код HTML:
'onClick' => Array('AddHellow', 'AddSomeText', 'AddDate', 'CloseProg'),
тип события -> массив имён компонентов которым это событие вешать
В качестве вызываемого метода будет использован метод текущего класса (если не указано иное, потом покажу как) с именем состоящим из типа события и имени компонента, т.е. для кнопки с именем AddHellow при клике будет вызван метод onClickAddHellow
Если надо повесить на нескольких разных событий всего один метод, то это делается так:
Код HTML:
'OnKeyUp' => Array(Array('ServerList', 'onChangeServerList')),
'onMouseUp' => Array(Array('ServerList', 'onChangeServerList')),
Где первый элемент внутреннего массива это имя компонента, а второй элемент это название метода.
Вот пример простого класса (сорри за комменты у меня широкий монитор):
PHP код:
<?php
CLASS MainFormClass EXTENDS vGObjectForm
{
Protected $MemoLength = 0;
Protected $Texts = Array(
'Мама мыла раму',
'Самая страшная борьба во мне - это борьба моего чувства юмора с моим воспитанием :(',
'Интернет держится на двух китах: порнографии и котах.',
'Делаю пристройку к кафе. Вместо швеллеров хозяин будет класть рельсы, потому что он их украл.',
);
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Protected $___Events = Array(
'onClick' => Array('AddHellow', 'AddSomeText', 'AddDate', 'CloseProg'),
'onCloseQuery' => Array('self'),
);
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// property -> array(global_name, [property, [property, .... N * [property]]])
Protected $___MustBeObj = Array(
'SCR' => Array('SCREEN'),
'APP' => Array('APPLICATION'),
);
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Static $SelfObj = False;
/*
* Можете сие считать аналогом onCreate, хотя и onCreate событие создать можно, но имхо это смысла лишено т.к.
* выполняться они всё равно будут практически одновременно но по очереди с данным конструктором. Кто первей не проверял.
*/
Public Function __construct($Name)
{
parent::__construct($Name);
self::$SelfObj = $this;
$this->self->doubleBuffered = True;
$this->ChangeStatusTimer = SetTimer(1000, 'MainFormClass::onTimerChangeStatus();');
}
//########################################################################################################################################################################################################
/*
* Описание метода
*
* @return void
*/
Public Function onClickAddHellow()
{
$this->AddTextToTextM('Hellow World!');
}
//########################################################################################################################################################################################################
/*
* Описание метода
*
* @return void
*/
Public Function onClickAddSomeText()
{
$this->AddTextToTextM($this->Texts[Rand(0, 3)]);
}
//########################################################################################################################################################################################################
/*
* Описание метода
*
* @return void
*/
Public Function onClickAddDate()
{
$this->AddTextToTextM(Date('Y.m.d H:i:s'));
}
//########################################################################################################################################################################################################
/*
* Описание метода
*
* @param integer идентификатор вызываемого объекта
*
* @return void
*/
Public Function onClickCloseProg($OID)
{
If($this->onCloseQueryMainForm($OID))
{
$this->APP->terminate();
}
}
//########################################################################################################################################################################################################
/*
* Описание метода
*
* @param integer идентификатор вызываемого объекта
* @param boolean флаг передающий можно ли приложению закрыться?
*
* @return boolean флаг передающий можно ли приложению закрыться после выбора юзера
*/
Public Function onCloseQueryMainForm($OID, $CanClose = True)
{
$CanClose = MessageBox('Вы действительно хотите выйти из программы?', 'Внимание:', MB_YESNO | MB_ICONINFORMATION) == 6;
__setVarEx($CanClose);
Return $CanClose;
}
//########################################################################################################################################################################################################
/*
* Описание метода
*
* @return void
*/
Static Public Function onTimerChangeStatus()
{
self::$SelfObj->MainStatus->simpleText = 'Йа статик таймер, текущее время: ' . Date('H:i:s');
}
//########################################################################################################################################################################################################
/*
* Описание метода
*
* @param string текст для добавления в компонент
*
* @return void
*/
Protected Function AddTextToTextM($text)
{
$this->TextM->setFocus();
$this->TextM->selStart = $this->MemoLength;
$this->TextM->selText = $text . "\r\n";
$this->MemoLength = $this->MemoLength + 2 + StrLen($text);
}
}
?>