Colocar stacked canvas dentro de um tab canvas???

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
novoa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 13 Jul 2009 9:20 am
Localização: Esposende
novoa

Boas pessoal,

Estive a pesquisar neste e noutros fóruns se havia sugestões para resolver o meu problema, mas não vi nada de especifico para este caso.

O caso é o seguinte:

Estou a trabalhar com o ORACLE FORMS 10g.

Quero ter um FORM onde tenham três separadoes (TAB CANVAS com 3 páginas) e em cada um dos separadores devem aparecer um STACKED CANVAS diferente.

O problema concreto que me está a acontecer tem a ver com o facto de ao criar um STACKED CANVAS para aparecer apenas no primeiro separador, ele aparece tanto no primeiro como nos outros dois separadores.

Alguém sabe como posso contornar isto.

Cumprimentos
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Veja se essa dica te ajuda:
http://glufke.net/oracle/viewtopic.php?t=1223

Uma outra forma é colocar mostrar o stacked canvas APOS o usuário mudar o tab. (algo do tipo : SHOW_VIEW )
Daí mostra seu stacked, vai parecer que o stacked está dentro do tab.
novoa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 13 Jul 2009 9:20 am
Localização: Esposende
novoa

Caro dr_gori,

Desde já o meu obrigado pela sua colaboração.

Eu já tinha visto a dica do link que me indicou, mas para este caso em particular não serve, porque o objectivo é diferente. Dessa dica percebi que o objectivo era colocar um STACKED CANVAS num TAB CANVAS com apenas um separador.

Acontece que no meu caso, existem 3 separadores e ao criar um STACKED CANVAS ele fica disponivel automaticamente nos 3 separadores, quando o que eu quero é que apenas apareça no primeiro separador.

Se não se importar ser mais especifico na segunda forma que me indicou agradecia.

Será que a solução está nas propriedades de algum CANVAS entretanto criado ou será apenas solucionado com recurso a instruções de código???

Possivelmente isto pode-se resolver através de instruções num trigger, mas não faço ideia por onde começar. Se me puder ajudar, agradecia imenso.

Não sei me estou a explicar convenientemente. Nesse caso poderei tentar explicar ainda mais detalhadamente o que pretendo.

Cumprimentos
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

A outra sugestão é a seguinte:
* Crie seu tab-canvas
* Crie uma trigger WHEN-TAB-PAGE-CHANGED
Nessa trigger, você verifica qual TAB foi clicada. (usando GET_CANVAS_PROPERTY('nome_do_canvas', topmost_tab_page);
* Depois de saber qual tab o usuário clicou, você coloca um IF. Se o usuário clicou no tab1, faz um SHOW_VIEW e mostra o stacked_canvas1. Se clicou no tab2, mostra o stacked_canvas2...

Assim você pode "simular" que seu tab-page possui stacked canvas nele. (mas é tudo controlado manualmente).
novoa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 13 Jul 2009 9:20 am
Localização: Esposende
novoa

Mais uma vez obrigado dr_gori!

Então é assim:
- Eu tenho um CONTENT CANVAS que se chama CONTENT_CANVAS;
- Dentro desse CONTENT CANVAS existe o TAB CANVAS que se chama precisamente TAB_CANVAS;
- Esse TAB CANVAS tem 3 abas;
- A 1ª aba chama-se ABA_1, a 2ª ABA_2 e a 3ª ABA_3;
- Existem os 3 STACKED CANVAS, que se chamam, respectivamente, STK_CANVAS_PAGE1, STK_CANVAS_PAGE2, STK_CANVAS_PAGE3

A ideia é a seguinte:
Tenho três blocos (BLOCO1, BLOCO2 e BLOCO3). Uma parte dos campos do BLOCO1 devem aparecer na ABA_1 e os outros na STK_CANVAS_PAGE1, que corresponde à STACKED CANVAS que deve aparecer somente na ABA_1, acontecendo o mesmo para os outros 2 blocos.

Penso que o que me indicou foi criar um trigger geral a todo o FORM, chamado WHEN-TAB-PAGE-CHANGED e lá colocar código, certo?
Acho que é pedir muito mas poderia-me redigir esse código, ou então dar-me um empurrão para perceber melhor o que é para fazer e como fazer??

Cumprimentos
novoa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 13 Jul 2009 9:20 am
Localização: Esposende
novoa

Eu tentei fazer por mim próprio mas estou a enfrentar algumas dificuldades.

1- Criei um trigger WHEN-TAB-PAGE-CHANGED na seccção dos triggers gerais a todo o FORM.

2- Lá dentro coloquei o seguinte código que não está a fazer nada daquilo que eu quero:

Selecionar tudo

DECLARE
  tp_nm   VARCHAR2(30);
  tp_id   TAB_PAGE;
  tp_lb   VARCHAR2(30);

BEGIN
  tp_nm := GET_CANVAS_PROPERTY('TAB_CANVAS', topmost_tab_page);
  tp_id := FIND_TAB_PAGE(tp_nm);
  tp_lb := GET_TAB_PAGE_PROPERTY(tp_id, label);

	
 IF tp_lb = 'ABA_1' THEN
    SHOW_VIEW ('STK_CANVAS_PAGE1');
  ELSIF tp_lb = 'ABA_2' THEN
    SHOW_VIEW ('STK_CANVAS_PAGE2');
    ELSIF tp_lb = 'ABA_3' THEN
    SHOW_VIEW ('STK_CANVAS_PAGE3');
  ELSE null;
  END IF;
END;
Alguém me ajuda a resolver isto de acordo com o enunciado que já coloquei aqui??

Agradecia imenso
Responder
  • Informação