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


Страницы: (4) 1 [2] 3 4  все  ( Перейти к последнему сообщению )  
> Delphi for PHP (RAD PHP XE, HTML5 Builder ): FAQ
    Проблема:
    Есть проблема с 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 -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 [2] 3 4  все




                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0536 ]   [ 16 queries used ]   [ Generated: 19.04.24, 17:43 GMT ]