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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_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_listboxchoice_reference ,"RIGHT_ITEM_COUNT")
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 ADD_ITEMGET SHOW_MOVE_BUTTONS

Método

SET

GET:

ADD

SHOW_MOVE_

ITEM

BUTTONS

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

Adiciona um item na lista de seleção.

Sintaxe



Bloco de código
_ADVPL_get_property( < l_listboxchoice_reference >, "ADDSHOW_MOVE_ITEM",< uValue >, < cDescription > BUTTONS") => SMALLINT
Parâmetros


Retorno



Nome
TipoDescrição
Obrigatório?
cDescription
CHAR

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

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.
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. 

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_setDEFINE 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_listboxchoice_reference ,"ADD_ITEM","Cancelado","CSHOW_MOVE_BUTTONS")
Expandirtitle




Métodos SET

CLEAR

Método SET: CLEAR 

Remove todos os itens da lista de seleção.

Sintaxe


Bloco de código

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
(< l_listbox_reference >,"CLEAR")

Exemplo

Bloco de código
languageruby
themeConfluence
linenumberstrue
#Remove todos itens da lista de seleção
CALL _ADVPL_set_property( < l_listboxchoice_reference >,"CLEAR")
Expandir
titleSET REMOVE_ITEM

Método SET: REMOVE_ITEM

Remove um item da lista de seleção.

Sintaxe

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

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
cDescription
INTEGERÍndice do item que será removido.
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
Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Remove#Adicionar o item 3de da lista de seleçãovalor "C" que apresenta o texto na lista como "Cancelado"
CALL _ADVPL_set_property( l_listboxchoice_reference ,"REMOVELEFT_ADD_ITEM","Cancelado",3"C")



Expandir
titleSET SELECTRIGHT_ADD_ITEM

Método SET:

SELECT

RIGHT_ADD_

ITEM 

ITEM

Seleciona Adiciona um determinado item da na lista de seleção através localizada do índice informadolado direito.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_listboxchoice_reference >, "SELECTRIGHT_ADD_ITEM" , < cDescription > , [ < nIndexuValue > )] ) =>

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
cDescription
INTEGERÍndice do item da lista de seleção que deverá ser selecionado.
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
Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Seleciona#Adicionar o 1o item daitem de valor "C" que apresenta o texto na lista decomo seleção"Cancelado"
CALL _ADVPL_set_property( l_listboxchoice_reference ,"SELECTRIGHT_ADD_ITEM","Cancelado",1)    "C")



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

    ASC - Ordem Ascendente

Expandir
titleSET ORDERSHOW_MOVE_BUTTONS

Método SET:

ORDER

SHOW_MOVE_BUTTONS

Permite exibir ou ocultar os botões de movimentação de itens entre as 2 listas Indica a ordenação dos valores na lista de seleção.

Sintaxe



Bloco de código
_ADVPL_set_property( < l_listboxchoice_reference >, "ORDERSHOW_MOVE_BUTTONS", <<nShow> cORDER > )


Parâmetros





NomeTipoDescriçãoObrigatório?
cORDER
nShow
CHAR
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.

    DESC - Ordem Descendente

Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Ordenar#Ocultar aos listabotões pelode conteúdo apresentado em ordem ascendentemovimentação entre os itens das duas listas de seleção.
CALL _ADVPL_set_property( l_listboxchoice_reference ,"ORDERSHOW_MOVE_BUTTONS","ASC")   FALSE)



Expandir
titleSET ITEMLEFT_MOVE_UPCLEAR

Método SET:

ITEM

LEFT_

MOVE_UP

CLEAR 

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

Mover um determinado item da lista uma posição acima da atual.

Sintaxe



Bloco de código
_ADVPL_set_property(< l_listboxchoice_reference >,"ITEMLEFT_MOVE_UP", < nIndex > )

Parâmetros

NomeTipoDescriçãoObrigatório?
nIndexINTEGER

Posição do item na lista a ser reposicionado uma posição para cima.

Sim
CLEAR")


Exemplo



Exemplo

Bloco de código
languageruby
themeConfluence
linenumberstrue
#Mover#Remove otodos itemitens 2 da lista uma posição acimade seleção do lado esquerdo
CALL _ADVPL_set_property( l_listboxchoice_reference ,"ITEMLEFT_MOVE_UPCLEAR",2)  




Expandir
titleSET ITEMRIGHT_MOVE_DOWNCLEAR

Método SET:

ITEM

RIGHT_

MOVE_DOWN

CLEAR 

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

Mover um determinado item da lista uma posição abaixo da atual.

Sintaxe



Bloco de código
_ADVPL_set_property(< l_listboxchoice_reference >,"ITEMRIGHT_MOVE_DOWN", < nIndex > )

Parâmetros

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 LEFT_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â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 > , < element_record4GL_variable > )

Exemplo



Bloco de código
languageruby
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" )




Exemplo

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



Bloco de código
languageruby
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
NomeTipoDescriçãoObrigatório?
nIndexINTEGER

Posição do item na lista a ser reposicionado uma posição para baixo.

Sim
Bloco de código
languageruby
themeConfluence
linenumberstrue
#Mover o item 1 da lista uma posição abaixo
CALL _ADVPL_set_property( l_listboxchoice_reference ,"VARIABLE"ITEM_MOVE_DOWN",1)  , ma_list , "item_value" )




Expandir
titleSET GOLEFT_MOVE_TOPEVENT

Método SET:

GO_TOP

 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 selecionadoPosicionar no primeiro item da lista.

Sintaxe



Bloco de código
_ADVPL_set_property(< l_listboxchoice_reference >,"GOLEFT_MOVE_TOPEVENT")


Exemplo



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




Expandir
titleSET GORIGHT_MOVE_BOTTOMEVENT

Método SET:

 GO_BOTTOM

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 selecionadoPosicionar no último item da lista.

Sintaxe



Bloco de código
_ADVPL_set_property(< l_listboxchoice_reference >,"GORIGHT_MOVE_BOTTOMEVENT")


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
#Posicionar o cursor no último#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_listboxchoice_reference ,"RIGHT_MOVE_EVENT", "GOlchoice_BOTTOMcheckCanMoveItemRight")  





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 listboxchoice 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