Problemas HANDLE

Discussão em 'Progress 4GL' iniciado por lorenzi, Dezembro 7, 2012.

  1. lorenzi

    lorenzi Membro Participativo

    Olas pessoal estou quase concluindo meu menu dinamico, agora ja nao tem mais o problema de nao carregar as telas, estou usando a seguinte procedure para carregar os programas:
    Eu peguei na net nao sei que é o dono..
    Código:
        DEF INPUT PARAMETER p-program   AS CHAR NO-UNDO.
        DEF VAR hPrograma       AS HANDLE   NO-UNDO.  
        DEF VAR hObject         AS HANDLE   NO-UNDO.
        DEF VAR hObjTemp        AS HANDLE   NO-UNDO.  
        DEF VAR v-programa      AS CHAR.
        v-programa = SUBSTRING(p-program,index(p-program,"/") + 1,LENGTH(p-program)).
        ASSIGN hObject = SESSION:FIRST-PROCEDURE.
        DO WHILE hObject <> ?:
            ASSIGN hObjTemp    = hObject
                   hObject     = hObject:NEXT-SIBLING.
            
            /*name da erro ??? */
            IF hObjTemp:NAME = v-programa THEN
            DO:
                ASSIGN hPrograma = hObjTemp.
                RUN viewObject IN hPrograma NO-ERROR.             
            END.
        END.
        IF NOT VALID-HANDLE(hPrograma) THEN
        DO:
            RUN VALUE(p-program) PERSISTENT SET hObjTemp NO-ERROR.
            RUN initializeObject IN hObjTemp NO-ERROR.
        END.
    O problema é que abre varias vezes a mesma janela pq o seguinte codigo da erro
    Código:
    hObjTemp:NAME
    NAME nao é um atributo queryable para procedure widget(4052) ai o que acontece se eu tiro esta parte do codigo funciona mas ai abre uma nova janela meu progress é 9.1C
  2. LFBuozi

    LFBuozi Membro Participativo

    É gambiarra, mas se você declarar uma variável char para o nome do objeto, aí você consegue usar o no-error da seguinte forma:
    Código:
                DEF VAR v-obj-name AS CHAR.
                ...
                ASSIGN v-obj-name = hObjTemp:NAME NO-ERROR.
                IF v-obj-name = v-programa THEN
                ...
    
  3. lorenzi

    lorenzi Membro Participativo

    Opas valeu pela ajuda o name nao funcionou mas o file name sim, deu melhor que a encomenda menu dinamico funcionando e nao tem mais o problema de a tela abrir uma vez e depois nao abrir mais..
    Código:
        DEF INPUT PARAMETER p-program   AS CHAR NO-UNDO.
        DEF VAR hPrograma       AS HANDLE   NO-UNDO.  
        DEF VAR hObject         AS HANDLE   NO-UNDO.
        DEF VAR hObjTemp        AS HANDLE   NO-UNDO.
        DEF VAR v-obj-name AS CHAR.
        DEF VAR v-programa      AS CHAR.
        v-programa = SUBSTRING(p-program,index(p-program,"/") + 1,LENGTH(p-program)).
        ASSIGN hObject = SESSION:FIRST-PROCEDURE.
        DO WHILE hObject <> ?:
            ASSIGN hObjTemp    = hObject
                   hObject     = hObject:NEXT-SIBLING.
            
    
            ASSIGN v-obj-name = hObjTemp:FILE-NAME NO-ERROR.
             
            IF  v-obj-name = p-program THEN
            DO:
                ASSIGN hPrograma = hObjTemp.
                RUN viewObject IN hPrograma NO-ERROR.             
            END.
        END.
        IF NOT VALID-HANDLE(hPrograma) THEN
        DO:
            RUN VALUE(p-program) PERSISTENT SET hObjTemp NO-ERROR.
            RUN initializeObject IN hObjTemp NO-ERROR.
        END.
    Quem precisar, so pedir.
  4. lorenzi

    lorenzi Membro Participativo

    Pessoal so mais uma coisa:

    Como faco para quando o programa estiver em execucao ele mostrar o programa em execucao, pq qdo clico no menu ele fica atras do menu.
    Código:
     ASSIGN v-obj-name = hObjTemp:FILE-NAME NO-ERROR.
             
            IF  v-obj-name = p-program THEN
            DO:
                ASSIGN hPrograma = hObjTemp.
                RUN viewObject IN hPrograma NO-ERROR. 
               /*trazer programa para frente*/
            END.

Compartilhe esta Página