На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis
  
> Delphi for PHP (RAD PHP XE, HTML5 Builder ): FAQ
    Запуска проекта на удаленном сервере
    Когда вы закончите разрабатывать свой проект нужно сформировать рабочий проект
    Для этого в делфи есть «Deployment Wizard» (вызвать можно Tools-> Deployment Wizard или соответствующую кнопку в тулбаре)
    Мастер скопирует ваш проект в папку (которую вы ему укажите) и в ней папку vcl, в которой будут находится необходимые компоненты и файлы.
    Копируете это все на сервер с помощью ftp клиента. Заходим на сайт и смотрим результат.

    Бывает что мастер может не доложить какой-то файл. В этом случае его нужно поискать в vcl библиотеки
    %Program Files%\CodeGear\Delphi for PHP\2.0\vcl\
    %Program Files%\Embarcadero\RadPHP\3.0\rpcl
    и положить в соответствующую папку в своем сформированном проекте.
    Для 3-й версии актуально не vcl, а папка rcpl

    Добавлено
    Проблема:
    Иногда возникает ошибка при использовании шаблона Smart
    Цитата
    Fatal error: Smarty error: the $compile_dir '/tmp' does not exist....

    Решение:
    Открываем файл smartytemplate.inc.php
    Находим строчку
    ExpandedWrap disabled
      $this->_smarty->compile_dir = '/tmp';

    И указываем полный путь к темповой папке
    ExpandedWrap disabled
      $this->_smarty->compile_dir = 'C:/WINDOWS/Temp'; //'C:/tmp'
    Сообщение отредактировано: vicis -
      Советы:
      При создании шаблона в теле документа нужно незабыть указать три параметра {$HeaderCode} (В это месте будут формироватся JavaScript вставки), {$StartForm} и {$EndForm} (в этих местах будет вставлены теги начала и конца формы соответственно)


      Чтобы заставить обновится какойто контрол достаточно нажать по нему правой кнопкой мыши и вызвать control->repain или нажать Shift+Ctrl+F12
      Сообщение отредактировано: ViktorXP -
        Проблема:
        При использовании DBGrida и Smarty с формы исчезает скрол.

        Решение:
        ExpandedWrap disabled
          function Unit1JSLoad($sender, $params)
          {
           
          ?>
          //Add your javascript code here
          d.setOverflow("scroll");
          <?php
           
          }
          Тут есть процентное соотношение но подано слегка не стандартным для нас способом.

          Каждай компонент-контейнер можно поделить виртуально сеткой на квадраты.
          Для этого в компонента есть свойства Layout.Cols и Layout.Rows
          Способ выравнивания определяется свойством Layout.Type
          После установки размера сетки растягиваем внутренний компонент на столько квадратов сколько нам

          нужно.
          Когда будет компнент-контейнер менятся то он будет автоматически менать размер и внутренних

          компонентов в соответствии занятых квадратов.
            Проблема:
            Как удалять из "Welcome Page" уже не существующие проекты?

            Решение:
            Записи о проектах лежат в реестре
            HKEY_CURRENT_USER\Software\CodeGear\Delphi for PHP\1.0\mru {в первой версии}
            HKEY_CURRENT_USER\Software\CodeGear\Delphi for PHP\2.0\mru {во второй версии}
              Проблема:
              В базу при помощи цикла записывал 100000 записей. При выполнении выдало ошибку
              ExpandedWrap disabled
                Fatal error: Maximum execution time of 30 seconds exceeded in T:\home\localhost\ryterna\vcl\adodb\adodb.inc.php on line 831


              Решение:
              В настройках по умолчанию стоит максимальное время выполнение скрипта 30 сикунд.
              изменить его можно в файл в php.ini.template. В секции "Resource Limits" есть параметр max_execution_time
                Проблема:
                Как изменить размер шрифта у ListView ?

                Решение:
                1)
                ExpandedWrap disabled
                  function Button1JSClick($sender, $params)
                  {
                    ?>
                    //Add your javascript code here
                    document.getElementById('ListView1').style.font = "bold small-caps 12pt/14pt sans-serif";
                  // document.getElementById('ListView1').style.font = " 12pt/14pt sans-serif top";
                    <?php
                  }
                2)
                ExpandedWrap disabled
                  document.all['ListView1'].style.left = 0;
                  document.all['ListView1'].style.position = 'relative';
                  document.all['ListView1'].style.font = '20px verdana,arial,helvetica';
                  document.all['ListView1'].style.textAlign = 'right';
                  document.all['ListView1'].style['color'] = 'blue';
                  document.all['ListView1'].style['size'] = '18px';
                  document.all['ListView1'].style.fontSize = '22px';
                Сообщение отредактировано: ViktorXP -
                  Проблема:
                  как узнать программно что страница/компонент отображается в редакторе форм

                  Решение:
                  ExpandedWrap disabled
                    if   (($this->ControlState & csDesigning) != csDesigning) ...
                    Проблема:
                    Пустой проект выдает ошибку
                    Цитата
                    Warning: Unknown: Failed opening 'C:/Documents and Settings/User/Мои документы/Delphi for PHP Projects/unit1.php'
                    for inclusion (include_path='.;C:\Program Files\Programming\Delphi for PHP 1.0\' ) in Unknown on line 0

                    Решение:
                    Delphi for PHP не любит русские пути. Поэтому сохраняй проект в другом месте.

                    Кроме этого стоит проверить что:
                    - имя пользователя под которым Вы установили и используете Delphi For Php содержит только английские буквы и не содержит пробелов
                    - после создания нового проекта сохраните его в папку, которая содержит только английские буквы и не содержит пробелов
                    - если проект не запускается и находится на диске отличном от C: попробуйте сохранить его на диск C:
                    Сообщение отредактировано: vicis -
                      Проблема:
                      А каким образом без мышки можно перемещаться по элементам формы?

                      Решение:
                      1)
                      У каждого контрола, который имеет фокус, есть свойства TabOrder (параметр порядка предоставления

                      фокуса), TabStop (Давать фокус по табу или нет)
                      2)
                      Или можно решить это через JavaScript
                      ExpandedWrap disabled
                        function Edit2JSKeyUp($sender, $params)
                        {
                        ?>
                          //if (event.keyCode == 13|| event.keyCode == 9)
                          if (event.keyCode == 40) // если нажата клавиша "стрелка вниз"
                          {
                            findObj("Edit1" ).focus();
                          }              
                          if (event.keyCode == 38) // если нажата клавиша "стрелка вверх"
                          {                  
                            findObj("Edit3").focus();                  
                          }
                        <?php
                        }
                        Проблема:
                        Какие настройки отвечают за кодировку?

                        Решение:
                        IDE/Tools/Options/Default Charset
                        IDE/Tools/Options/Editor options/Text encoding
                        Unit1->Encoding
                        (Unit1 - это имя редактируемого модуля)
                          Проблема:
                          настройки
                          Unit1->Encoding = Unicode (UTF-8) |utf-8
                          Unit2->Encoding = Unicode (UTF-8) |utf-8
                          IDE/Tools/Options/Default Charset = utf-8 (Language = "utf-8")
                          IDE/Tools/Options/Editor options/Text encoding = utf-8

                          - ставим panel1 на форму unit1
                          - в инспекторе пишем panel1->caption = 'Тра-та-та'
                          - ставим panel2 на форму unit2
                          - в инспекторе пишем panel2->include = unit1

                          видим в редакторе краказяблы
                          а запускаем - нормально
                          Решение:
                          добавляется в модуль extctrls.inc.php две процедуры
                          ExpandedWrap disabled
                            function get_include_contents($filename)
                            {
                              if (is_file($filename))
                              {        
                                ob_start();        
                                include $filename;        
                                $contents = ob_get_contents();
                                ob_end_clean();        
                                return $contents;    
                              }    
                              return false;
                            }
                            function GetANSI($str)
                            {
                              $charset = 'windows-1251';
                              $_encoding = mb_detect_encoding($str, "UTF-8, $charset");
                              if (strcasecmp($_encoding, 'UTF-8')==0)
                              {
                                return mb_convert_encoding($str, $charset, $_encoding);
                              }
                              else    
                              {
                                return $str;
                              }
                            }

                          Потом переписываем кусок
                          ExpandedWrap disabled
                            if ($this->_include!="")
                            {
                              include($this->_include);
                            }

                          На
                          ExpandedWrap disabled
                            if ($this->_include!="")
                            {
                              if (($this->ControlState & csDesigning) != csDesigning)
                              {        
                                include($this->_include);
                              }
                              else
                              {
                                $string = get_include_contents($this->_include);
                                echo GetANSI($string);
                              }
                            }

                          тоесть когда код будет в дизайн тайме выводится то наша процедура будет его перекодировать в анси,
                          а когда на сервере как сайт то будет выводится без переделки.
                            Проблема:
                            Как изменить кодировку файла?
                            Решение:
                            в окне редактирования тыкаеш правую кнопку мыши File Encoding с подпунктами.
                              Проблема:
                              Где ide хранить php.ini?
                              Решение:
                              Файл лежит тут:
                              %Documents and Settings%\{user}\Application Data\CodeGear\Delphi for PHP\2.0\php\php.ini
                              Но изменять его бесполезно так как среда его изменяет самостоятельно. Правильнее настройки вносить

                              через саму ide. Если этого мало то тогда можно внести настройки в сам шаблон по которому среда

                              формирует файл
                              %Delphi for PHP%\2.0\php\php.ini.template
                                Проблема:
                                Хочу чтобы календать, находящийся в VCL, был по русски.

                                Решение:
                                В моделе comctrls.inc.php в класах MonthCalendar и DateTimePicker есть строка
                                ExpandedWrap disabled
                                   $this->_calendar = new DHTML_Calendar(VCL_HTTP_PATH."/jscalendar/", "en", 'calendar-win2k-2', false);

                                Вот тут и меняй язык 'en' на 'ru'
                                  Проблема:
                                  Есть проблема с combobox. Не получалось программно определить текущее значение выбранного элемента.

                                  Решение:
                                  Можно воспользоватся такой функцией
                                  ExpandedWrap disabled
                                    function GetComboSelectKey($Combo,$TypeValue=0)
                                    /* возвращает значение ключа(key) или текст выбранной записив Combobox $TypeValue=0 - key, =1 - текст*/
                                    {
                                      if ($Combo->Count<1) return '';  
                                      $items=$Combo->Items;  
                                      reset($items);  
                                      while(list($key, $val)=each($items))    
                                      {    
                                        if ($Combo->readSelected($key))
                                        {
                                          if ($TypeValue==0)  { return $key; }
                                          else  { return $val; }
                                        }
                                      }
                                    }
                                    Проблема:
                                    Никак не пойму, какой метод или свойство у BDGrid содержит текущую выделенную строку и поле.

                                    Решение:
                                    ExpandedWrap disabled
                                      document.getElementById('Edit1').value = DBGrid1.getTableModel().getValue(1, DBGrid1.getFocusedRow())
                                    Присваивает едиту значение второго столбца выбранной строки грида.
                                      Проблема:
                                      Как центрировать форму с компонентами?

                                      Решение:
                                      выставляется параметр "Layout.Type" у формы отличающийся от "ABS_XY_LAYOUT"( например "XY_LAYOUT")
                                      и присваиваем свойству Alignment значение agCenter
                                        Проблема:
                                        DBGrid показывает все колонки, хотя в некоторых стоит свойство Visible=false

                                        Решение:
                                        1)
                                        Открываем модуль dbgrids.inc.php и ищем там такой код:
                                        ExpandedWrap disabled
                                                          $dwidth=$value['Width'];
                                                          $color=$value['Color'];
                                                          $fontcolor=$value['FontColor'];
                                                          $alignment=$value['Alignment'];
                                                          $fname=$value['Fieldname'];
                                           
                                                              $props=$this->_datasource->DataSet->readFieldProperties($fname);
                                                              if ($props)
                                                              {
                                                                      if (array_key_exists('displaywidth',$props))
                                                                      {
                                                                              $dwidth=$props['displaywidth'][0];
                                                                      }
                                                              }
                                           
                                                          echo "        $this->Name.getTableColumnModel().setColumnWidth($i,$dwidth);\n";

                                        Добавляем две строки перед или после той строки что я указал последней
                                        ExpandedWrap disabled
                                             $_Visible=$value['Visible']; //Эту
                                             echo "        $this->Name.getTableColumnModel().setColumnVisible($i,$_Visible);\n"; //и эту
                                             echo "        $this->Name.getTableColumnModel().setColumnWidth($i,$dwidth);\n"; //Я поставил перед этой
                                        Теперь грид будет реагировать на параметр Visible в свойсве Columns
                                        2)
                                        Ну если вручную менять то можно так
                                        ExpandedWrap disabled
                                          ?>
                                            DBGrid1.getTableColumnModel().setColumnWidth(1,50) // размер
                                            DBGrid1.getTableColumnModel().setColumnVisible(1, false) // видимость
                                          <?php


                                        Добавлено
                                        в компоненте нет свойства Visible для колонок поэтому там пока через JS
                                        ExpandedWrap disabled
                                          ListViewBank.getTableColumnModel().setColumnVisible(0, false);
                                          Проблема:
                                          Где dbgrid хранит текстовые константы? (1 of 9 rows selected)
                                          Решение:
                                          в файле %Program Files%\CodeGear\Delphi for PHP\1.0\vcl\qooxdoo\framework\script\qx.js в масиве $=[....] лежит каждое слово по отдельности
                                            Проблема:
                                            Проект в кодировке windows-1251. Использую ajax. Вместо кириллицы получаю корокзяблы
                                            Решение:
                                            Открываем модуль xajax.inc.php и подправляем строку
                                            ExpandedWrap disabled
                                              define ('XAJAX_DEFAULT_CHAR_ENCODING', 'utf-8'); // ставим нужную нам кодировку (в данном случаи windows-1251)
                                              Проблема:
                                              Если нужно закрыть компонент Window при запуске формы, а потом его по кнопке отобразить с помощью JavaScript
                                              то при установке свойства невидимости оно вообще не генерируется в код
                                              и соотвественно потом не вызывается из JavaScript
                                              Решение:

                                              ExpandedWrap disabled
                                                               function PageInfoAfterShow($sender, $params)
                                                               {
                                                               echo "<script type=\"text/JavaScript\">
                                                                      Window1.close();
                                                                    </script>";
                                                               }
                                                Задача:
                                                Если нужно использовать панель с набором компонентов на ней не в том месте где она
                                                установлена на форме, а в произвольном, определяемом неким порядком генерации страницы
                                                которым мы должны управлять, то есть использовать эту панель как шаблон
                                                Решение:
                                                нужно сделать так
                                                - ставим панель на форму (например с именем PanelNewCode)
                                                - панели устанавливаем в режиме редактирования :
                                                ExpandedWrap disabled
                                                                   $this->PanelNewCode->Visible = false;
                                                                   $this->PanelNewCode->Layout->Type = 'REL_XY_LAYOUT';

                                                - прописываем в то место где хотим вставить панель такой код (например встроить панель в таблицу):
                                                ExpandedWrap disabled
                                                           $mycodetable = '<table>
                                                                                    <tr><td>здесь встроена моя панель 1-й раз '.$this->PanelNewCode->show(true).'</td></tr>  // вставляем панель первый раз
                                                                                    <tr><td>здесь встроена моя панель 2-й раз '.$this->PanelNewCode->show(true).'</td></tr>  // вставляем панель второй раз
                                                                                     </table>';
                                                           echo $mycodetable;

                                                - однако т.к. PanelNewCode невидимая, то есть проблема
                                                если на этой панели есть компоненты у которых прописаны обработчики событий (например кнопка)
                                                то vcl не сгенерирует их в страницу, т.к. родитель не видимый
                                                решение здесь такое:
                                                прописываем сгенерировать код события принудительно
                                                (например для кнопки Button1, которая находится на невидимой панели и имеет обработчик события)
                                                ExpandedWrap disabled
                                                                 function zakazinfoAfterShow($sender, $params)
                                                                 {
                                                                 echo "<script type=\"text/JavaScript\">";
                                                                        $this->Button1->dumpJsEvents();
                                                                 echo "</script>";
                                                   
                                                                 }

                                                это событие здесь для формы с названием zakazinfo
                                                  Задача:
                                                  Передать параметры из формы в форму
                                                  Например: значение первой колонки из выбранной записи DBGrid1
                                                  Решение:
                                                  ExpandedWrap disabled
                                                                   function BitBtn4JSClick($sender, $params)
                                                                   {
                                                     
                                                                   ?>
                                                                     if (confirm("Вы уверены, что хотите удалить этого сотрудника?"))
                                                                       {
                                                                       t_id=DBGrid1.getTableModel().getValue(0, DBGrid1.getFocusedRow());
                                                                       location.href="/formdelete.php?act=delete&id="+t_id;
                                                                       }
                                                     
                                                                   <?php
                                                     
                                                                   }


                                                  в форме formdelete.php получаем в событии BeforeShow($sender, $params)

                                                  ExpandedWrap disabled
                                                                        $action=$this->input->act;
                                                                        if (is_object($action))
                                                                        {
                                                                            $del_id=$this->input->id;
                                                     
                                                                         ...
                                                    Задача:
                                                    Нужно управлять DBGrid (или ListView)

                                                    Решение:

                                                    1. установка ширины колонок (JavaScript)
                                                    ExpandedWrap disabled
                                                                    ListView1.getTableColumnModel().setColumnWidth(0,250);
                                                                    ListView1.getTableColumnModel().setColumnWidth(1,250);
                                                       
                                                                    DBGrid1.getTableColumnModel().setColumnWidth(0,1); // скрывема колонку путём установки ширины=1


                                                    2. добавить значения в ListView
                                                    ExpandedWrap disabled
                                                                     var rowData = [];
                                                                     rowData = tableModel.getData();
                                                                     rowData.push(['111', '222','333']);
                                                                     tableModel.setData(rowData);
                                                                     ListView1.getTableModel().setColumnEditable(0, true);  // сделать колонку редактируемой
                                                                     ListView1.getTableModel().setColumnEditable(1, true);
                                                                     ListView1.getTableModel().setColumnEditable(2, true);

                                                    3. ПОСЧИТАТЬ СУММУ некоторой колонки

                                                    ExpandedWrap disabled
                                                                      var totcases=1*0 ,totsale=1*0
                                                                      var model = dbgrid.getTableModel();
                                                                      var rowCount = model.getRowCount();
                                                                      for(var row = 0; row < rowCount; row ++ )
                                                                         {
                                                                         var order=parseInt(model.getValue(5,row));
                                                                         if (order != model.getValue(5,row)) order=0;
                                                                         var multi=parseInt(model.getValue(10,row));
                                                                         if (multi != model.getValue(10,row)) multi=1;
                                                                         var price=parseFloat(model.getValue(6,row));
                                                                         if (price != model.getValue(6,row)) price=0;
                                                                         totcases+=order;
                                                                         totsale+=parseInt(order*multi*price*100)/100;
                                                                         }


                                                    4. ПОЛУЧИТЬ ЗНАЧЕНИЕ ЯЧЕЙКИ
                                                    ExpandedWrap disabled
                                                      var row = dbgrid1.getFocusedRow();
                                                      var col = dbgrid1.getFocusedColumn();
                                                      var value=dbgrid1.getTableModel().getValue(col,row);
                                                      alert('col = '+col+' row = '+row+' cell = '+value);


                                                    5. ДИНАМИЧЕСКИ ПРОПИСАТЬ КОЛОНКИ
                                                    ExpandedWrap disabled
                                                      function Unit306BeforeShow($sender, $params)
                                                      {
                                                        $prop=array();
                                                        $prop['products']['products_id']=array('displaylabel'=>array('ID'));
                                                        $prop['products']['products_quantity']=array('displaylabel'=>array('Quantity'));
                                                        $this->dboscommerce1->DictionaryProperties=$prop;
                                                      }

                                                    6. ЧАСТО ИСПОЛЬЗУЕМЫЕ МЕТОЫ
                                                    ExpandedWrap disabled
                                                      var row = dbgrid.getFocusedRow();
                                                      var column = dbgrid.getFocusedColumn();
                                                      var value=dbgrid.getTableModel().getValue(col,row);
                                                      dbgrid.getTableModel().setValue(col,row,value);
                                                      dbgrid.sortByColumn (col, true);
                                                      dbgrid.setFocusedCell(col, row, true);
                                                      dbgrid.getSelectionModel().setSelectionInterval(row, row);


                                                    7. ПРИМЕР ПРОГРАММЫ КОТОРАЯ ДЕЛАЕТ ПОИСК ПО DBGRID
                                                    (проверено, работает)
                                                    ExpandedWrap disabled
                                                      function  jsDBGfindtext(model,thetext,startingRow,column)
                                                        {  //zips thru a dbgrid to find something
                                                           var rowCount = model.getRowCount();
                                                           for(var row = startingRow; row < rowCount; row ++ )
                                                                  {
                                                                  var desc = model.getValue(column,row);
                                                                  if (typeof(desc)=="number") desc=desc.toString();
                                                                  if (typeof(thetext)=="number") thetext=thetext.toString();
                                                                  desc = desc.toUpperCase();
                                                                  thetext = thetext.toUpperCase();
                                                                  if ( desc.indexOf(thetext)>=0) return (row);
                                                                  }
                                                            return (-1);
                                                         }
                                                      //the calling routine from a basic edit
                                                         function EsearchdbgridJSKeyUp($sender, $params)
                                                                     {
                                                                     ?>
                                                                      var lookfor = findObj('Esearchdbgrid').value;
                                                                      if (lookfor.length < 2) startRow = 0;
                                                                      if (lookfor.indexOf(' ',0)) //use space bar as a look for next occurrence.
                                                                        {
                                                                        var look = lookfor.split(' ');
                                                                        lookfor=look[0];
                                                                        }
                                                                      if (typeof(startRow)=='undefined') startRow=-1;
                                                                      startRow++;
                                                                      startRow=jsDBGfindtext(dbgrid.getTableModel(),lookfor,startRow,4);
                                                                      if (startRow>-1)
                                                                           {
                                                                           dbgrid.setFocusedCell(5, startRow, true);
                                                                           dbgrid.getSelectionModel().setSelectionInterval(startRow, startRow);
                                                                           }
                                                                     <?php
                                                                     }
                                                      Задача:
                                                      Передать содержимое панели(или другого элемента) в другую (копировать)
                                                      Решение:
                                                      - ставим на форму панель с чем то
                                                      - ставим компонент Window1
                                                      - на Window1 ставим другую панель
                                                      и кнопкой в javascripte передаём содержимое в окно Window1

                                                      ExpandedWrap disabled
                                                        document.getElementById("PanelBig_outer").innerHTML = document.getElementById("PanelPowerShow_outer").innerHTML
                                                        Window1.open();
                                                        Проблема:
                                                        В 1-й версии DelphiForPhp у компонента Query в редакторе колонок нет кнопок переместить колонки вверх, вниз.
                                                        Это неудобно т.к. если нужно поменять их порядок то приходится перенабирать всё по новой.
                                                        Решение:
                                                        Взять 2-й DelphiForPhp (можно демо)
                                                        и заменить у первого папку Program Files\CodeGear\Delphi for PHP\1.0\plugins
                                                        на аналогичную от второго
                                                        (там эти кнопки есть)
                                                        IDE перезапустить

                                                        здесь хранятся плагины редакторов свойств компонент,
                                                        которые можно писать самостоятельно в Delphi (не на Delphi 7, а нужна версия выше)
                                                          в дополнение к FAQ (сообщение #2344473)
                                                          Проблема:
                                                          При добавлении в шаблон SmartyTemplate компонент, которые построены на qx
                                                          например: TreeView
                                                          скролл пропадает и не появляется даже с кодом указанным в сообщении FAQ (сообщение #2344473)
                                                          Решение:

                                                          ExpandedWrap disabled
                                                               function mainAfterShow($sender, $params)
                                                               {
                                                                  // FIX for Qadram's Scrollbar cockup!!
                                                            ?>
                                                               <script language="JavaScript" type="text/javascript">
                                                                var d = qx.ui.core.ClientDocument.getInstance();
                                                                d.setOverflow("auto");
                                                               </script>
                                                            <?php
                                                               }
                                                            Задача:
                                                            В шаблон SmartyTemplate добавить переменную, которая отсутствует как компонент на форме
                                                            но которую нужно заполнить каким либо значением
                                                            Решение:

                                                            вариант шаблона:
                                                            ExpandedWrap disabled
                                                              <html>
                                                                <head>
                                                                  <title>{%$xCaption%}</title>
                                                                    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                                                                </head>
                                                                <body>
                                                                  <table id="mytab" cellspacing="1" cellpadding="1" width="100%" border="1">
                                                                    <tbody>
                                                                      <tr height="66">
                                                                        <td> 5678</td>
                                                                        <td> {%$xtemp%}</td>
                                                                        <td> </td>
                                                                      </tr>
                                                                      <tr height="15">
                                                                        <td> </td>
                                                                        <td> </td>
                                                                        <td> </td>
                                                                      </tr>
                                                                    </tbody>
                                                                  </table>
                                                                </body>
                                                              </html>



                                                            код модуля php (событие onTemplate):

                                                            ExpandedWrap disabled
                                                                     function Unit5Template($sender, $params)
                                                                     {
                                                                     $template=$params['template'];
                                                                     $template->_smarty->assign('xtemp','1234567890');
                                                                     $template->_smarty->assign('xCaption','MyTitle');
                                                               
                                                                     }
                                                              Проблема:
                                                              При подключении к SmartyTemplate некоторых компонент (решение не для всех компонент), например Panel,Label...
                                                              нужно что бы они растягивались по контейнеру в который входят, например по размеру тега <td>,
                                                              однако, они туда вставляются с шириной и высотой которую имеют на форме в дизайнере форм.
                                                              Установка ширины или высоты в инспекторе объектов разрешается только в виде целых чисел, т.е. 100% не проходит.
                                                              Как сделать 100% ?
                                                              Решения:
                                                              1.Решение 1
                                                              - форме на которой находятся компоненты установить Layout.Type = FLOW_LAYOUT
                                                              - дать команду конкретному компоненту writeAdjustToLayout(True) (по умолчанию там значение False)
                                                              в этом случае при генерации компонента подставляются не установленные у него на форме высота и ширина, а height:100%;width:100%;

                                                              ExpandedWrap disabled
                                                                               function Unit9BeforeShow($sender, $params)
                                                                               {
                                                                               $this->Label1->writeAdjustToLayout(True);
                                                                               $this->Panel1->writeAdjustToLayout(True);
                                                                               $this->Button1->writeAdjustToLayout(True);
                                                                               }


                                                              при этом панель растягивается по тегу в котором находится
                                                              а Label1 и Button по ширине тега, высота подстраивается под содержимое

                                                              файл unit1.tpl
                                                              ExpandedWrap disabled
                                                                <html>
                                                                .....
                                                                <body>
                                                                       {%$StartForm%}
                                                                        <table width=100% border=1>
                                                                        <tr><td width="150" height="200">{$Panel1}</td><td></td></tr>
                                                                        <tr><td width="150"></td><td></td></tr>
                                                                        <tr><td width="150" height="200">{$Label1}</td><td height="200">{$Button1}</td></tr>
                                                                 
                                                                       {%$EndForm%}
                                                                </body>
                                                                </html>


                                                              если посмотреть код html полученной страницы, то видим следующее:
                                                              (для вышеприведённого шаблона)
                                                              ExpandedWrap disabled
                                                                <html>
                                                                <body>
                                                                       <form style="margin-bottom: 0" id="Unit9" name="Unit9" method="post"  action="/unit9.php">
                                                                        <table width=100% border=1>
                                                                        <tr><td width="150" height="200"><div id="Panel1_outer">
                                                                <table id="Panel1_table"  width="100%"   height="100%"  border="0"  cellpadding="0" cellspacing="0"  
                                                                bgcolor="#00FF00"    style=" border: 0px solid ; "   >
                                                                <tr>
                                                                <td style=" font-family: Verdana; font-size: 10px;  "><span style=" font-family: Verdana; font-size: 10px;  ">Panel1</span>
                                                                </td>
                                                                </tr>
                                                                </table>
                                                                 
                                                                </div>
                                                                </td><td></td></tr>
                                                                        <tr><td width="150"></td><td></td></tr>
                                                                        <tr><td width="150" height="200"><div id="Label1_outer">
                                                                <div id="Label1" style=" font-family: Verdana; font-size: 10px;  background-color: #FF0000;height:100%;width:100%;" >
                                                                Label1 seefwse we we twer twer twe wer we rwer w</div>
                                                                </div>
                                                                </td><td height="200"><div id="Button1_outer">
                                                                <input type="submit" id="Button1" name="Button1" value="Button1"  
                                                                onclick="return Button1ClickWrapper(event, document.forms[0].Button1SubmitEvent, 'Button1_Button1Click')"  
                                                                style=" font-family: Verdana; font-size: 10px;  height:100%;width:100%;"   tabindex="0"    />
                                                                <input type="hidden" id="Button1SubmitEvent" name="Button1SubmitEvent" value="" />
                                                                </div>
                                                                </td></tr>
                                                                 
                                                                       </form>
                                                                </body>
                                                                 
                                                                </html>


                                                              2.Решение 2
                                                              используем стили

                                                              файл style.css
                                                              ExpandedWrap disabled
                                                                .xx {
                                                                        width: 100%;
                                                                        height: 100%;
                                                                }


                                                              файл unit1.tpl
                                                              ExpandedWrap disabled
                                                                <html>
                                                                <link rel="stylesheet" href="style.css">
                                                                <body>
                                                                 
                                                                       {%$StartForm%}
                                                                        <table width=100% border=1>
                                                                        <tr><td width="150" height="200">{$Panel1}</td><td></td></tr>
                                                                        <tr><td width="150"></td><td></td></tr>
                                                                        <tr><td width="150" height="200">{$Label1}</td><td height="200">{$Button1}</td></tr>
                                                                 
                                                                       {%$EndForm%}
                                                                </body>
                                                                </html>


                                                              форма в файл Unit10.php
                                                              на ней
                                                              Label1, Panel1, Button1

                                                              ставим маленьких размеров (что бы видно было масштабиравание)
                                                              в инспекторе:
                                                              Label1->Caption = 'Лучше нету того свету, Лучше нету того свету, Лучше нету того свету';
                                                              Button1->Style = .xx
                                                              Unit10->TemplateEngine=SmartyTemplate
                                                              Unit10->TemplateFileName=unit1.tpl
                                                              Сообщение отредактировано: vicis -
                                                                Если нужно создать простую таблицу с данными то можно воспользоваться компонентом HTML_Table который описан в vcl/PEAR/HTML/Table.php
                                                                простой пример использования:
                                                                ExpandedWrap disabled
                                                                  <?php
                                                                   
                                                                   require_once ('HTML/Table.php');
                                                                   
                                                                   $table = new HTML_Table();
                                                                   $table->setAttribute('border', 1);
                                                                   for ($x = 1; $x <= 9; $x++)
                                                                   {
                                                                     for ($y = 1; $y <= 9; $y++)
                                                                     {
                                                                        $table->setCellContents($x-1, $y-1, $x*$y);
                                                                     }
                                                                   }
                                                                   
                                                                   echo $table->toHtml();
                                                                   
                                                                  ?>
                                                                  Проблемы переноса проекта на хостинг проайдера

                                                                  После создания проекта и его успешной отладки на локальном компьютере могут быть проблемы с переносом этого проета к провайдеру
                                                                  Приведу некоторые проблемы с которыми столкнулся я и их решения
                                                                  в основном эти проблемы из за не одинаковой настройки php или apache

                                                                  1) у провайдера не была подключена библиотека с функциями фильтрации в php
                                                                  Проявлялось в виде сообщения типа: "The Input Filter PHP extension is not setup on this PHP installation, so the contents returned by Input is *not* filtered"
                                                                  удалось заставить подключить библиотеку путём предоставления примера, который не работал
                                                                  По phpinfo это не было видно (вроде бы), а программа выполненная на провайдере говорила, что функции не доступны
                                                                  на локальной же машине работало

                                                                  Пример в двух файлах:
                                                                  example04.php
                                                                  ExpandedWrap disabled
                                                                    <?php
                                                                    if (!filter_has_var(INPUT_POST, 'submit')) {
                                                                        echo "form";
                                                                        // include the form.
                                                                    }
                                                                     
                                                                    $age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
                                                                    if (is_null($age))
                                                                      {
                                                                        echo "Вы не ввели ничего(пустая переменная).<br />";
                                                                        require_once('index.php');
                                                                      }
                                                                      elseif ($age === FALSE)
                                                                      {
                                                                        echo "Введите число.<br />";
                                                                        require_once('index.php);
                                                                      }
                                                                      else
                                                                     
                                                                      {
                                                                        echo "Привет.<br/>";
                                                                        echo "<a href='test1.php'>В начало</a>.<br/>";
                                                                      }
                                                                    ?>


                                                                  index.php
                                                                  ExpandedWrap disabled
                                                                    <html>
                                                                    <head></head>
                                                                    <body >
                                                                    Проверка ввода числа
                                                                     
                                                                    <form action="example04.php" method="post" >
                                                                        Enter your age: <input name="age" size="2">
                                                                        <input type="submit" name="submit" value="Go">
                                                                        </form>
                                                                    </body>
                                                                    </html>


                                                                  2)У провайдера небыла установлена переменная output_buffering
                                                                  Проявлялось сообщением об ошибке в связи с тем что header уже послан
                                                                  это решили созданием в корне папки проекта файла .htaccess и занесением в него следующих строк:
                                                                  php_flag output_buffering On
                                                                  php_value output_buffering 4096
                                                                  Сообщение отредактировано: vicis -
                                                                    Задача: Открыть из одного окна другое (модально) и вернуть значения из него только по закрытию окна.
                                                                    Раз модальное окно, то соответственно первое в этот момент будет недоступно.
                                                                    Решение:
                                                                    (Проверено в IE) делаем в первом окне
                                                                    ExpandedWrap disabled
                                                                      function Unit12AfterShow($sender, $params)
                                                                      {
                                                                        echo "<script type=\"text/JavaScript\">
                                                                        function returnInfo1(p_obr,p_name,p_fam,p_adr,p_city,p_country,p_tlf,p_tlf2)
                                                                        {
                                                                           document.getElementById('p_obr').value = p_obr;
                                                                           document.getElementById('p_name').value = p_name;
                                                                           document.getElementById('p_fam').value = p_fam;
                                                                           document.getElementById('p_adr').value = p_adr;
                                                                           document.getElementById('p_city').value = p_city;
                                                                           document.getElementById('p_country').value = p_country;
                                                                           document.getElementById('p_tlf').value = p_tlf;
                                                                           document.getElementById('p_tlf2').value = p_tlf2;
                                                                        }
                                                                        </script>";
                                                                      }
                                                                       
                                                                      function Label3JSClick($sender, $params)
                                                                      {
                                                                        ?>
                                                                        res = window.showModalDialog("clientinfoz.php","","dialogHeight:576px; dialogWidth:616px;status=no");
                                                                        if(res!=null)
                                                                        {
                                                                           returnInfo1(res[0],res[1],res[2],res[3],res[4],res[5],res[6],res[7]);
                                                                        }
                                                                        <?php
                                                                      }


                                                                    Возвращаем из второго окна (при этом закрываем его)
                                                                    1)вариант с обычным html:
                                                                    ExpandedWrap disabled
                                                                       <input type="button" value="добавить эту информацию о получателе в новый заказ"  
                                                                         onClick="window.returnValue = ['555','666','777','888','999','000','111','222'];window.close();">'

                                                                    2)вариант формы delphiforphp:
                                                                    ExpandedWrap disabled
                                                                                     function Button4JSClick($sender, $params)
                                                                                     {
                                                                                     ?>
                                                                                     window.returnValue = ['555','666','777','888','999','000','111','222'];
                                                                                     window.close();
                                                                                     <?php
                                                                                     }
                                                                    Сообщение отредактировано: vicis -
                                                                      Проблема:
                                                                      Как связать D4php и Firebird?

                                                                      Решение:
                                                                      Хоть и официально D4php поддерживает FB, но у многих подключиться с помощью компонента Database не получается. Поэтому был применен следующий подход.
                                                                      0. Если установлен Interbase или иная программа, которая юзает библиотеку GDS32.DLL, то останавливаем ее.
                                                                      1. Устанавливаем FB с отмеченной галочкой о библиотеке GDS32.DLL
                                                                      2. Идем по пути %systemroot%\system32\ и копируем библиотеку GDS32.DLL в
                                                                      2.1 C:\Program Files\CodeGear\Delphi for PHP\2.0\apache2\bin\
                                                                      2.2 C:\Program Files\CodeGear\Delphi for PHP\2.0\
                                                                      2.3 C:\Program Files\CodeGear\Delphi for PHP\2.0\packages\
                                                                      2.4 C:\Program Files\CodeGear\Delphi for PHP\2.0\php\
                                                                      3. Все готово. Для связки D4php и Firebird используем Interbase компоненты.

                                                                      Примечание: Решения для использования ролей пока не найдено.

                                                                      Это сообщение было перенесено сюда или объединено из темы "Firebird + D4php"

                                                                      Примечание 2: В 3-й версии пишут что Firebird поддерживается
                                                                      Сообщение отредактировано: vicis -
                                                                        Задача: Доступ к свойствам компонента OpenGrid
                                                                        Решение:
                                                                        1.Получить значение 1-й колонки в текущей строке грида OpenGrid2 при выборе ячейки
                                                                        если у грида свойство readonly=1


                                                                        ExpandedWrap disabled
                                                                          function OpenGrid2JSCellSelect($sender, $params)
                                                                          {
                                                                           
                                                                            ?>
                                                                            //Add your javascript code here
                                                                            alert(jQuery('#OpenGrid2').getGridParam('selrow'));
                                                                           
                                                                            <?php
                                                                           
                                                                          }



                                                                        2. Получить значения указанных колонок в текущей (выбранной) строке грида OpenGrid2 при выборе ячейки
                                                                        Работает это если у гида свойство readonly=1
                                                                        Здесь вытаскиваются колонки с названием полей PR_ID,PR_DATE

                                                                        ExpandedWrap disabled
                                                                          function OpenGrid2JSCellSelect($sender, $params)
                                                                          {
                                                                           
                                                                            ?>
                                                                            //Add your javascript code here
                                                                           
                                                                            var id = jQuery("#OpenGrid2").getGridParam('selrow');
                                                                            if (id)
                                                                            {
                                                                              var ret = jQuery("#OpenGrid2").getRowData(id);
                                                                              alert("column pr_id="+ret.PR_ID+" column pr_date="+ret.PR_DATE+"...");
                                                                            }
                                                                            else { alert("Please select row");}
                                                                           
                                                                            <?php
                                                                           
                                                                          }



                                                                        3. Ещё несколько функций для доступу к параметрам грида

                                                                        ExpandedWrap disabled
                                                                           function Button2JSClick($sender, $params)
                                                                          {
                                                                           
                                                                            ?>
                                                                            //Add your javascript code here
                                                                            alert(jQuery('#OpenGrid2').getGridParam('url'));  // зачем это не понял пока
                                                                            alert(jQuery('#OpenGrid2').getGridParam('sortname')); // имя колонки в гриде по которой сейчас отсортированы данные
                                                                            alert(jQuery('#OpenGrid2').getGridParam('sortorder')); // порядок сортировки
                                                                            alert(jQuery('#OpenGrid2').getGridParam('selrow'));  // значение первой колонки в строке
                                                                            alert(jQuery('#OpenGrid2').getGridParam('page'));  // номер отображаемой страницы
                                                                            alert(jQuery('#OpenGrid2').getGridParam('rowNum')); // по сколько записей выводится на странице
                                                                            alert(jQuery('#OpenGrid2').getGridParam('datatype'));  // тип данных
                                                                            alert(jQuery('#OpenGrid2').getGridParam('records'));   // количесто записей в таблице базы данных
                                                                           
                                                                            <?php
                                                                           
                                                                          }


                                                                        4. Реализовать связку master-detail
                                                                        Описано здесь установить easyGrid, OpenGrid (сообщение #2399428)

                                                                        5. Раскраска грида по значениям ячеек

                                                                        исходные данные для примера: таблица с полями TEST_ID (integer), TEST_NAME (varchar(20))
                                                                        заполнена всякими тестовыми значениями

                                                                        Раскрашиваем выбранную запись в гриде


                                                                        ExpandedWrap disabled
                                                                          function Button1JSClick($sender, $params)
                                                                          {
                                                                            ?>
                                                                           
                                                                            //Add your javascript code here
                                                                            var id = jQuery('#OpenGrid1').getGridParam('selrow');
                                                                            var ret = jQuery('#OpenGrid1').getRowData(id);
                                                                            //alert("TEST_ID="+ret.TEST_ID+" TEST_NAME="+ret.TEST_NAME+"...");
                                                                           
                                                                            //тут надо вставить анализ данных и в зависимости от них окрашивать строку другим цветом
                                                                           
                                                                            // шрифт в выбранной ячейке красим в нужный цвет
                                                                            jQuery("#OpenGrid1").setCell(id,'TEST_NAME','',{'color':'#FF00FF'});    
                                                                            // фон в выбранной ячейке красим в нужный цвет
                                                                            jQuery("#OpenGrid1").setCell(id,'TEST_ID','',{'background-color': '#999999'});    
                                                                            // меняем атрибуты шрифта в выбранной ячейке
                                                                            jQuery("#OpenGrid1").setCell(id,'TEST_ID','',{'color':'#FF00FF', 'font-weight':'bold'},{'title': 'это не меняет ничего!'});    
                                                                           
                                                                            <?php
                                                                          }



                                                                        Пробежать по всем отображаемым строкам в гриде и раскрасить их по нужным критериям можно так

                                                                        ExpandedWrap disabled
                                                                          function Button3JSClick($sender, $params)
                                                                          {
                                                                            ?>
                                                                            //Add your javascript code here
                                                                            var ids = jQuery("#OpenGrid1").getDataIDs(); // получаем массив ID
                                                                            for(var i=0;i < ids.length;i++)   //бежим по всем отображаемым строкам грида
                                                                            {
                                                                              var id_value = ids[i];    // получаем значение перво колонки очередной строки
                                                                              var ret = jQuery("#OpenGrid1").getRowData(id_value);    // получаем объект со значениями полей
                                                                              //  alert('Строка№ '+i+', значение перовой колонки='+ id_value+' поле TEST_ID='+ret.TEST_ID+' поле TEST_NAME='+ret.TEST_NAME);
                                                                              if (ret.TEST_NAME=='eee') // проверяем на значение = eee
                                                                              {
                                                                                // фон в выбранной ячейке красим в нужный цвет
                                                                                jQuery("#OpenGrid1").setCell(id_value,'TEST_NAME','',{'background-color': '#999999'});    
                                                                              }
                                                                              if (ret.TEST_ID in [1,5]) // проверяем на значения 1 и 5
                                                                              {
                                                                                // фон в выбранной ячейке красим в нужный цвет
                                                                                jQuery("#OpenGrid1").setCell(id_value,'TEST_NAME','',{'background-color': '#999999'});    
                                                                              }
                                                                            }
                                                                           
                                                                            <?php
                                                                           
                                                                          }



                                                                        Пробежать по всем отображаемым строкам в гриде и раскрасить их по нужным критериям сразу при отображении грида
                                                                        можно если предыдущий код вставить в событие OpenGrid1JSGridComplete

                                                                        6. Получить получить значение ячейки из указанной по имени колонки и строки с указанным значением
                                                                        описано здесь плучить значение ячейки в OpenGrid (сообщение #2613574)
                                                                        Сообщение отредактировано: vicis -
                                                                          Задача: Как сделать чтобы данные в ячейки переносились т.е. высота ячейки менялась в зависимости от длинны данных OpenGrid
                                                                          Решение: смотрим здесь OpenGrid ,вставка новой записи в Detail Grid (сообщение #2549108)
                                                                          Сообщение отредактировано: vicis -
                                                                            Задача: Как сделать что бы при открытии модального окна информация основной страницы затенялась или скрывалась
                                                                            Решение: (проверялось в IE, в остальных проверяем сами)
                                                                            1.на форме unit1 компонент Window1 и кнопка Button1
                                                                            и ещё чего нибудь для демонстрации работы накидай, ну там вторую кнопку, мемо...

                                                                            2. в инспекторе Winow1->Modal = true;
                                                                            Button1->ButtonType = btNormal;

                                                                            3. в коде
                                                                            вариант с затемнением
                                                                            ExpandedWrap disabled
                                                                                             function Button1JSClick($sender, $params)
                                                                                             {
                                                                               
                                                                                             ?>
                                                                                             //Add your javascript code here
                                                                                              document.getElementById('unit1').style.background = 'gray'; // перекрашиваем форму
                                                                                              Window1.show(); // открывем модальное окно (всё остальное блокируется пока окно открыто)
                                                                               
                                                                                             <?php
                                                                               
                                                                                             }
                                                                               
                                                                                             function Window1JSClose($sender, $params)
                                                                                             {
                                                                               
                                                                                             ?>
                                                                                             //Add your javascript code here
                                                                                              document.getElementById('unit1').style.background = ''; // перекрашиваем форму назад
                                                                                              // здесь возможно нужно восстанавличать цвет, а ранее его запоминать в какой то переменной, но в простом случае работает и так
                                                                                             <?php
                                                                               
                                                                                             }



                                                                            вариант где скрываем основную страницу пока отображаем модальное окно
                                                                            ExpandedWrap disabled
                                                                                             function Button1JSClick($sender, $params)
                                                                                             {
                                                                               
                                                                                             ?>
                                                                                             //Add your javascript code here
                                                                                              document.getElementById('unit1').style.display = 'none';  //block - отображает страницу или элемент, а none прячет
                                                                                              Window1.show(); // открывем модальное окно (всё остальное блокируется пока окно открыто)
                                                                               
                                                                                             <?php
                                                                               
                                                                                             }
                                                                               
                                                                                             function Window1JSClose($sender, $params)
                                                                                             {
                                                                               
                                                                                             ?>
                                                                                             //Add your javascript code here
                                                                                              document.getElementById('unit9').style.display = 'block';  //block - отображает страницу или элемент, а none прячет
                                                                                             <?php
                                                                               
                                                                                             }
                                                                            Сообщение отредактировано: vicis -
                                                                              Задача: Нужно в окне Windows1 открыть страницу с другого сайта (или со своего сайта другую форму)
                                                                              Решение:
                                                                              нужно поместить на форму окно Window1, на него панель Panel1, а к панели привязать событие

                                                                              ExpandedWrap disabled
                                                                                .....
                                                                                        class Unit2 extends Page
                                                                                        {
                                                                                               public $Panel1 = null;
                                                                                               public $Window1 = null;
                                                                                               function Panel1Show($sender, $params)
                                                                                               {
                                                                                 
                                                                                              
                                                                                                       echo '<iframe src ="http://forums.delphi-php.net/" height="100%" width="100%"></iframe>';
                                                                                 
                                                                                                       // а так грузиш свою другую форму
                                                                                                       //echo '<iframe src ="Unit3.php" height="100%" width="100%"></iframe>';
                                                                                 
                                                                                               }
                                                                                 
                                                                                        }
                                                                                .....
                                                                                Задача: сформировать список в Combobox
                                                                                Решение:
                                                                                ExpandedWrap disabled
                                                                                  public function GetList($TempQuery,$ComboBox,$DataField)
                                                                                  {
                                                                                    $TempQuery->close();
                                                                                    $TempQuery->open();
                                                                                    $TempQuery->first();
                                                                                    $ComboBox->Clear();
                                                                                    while (!$TempQuery->eof)
                                                                                    {
                                                                                       $ComboBox->AddItem($TempQuery->$DataField);
                                                                                       $TempQuery->next();
                                                                                     }
                                                                                  }
                                                                                   
                                                                                   
                                                                                  //вызываем так
                                                                                   
                                                                                  $this->TempQuery->SQL = 'select Car_RegNum as xName from car order by Car_RegNum';
                                                                                  GetListAuto($this->TempQuery,$this->ComboBox1, Car_RegNum );


                                                                                Тема решения: ComboBox
                                                                                Сообщение отредактировано: ViktorXP -
                                                                                  Задача: очистить свойство Text у всех компонент на форме
                                                                                  Решение: http://blog.onenerd.net/?p=69
                                                                                  ExpandedWrap disabled
                                                                                    function ClearAllTextBoxes ()
                                                                                    {
                                                                                    try {
                                                                                    foreach($this as $obj) {
                                                                                    if(substr($obj->name,0,3)==”txt”) {
                                                                                    $obj->Text = “”;
                                                                                    }
                                                                                    }
                                                                                    } catch (Exception $e) {}
                                                                                    }


                                                                                  или

                                                                                  ExpandedWrap disabled
                                                                                    function ClearAllTextBoxes ()
                                                                                    {
                                                                                    reset($this->controls->items);
                                                                                    while(list($key, $obj)=each($this->controls->items)) {
                                                                                    if ($obj->inheritsFrom(”Edit”)) {
                                                                                    $obj->Text = “”;
                                                                                    }
                                                                                    }
                                                                                    }
                                                                                  Сообщение отредактировано: vicis -
                                                                                    Задача: добавить ссылку на файл .js в форму
                                                                                    Рещение:
                                                                                    В событие OnShowHeader добавить

                                                                                    ExpandedWrap disabled
                                                                                      echo “<script language=\”javascript\” src=\”../_lib/js/validate.js\”></script>”;


                                                                                    Кроме того если у вас есть php библиотека функций, которую вы всегда включаете в страницы формы, добавьте туда следующую функцию:
                                                                                    ExpandedWrap disabled
                                                                                      function JSInclude($js_path_and_filename) {
                                                                                      echo “<script language=\”javascript\” src=\”{$js_path_and_filename}\”></script>\n”;
                                                                                      }


                                                                                    вызываем так
                                                                                    ExpandedWrap disabled
                                                                                      JSInclude(”../lib/js/validate.js”);


                                                                                    Добавлено
                                                                                    Проблема: на одной кнопке висит два обработчика один php, а второй javascript
                                                                                    Событие Javascript срабатывает, но до события php никода не доходим
                                                                                    Решение:
                                                                                    в конец обработчика javascript добавить return true;

                                                                                    неправильно:
                                                                                    ExpandedWrap disabled
                                                                                      function Button2Click($sender, $params)
                                                                                      {
                                                                                      echo “Мы никогда сюда не попадаем.”;
                                                                                      }
                                                                                      function Button2JSClick($sender, $params)
                                                                                      {
                                                                                      ?>
                                                                                      //Add your javascript code here
                                                                                      alert(”Это видим всегда”);
                                                                                      <?php
                                                                                      }


                                                                                    правильно
                                                                                    ExpandedWrap disabled
                                                                                      function Button2Click($sender, $params)
                                                                                      {
                                                                                      echo “И это теперь видим.”;
                                                                                      }
                                                                                      function Button2JSClick($sender, $params)
                                                                                      {
                                                                                      ?>
                                                                                      //Add your javascript code here
                                                                                      alert(”return true;”);
                                                                                      return true;
                                                                                      <?php
                                                                                      }
                                                                                    Сообщение отредактировано: vicis -
                                                                                      Прблема: при переносе на провайдер проект н работает с компонентами ExtJS
                                                                                      Решение: на провайдере обычно нужнот учитывать регистр букв, в отличии от Windows

                                                                                      меняем Ext на ext здесь:
                                                                                      файл vcl/ext/functions.inc.php

                                                                                      было так
                                                                                      ExpandedWrap disabled
                                                                                        <link rel="stylesheet" type="text/css" href="<?php echo VCL_HTTP_PATH; ?>/Ext/library/resources/css/ext-all.css" />
                                                                                        <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/Ext/library/adapter/ext/ext-base.js"></script>
                                                                                        <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/Ext/library/ext-all.js"></script>
                                                                                        <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/Ext/library/examples/examples.js"></script>
                                                                                        <link rel="stylesheet" type="text/css" href="<?php echo VCL_HTTP_PATH; ?>/Ext/library/examples/examples.css" />


                                                                                      стало так
                                                                                      ExpandedWrap disabled
                                                                                        <link rel="stylesheet" type="text/css" href="<?php echo VCL_HTTP_PATH; ?>/ext/library/resources/css/ext-all.css" />
                                                                                        <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/ext/library/adapter/ext/ext-base.js"></script>
                                                                                        <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/ext/library/ext-all.js"></script>
                                                                                        <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/ext/library/examples/examples.js"></script>
                                                                                        <link rel="stylesheet" type="text/css" href="<?php echo VCL_HTTP_PATH; ?>/ext/library/examples/examples.css" />
                                                                                        Проблема: не работает SimpleChart - не показывает график после добавления данных
                                                                                        Решение: после добавления компонента на форму проверить:
                                                                                        порядок подключения модулей

                                                                                        нужно так (закоментированное - это неправильно)
                                                                                        ExpandedWrap disabled
                                                                                          /*
                                                                                          require_once("rpcl/rpcl.inc.php");
                                                                                          use_unit("forms.inc.php");
                                                                                          use_unit("extctrls.inc.php");
                                                                                          use_unit("stdctrls.inc.php");
                                                                                          use_unit("chart.inc.php");  // <= это неправильно
                                                                                          */
                                                                                          require_once("rpcl/rpcl.inc.php");
                                                                                          use_unit("chart.inc.php");  // <= это правильно
                                                                                          use_unit("forms.inc.php");
                                                                                          use_unit("extctrls.inc.php");
                                                                                          use_unit("stdctrls.inc.php");
                                                                                          Задача: Динамически создать объекты на форме и прописать им события
                                                                                          Решение: вариант на примере динамического создания 10 чекбоксов с событием на JS
                                                                                          Примечание: проверено в RadPHP XE, версия rpcl=289
                                                                                          На 2-й версии не сработало, но думаю что если обновить vcl до rpcl должно работать (во накрутили названий...:) )
                                                                                          ExpandedWrap disabled
                                                                                            <?php
                                                                                            require_once("rpcl/rpcl.inc.php");
                                                                                            //Includes
                                                                                            use_unit("forms.inc.php");
                                                                                            use_unit("extctrls.inc.php");
                                                                                            use_unit("stdctrls.inc.php");
                                                                                             
                                                                                            //Class definition
                                                                                            class Page2 extends Page
                                                                                            {
                                                                                                public $Panel1 = null;
                                                                                                function Page2StartBody($sender, $params)
                                                                                                {
                                                                                                  for($i = 1; $i <= 10; $i++)
                                                                                                  {
                                                                                             
                                                                                                     $xch = new Checkbox($this);
                                                                                                     $xch->Left = 10;
                                                                                                     $xch->Top = $i * 20;
                                                                                                     $xch->Name = 'chb_' . $i;
                                                                                                     $xch->Caption = $xch->Name;
                                                                                                     $xch->setjsOnClick("ChbJSClick($xch->Name)");
                                                                                                     $xch->Parent = $this->Panel1;
                                                                                                    // $xch->show();
                                                                                                  }
                                                                                                }
                                                                                                function Page2BeforeShow($sender, $params)
                                                                                                {
                                                                                                echo"
                                                                                                 <script type=\"text/JavaScript\">
                                                                                                 function ChbJSClick(thisobject)
                                                                                                 {
                                                                                                 alert(thisobject.name+' отмечено: '+thisobject.checked);
                                                                                                 }
                                                                                                 </script>
                                                                                                ";
                                                                                                }
                                                                                             
                                                                                            }
                                                                                             
                                                                                             
                                                                                            global $application;
                                                                                             
                                                                                            global $Page2;
                                                                                             
                                                                                            //Creates the form
                                                                                            $Page2 = new Page2($application);
                                                                                             
                                                                                            //Read from resource file
                                                                                            $Page2->loadResource(__FILE__);
                                                                                             
                                                                                            //Shows the form
                                                                                            $Page2->show();
                                                                                             
                                                                                            ?>
                                                                                            Задача: выполнить хранимую процедуру MySQL и получить результат в DbGrid
                                                                                            Решение: Хранимая процедура не работает (сообщение #2772214)
                                                                                              Задача: выполнить цепочку AJAX процедур, когда одна вызывает выполнение другой
                                                                                              Решение:

                                                                                              Рассмотрим на примере двух DBGrid работающих по принципу Master-Detail
                                                                                              При изменении строки в первом гриде вызываем ajax процедуру на фильтрацию данных во втором гриде.
                                                                                              А после перечитывания и отрисовки данных второго грида автоматически вызываем ajax процедуру для вывода сообщений или выполнения других функций на JS.

                                                                                              На форме:
                                                                                              DBGrid1, DBGrid2, Edit1, AjaxScripter1
                                                                                              Оба грида подключены к одной и той же таблице (через соответствующие компоненты), у которой ключевое поле TEST_ID.
                                                                                              При выборе записи в первой таблице возьмём значение TEST_ID этой записи, пропишем его в Edit1 и отфильтруем по нему DBGrid2 (через компонент Table2, к которому подключен грид).
                                                                                              После этого установим фокус на первую строку во второй таблице и выведем сообщение.

                                                                                              ExpandedWrap disabled
                                                                                                  function DBGrid1JSRowChanged($sender, $params)
                                                                                                      {
                                                                                                      ?>
                                                                                                      params = DBGrid1.getTableModel().getValue(0, DBGrid1.getFocusedRow());
                                                                                                 
                                                                                                      <?php
                                                                                                      echo $this->DBGrid1->ajaxCall("xxx",  array("DBGrid1"));
                                                                                                 
                                                                                                      ?>
                                                                                                 
                                                                                                      <?php
                                                                                                 
                                                                                                      }
                                                                                                 
                                                                                                      function xxx($sender, $params)
                                                                                                      {
                                                                                                      $this->Edit1->Text = $params[0];
                                                                                                      $this->Table2->Filter = "TEST_ID=$params[0]";
                                                                                                      $this->Table2->refresh();
                                                                                                      $this->AjaxScripter1->Script = '
                                                                                                            //DBGrid1.getTableColumnModel().setColumnVisible(0, false);  - здесь мы могли бы установить видимость колонки в гриде или сделать другие установки
                                                                                                            var xx =document.getElementById("Edit1").value;
                                                                                                            DBGrid2.getSelectionModel().setSelectionInterval(0, 0);
                                                                                                            ';
                                                                                                      }
                                                                                                 
                                                                                                 
                                                                                                    function Page10AfterShow($sender, $params)
                                                                                                    {
                                                                                                              echo '
                                                                                                                  <script type="text/JavaScript">
                                                                                                                          DBGrid1.getTableColumnModel().setColumnVisible(0, false);
                                                                                                                          DBGrid2.getTableColumnModel().setColumnVisible(0, false);
                                                                                                                  </script>
                                                                                                                  ';
                                                                                                 
                                                                                                    }
                                                                                                    function DBGrid2JSRowChanged($sender, $params)
                                                                                                      {
                                                                                                      ?>
                                                                                                      params = DBGrid2.getTableModel().getValue(0, DBGrid2.getFocusedRow());
                                                                                                 
                                                                                                      <?php
                                                                                                 
                                                                                                      echo $this->DBGrid1->ajaxCall("yyy",  array("DBGrid2"));
                                                                                                 
                                                                                                      ?>
                                                                                                 
                                                                                                      <?php
                                                                                                 
                                                                                                      }
                                                                                                 
                                                                                                 
                                                                                                 
                                                                                                      function yyy($sender, $params)
                                                                                                      {
                                                                                                      $this->AjaxScripter1->Script = '
                                                                                                            alert(\'Я сработал после обновления грида 2\');
                                                                                                            ';
                                                                                                      }


                                                                                              компонент AjaxScripter не входит в стандартную поставку, но давно описан здесь
                                                                                              Delphi for PHP (RAD PHP XE): Компоненты (сообщение #2410953)

                                                                                              Сообщения были разделены в тему "Пустая вкладка при старте проекта"
                                                                                                Задача: Получить список методов объекта JS
                                                                                                Решение: используем функцию
                                                                                                ExpandedWrap disabled
                                                                                                    function Page1BeforeShow($sender, $params)
                                                                                                     {
                                                                                                  echo '
                                                                                                  <script type="text/javascript">
                                                                                                   
                                                                                                  function fnShowProps(obj, objName){
                                                                                                    var result = "";
                                                                                                    for (var i in obj)
                                                                                                        result += objName + "." + i + " = " + obj[i] + "<br />\n";
                                                                                                    document.write(result);
                                                                                                  }
                                                                                                  </script>
                                                                                                  ';
                                                                                                     }
                                                                                                     function Label1JSClick($sender, $params)
                                                                                                     {
                                                                                                         ?>
                                                                                                         //begin js
                                                                                                         //  fnShowProps(window.location, "location");
                                                                                                         //  fnShowProps(Label1, "Label1");
                                                                                                         fnShowProps(LabeledEdit1, "LabeledEdit1");
                                                                                                   
                                                                                                         //end
                                                                                                         <?php
                                                                                                     }


                                                                                                Сообщения были разделены в тему "пытаюсь разместить пробную страничку на хостинге"
                                                                                                  Проблема: Deployment Wizard не всегда копирует нужные файлы в папку rpcl
                                                                                                  Решение:

                                                                                                  делает это самостоятельно
                                                                                                  1. выполняем Deployment Wizard
                                                                                                  2. создаём файл copy_rpcl.bat
                                                                                                  кидаем его в ту директорию, в которую экспортировали проект
                                                                                                  3. выполняем

                                                                                                  содержимое copy_rpcl.bat
                                                                                                  ExpandedWrap disabled
                                                                                                    @echo off
                                                                                                     
                                                                                                    rem кидаем файл в нужную папку и запускаем, файлы будут скопированы в подпапку этой папки
                                                                                                     
                                                                                                    set folderRPCLsource=C:\Program Files\Embarcadero\RadPHP\3.0\rpcl
                                                                                                     
                                                                                                    rem папка куда копировать (если rpcl, то скопирует в текущую папку, в подпапку rpcl)
                                                                                                    set folderRPCLdest=rpcl
                                                                                                     
                                                                                                    cls;
                                                                                                    echo 1 - копировать всю папку RPCL (не включая svn)
                                                                                                    echo 2 - копировать только необходимый минимум папок RPCL (не включая svn)
                                                                                                    echo 0 - прекратить это безобразие :)
                                                                                                    echo;
                                                                                                     
                                                                                                    set /P variantcopy="Введите вариант копирования: "
                                                                                                     
                                                                                                        if "%variantcopy%" == "1"  goto all  ELSE goto minimum
                                                                                                        if "%variantcopy%" == "0"  goto end1
                                                                                                    :minimum
                                                                                                     
                                                                                                      rem здесь сами себе задаём минимум необходимых папок
                                                                                                     
                                                                                                      mkdir "%folderRPCLdest%"
                                                                                                      xcopy "%folderRPCLsource%" "%folderRPCLdest%\*.php" /Y
                                                                                                     
                                                                                                      mkdir "%folderRPCLdest%\qooxdoo"
                                                                                                      xcopy "%folderRPCLsource%\qooxdoo" "%folderRPCLdest%\qooxdoo" /R/E/K/Y
                                                                                                     
                                                                                                      mkdir "%folderRPCLdest%\adodb"
                                                                                                      xcopy "%folderRPCLsource%\adodb" "%folderRPCLdest%\adodb" /R/E/K/Y
                                                                                                     
                                                                                                      mkdir "%folderRPCLdest%\js"
                                                                                                      xcopy "%folderRPCLsource%\js" "%folderRPCLdest%\js" /R/E/K/Y
                                                                                                     
                                                                                                      mkdir "%folderRPCLdest%\xajax"
                                                                                                      xcopy "%folderRPCLsource%\xajax" "%folderRPCLdest%\xajax" /R/E/K/Y
                                                                                                     
                                                                                                      mkdir "%folderRPCLdest%\language"
                                                                                                      xcopy "%folderRPCLsource%\language" "%folderRPCLdest%\language" /R/E/K/Y
                                                                                                     
                                                                                                      mkdir "%folderRPCLdest%\smarty"
                                                                                                      xcopy "%folderRPCLsource%\smarty" "%folderRPCLdest%\smarty" /R/E/K/Y
                                                                                                     
                                                                                                      echo 'Скопирован необходимый МИНИМУМ';
                                                                                                      goto end;
                                                                                                     
                                                                                                    :all
                                                                                                      mkdir "%folderRPCLdest%"
                                                                                                      xcopy "%folderRPCLsource%" "%folderRPCLdest%" /R/E/K/Y
                                                                                                      echo 'Скопировано ВСЁ';
                                                                                                      goto end;
                                                                                                     
                                                                                                     
                                                                                                    :end
                                                                                                    pause
                                                                                                    :end1


                                                                                                  теперь в папке экспорта находятся нужные файлы для переноса на сервер
                                                                                                    Проблема: QDBGrid1 на QWindow1 не работает, работает когда оба просто на форме
                                                                                                    Решение:

                                                                                                    ExpandedWrap disabled
                                                                                                         function QWindow1BeforeShow($sender, $params)
                                                                                                         {
                                                                                                         $this->QDBGrid1->dumpRPC();
                                                                                                       
                                                                                                         }
                                                                                                      Проблема: В RadPhp XE не получается подключится к MSSQL 2000 с помощью DataExplorer
                                                                                                      Решение: Качаем новый клиент MSSQL отсюда
                                                                                                      http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c6c3e9ef-ba29-4a43-8d69-a2bed18fe73c
                                                                                                      а конкретно этот: http://go.microsoft.com/fwlink/?LinkId=123717&clcid=0x409
                                                                                                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                      0 пользователей:


                                                                                                      Рейтинг@Mail.ru
                                                                                                      [ Script execution time: 0,1420 ]   [ 16 queries used ]   [ Generated: 28.03.24, 15:07 GMT ]