trabalhando com variaveis

Discussão em 'Progress 4GL' iniciado por kaneda84, Dezembro 6, 2010.

  1. kaneda84

    kaneda84 Sem Pontuação

    Estou com uma dúvida, tenho uma tela que contém um teclado virtual, suponha que o caso de uma calculadora, mas com mais de um fill-in em tela.

    O que eu queria fazer é o siguinte, quando clicamos em um fill-in o nome do widget ou variável é guardado com um TRIGGER "ON ENTRY" e quando se pressiona os botões da calculadora é atribuído o valor para a variável selecionada.

    exemplo:

    Código:
    DEF VAR c-var1 as character.
    DEF VAR c-var2 as character.
    DEF VAR c-var3 as character.
    DEF VAR c-nome-var as character.
    
    ON ENTRY OF c-var1
    DO:
    
           ASSIGN c-nome-var = STRING(c-var1:name).
    
    END.
    
    ON ENTRY OF c-var2
    DO:
    
           ASSIGN c-nome-var = STRING(c-var2:name).
    
    END.
    
    ON ENTRY OF c-var3
    DO:
    
           ASSIGN c-nome-var = STRING(c-var3:name).
    
    END.
    
    /* e quando você clicar nos botões na calculadora o valor é atribuído ao "FILL-IN" selecionado */
    
    ON CHOOSE OF bt-1
    DO:
    
           ASSIGN (c-nome-var):SCREEN-VALUE IN FRAME {&FRAME-NAME} = "1".
    
    END.
    
    ou seja, eu quero saber é se eu posso usar o valor de uma variável como um nome de variável.

    c-nome-var = "c-var1".

    (valor de c-nome-var):screen-value da pra fazer?????
  2. LeandroSantos

    LeandroSantos Membro Participativo

    faz assim:

    Código:
    DEF VAR c-var1 as character.
    DEF VAR c-var2 as character.
    DEF VAR c-var3 as character.
    DEF VAR c-nome-var as character.
    DEF VAR vhandle as handle.
    
    ON ENTRY OF {&FRAME-NAME} anywhere
    DO:
       if self:type = "fill-in" then
          ASSIGN vhandle = self:handle no-error.
    END.
    
    ON CHOOSE OF bt-1
    DO:
       if valid-hanlde(vhandle) then
          ASSIGN vhandle:SCREEN-VALUE = "1".
       else 
          message "Selecione um fill-in" view-as alert-box.
    END.
    
  3. kaneda84

    kaneda84 Sem Pontuação

    Cara valeu era exatamente o que eu precisava,so não consegui fazer funcionar o trigger "entry" of {&frame-name} anywhere.

    tive que fazer um trigger para cada campo mais ta funcionando
  4. Rodrigo Rossetto

    Rodrigo Rossetto Membro Participativo

    Você pode usar o comando self e o atributo que deseja, no caso:

    Código:
    ON CHOOSE OF bt-1
    DO:
        MESSAGE SELF:LABEL
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
    END.
    
    E assim implementar um procedimento que recebe esse valor o que o coloca em tela.

    []'s
    Rodrigo
  5. kaneda84

    kaneda84 Sem Pontuação

    o uso do handle nao e o problema y sim na hora de atribuir o valor para "handle", no código acima, existe um trigger "on entry of {& frame-name} anywhere", essa parte é que eu não estou entendendo muito bem, eu tive que fazer um trigger para cada evento "entry" para cada elemento, a minha única dúvida agora é como aplicar o "anywhere".
  6. Rodrigo Rossetto

    Rodrigo Rossetto Membro Participativo

    Agora entendi. Tente esses exemplos:

    Código:
    ON ENTRY OF FRAME {&FRAME-NAME} ANYWHERE 
    DO:
       if self:type = "fill-in" then
          ASSIGN vhandle = self:handle no-error.
    END.
    
    /*Em caso do label do botão ser a informação de entrada no FILL-IN, utilize esta trigger*/
    ON CHOOSE OF FRAME {&FRAME-NAME} ANYWHERE 
    DO:
       if self:type = "button" AND VALID-HANDLE(vhandle) then
          ASSIGN vhandle:SCREEN-VALUE = self:LABEL no-error.
       ELSE 
           MESSAGE "Selecione um campo"
               VIEW-AS ALERT-BOX INFO BUTTONS OK.
    END.
    

Compartilhe esta Página