Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Colocar uam Imagem dentro de um Frame usando o Designer Alguém conseguiu colocar uma imagem em um frame usando o Adianti Designer? Esse frame está em uma aba de um objeto tipo TNotebook conforme imagem. Para colocar a imagem em um Form descendente de uma TWindow eu consegui. Quando clico na lupa da grade redireciono para esse Form e mostro a imagem, mas o ideal seria mostrar no Frame da aba. ...
AN
Colocar uam Imagem dentro de um Frame usando o Designer  
Alguém conseguiu colocar uma imagem em um frame usando o Adianti Designer?

Esse frame está em uma aba de um objeto tipo TNotebook conforme imagem.

Para colocar a imagem em um Form descendente de uma TWindow eu consegui.

Quando clico na lupa da grade redireciono para esse Form e mostro a imagem, mas o ideal seria mostrar no Frame da aba.

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (11)


NR

Veja se ajuda:
adianti.com.br/framework_files/tutor/index.php?class=ProductForm&
AN

Olá Nataniel.

Eu vi esse Formulário. Foi através dele que fiz mostrar a imagem numa Twindow.

Embora isso seja aceitável não é a melhor opção. O bom mesmo seria colocar a imagem no frame da aba. Coisa bem corriqueira e tranquilo de se fazer em uma linguagem Desktop. Talvez esse seja um dos preços a se pagar quando se desenvolve em ambiente Web... (acho eu).. Estou vindo do Desktop e a diferença entre ele e Web é bastante sigficativa. É um novo aprendizado pra mim. Tenho um Erp que desenvolvi sobre medida aqui na empresa e que roda desde 2007... Estou migrando ele pra Web... E o adianti tem sido uma mão na roda. Bem sólido no tratamento de dados e desenvolvimento de telas.. Longo caminho a percorrer para migrar tudo.. De qualquer forma obrigado pela atenção.
NR

Armando, o que você precisa é bem parecido com o exemplo do tutor. Modificando um pouco a função onComplete do exemplo para buscar a foto do banco de dados e adicionando um id ao seu frame:
  1. <?php
  2. // construct
  3. $this->frame = new TElement('div');
  4. $this->frame->id 'seuframe';
  5. // datagrid deve chamar essa função, como é static a tela não será recarregada
  6. public static function loadFoto($param)
  7. {
  8.     TTransaction::open('seubanco');
  9.     $foto = new Foto($param['key']);
  10.     TTransaction::close();
  11.     // javascript para exibir a foto no frame
  12.     TScript::create("$('#seuframe').html('')");
  13.     TScript::create("$('#seuframe').append(\"<img style='width:100%' src='tmp/{$foto->foto}'>\");");
  14. }
  15. ?>
AN

Entendi.

Vou fazer aqui e posto o resultado.

Obrigado
AN

Testei aqui e nada aconteceu.

No designer o nome do frame é_photo_frame

Separei o código nas partes pertinentes à questão:

  1. <?php
  2. /**
  3.  * produtoForm Registration
  4.  * @author  <your name here>
  5.  */
  6. class produtoForm extends TPage
  7. {
  8.     private $form;
  9.     private $grade;
  10.     protected $notebook;
  11.     private $frame;
  12.     
  13.     /**
  14.      * Class constructor
  15.      * Creates the page and the registration form
  16.      */
  17.     function __construct()
  18.     {
  19.           
  20.             // frame - imagem do produto 
  21.             $photo_frame $ui->getWidget('photo_frame');          
  22.             $this->frame = new TElement('div');
  23.             $this->frame->id 'photo_frame';
  24.   
  25.             // cria acoes da grade
  26.             $acao1 = new TDataGridAction(array($this'onView'));
  27.             $acao1->setLabel('View');
  28.             $acao1->setImage('fa:search blue');
  29.             $acao1->setField('caminho');
  30.      * method onView()
  31.      * Executed when the user clicks at the view button
  32.      */
  33.     public static function onView($param)
  34.     {   
  35.         $name $param['caminho'];
  36.         TScript::create("$('#frame').html('')");
  37.         TScript::create("$('#frame').append(\"<img style='width:100%' src='tmp/{$name}'>\");");
  38.     }
  39. }
  40.  ?>
</your>
NR

  1. <?php
  2. public static function onView($param)
  3. {
  4.         $name $param['caminho'];
  5.                                 // deve ser o id do frame
  6.         TScript::create("$('#photo_frame').html('')");
  7.         // verificar atributo src, o arquivo realmente está no diretório tmp/ ?
  8.         TScript::create("$('#photo_frame').append("<img style='width:100%' src='tmp/{$name}'>");");
  9. }
  10. ?>

AN

É... Esse negócio aqui bate mais que mãe em menino desobediente.

Não deu certo :-(

FIz a modificação. que voce falou

A imagem está em tmp/ .

Não dá nenhum erro quando se clica na lupa, entretanto a imagem não aparece.
NR

Armando, use o console no Chrome(F12) para analisar o que está acontecendo. Clique com o botão direito do mouse no frame após selecionar uma imagem e veja qual src está carregando.

Em últimos casos poste seu código no pastebin para que possamos analisar.
AN

Nataniel, como o código não é tão grande vou postá-lo aqui.

  1. <?php
  2. /**
  3.  * produtoForm Registration
  4.  * @author  <your name here>
  5.  */
  6. class produtoForm extends TPage
  7. {
  8.     private $form;
  9.     private $grade;
  10.     protected $notebook;
  11.     private $frame;
  12.     
  13.     /**
  14.      * Class constructor
  15.      * Creates the page and the registration form
  16.      */
  17.     function __construct()
  18.     {
  19.         parent::__construct();
  20.         parent::include_js('app/lib/include/application.js');        
  21.         
  22.         // creates the form
  23.         $this->form = new TQuickForm('form_produto');
  24.         $this->form->class 'tform'// change CSS class
  25.         $this->form->style 'display: table;width:80%'// change style
  26.         // define the form title
  27.         $this->form->setFormTitle('Cadastro de Produto');        
  28.         
  29.         try
  30.         {
  31.             // TUIBuilder object
  32.             $ui = new TUIBuilder(500,500);
  33.             $ui->setController($this);
  34.             $ui->setForm($this->form);
  35.             
  36.             // reads the xml form
  37.             $ui->parseFile('app/forms/produtoForm.form.xml');
  38.             // get the interface widgets
  39.             $fields $ui->getWidgets();
  40.             
  41.             /* ----------- inicio para inserir seek manual -------------------------- */
  42.             $almoxarifado $ui->getWidget('almoxarifado');
  43.             $obj1 = new almoxarifadoSeek;
  44.             $action = new TAction(array($obj1'onReload'));
  45.             $almoxarifado->setAction($action);   
  46.             //
  47.             $cod_grupo $ui->getWidget('cod_grupo');
  48.             $obj2 = new grupoprodutoSeek;
  49.             $action = new TAction(array($obj2'onReload'));
  50.             $cod_grupo->setAction($action);   
  51.             //
  52.             $cod_tipo $ui->getWidget('cod_tipo');
  53.             $obj3 = new tgtipoprodSeek;
  54.             $action = new TAction(array($obj3'onReload'));
  55.             $cod_tipo->setAction($action);   
  56.             //
  57.             $centro_resultado $ui->getWidget('centro_resultado');
  58.             $obj4 = new centroreplicadoSeek;
  59.             $action = new TAction(array($obj4'onReload'));
  60.             $centro_resultado->setAction($action);   
  61.             /* ------------- fim do seek manual ------------------------------------- */
  62.             // inicia formatacao de campos             
  63.             $descricao $ui->getWidget('descricao');
  64.             $descricao->style "text-transform: uppercase";
  65.             $fabricante $ui->getWidget('fabricante');
  66.             $fabricante->style "text-transform: uppercase";
  67.             $observacao $ui->getWidget('observacao');
  68.             $observacao->style "text-transform: uppercase";
  69.             $faixa_abc $ui->getWidget('faixa_abc');
  70.             $faixa_abc->style "text-transform: uppercase";
  71.             $faixa_xyz $ui->getWidget('faixa_xyz');
  72.             $faixa_xyz->style "text-transform: uppercase";
  73.     
  74.             $fator_unid $ui->getWidget('fator_unid');
  75.             $fator_unid->setNumericMask(4,',','.',TRUE); 
  76.             $peso_bruto $ui->getWidget('peso_bruto');
  77.             $peso_bruto->setNumericMask(4,',','.',TRUE); 
  78.             $peso_liq $ui->getWidget('peso_liq');
  79.             $peso_liq->setNumericMask(4,',','.',TRUE); 
  80.             $comissao $ui->getWidget('comissao');
  81.             $comissao->setNumericMask(2,',','.',TRUE); 
  82.             $ipi $ui->getWidget('ipi');
  83.             $ipi->setNumericMask(2,',','.',TRUE); 
  84.             $iva $ui->getWidget('iva');
  85.             $iva->setNumericMask(2,',','.',TRUE); 
  86.             $est_minimo $ui->getWidget('est_minimo');
  87.             $est_minimo->setNumericMask(5,',','.',TRUE); 
  88.             $nivel_reposicao $ui->getWidget('nivel_reposicao');
  89.             $nivel_reposicao->setNumericMask(5,',','.',TRUE); 
  90.             $label50 $ui->getWidget('label50');
  91.             $label50->setValue('Centro de Resultado Referenta ao Ano: ' TSession::getValue('gano_resultado'));
  92.             $this->notebook $ui->getWidget('notebook');
  93.             
  94.             // frame - imagem do produto 
  95.             $photo_frame $ui->getWidget('photo_frame');          
  96.             $this->frame = new TElement('div');
  97.             $this->frame->id 'photo_frame';
  98.             // adicionar informacoes da imagem na grade
  99.             $photo_path $ui->getWidget('photo_path');
  100.             $adiciona $ui->getWidget('adiciona');
  101.             $adiciona->setAction(new TAction(array($this'onAdiciona')), 'Adicionar');
  102.             
  103.             // passa dados em definitivo para maiuscula
  104.             $descricao->SetUpperCase();
  105.             $fabricante->SetUpperCase();
  106.             $observacao->SetUpperCase();
  107.             $faixa_abc->SetUpperCase();
  108.             $faixa_xyz->SetUpperCase();
  109.             // cria a grade
  110.             $this->grade $ui->getWidget('grade');            
  111.         
  112.             // cria colunas da grade
  113.             $column_id = new TDataGridColumn('id''Id''right',80);
  114.             $column_cod_id = new TDataGridColumn('cod_id''Cód.Produto''right',80);
  115.             $column_caminho = new TDataGridColumn('caminho''Caminho da Foto''left',420);
  116.             // adiciona colunas da grade
  117.             $this->grade->addColumn($column_id);
  118.             $this->grade->addColumn($column_cod_id);
  119.             $this->grade->addColumn($column_caminho);
  120.             
  121.             // cria acoes da grade
  122.             $acao1 = new TDataGridAction(array($this'onView'));
  123.             $acao1->setLabel('View');
  124.             $acao1->setImage('fa:search blue');
  125.             $acao1->setField('caminho');
  126.         
  127.             $acao2 = new TDataGridAction(array($this'onDelete'));
  128.             $acao2->setLabel('Delete');
  129.             $acao2->setImage('fa:trash red');
  130.             $acao2->setField('id');
  131.             // adiciona acoes a datagrid
  132.             $this->grade->addAction($acao1);
  133.             $this->grade->addAction($acao2);
  134.             $this->grade->setHeight(600);
  135.             $this->grade->makeScrollable();
  136.                         
  137.             // cria modelo da grade
  138.             $this->grade->createModel();
  139.             
  140.             // add the TUIBuilder panel inside the TForm object
  141.             $this->form->add($ui);
  142.             // set form fields from interface fields
  143.             $this->form->setFields($ui->getFields());
  144.         }
  145.         catch (Exception $e)
  146.         {
  147.             new TMessage('error'$e->getMessage());
  148.         }
  149.         
  150.         // add the form to the page
  151.         parent::add($this->form);
  152.     }
  153.      
  154.     /**
  155.      * method onView()
  156.      * Executed when the user clicks at the view button
  157.      */
  158.     public static function onView($param)
  159.     {   
  160.         $name $param['caminho'];
  161.         TScript::create("$('#photo_frame').html('')");
  162.         TScript::create("$('#photo_frame').append(\"<img style='width:100%' src='tmp/{$name}'>\");");
  163.  
  164.     }
  165.     /**
  166.      * method onAdiciona()
  167.      * Executado quando usuario clica no botao adicionar foto
  168.      */
  169.     public static function onAdiciona($param)
  170.     {
  171.         // get the parameter and shows the message
  172.         $name $param['photo_path'];
  173.         try
  174.         {
  175.             if (trim($name) == '')
  176.             {
  177.                new TMessage('Info''Nenhuma Imagem Selecionada');   
  178.             } else
  179.             {
  180.                // procura na tabela se a imagem já consta na base de dados
  181.                // creates a criteria
  182.                $criteria = new TCriteria;
  183.                $criteria->add(new TFilter('empresa','=',TSession::getValue('gempresa'))); 
  184.                $criteria->add(new TFilter('filial','=',TSession::getValue('gfilial'))); 
  185.                $criteria->add(new TFilter('tipo','=','P')); 
  186.                $criteria->add(new TFilter('cod_id','=',$param['cod_id'])); 
  187.                $criteria->add(new TFilter('caminho','=',$name)); 
  188.                TTransaction::open('erpweb'); // open a transaction          
  189.                // creates a repository 
  190.                $repository = new TRepository('fotoequipto');
  191.                $count $repository->count($criteria);
  192.                if ($count 0)
  193.                {
  194.                   new TMessage('error''Imagem Já Cadastrada Para Esse Produto');
  195.                } else
  196.                {
  197.                   // gravar imagem na tabela
  198.                   $registro = new fotoequipto;
  199.                   $registro->empresa TSession::getValue('gempresa');
  200.                   $registro->filial TSession::getValue('gfilial');
  201.                   $registro->cod_id $param['cod_id'];
  202.                   $registro->tipo 'P';
  203.                   $registro->caminho $name;
  204.                   $registro->store();  
  205.                   new TMessage('info''Imagem Gravada No Banco de Dados');   
  206.                   AdiantiCoreApplication::loadPage('produtoForm','onEdit');                                         
  207.                } 
  208.                TTransaction::close(); // close the transaction
  209.                TSession::setValue('laba',2);
  210.             }
  211.         }
  212.         catch (Exception $e// in case of exception
  213.         {
  214.             new TMessage('error'$e->getMessage()); // shows the exception error message
  215.             TTransaction::rollback(); // undo all pending operations
  216.         }
  217.     }
  218.      /**
  219.      * method onDelete()
  220.      * Executed when the user clicks at the delete button
  221.      */
  222.     public static function onNovo($param)
  223.     {
  224.         TSession::setValue('lcodigo','');
  225.         TSession::setValue('laba',0);
  226.         AdiantiCoreApplication::loadPage('produtoForm','onEdit');
  227.     }
  228.     /**
  229.      * Load the datagrid with data
  230.      */
  231.     public static function onReload($param NULL)
  232.     {
  233.           TSession::setValue('laba',0);
  234.           AdiantiCoreApplication::loadPage('produtoList','onReload');
  235.     } 
  236.     /**
  237.      * method OnSave()
  238.      * Executed whenever the user clicks at the save button
  239.      */
  240.     function OnSave()
  241.     {
  242.         try
  243.         {
  244.             // open a transaction with database 'erpweb'
  245.             TTransaction::open('erpweb');
  246.             
  247.             // get the form data into an active record produto
  248.             $object $this->form->getData('produto');
  249.                  
  250.             // form validation
  251.             $this->form->validate();
  252.             
  253.             // ---------------------------------- validacoes complementares
  254.             // ABA DADOS DO PRODUTO
  255.             if (trim($object->unidade) == '')
  256.             {
  257.                TTransaction::rollback();
  258.                throw new Exception('Entrada de Unidade Obrigatória ...');         
  259.             }
  260.             if (trim($object->segunda_unid) == '')
  261.             {
  262.                TTransaction::rollback();
  263.                throw new Exception('Entrada de Segunda Unidade Obrigatória ...');         
  264.             }            
  265.             if (floatval($object->fator_unid) <= 0)
  266.             {
  267.                TTransaction::rollback();
  268.                throw new Exception('Fator de Conversão de Unidades Inválido ...');         
  269.             }
  270.             if (floatval($object->peso_bruto) <= 0)
  271.             {
  272.                TTransaction::rollback();
  273.                throw new Exception('Peso Bruto Inválido ...');         
  274.             }
  275.             if (floatval($object->peso_liq) <= 0)
  276.             {
  277.                TTransaction::rollback();
  278.                throw new Exception('Peso Líquido Inválido ...');         
  279.             }
  280.             if (trim($object->ativo) == '')
  281.             {
  282.                TTransaction::rollback();
  283.                throw new Exception('Entrada de Produto Ativo Obrigatória ...');         
  284.             }
  285.             if (trim($object->estoq_menos) == '')
  286.             {
  287.                TTransaction::rollback();
  288.                throw new Exception('Entrada de Estoque Negativo Obrigatória ...');         
  289.             }
  290.             if (trim($object->indica_venda) == '')
  291.             {
  292.                TTransaction::rollback();
  293.                throw new Exception('Entrada de Produto de Venda Obrigatória ...');         
  294.             }
  295.             if (trim($object->beneficia) == '')
  296.             {
  297.                TTransaction::rollback();
  298.                throw new Exception('Entrada de Fabricação Própria Obrigatória ...');         
  299.             }
  300.             if (trim($object->imposto_zf) == '')
  301.             {
  302.                TTransaction::rollback();
  303.                throw new Exception('Entrada de Desconto Zona Franca Obrigatória ...');         
  304.             }
  305.             if (trim($object->frete_comissao) == '')
  306.             {
  307.                TTransaction::rollback();
  308.                throw new Exception('Entrada de Comissão de Frete Sobre as Vendas Obrigatória ...');         
  309.             }
  310.             if (trim($object->subst_tributaria) == '')
  311.             {
  312.                TTransaction::rollback();
  313.                throw new Exception('Entrada de Incidência de S.T. no Produto Obrigatória ...');         
  314.             }
  315.             if (trim($object->permite_desconto) == '')
  316.             {
  317.                TTransaction::rollback();
  318.                throw new Exception('Entrada de Desconto no Pedido de Venda Obrigatória ...');         
  319.             }
  320.             // ABA ESTOQUE E CUSTOS
  321.             if (intval($object->nota) < or intval($object->nota) > 5)
  322.             {
  323.                TTransaction::rollback();
  324.                throw new Exception('Nota do CQ deve Estar Entre 1 e 5  ...');         
  325.             }
  326.             if (intval($object->peso1) < 1)
  327.             {
  328.                TTransaction::rollback();
  329.                throw new Exception('Peso Mês de Janeiro Deve Ser Maior Que Zero  ...');         
  330.             }
  331.             if (intval($object->peso2) < 1)
  332.             {
  333.                TTransaction::rollback();
  334.                throw new Exception('Peso Mês de Fevereiro Deve Ser Maior Que Zero  ...');         
  335.             }
  336.             if (intval($object->peso3) < 1)
  337.             {
  338.                TTransaction::rollback();
  339.                throw new Exception('Peso Mês de Março Deve Ser Maior Que Zero  ...');         
  340.             }
  341.             if (intval($object->peso4) < 1)
  342.             {
  343.                TTransaction::rollback();
  344.                throw new Exception('Peso Mês de Abril Deve Ser Maior Que Zero  ...');         
  345.             }
  346.             if (intval($object->peso5) < 1)
  347.             {
  348.                TTransaction::rollback();
  349.                throw new Exception('Peso Mês de Maio Deve Ser Maior Que Zero  ...');         
  350.             }
  351.             if (intval($object->peso6) < 1)
  352.             {
  353.                TTransaction::rollback();
  354.                throw new Exception('Peso Mês de Junho Deve Ser Maior Que Zero  ...');         
  355.             }
  356.             if (intval($object->peso7) < 1)
  357.             {
  358.                TTransaction::rollback();
  359.                throw new Exception('Peso Mês de Julho Deve Ser Maior Que Zero  ...');         
  360.             }
  361.             if (intval($object->peso8) < 1)
  362.             {
  363.                TTransaction::rollback();
  364.                throw new Exception('Peso Mês de Agosto Deve Ser Maior Que Zero  ...');         
  365.             }
  366.             if (intval($object->peso9) < 1)
  367.             {
  368.                TTransaction::rollback();
  369.                throw new Exception('Peso Mês de Setembro Deve Ser Maior Que Zero  ...');         
  370.             }
  371.             if (intval($object->peso10) < 1)
  372.             {
  373.                TTransaction::rollback();
  374.                throw new Exception('Peso Mês de Outubro Deve Ser Maior Que Zero  ...');         
  375.             }
  376.             if (intval($object->peso11) < 1)
  377.             {
  378.                TTransaction::rollback();
  379.                throw new Exception('Peso Mês de Novembro Deve Ser Maior Que Zero  ...');         
  380.             }
  381.             if (intval($object->peso12) < 1)
  382.             {
  383.                TTransaction::rollback();
  384.                throw new Exception('Peso Mês de Dezembro Deve Ser Maior Que Zero  ...');         
  385.             }            
  386.             // verifica se faixaabc contem ABouC
  387.             if ($object->faixa_abc <> 'A' and $object->faixa_abc <> 'B' and $object->faixa_abc <> 'C')
  388.             {
  389.                TTransaction::rollback();
  390.                throw new Exception('Valore da Faixa Deve Ser A,B ou C  ...');                     
  391.             }
  392.             // verifica se faixaabc contem ABouC
  393.             if ($object->faixa_xyz <> 'X' and $object->faixa_xyz <> 'Y' and $object->faixa_xyz <> 'Z')
  394.             {
  395.                TTransaction::rollback();
  396.                throw new Exception('Valore da Faixa Deve Ser X,Y ou Z  ...');                     
  397.             }
  398.             if (floatval($object->est_minimo) <= 0)
  399.             {
  400.                TTransaction::rollback();
  401.                throw new Exception('Estoque Mínimo Deve Ser Maior Que Zero ...');         
  402.             }
  403.             if (floatval($object->nivel_reposicao) <= 0)
  404.             {
  405.                TTransaction::rollback();
  406.                throw new Exception('Nível de Reposição Deve Ser Maior Que Zero ...');         
  407.             }
  408.             // atualiza ressuprimento
  409.             $valor intval($object->tpc) + intval($object->tt) + intval($object->taf) + intval($object->trr);
  410.             $object->tempo_reposicao $valor;
  411.             // pega empresa
  412.             $object->empresa TSession::getValue('gempresa');
  413.             $object->filial =  TSession::getValue('gfilial');
  414.     
  415.             $lempresa TSession::getValue('gempresa');
  416.             $lfilial =  TSession::getValue('gfilial');
  417.     
  418.             // pega codigo do produto em parametro
  419.             // carrega ano base do centro de resultado se definido
  420.             $repository = new TRepository('parametro');
  421.             $criteria = new TCriteria;
  422.             $criteria->add(new TFilter('empresa','=',$lempresa)); 
  423.             $criteria->add(new TFilter('filial','=',$lfilial)); 
  424.             $criteria->add(new TFilter('cod_id','=','01'));
  425.             $criteria->add(new TFilter('chave','=','01'));
  426.             
  427.             // carrega ultimo produto cadastrado
  428.             $tabparemtro $repository->load($criteria);
  429.             foreach ($tabparemtro as $row)
  430.             {
  431.                $lid     $row->id;
  432.                $lcod_id intval(trim($row->valor));
  433.             }              
  434.             //incrementa produto
  435.             $lcod_id $lcod_id 1;
  436.             // salva em parametro
  437.             $parametroparametro::find($lid);
  438.             $parametro->store();
  439.                          
  440.             // passa valor para codigo id
  441.             $object->cod_id $lcod_id;
  442.             
  443.             // ---------------------------fim das validacoes complementares                                   
  444.             // stores the object
  445.             $object->store();
  446.             TSession::setValue('laba',0);   
  447.             
  448.             // ***** ------------------------------------------- --------------  carrega grade         
  449.             // creates a repository 
  450.             $repository = new TRepository('fotoequipto');
  451.             // creates a criteria
  452.             $criteria = new TCriteria;
  453.             $criteria->add(new TFilter('empresa','=',TSession::getValue('gempresa'))); 
  454.             $criteria->add(new TFilter('filial','=',TSession::getValue('gfilial'))); 
  455.             $criteria->add(new TFilter('tipo','=','P')); 
  456.             $criteria->add(new TFilter('cod_id','=',$object->cod_id)); 
  457.            
  458.             // default order
  459.             $param['order'] = 'id';
  460.             $param['direction'] = 'asc';
  461.             $criteria->setProperties($param); // order, offset
  462.             //$criteria->setProperty('limit', 100);
  463.             
  464.             // load the objects according to criteria
  465.             $tabela $repository->load($criteria);
  466.                         
  467.             $this->grade->clear();
  468.                 
  469.             if ($tabela)
  470.             {
  471.                 // iterate the collection of active records
  472.                 foreach ($tabela as $row)
  473.                 {
  474.                     $this->grade->addItem($row);
  475.                 }
  476.             }
  477.                                             
  478.             // set the data back to the form
  479.             $this->form->setData($object);
  480.             
  481.             // close the transaction
  482.             TTransaction::close();
  483.             
  484.             // shows the success message
  485.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  486.             // reload the listing
  487.         }
  488.         catch (Exception $e// in case of exception
  489.         {
  490.             // shows the exception error message
  491.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  492.             // undo all pending operations
  493.             TTransaction::rollback();
  494.         }
  495.     }
  496.     /**
  497.      * method OnEdit()
  498.      * Executed whenever the user clicks at the edit button da datagrid
  499.      */
  500.     function OnEdit($param)
  501.     {       
  502.         try
  503.         {   
  504.             if (isset($param['key']) or trim(TSession::getValue('lcodigo')) <> '')
  505.             {
  506.                 if (isset($param['key']))
  507.                 {
  508.                    $key=$param['key'];
  509.                 } else
  510.                 {
  511.                    $key TSession::getValue('lcodigo');
  512.                 }
  513.                 TSession::setValue('lcodigo'$key);
  514.                 // open a transaction with database 'erpweb'
  515.                 TTransaction::open('erpweb');
  516.                 
  517.                 // instantiates object produto
  518.                 $object = new produto($key);
  519.                 // ***** --------------- carrega descricoes seekbutton
  520.                 if (trim($object->centro_resultado) <> '')
  521.                 {
  522.                    $repository = new TRepository('centroreplicado');
  523.                    $criteria = new TCriteria;
  524.                    $criteria->add(new TFilter('empresa','=',TSession::getValue('gempresa'))); 
  525.                    $criteria->add(new TFilter('filial','=',TSession::getValue('gfilial'))); 
  526.                    $criteria->add(new TFilter('cod_id','=',$object->centro_resultado));
  527.                    $criteria->add(new TFilter('ano_base','=',trim(TSession::getValue('gano_resultado')))); 
  528.                    $tabela $repository->load($criteria);
  529.                    foreach ($tabela as $row)
  530.                    {
  531.                       $object->descri_centro     $row->descricao;
  532.                    }   
  533.                 }
  534.                 $repository = new TRepository('almoxarifado');
  535.                 $criteria = new TCriteria;
  536.                 $criteria->add(new TFilter('empresa','=',TSession::getValue('gempresa'))); 
  537.                 $criteria->add(new TFilter('filial','=',TSession::getValue('gfilial'))); 
  538.                 $criteria->add(new TFilter('id','=',$object->almoxarifado));
  539.             
  540.                 $tabela $repository->load($criteria);
  541.                 foreach ($tabela as $row)
  542.                 {
  543.                    $object->descri_almox     $row->descricao;
  544.                 }                   
  545.                 $repository = new TRepository('grupoproduto');
  546.                 $criteria = new TCriteria;
  547.                 $criteria->add(new TFilter('empresa','=',TSession::getValue('gempresa'))); 
  548.                 $criteria->add(new TFilter('filial','=',TSession::getValue('gfilial'))); 
  549.                 $criteria->add(new TFilter('id','=',$object->cod_grupo));
  550.             
  551.                 $tabela $repository->load($criteria);
  552.                 foreach ($tabela as $row)
  553.                 {
  554.                    $object->descri_grupo     $row->descricao;
  555.                 }  
  556.                 $repository = new TRepository('tgtipoprod');
  557.                 $criteria = new TCriteria;
  558.                 $criteria->add(new TFilter('empresa','=',TSession::getValue('gempresa'))); 
  559.                 $criteria->add(new TFilter('filial','=',TSession::getValue('gfilial'))); 
  560.                 $criteria->add(new TFilter('id','=',$object->cod_tipo));
  561.             
  562.                 $tabela $repository->load($criteria);
  563.                 foreach ($tabela as $row)
  564.                 {
  565.                    $object->descri_tipo $row->descricao;
  566.                 }                                 
  567.                 // ***** --------------- fim seekbutton
  568.                 // ***** ------------------------------------------- --------------  carrega grade         
  569.                 // creates a repository 
  570.                 $repository = new TRepository('fotoequipto');
  571.                 // creates a criteria
  572.                 $criteria = new TCriteria;
  573.                 $criteria->add(new TFilter('empresa','=',TSession::getValue('gempresa'))); 
  574.                 $criteria->add(new TFilter('filial','=',TSession::getValue('gfilial'))); 
  575.                 $criteria->add(new TFilter('tipo','=','P')); 
  576.                 $criteria->add(new TFilter('cod_id','=',$object->cod_id)); 
  577.            
  578.                 // default order
  579.                 $param['order'] = 'id';
  580.                 $param['direction'] = 'asc';
  581.                 $criteria->setProperties($param); // order, offset
  582.                 //$criteria->setProperty('limit', 100);
  583.             
  584.                 // load the objects according to criteria
  585.                 $tabela $repository->load($criteria);
  586.                         
  587.                 $this->grade->clear();
  588.                 
  589.                 if ($tabela)
  590.                 {
  591.                     // iterate the collection of active records
  592.                     foreach ($tabela as $row)
  593.                     {
  594.                         $this->grade->addItem($row);
  595.                     }
  596.                 }
  597.                 
  598.                 $this->notebook->setCurrentPage(TSession::getValue('laba'));
  599.                 
  600.                 // fill the form with the active record data
  601.                 $this->form->setData($object);
  602.                 // close the transaction
  603.                 TTransaction::close();
  604.             }
  605.             else
  606.             {
  607.                 $this->form->clear();
  608.                 TSession::setValue('lcodigo''');
  609.                 TSession::setValue('laba',0);
  610.             }
  611.            
  612.         }
  613.         catch (Exception $e// in case of exception
  614.         {
  615.             // shows the exception error message
  616.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  617.             
  618.             // undo all pending operations
  619.             TTransaction::rollback();
  620.         }
  621.     }
  622.   
  623.      /**
  624.      * method onDelete()
  625.      * Executed when the user clicks at the delete button
  626.      */
  627.     public static function onDelete($param)
  628.     {
  629.         try
  630.         {
  631.            $chave=$param['id']; // get the parameter $key
  632.            TTransaction::open('erpweb'); // open a transaction with database
  633.            $object = new fotoequipto($chaveFALSE); // instantiates the Active Record
  634.            $object->delete(); // deletes the object from the database
  635.            TTransaction::close(); // close the transaction 
  636.            TSession::setValue('laba',2);
  637.            new TMessage('info'AdiantiCoreTranslator::translate('Record deleted')); // success message
  638.            AdiantiCoreApplication::loadPage('produtoForm','onEdit');
  639.                        
  640.         }
  641.         catch (Exception $e// in case of exception
  642.         {
  643.             new TMessage('error'$e->getMessage()); // shows the exception error message
  644.             TTransaction::rollback(); // undo all pending operations
  645.         }
  646.     }
  647.    
  648. }
  649. </your>
NR

Armando, você está criando a variável $this->frame sem que ela tenha nenhum vínculo com os componentes adicionados à tela. Faça o seguinte:
  1. <?php
  2. // frame - imagem do produto 
  3. $photo_frame $ui->getWidget('photo_frame');          
  4. //$this->frame = new TElement('div');
  5. //$this->frame->id = 'photo_frame';
  6. $photo_frame->id 'photo_frame';
  7. ?>
AN

Nataniel.

É o seguinte....

Voce é o cara..... ;-) bingo

Carregou certinho.

Muito obrigado pela sua ajuda.

Já tinha procurado por um post com esse tópico no fórum (salvo engano datado de junho de 2016) e lá não colocaram a solução. Por isso postei este.

Valeu muito a sua ajuda.

Obrigado de coração.