Forum.pcsoft.fr/pt-BR/pcsoft.br.windev/1242-trabalhando-com-internal-procedure/read.awp

rezados,
Trabalhando com Internal Procedure, agiliza o desenvolvimento e evita codigos repetitivos, agilizando o desenvolvimento.
Vejamos o exemplo:

Só digitar normal e d
Várias
características requerem um procedimento de chamada uma vez ou várias
vezes através de uma função WLanguage (também chamado de "retorno de
chamada"). por exemplo, este é o caso para as seguintes funções:
fListFile , TreeListItem , AlbumPicker em iOS, ...
Um procedimento deve ser criado para essas funções, mas vários inconvenientes aparecer:
Perda da localidade código: o algoritmo final não pode ser
totalmente exibida. Várias partes traseiras e forths deve ser realizada
entre o código de chamada eo procedimento WLanguage.
Dificuldade
para compartilhar informações wiht o procedimento WLanguage: Na maioria
dos casos, as variáveis globais deve ser utilizado (para passar
parâmetros para a chamada de retorno ou para recuperar os resultados).
Neste
caso, os procedimentos internos são usados para simplificar a escrita
de características de retorno de chamada e para corrigir os problemas
causados pelo uso de um procedimento padrão.
Declarando e chamando os procedimentos internos
Um
procedimento interno é declarado no código de um processo existente
(processo associado a um controle, procedimento janela, processo global
ou método de classe, ...).
A sintaxe é a seguinte:
PROCESSO INTERNO <Nome do Procedimento> ()
<Código DO processo>
FIM
notas:
Os procedimentos internos devem ser declarados no processo em que eles são usados.
O código do processo encontrados antes e depois do código de
declaração do procedimento interno é executado em sequência: o código do
procedimento interno não é executado.
Exemplo:
INTERNO PROCEDIMENTO MyInternalProcedure ()
END
Um procedimento interno pode ser diretamente chamado pelo seu nome,
como qualquer procedimento padrão. Esta chamada pode ser colocada antes
ou depois da declaração do procedimento interno.
Exemplo:
MyInternalProcedure ()
INTERNO PROCEDIMENTO MyInternalProcedure ()
END
MyInternalProcedure ()
Isto permite-lhe obter um código que é fácil de ler.
As exceções disparadas pelos procedimentos internos podem ser processados fora do procedimento interno.
Exemplo
O código a seguir é usado para listar todos os elementos filho de um nó encontrado em um controle TreeView:
Res = TreeListItem ( tree_ RecipeTV , "Recipes " + TAB + " Sobremesas " , ExpandAll )
INTERNO PROCEDIMENTO ExpandAll ( tree_ RecipeTV , ChildPath , ChildFound , Nível , Pointer )
IF TreeTypeItem ( tree_ RecipeTV , ChildPath + ChildFound ) = tvLeaf ENTÃO
RETURN
MAIS
IF TreeStatus ( tree_ RecipeTV , ChildPath + ChildFound ) = tvCollapse ENTÃO
TreeExpand ( tree_ RecipeTV , ChildPath + ChildFound )
END
END
TreeCollapse ( tree_ RecipeTV , " receita " )
END
Características dos procedimentos internos
Usar em callback
O
procedimento interno pode ser usado em uma série de funções WLanguage
que espera um procedimento WLanguage no parâmetro (como fListFile ,
TreeListItem , ...).
Atenção: Neste caso, o parâmetro
correspondente ao nome do procedimento interno deve corresponder
diretamente para o nome do procedimento interno (o nome do procedimento
não deve ser colocado entre aspas).
Não para o fazer :
Res = TreeListItem ( tree_ RecipeTV , "Receitas" + TAB + "Sobremesas" , "ExpandAll" )
INTERNO PROCEDIMENTO ExpandAll ( tree_ RecipeTV , ChildPath , ChildFound , Nível , Pointer )
...
END
DO:
Res = TreeListItem ( tree_ RecipeTV , "Receitas" + TAB + "sobremesas" , ExpandAll )
INTERNO PROCEDIMENTO ExpandAll ( tree_ RecipeTV , ChildPath , ChildFound , Nível , Pointer )
...
END
Parâmetro de procedimento interno
O
procedimento interno pode ser utilizada como parâmetro em um
procedimento. Neste caso, o tipo de parâmetro será "Procedimento".
Exemplo:
procedimento interno MyInternalProcedure ()
END
MyOtherProcedure ( MyInternalProcedure )
PROCESSO MyOtherProcedure ( p é Procedimento )
P ()
Acesso às variáveis de um procedimento interno
As
variáveis declaradas no mesmo processo que a declaração do
procedimento interno pode ser chamado no procedimento interno. Não há
necessidade de usar variáveis globais mais.
Exemplo:
s ElementList is string
s Separator is string = CR
TreeListItem ( TREE_ TreeeViewControl , "" , MyInternalProcedure )
INTERNAL PROCEDIMENTO MyInternalProcedure ( TreeViewName , Filial )
sElementList + = [ sSeparator ] + ramo
END
Procedimentos internos de nidificação
Os
procedimentos internos podem ser aninhados. Cada procedimento interno
pode acessar as variáveis dos procedimentos que o incluem.
Exemplo:
ExternalVariable é int
Traço ( ExternalVariable )
MyInternalProcedure1 ()
INTERNO Procedure MyInternalProcedure1 ()
InternalVariable1 is int
Trace ( ExternalVariable + InternalVariable1 )
MyInternalProcedure2 ()
INTERNAL Procedure MyInternalProcedure2 ()
InternalVariable2 is int
Trace ( ExternalVariable + InternalVariable1 + InternalVariable2 )
END
END
Caso especial: Usando procedimentos internos com funções assíncronas
Os procedimentos internos podem ser utilizados como "chamada de retorno" para funções assíncronas.
ATENÇÃO:
Neste caso, o código encontrado após a chamada para a função que está
usando um procedimento WLanguage assíncrona será executado antes do
código do procedimento interno.
Exemplo: Neste exemplo para o
Windows Mobile, o código encontrado após AlbumPicker será executado
antes do procedimento interno. O procedimento interno será chamado
quando o seletor é validado pelo usuário.
AlbumPicker ( albumImage , PhotoSelection )
INTERNO PROCEDIMENTO PhotoSelection ( s ImagePath )
IMG_ ImageControl = s ImagePath
END
Limitações
Um procedimento interno não pode ser nomeado como os procedimentos que o contenham.
Dois procedimentos internos de mesmo nível não pode ter o mesmo
nome, mesmo se elas são declaradas em diferentes blocos de código (SE
ENTÃO MAIS, ...).
Um processo ou a um procedimento interno só
pode chamar os seus procedimentos internos diretos. Em particular, um
procedimento interno não pode chamar um procedimento interno do mesmo
nível.
Os procedimentos internos não estão disponíveis na compilação dinâmica.
A execução de um procedimento interno não pode ser automatizado.
A gestão automática de erros não está disponível para os procedimentos internos.
Bons estudos!

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/