Páginas filhas
  • LGX - LCHOICE

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Pagetitle
LGX - LChoice
LGX - LChoice
(EM CONSTRUÇÃO...)
Componente com duas listas de seleção que permite realizar operações de transferência de itens entre as listas.


Hierarquia



Métodos GET


Métodos acessíveis através da função _ADVPL_get_property que permite recuperar os valores do componente.


Expandir
titleGET LEFT_LABEL_TEXT

Método GET: LEFT_LABEL_TEXT

Retorna o conteúdo to título da lista apresentada do lado esquerdo da tela.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "LEFT_LABEL_TEXT" ) => CHAR

Retorno



TipoDescrição
CHAR

Texto do título da lista apresentada do lado esquerdo.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_label CHAR(100)

LET l_label = _ADVPL_get_property( l_choice_reference ,"LEFT_LABEL_TEXT")



Expandir
titleGET RIGHT_LABEL_TEXT

Método GET: RIGHT_LABEL_TEXT

Retorna o conteúdo to título da lista apresentada do lado direito da tela.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "RIGHT_LABEL_TEXT" ) => CHAR

Retorno



TipoDescrição
CHAR

Texto do título da lista apresentada do lado direito.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_label CHAR(100)

LET l_label = _ADVPL_get_property( l_choice_reference ,"RIGHT_LABEL_TEXT")



Expandir
titleGET LEFT_INDEX_SELECTED

Método GET: LEFT_INDEX_SELECTED

Retorna a ordem do índice selecionado na lista localizada do lado esquerdo da tela.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "LEFT_INDEX_SELECTED" ) => INTEGER

Retorno



TipoDescrição
INTEGER

Índice do item selecionado na lista da esquerda.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_index_selected SMALLINT

LET l_index_selected = _ADVPL_get_property( l_choice_reference ,"LEFT_INDEX_SELECTED")



Expandir
titleGET RIGHT_INDEX_SELECTED

Método GET: RIGHT_INDEX_SELECTED

Retorna a ordem do índice selecionado na lista localizada do lado direito da tela.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "RIGHT_INDEX_SELECTED" ) => INTEGER

Retorno



TipoDescrição
INTEGER

Índice do item selecionado na lista da direita.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_index_selected SMALLINT

LET l_index_selected = _ADVPL_get_property( l_choice_reference ,"RIGHT_INDEX_SELECTED")



Expandir
titleGET LEFT_ITEM_AT

Método GET: LEFT_TEM_AT

Retorna o valor do texto de um determinado item da lista localizada do lado esquerdo.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "LEFT_ITEM_AT", < nIndex > ) => INTEGER

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
INTEGER

Número do índice da lista da esquerda que deseja retornar o conteúdo de texto.

(informação) Quando não for informado o número do índice, irá considerar o índice do item atual selecionado da lista.

Não

Retorno



TipoDescrição
CHAR

Conteúdo do texto registrado para o índice informado da lista da esquerda.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_index_value CHAR(50)

#Retornar o texto do item 2 da lista da esquerda
LET l_index_value = _ADVPL_get_property( l_choice_reference ,"LEFT_ITEM_AT",2)



Expandir
titleGET RIGHT_ITEM_AT

Método GET: RIGHT_TEM_AT

Retorna o valor do texto de um determinado item da lista localizada do lado direito.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "RIGHT_ITEM_AT", < nIndex > ) => INTEGER

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
INTEGER

Número do índice da lista da direita que deseja retornar o conteúdo de texto.

(informação) Quando não for informado o número do índice, irá considerar o índice do item atual selecionado da lista.

Não

Retorno



TipoDescrição
CHAR

Conteúdo do texto registrado para o índice informado da lista da direita.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_index_value CHAR(50)

#Retornar o texto do item 2 da lista da direita
LET l_index_value = _ADVPL_get_property( l_choice_reference ,"RIGHT_ITEM_AT",2)



Expandir
titleGET LEFT_ITEM_COUNT

Método GET: LEFT_TEM_COUNT

Retorna a quantidade total de itens contidos na lista localizada no lado esquerdo.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "LEFT_ITEM_COUNT") => INTEGER


Retorno



TipoDescrição
INTEGER

Quantidade total de itens contidos na lista da esquerda.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_index_count INTEGER

#Retornar o total de itens da lista da esquerda
LET l_index_count = _ADVPL_get_property( l_choice_reference ,"LEFT_ITEM_COUNT")



Expandir
titleGET RIGHT_ITEM_COUNT

Método GET: RIGHT_TEM_COUNT

Retorna a quantidade total de itens contidos na lista localizada no lado direito.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "RIGHT_ITEM_COUNT") => INTEGER


Retorno



TipoDescrição
INTEGER

Quantidade total de itens contidos na lista da direita.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_index_count INTEGER

#Retornar o total de itens da lista da direita
LET l_index_count = _ADVPL_get_property( l_choice_reference,"RIGHT_ITEM_COUNT")



Expandir
titleGET SHOW_MOVE_BUTTONS

Método GET: SHOW_MOVE_BUTTONS

Retorna indicador de exibição dos botões de movimentação de itens entre as duas listas de seleção.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_choice_reference >, "SHOW_MOVE_BUTTONS") => SMALLINT


Retorno



TipoDescrição
SMALLINT

TRUE - Botões de movimentação de itens entre lista estão sendo exibidos.

FALSE - Botões de movimentação de itens entre lista não estão sendo exibidos. 


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE l_show_buttons SMALLINT

#Retornar se os botões de movimentação de itens entre as listas estão disponíveis para uso 
LET l_show_buttons = _ADVPL_get_property( l_choice_reference,"SHOW_MOVE_BUTTONS")




Métodos SET


Métodos acessíveis utilizando a função _ADVPL_set_property que permite alterar e manipular os valores do componente.


Expandir
titleSET LEFT_ADD_ITEM

Método SET: LEFT_ADD_ITEM

Adiciona um item na lista de seleção localizada do lado esquerdo.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference >, "LEFT_ADD_ITEM" , < cDescription > , [ < uValue > ] ) =>

Parâmetros



NomeTipoDescriçãoObrigatório?
cDescription
CHAR

Conteúdo texto a ser exibido para o item na lista de seleção do lado esquerdo

Sim
uValue
QUALQUER
Valor a ser assumido quando este item estiver selecionado. 

(informação) Este valor não é obrigatório, mas é o valor que é atribuído para a variável associada ao componente através da propriedade LEFT_VARIABLE.  Quando não informado assume o mesmo valor definido no parâmetro cDescription.
Não


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Adicionar o item de valor "C" que apresenta o texto na lista como "Cancelado"
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_ADD_ITEM","Cancelado","C")



Expandir
titleSET RIGHT_ADD_ITEM

Método SET: RIGHT_ADD_ITEM

Adiciona um item na lista de seleção localizada do lado direito.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference >, "RIGHT_ADD_ITEM" , < cDescription > , [ < uValue > ] ) =>

Parâmetros



NomeTipoDescriçãoObrigatório?
cDescription
CHAR

Conteúdo texto a ser exibido para o item na lista de seleção do lado esquerdo

Sim
uValue
QUALQUER
Valor a ser assumido quando este item estiver selecionado. 

(informação) Este valor não é obrigatório, mas é o valor que é atribuído para a variável associada ao componente através da propriedade VARIABLE.  Quando não informado assume o mesmo valor definido no parâmetro cDescription.
Não


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Adicionar o item de valor "C" que apresenta o texto na lista como "Cancelado"
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_ADD_ITEM","Cancelado","C")



Expandir
titleSET SHOW_MOVE_BUTTONS

Método SET: SHOW_MOVE_BUTTONS

Permite exibir ou ocultar os botões de movimentação de itens entre as 2 listas de seleção.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference >, "SHOW_MOVE_BUTTONS", <nShow> )


Parâmetros



NomeTipoDescriçãoObrigatório?
nShow
SMALLINT

Indicador para exibir ou ocultar os botões de movimentação de itens entre as duas listas de seleção.

TRUE   - Exibir os botões de movimentação de itens.

FALSE  - Nâo exibir os botões de movimentação de itens.

Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Ocultar os botões de movimentação entre os itens das duas listas de seleção.
CALL _ADVPL_set_property( l_choice_reference,"SHOW_MOVE_BUTTONS", FALSE)



Expandir
titleSET LEFT_CLEAR

Método SET: LEFT_CLEAR 

Remove todos os itens da lista de seleção localizada do lado esquerdo.

Sintaxe



Bloco de código
_ADVPL_set_property(< l_choice_reference >,"LEFT_CLEAR")


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Remove todos itens da lista de seleção do lado esquerdo
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_CLEAR")




Expandir
titleSET RIGHT_CLEAR

Método SET: RIGHT_CLEAR 

Remove todos os itens da lista de seleção localizada do lado direito.


Sintaxe



Bloco de código
_ADVPL_set_property(< l_choice_reference >,"RIGHT_CLEAR")


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Remove todos itens da lista de seleção do lado direito
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_CLEAR")




Expandir
titleSET LEFT_REMOVE_ITEM

Método SET: LEFT_REMOVE_ITEM

Remove um item da lista de seleção localizada do lado esquerdo da tela.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "LEFT_REMOVE_ITEM" , < nIndex > )

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
INTEGERÍndice do item que será removido na lista da esquerda.Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Remove o item 3 da lista de seleção localizada a esquerda
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_REMOVE_ITEM",3)




Expandir
titleSET LEFTRIGHT_REMOVE_ITEM

Método SET: RIGHT_REMOVE_ITEM

Remove um item da lista de seleção localizada do lado direito da tela.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "RIGHT_REMOVE_ITEM" , < nIndex > )

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
INTEGERÍndice do item que será removido na lista da direita.Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Remove o item 3 da lista de seleção localizada a direita
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_REMOVE_ITEM",3)




Expandir
titleSET LEFT_SELECT_ITEM

Método SET: LEFT_SELECT_ITEM 

Seleciona um determinado item da lista de seleção localizada do lado esquerdo, através do índice informado.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "LEFT_SELECT_ITEM" , < nIndex > )

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndexINTEGERÍndice do item da lista de seleção da esquerda que deverá ser selecionado.Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Seleciona o 1o item da lista de seleção da esquerda
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_SELECT_ITEM",1)    




Expandir
titleSET RIGHT_SELECT_ITEM

Método SET: RIGHT_SELECT_ITEM 

Seleciona um determinado item da lista de seleção localizada do lado direito, através do índice informado.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "RIGHT_SELECT_ITEM" , < nIndex > )

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndexINTEGERÍndice do item da lista de seleção da direita que deverá ser selecionado.Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Seleciona o 1o item da lista de seleção da direita
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_SELECT_ITEM",1)    




Expandir
titleSET LEFT_ORDER

Método SET: LEFT_ORDER

Indica a ordenação dos valores na lista de seleção localizada do lado esquerdo.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "LEFT_ORDER" , < cORDER > )

Parâmetros



NomeTipoDescriçãoObrigatório?
cORDERCHAR

Ordenação dos itens na lista da esquerda conforme o conteúdo de texto exibido em cada item.

    ASC - Ordem Ascendente

    DESC - Ordem Descendente

Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Ordenar a lista da esquerda pelo conteúdo apresentado em ordem ascendente
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_ORDER","ASC")  




Expandir
titleSET RIGHT_ORDER

Método SET: RIGHT_ORDER

Indica a ordenação dos valores na lista de seleção localizada do lado direito.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "RIGHT_ORDER" , < cORDER > )

ParâmetrosParâmetros



NomeTipoDescriçãoObrigatório?
cORDERCHAR

Ordenação dos itens na lista da esquerda conforme o conteúdo de texto exibido em cada item.

    ASC - Ordem Ascendente

    DESC - Ordem Descendente

Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Ordenar a lista da esquerda pelo conteúdo apresentado em ordem ascendente
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_ORDER","ASC")  




Expandir
titleSET LEFT_VARIABLE

Método SET: LEFT_VARIABLE

Definir o elemento de uma variável ARRAY OF RECORD 4GL que irá assumir o valor do item selecionado na lista de seleção localizada a esquerda.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "LEFT_VARIABLE" , < record4GL_variable > , < l_element_record4GL_variable > )


Parâmetros

Exemplo


Nome
code
Tipo
language
DescriçãoObrigatório?
record4GL_variableARRAY OF RECORD 4GL

Nome da variável ARRAY OF RECORD 4GL que irá armazenar a lista de valores da lista de seleção localizada do lado esquerdo.

Sim
l_element_record4GL_variableCHAR

Nome do elemento da variável ARRAY OF RECORD 4GL que armazena o valor apresentado  na lista de seleção do lado esquerdo.

Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE ma_list ARRAY[10] OF RECORD
 
ruby
themeConfluence
linenumberstrue
DEFINE ma_list ARRAY[10] OF RECORD
                             item_value CHAR(40)
                            END RECORD

#Definie o nome do record4GL e elemento que irá armazenar o valor do item selecionado na lista de seleção da esquerda
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_VARIABLE", ma_list , "item_value" )




Expandir
titleSET VARIABLE

Método SET: VARIABLE

Definir o elemento de uma variável ARRAY OF RECORD 4GL que irá assumir o valor do item selecionado na lista de seleção localizada a direita.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "VARIABLE" , < record4GL_variable > , < element_record4GL_variable > )
Exemplo

Parâmetros

code


Nome
language
Tipo
ruby
DescriçãoObrigatório?
record4GL_variableARRAY OF RECORD 4GL

Nome da variável ARRAY OF RECORD 4GL que irá armazenar a lista de valores da lista de seleção localizada do lado esquerdo.

Sim
l_element_record4GL_variable
CHAR

Nome do elemento da variável ARRAY OF RECORD 4GL que armazena o valor apresentado  na lista de seleção do lado esquerdo.

Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE ma_list ARRAY[10] OF RECORD
themeConfluence
linenumberstrue
DEFINE ma_list ARRAY[10] OF RECORD
                              item_value CHAR(40)
                            END RECORD

#Definie o nome do record4GL e elemento que irá armazenar o valor do item selecionado na lista de seleção da esquerda
CALL _ADVPL_set_property( l_choice_reference , "VARIABLE" , ma_list , "item_value" )




Expandir
titleSET LEFT_MOVE_EVENT

Método SET: LEFT_MOVE_EVENT

Determina o nome da função 4GL que será acionada quando ocorrer uma movimentação de item selecionado na lista do lado direito para o lado esquerdo. Esta função permitirá ou não concluir a movimentação do item selecionado.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "LEFT_MOVE_EVENT" , < l_4GLfunction_name > )


Parâmetros



NomeTipoDescriçãoObrigatório?
l_4GLfunction_name
CHAR

Nome da função 4GL que será acionada toda vez que ocorrer movimentação de um item da lista da direita pra esquerda.

Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Acionar a função 4GL lchoice_checkCanMoveItemLeft() quando ocorrer o evento de movimentação de um item da lista da direita para a esquerda.
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_MOVE_EVENT", "lchoice_checkCanMoveItemLeft")  




Expandir
titleSET RIGHT_MOVE_EVENT

Método SET: RIGHT_MOVE_EVENT

Determina o nome da função 4GL que será acionada quando ocorrer uma movimentação de item selecionado na lista do lado esquerdo para o lado direito. Esta função permitirá ou não concluir a movimentação do item selecionado.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_choice_reference > , "RIGHT_MOVE_EVENT" , < l_4GLfunction_name > )
Exemplo


Parâmetros

code


Nome
language
Tipo
ruby
DescriçãoObrigatório?
l_4GLfunction_name
CHAR

Nome da função 4GL que será acionada toda vez que ocorrer movimentação de um item da lista da esquerda pra direita.

Sim

Exemplo



Bloco de código
languageruby
themeConfluence
themeConfluence
linenumberstrue
#Acionar a função 4GL lchoice_checkCanMoveItemRight() quando ocorrer o evento de movimentação de um item da lista da esquerda para a direita.
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_MOVE_EVENT", "lchoice_checkCanMoveItemRight")  




Expandir
titleSET REORGANIZE_RECORD

Método SET: REORGANIZE_RECORD

Indicador para reorganizar os dados das variáveis ARRAY OF RECORD definidas para as listas pelos métodos SET VARIABLE ou SET LEFT_VARIABLE todas vez que ocorrer uma movimentação de itens de uma lista para outra.

Sintaxe



Bloco de código
_ADVPL_set_property(< l_choice_reference >,"REORGANIZE_RECORD", < nReorganize > )


Parâmetros



NomeTipoDescriçãoObrigatório?
nReorganize
SMALLINT

Indicador para reorganizar dados das variáveis 4GL que armazenam os valores apresentados nas listas, quando ocorrer movimentação de itens entre as listas. 

   TRUE - Reorganizar automaticamente os dados nas variáveis 4GL com os dados das listas.

   FALSE - Não reorganizar os dados nas variáveis 4GL com os dados das listas.

Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Reorganizar a lista de dados nas variáveis ARRAY OF RECORD indicadas para as listas toda vez que ocorrer movimentação de itens entre as listas
CALL _ADVPL_set_property( l_choice_reference ,"REORGANIZE_RECORD", TRUE)  





Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
DEFINE m_dialog_reference VARCHAR(10)
DEFINE m_choice_reference VARCHAR(10)

DEFINE ma_left, ma_right ARRAY [10] OF RECORD
                         item_value CHAR(30)
                         END RECORD

#------------------------#
 FUNCTION lchoice_test()
#------------------------#
   DEFINE l_layoutmanager_reference VARCHAR(10)
   DEFINE l_statusbar_reference     VARCHAR(10)
   DEFINE l_menubar_reference       VARCHAR(10)
   DEFINE l_confirm_button          VARCHAR(10)
   DEFINE l_panel                   VARCHAR(10)
   DEFINE l_index                   SMALLINT

   CALL fgl_setenv("ADVPL","1")

   #Instancia janela de diálogo
   LET m_dialog_reference = _ADVPL_create_component(NULL,"LDIALOG")
   CALL _ADVPL_set_property(m_dialog_reference,"ENABLE_ESC_CLOSE",FALSE)
   CALL _ADVPL_set_property(m_dialog_reference,"TITLE","Ordem das Divisões")

   #Instancia barra de status/mensagens na janela de diálogo
   LET l_statusbar_reference = _ADVPL_create_component(NULL,"LSTATUSBAR",m_dialog_reference)

   #Instancia componente para renderização de componentes em relação ao posicionamento em tela
   LET l_layoutmanager_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",m_dialog_reference)
   CALL _ADVPL_set_property(l_layoutmanager_reference,"MARGIN",FALSE)
   CALL _ADVPL_set_property(l_layoutmanager_reference,"COLUMNS_COUNT",1)
   CALL _ADVPL_set_property(l_layoutmanager_reference,"MIN_WIDTH",600)
   CALL _ADVPL_set_property(l_layoutmanager_reference,"MIN_HEIGHT",340)

   #Instancia uma barra de menu na janela de diálogo
   LET l_menubar_reference = _ADVPL_create_component(NULL,"LMENUBAR",l_layoutmanager_reference)

   #Adiciona um botão CONFIRMAR na barra de menu
   LET l_confirm_button = _ADVPL_create_component(NULL,"LMENUBUTTON",l_menubar_reference)
   CALL _ADVPL_set_property(l_confirm_button,"IMAGE","CONFIRM_EX")
   CALL _ADVPL_set_property(l_confirm_button,"EVENT","lchoice_exit")

   #Adiciona um painel logo a seguir do menu para que possa incluir o componente LChoice
   LET l_panel = _ADVPL_create_component(NULL,"LPANEL",l_layoutmanager_reference)
   CALL _ADVPL_set_property(l_panel,"ALIGN","CENTER")
   CALL _ADVPL_set_property(l_panel,"SIZE",540,280)

   #Cria o componente LChoice de multipla escolha
   LET m_choice_reference = _ADVPL_create_component(NULL,"LCHOICE",l_panel)

   #Determina que os itens devem sempre ser reorganizados na lista quando forem movimentados
   CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)

   #Dimensiona o componente
   CALL _ADVPL_set_property(m_choice_reference,"SIZE",540,280)
   CALL _ADVPL_set_property(m_choice_reference,"ALIGN","CENTER")

   #Esconde os botões para trocar os itens de posição no choice direito
   CALL _ADVPL_set_property(m_choice_reference,"SHOW_MOVE_BUTTONS",TRUE)

   #Define a descrição (texto) do label esquerdo
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_LABEL_TEXT","Titulo ESQUERDA")

   #Define a descrição (texto) do label direito
   CALL _ADVPL_set_property(m_choice_reference,"RIGHT_LABEL_TEXT","Título DIREITA")

   #Habilita o componente LChoice
   CALL _ADVPL_set_property(m_choice_reference,"ENABLE",TRUE)

   #Determina as funções de controle de movimentação de itens entre as listas para identificar movimentos não permitidos.
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_MOVE_EVENT","lchoice_checkCanMoveLeft")
   CALL _ADVPL_set_property(m_choice_reference,"RIGHT_MOVE_EVENT","lchoice_checkCanMoveRight")

   LET ma_left[01].item_value = 'valor 01'
   LET ma_left[02].item_value = 'valor 02'
   LET ma_left[03].item_value = 'valor 03'
   LET ma_left[04].item_value = 'valor 04'
   LET ma_left[05].item_value = 'valor 05'
   LET ma_left[06].item_value = 'valor 06'
   LET ma_left[07].item_value = 'valor 07'
   LET ma_left[08].item_value = 'valor 08'
   LET ma_left[09].item_value = 'valor 09'
   LET ma_left[10].item_value = 'valor 10'

   #Determinar as variaveis que irão armazenar o conteúdo das listas da direita e esquerda, indicando o total de linhas preenchidas em cada lista.
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_VARIABLE",ma_left,"item_value",10)
   CALL _ADVPL_set_property(m_choice_reference,"VARIABLE",ma_right,"item_value",0)

   #Ativar a janela de diálogo
   CALL _ADVPL_set_property(m_dialog_reference,"ACTIVATE",TRUE)
 END FUNCTION

#---------------------------------------#
 FUNCTION lchoice_checkCanMoveLeft()
#---------------------------------------#
   DEFINE l_idx_selected SMALLINT

   #Identificar o indice atual selecionado na lista da direita
   LET l_idx_selected = _ADVPL_get_property(m_choice_reference, "RIGHT_INDEX_SELECTED")

   IF ma_right[l_idx_selected].item_value = "valor 05" THEN
      CALL LOG_message("Movimentação não permitida.","WARNING","Este item nao pode ser retornado para esquerda.","",0)     
      
      #Cancela a movimentação       
      RETURN FALSE
   END IF

   #Desmarca item selecionado na lista da direita e reorganiza dados
   CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)   
   CALL _ADVPL_set_property(m_choice_reference,"RIGHT_SELECT_ITEM",l_idx_selected)
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_ORDER","ASC")   

   #Autoriza a movimentação 
   RETURN TRUE
 END FUNCTION

#---------------------------------------#
 FUNCTION lchoice_checkCanMoveRight()
#---------------------------------------#
   DEFINE l_idx_selected SMALLINT      
 
   #Identificar o indice atual selecionado na lista da esquerda
   LET l_idx_selected = _ADVPL_get_property(m_choice_reference, "LEFT_INDEX_SELECTED")

   IF ma_right[l_idx_selected].item_value = "valor 03" THEN
      CALL LOG_message("Movimentação não permitida.","WARNING","Este item nao pode ser movido para direita.","",0)
      #Cancela a movimentação
      RETURN FALSE
   END IF

   #Desmarca item selecionado na lista da esquerda e reorganiza dados
   CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)   
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_SELECT_ITEM",l_idx_selected)
   CALL _ADVPL_set_property(m_choice_reference,"RIGHT_ORDER","ASC")   
   
   #Autoriza a movimentação
   RETURN TRUE
 END FUNCTION

#-------------------------#
 FUNCTION lchoice_exit()
#-------------------------#
   #Fecha a janela de diálogo
   CALL _ADVPL_set_property(m_dialog_reference,"ACTIVATE",FALSE)
 END FUNCTION