Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script
Utilizando o TSD Script, você pode criar janelas genéricas, janelas de rolagem virtual e formulários. O sistema de janelas do TSD Script é composto de um número de instruções TSD Script que permitem a criação de uma interface com o usuário personalizada.
Este capítulo:
Janela é uma parte da tela ou desktop que contém seu próprio documento ou sua própria mensagem. Os termos a seguir são utilizados para descrever as partes de uma janela genérica.
WinCreate é utilizado para criar janelas genéricas. Janela genérica é a janela mais simples e flexível fornecida pelo TSD Script. As janelas genéricas também podem conter suas próprias mensagens.
VARIABLES mainWindow: Window; ACTIONS WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'',0);
A explicação a seguir descreve os argumentos do WinCreate utilizados na seção de ações do exemplo anterior:
O sistema de coordenada começa com (1,1) localizado no canto superior esquerdo da tela. Coordenadas X aumentam à direita; coordenadas y aumentam conforme se movem para baixo da tela.
Os dois próximos argumentos são a largura e a altura (respectivamente) da área de exibição da nova janela. Estes estão em unidades de caracteres.
A janela criada no exemplo possui seu canto superior esquerdo no canto superior esquerdo da tela. Possui largura de 100 caracteres e altura de 30 caracteres.
No exemplo a seguir, o último argumento é uma expressão de inteiro onde cada posição de bits representa um sinalizador ativado/desativado. Por exemplo:
WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'', BitOr($WinTitle,$WinBorder,$WinMinMax));
O resultado da função BitOr significa que esta janela foi criada com três itens: uma barra de título, uma moldura e um conjunto de botões minimizados/maximizados no canto superior direito.
Para obter informações mais detalhadas sobre a criação de sinalizadores fornecida pelo TSD Script, consulte TSD 6.0 Developer's Toolkit - Referência de Linguagem do Script.
Você pode criar a janela principal do aplicativo no TSD Script. Em TSD Script, a criação de uma janela envolve as seguinte as etapas:
Nota: Se a rotina de tratamento de eventos executar ações que alterem o tamanho da área de exibição da janela, será gerada uma nova mensagem $MsgSize. A área de exibição de uma janela é a área onde um usuário final trabalha. Os elementos que não estão incluídos na área de exibição são:
Destas quatro etapas, a maioria das janelas estão envolvidas apenas com segunda e a quarta. A mensagem $MsgCreate é importante pois identifica a hora apropriada para a rotina de tratamento de eventos fazer os ajustes finais na janela antes que seja exibida e para inicializar valores nos dados de ocorrência.
Quando a rotina MainEvent retém uma mensagem $MsgCreate, ele executa duas ações:
- Primeiro, cria uma lista de nomes de ícones.
- Depois, utiliza WinSetIconBar para enviar uma mensagem para a janela que está prestes a ser criada e a informa para adicionar estes ícones em sua barra de ferramentas. Por exemplo:
EVENT MainEvent(REF context: ContextRecord) IS VARIABLES iconList: List of String; ACTIONS WHEN $Event IS $MsgCreate THEN iconList:={'ADDINV.ICO','SRCHINV.ICO', 'REPORTS.ICO'): LIST OF STRING; WinSetIconBar($Handle,iconList); ELSWHEN $MsgSelect THEN WHEN $EventParm(1,Integer) IS 1 THEN CreateAddWindow; ELSWHEN 2 THEN CreateSearchWindow; ELSWHEN 3 THEN CreateReportWindow; END; ELSWHEN QUERY_CURRENT_ID THEN $EventParm(1,String):=context.current_ID; END; END (* Main Event *);
Nota:
O sinalizador $WinIconBar na instrução WinCreate do programa principal determina se a nova janela está dimensionada corretamente para que a área de exibição esteja correta quando a barra de ferramentas for adicionada.Esta seção discute como criar um sistema de menu. Imagine que deseja construir um sistema de menu com três menus: Arquivo, Editar e Auxílio. No menu Arquivo há os seguintes comandos:
No menu Editar há os seguintes comandos:
Finalmente, há os seguintes comandos no menu Auxílio:
A estrutura do menu bidimensional é convertida em uma lista dimensional adicionando opções da parte superior para a inferior, da esquerda para a direita.
ListInsert(menuList,'');
ListInsert(menuList,'Save ~As');
WinSetMenuBar($Handle,{'File','New','Open',..., 'General Help''}: LIST OF STRING);
A utilização de '/L-' indica que deve aparecer um separador entre os comandos de menu.
WinSetMenuBar($Handle,{'File','New','Open',..., '/L-', 'General Help'}: LIST OF STRING);
Quando um usuário seleciona um comando de menu, a rotina de tratamento de eventos da janela retém uma mensagem $MsgMenu. O primeiro parâmetro de evento (INTEGER) $MenuSelection contém um inteiro indicando o comando de menu selecionado. Este inteiro é codificado como:
major*100 + minor
Major é o número do comando de menu horizontal selecionado (100 para a extrema esquerda),
e minor é o número do comando de menu vertical selecionado (101 para a parte superior). Dessa forma, se
o usuário escolheu o comando Colar no menu Editar, o primeiro parâmetro de evento sem nome
(inteiro) teria o valor 203 pois Editar é o segundo comando horizontal e Colar
é o terceiro comando vertical. Os números de 1 a 99 representam ferramentas, porque os eventos de ferramentas
também são identificados pelo $MsgMenu.
O TSD Script fornece um número de instruções que alteram a aparência da área de exibição de uma janela genérica. Internamente, as janelas genéricas mantêm o controle de uma posição atual do cursor. É uma posição (x,y) onde determinadas operações de saída (como WinWrite) ocorrem.
A posição de inclusão no sistema de coordenada selecionado atualmente pode ser medido a
partir da posição (1,1), que está no canto superior esquerdo da área de exibição. A posição de
inclusão pode ser medida em:
As posições da coordenada X aumentam para a direita e as posições da coordenada y aumentam para baixo.
As instruções que podem ser utilizadas com as janelas genéricas estão listadas na tabela que segue. Os parâmetros estão listados no Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script.
Instrução | Descrição |
WinGoToXY | Move a posição atual para uma determinada coordenada (x,y). |
WinWrite | Escreve uma cadeia em uma posição atual. |
WinWriteAt | Escreve uma cadeia em uma determinada posição. |
WinWriteLN | Escreve uma cadeia na posição atual e avança o ponteiro da posição para o início da próxima linha. |
WinX | Retorna a coordenada x da saída de texto atual. |
WinY | Retorna a coordenada y da saída de texto atual. |
WinWidth | Retorna a largura da janela em caracteres. |
WinHeight | Retorna a altura da janela em coordenadas. |
WinClear | Limpa a janela inteira da cor do background atual. |
WinClearEOL | Limpa a janela da cor de background atual (começando da posição atual do cursor até o final da linha atual). |
WinClearEOW | Limpa a janela para ficar da cor do background atual (começando à direita da posição atual do cursor até abaixo da posição atual do cursor). |
WinClearRectangle | Limpa uma determinada região retangular da cor de desenho do background atual. |
WinGetXPos | Retorna a posição da coordenada x de um identificador de janela válido. |
WinGetYPos | Retorna a posição da coordenada y de um identificador de janela válido. |
WinSetColor | Define as cores de desenho de primeiro plano e de background para a janela. |
As instruções a seguir são as funções utilizadas para criar janelas.
Instrução | Descrição |
WinSetIconBar | Define o conteúdo da barra de ícones. |
WinSetMenuBar | Define o conteúdo da barra de menus. |
WinCreateClock | Cria uma janela de relógio ou de temporizador dentro da janela genérica. |
WinCreateImage | Cria um visualizador de imagem dentro da janela genérica que exibe um determinado arquivo de imagem. |
WinCreateMouseRect | Cria um "ponto ativo" retangular na janela em uma determinada localização. Cliques no mouse nesta região gera eventos para a rotina de tratamento de eventos da janela genérica. |
O evento $MsgPaint (também mencionado como uma mensagem de reconstrução) indica que alguma parte da janela genérica precisa ser redesenhada.
Se um usuário fecha outra janela ou clica na janela genérica, o gerenciador de janelas precisará reexibir o conteúdo da janela genérica. Ele executa isso enviando a mensagem $MsgPaint. Uma vez que o gerenciador de janelas não lembra o conteúdo de cada janela aberta no desktop, ele espera que cada janela saiba como se reconstruir.
Por exemplo, suponha que:
Se um usuário clicar naquela outra janela, ela vem para o primeiro plano e parte (ou toda) de sua janela genérica é solta atrás dela. Para atualizar a exibição, as próprias janelas devem se reconstruírem.
Uma rotina de tratamento de eventos pode, em qualquer momento, reter uma mensagem $MsgPaint para uma janela que ela serve. Há dois gatilhos básicos que resultam na mensagem de reconstrução:
Nota: Em geral, as janelas genéricas que gravam na parte da janela do cliente
devem proceder dessa forma apenas na parte da rotina de tratamentos de eventos que serve o evento
$MsgPaint.
As janelas genéricas devem ser capazes de manusear mensagens de reconstrução e gerar novamente o conteúdo. O TSD Script fornece uma janela de rolagem virtual que executa o seguinte:
Uma janela de rolagem virtual é completamente virtual. Você pode escrever informações em qualquer lugar em seu espaço bidimensional e utilizar as barras de rolagem (horizontal e vertical) para visualizá-las.
Nota: Uma janela de rolagem virtual não conhece nada a respeito da estrutura de seus dados. É mais fácil de ser utilizada do que uma janela genérica, mas pode ser menos eficiente.
Uma janela de rolagem virtual é criada com a instrução WinCreateScrollWindow. Esta instrução tem os seguintes argumentos:
Nome do Argumento | Descrição |
whdlParent | O identificador para o principal de uma janela criada recentemente. |
whdl | O identificador da janela criada recentemente é retornado neste parâmetro. Se houver um erro, a variável será definida como $Unknown. |
EventHandler | Uma rotina de tratamento de eventos para processar eventos que é gerada pela janela ou caixa de diálogo. Se nenhum processamento de evento for necessário, a palavra-chave $NullHander pode ser utilizada. |
xLoc | A localização X do canto superior esquerdo da janela. As coordenadas X são medidas em células de caracteres. |
yLoc | A localização Y do canto superior esquerdo da janela. As coordenadas Y são medidas em células de caracteres. |
width | A largura (dimensão X) da janela, excluindo a moldura. As coordenadas X são medidas em células de caracteres. |
height | A altura (dimensão Y) da janela, excluindo a moldura, barra de título, barra de menu barra de ícones e barra de status. As coordenadas Y são medidas em células de caracteres. |
title | O título a ser exibido na barra de título da janela. A janela deve ter uma barra de título para um título a ser exibido. Utilize o estilo $WinTitle. |
font | O nome de uma fonte do sistema disponível. |
pointSize | O tamanho do ponto da fonte a ser utilizado dentro da janela de rolagem. |
style | Uma máscara de bit de inteiro que representa uma lista de sinalizadores de estilo utilizados para controlar a aparência da janela. |
As janelas de rolagem virtual são úteis para o registro de informações de "uma linha de cada vez". O exemplo a seguir cria uma janela que serve como um "quadro negro" deslocável. A janela é utilizada para listar os nomes e números de seguro social de todos os empregados na tabela EMPLOYEES. Estes nomes e números são escritos na janela uma linha de cada vez, começando na parte superior da janela.
VARIABLES vWin: Window; i: INTEGER; cursor: SQLCursor; ACTIONS WinCreateScrollWindow($Desktop,vWin,$NullHandler, 1,1, 80,25,'Matches', SystemMonospaced, 10, BitOr($WinDefaultStyle, $WinViscroll, $WinAutoScroll)); i:=SQLSelect(cursor,'SELECT * FROM EMPLOYEES'); WHILE i > 0 DO i:=SQLFetch(cursor,employee); IF i > 0 THEN WinWriteLn(vWin,employee.first_name & ' ' & employee.last_name & ' ' & employee.ssn); END; END; SQLCloseCursor(cursor);
Em virtude de ser utilizado o estilo $WinAutoScroll, as entradas anteriores ultrapassam a parte superior da janela quando botão da janela é alcançado.
Você pode utilizar a barra de rolamento vertical para retornar e ver as entradas anteriores. Quando um usuário conclui a janela, ele poderá fechá-la como menu do sistema ou a mensagem $MsgClose pode ser enviada explicitamente no aplicativo.
As instruções a seguir podem ser utilizadas para alterar a aparência e a função de uma janela de rolagem virtual:
Nome da Instrução | Descrição |
WinGoToXY | Move a posição atual para uma determinada coordenada (x,y) virtual. |
WinWrite | Escreve uma cadeia em uma posição atual. |
WinWriteAt | Escreve uma cadeia em uma determinada posição. |
WinWriteLN | Escreve uma cadeia na posição atual e avança o ponteiro da posição para o início da próxima linha. Se a posição atual estiver na parte inferior da janela e você utilizar o estilo $WinAutoScroll, a janela inteira será deslocada uma linha acima. |
WinX | Retorna a coordenada x da posição de saída de texto atual. |
WinY | Retorna a coordenada y da posição de saída de texto atual. |
WinWidth | Retorna a largura da janela (física) em caracteres. |
WinHeight | Retorna a altura da janela (física) em coordenadas. |
WinClear | Limpa a janela inteira da cor do background atual. |
WinClearEOL | Limpa a janela virtual, a partir da posição do cursor até o fim da linha atual, da cor de background atual. |
WinClearEOW | Limpa a janela para ficar da cor do background atual (começando à direita da posição atual do cursor até abaixo da posição atual do cursor). |
WinClearRectangle | Limpa uma determinada região retangular da cor do background atual. |
WinSetColor | Define as cores de desenho de primeiro plano e de background para a janela. |
WinSetIconBar | Define o conteúdo da barra de ícones. |
WinSetMenuBar | Define o conteúdo da barra de menus. |
WinCreateClock | Cria uma janela de relógio ou de temporizador dentro da janela de rolagem. O relógio automaticamente se desloca para dentro da janela de rolagem. |
WinCreateImage | Cria um visualizador de imagem dentro da janela de rolagem que exibe um determinado arquivo de imagem. Esta imagem automaticamente se desloca para dentro da janela de rolagem. |
WinGetXPos | Retorna a posição da coordenada x de um identificador de janela válido. |
WinGetYPos | Retorna a posição da coordenada y de um identificador de janela válido. |
WinCreateMouseRect | Cria um ponto ativo retangular na janela em uma determinada localização. Cliques no mouse nesta região gera eventos para a rotina de tratamento de eventos da janela de rolagem. |
Da mesma forma que as janelas genéricas, as janelas virtuais mantêm uma posição interna do cursor (x,y). Esta posição do cursor indica onde determinadas operações de saída (como WinWrite) começam. Após uma operação WinWrite, a posição x do cursor é incrementada pelo número de caracteres escritos.
A posição do cursor pode ser encontrada chamando as funções WinX e WinY. A posição do cursor pode ser alterada chamando a função WinGotoXY( ).
Tivoli Service Desk 6.0 Developer's Toolkit Developer's Toolkit - Guia de Programação do Script