Tivoli Service Desk 6.0 Developer's Toolkit - Referência da Linguagem de Script
Define a fonte para as próximas operações de gravação em uma janela padrão.
FUNCTION WinSetFont(VAL whdl: WINDOW, VAL fontName: STRING, VAL pointSize: INTEGER, VAL faceStyle: INTEGER): INTEGER;
Nome do Argumento | Descrição |
whdl | O tratamento da janela onde a fonte deve ser definida. Ela deve ser uma janela padrão criada por WinCreate. |
fontName | O nome da fonte a ser definida, como visto pelo sistema operacional. Para obter uma lista de fontes padrão do sistema, consulte as Notas desta instrução. |
pointSize | O tamanho da fonte em pontos. Os tamanhos do ponto das fontes de rastreio padrão são: 8, 10, 12, 14, 18 e 24. Nem todas as fontes estão disponíveis em todos os tamanhos. As fontes dimensionáveis podem ter qualquer tamanho do ponto. Existem fontes dimensionáveis disponíveis para todas as fontes padrão, exceto no caso de system proportional e system monospaced. Essas fontes estão disponíveis apenas no tamanho 10. Todas as fontes padrão, exceto system proportional, e system monospaced. Essas fontes estão disponíveis apenas no tamanho 10. |
faceStyle | Um conjunto de sinalizadores que podem ser combinados
para formar um estilo composto. Os valores legais são $FontPlain (padrão), $FontBold, $FontUnderScore e $FontStrikeOut. Nem todas as fontes suportam todos os estilos. Esses estilos são incluídos a uma fonte existente. Algumas fontes são criadas com um estilo como negrito ou itálico. Nesses casos, o estilo está sempre presente. |
As seguintes constantes pré-definidas fornecem acesso às fontes padrão do sistema:
KNOWLEDGEBASE WinFont; ROUTINES PROCEDURE FontExample;
PRIVATE CONSTANTS MENU_LIST IS {'File' ,'Exit', '', 'Font','Courier','Helvetica','System Proportional', 'System Monospaced','Times Roman','Symbol Set','' }: LIST OF STRING;
ROUTINES
EVENT MainEvent(REF fontName: STRING) IS ROUTINES PROCEDURE PaintFont(VAL whdl: WINDOW, VAL fontName: STRING) IS
ACTIONS WinSetFont(whdl,'System Proportional',10, $FontPlain); WinClear(whdl); WinSetFont(whdl,fontName,8,$FontPlain); WinWriteAt(whdl,1,1,fontName & ' 8 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,10,$FontPlain); WinWrite(whdl,fontName & ' 10 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,12,$FontPlain); WinWrite(whdl,fontName & ' 12 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,14,$FontPlain); WinWrite(whdl,fontName & ' 14 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,18,$FontPlain); WinWrite(whdl,fontName & ' 18 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,24,$FontPlain); WinWrite(whdl,fontName & ' 24 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,24,$FontBold); WinWrite(whdl,fontName & ' 24 Bold '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,24,$FontItalic); WinWrite(whdl,fontName & ' 24 Italic '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName,24,$FontUnderscore); WinWrite(whdl,fontName & ' 24 Underscore '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName, 24, $FontStrikeOut); WinWrite(whdl,fontName & ' 24 StrikeOut '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,fontName, 48, $FontPlain); WinWrite(whdl,fontName & ' 48 '); WinWriteLn(whdl, 'abcdefghijllmenopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ'); WinSetFont(whdl,'System Proportional',10, $FontPlain); END (* Paint Font *);
PROCEDURE ProcessMenu(VAL whdl: WINDOW, VAL selection: INTEGER) IS ACTIONS WHEN selection IS 101 THEN SendMessage(whdl,$MsgClose); ELSWHEN 201 THEN fontName := $Courier; PaintFont($Handle,fontName); ELSWHEN 202 THEN fontName := $Helvetica; PaintFont($Handle,fontName); ELSWHEN 203 THEN fontName := $SystemProportional; PaintFont($Handle,fontName); ELSWHEN 204 THEN fontName := $SystemMonospaced; PaintFont($Handle,fontName); ELSWHEN 205 THEN fontName := $TimesRoman; PaintFont($Handle,fontName); ELSWHEN 206 THEN fontName := $SymbolSet; PaintFont($Handle,fontName); END; END (* Process Menu *);
ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle,MENU_LIST); ELSWHEN $MsgPaint THEN PaintFont($Handle,fontName); ELSWHEN $MsgMenu THEN ProcessMenu($Handle,$MenuSelection); END; END (* Main Event *);
PROCEDURE FontExample IS VARIABLES whdlMain: WINDOW; ACTIONS WinCreate($Desktop,whdlMain,MainEvent{$TimesRoman}, 0,0,60,20,'Font example', BitOr($WinBorder,$WinTitle, $WinResize,$WinMenu, $WinVScroll,$WinMinMax, $WinTaskList, $WinSysMenu,$WinAutoPos)); WinWait(whdlMain); END (* Font Example *);
Define e exibe ícones de uma barra de ferramentas.
FUNCTION WinSetIconBar(VAL buttonList : LIST of $ToolbarNodeRecord): INTEGER;
Nome do Argumento | Descrição |
whdl | Identificador da janela com estilo $WinIconBar. Esse identificador pode ser uma janela padrão ou uma janela de rolagem. |
iconList | Pode ser uma lista de cadeias ou uma lista de registros do $ToolbarItem. No caso da lista de cadeias, cada cadeia é o nome de um arquivo de imagem e ser exibido na barra de ícones. Utilizando a forma alternativa ($ToolbarNodeRecord), é possível especificar atributos adicionais, como o ID do menu associado a um determinado botão da barra de ferramentas, além de um "tool tip" para o botão da barra de ferramentas. |
A barra de ferramentas é um controle semelhante a uma barra de menus. A barra de ferramentas aparece abaixo da barra de título e da barra de menus de uma janela. Ela consiste em uma linha de ícones que podem ser selecionados com um clique do botão um do mouse.
Não há interface do teclado com a barra de ferramentas ou seus ícones. A seleção de um ícone envia uma mensagem de menu ($MsgMenu) para a rotina de tratamento de eventos da janela. O primeiro parâmetro do evento (inteiro) é o ID do ícone.
Nota: Os ícones são rotulados de 1 a 99 sendo que o ícone mais a esquerda tem o ID 1.
Os ícones devem estar no formato padrão de ícones. Os arquivos devem estar no diretório atual. Caso contrário, o CAMINHO completo de cada arquivo deve ser especificado. Qualquer arquivo não encontrado ou que não esteja no formato correto é enviado. Na realidade, os IDs são atribuídos pela posição na lista de ícones e não pela posição de exibição. Passar uma lista desconhecida faz com que a barra de ferramentas seja limpa e oculta.
Nota: Incluir uma barra de ferramentas em uma janela que não possui uma envia um $MsgSize para a janela com o novo tamanho da área do usuário.
Utilize a lista de formulários da cadeia da seguinte forma:
WHEN $Event IS &MsgCreate THEN WinSetIconBar($Handle, {SEARCH,CO','PRINT.ICO'}: LIST OF STRING); END;
Utilize a lista $ToolbarItem da seguinte forma:
WHEN $Event IS $MsgCreate THEN theList[1].ImageFile:='SEARCH.BMP'; theList[1].ItemID:=204; theList[1].ToolTip:='Search for Text';
theList[2].ImageFile:='PRINT.BMP'; theList[2].ItemID:=106; theList[2].ToolTipText:='Print File';
theList[3].ImageFile:='SAVE.BMP'; theList[3].ItemID:=103; theList[3].ToolTipText:='Save File';
WinSetIconBar($Handle,theList);
END;
Define as seleções na barra de menus de uma janela.
FUNCTION WinSetMenuBar(VAL whdl: WINDOW, VAL menuList: LIST OF STRING): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da janela onde a operação deve ser efetuada. |
menuList | Uma lista de cadeias que especificam um menu a ser
exibido na barra de menus da janela. Consulte as Notas desta instrução para obter informações sobre o formato da lista. |
WinSetMenuBar pode ser usado para definir a barra de menus em uma janela criada com o estilo $WinMenu.
A lista de cadeias passada para WinSetMenuBar especifica a estrutura de menus completa. Tanto os itens de menu horizontais (principal) quanto os verticais (auxiliares) são especificados. Os itens do menu são codificados na lista no formato de cima para baixo, da esquerda para a direita. As cadeias vazias servem como separadores. Por exemplo, se o item do menu na extremidade esquerda for File, e seus itens incluírem New, Save, Save As e Exit, a lista do menu tem a seguinte aparência:
{'File','New','Save','Save ~As','Exit',''}: LIST OF STRING;
A segunda coluna de itens vem em seguida.
Um til (~) pode ser usado para tornar o seletor de um item do menu uma
letra. As opções da tabela a seguir podem ser colocadas no início de um item
da lista de menus para obter os resultados mostrados para cada opção.
Opção | Resultado |
/C | O item do menu está inicialmente marcado. |
/D | O item do menu está inicialmente desativado. |
/S | O item do menu é estático e não pode ser selecionado. |
/L | O item do menu não é exibido. Aparece um separador de linha em seu lugar. |
/H | O menu é mantido aberto quando o item é selecionado. |
// | É exibida uma barra (/). Não são mais processadas opções. |
Incluir uma barra de menus a uma janela que não possui uma envia um $MsgSize para a janela com o novo tamanho da área do usuário.
KNOWLEDGEBASE WinMenu; TYPES MainWinRec IS RECORD width: INTEGER; height: INTEGER; fontName: STRING; mousePointer: STRING; statusBar: STRING; END;
CONSTANTS MENU_LIST IS {'File' , 'E~xit', '', (* 101 *) 'Menu', '~Enable', (* 201 *) '~Disable', (* 202 *) '/L ', (* Put separator line in menu *) '/C/D~Check', (* 204 start check and disabled *) '', (* Mark end of menu sub menu *) 'Help', 'About', (* 301 *) '' (* Mark end of help submenu *) }: LIST OF STRING;
ROUTINES PROCEDURE MenuExample;
PRIVATE ROUTINES
EVENT MainEvent(REF mainWinData: MainWinRec) IS ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle,MENU_LIST); ELSWHEN $MsgPaint THEN WinClear( $Handle ); ELSWHEN $MsgMenu THEN WHEN $MenuSelection IS 101 THEN SendMessage($Handle,$MsgClose); ELSWHEN 201 THEN WinMenuEnableItem($Handle,204,TRUE); ELSWHEN 202 THEN WinMenuEnableItem($Handle,204,FALSE); ELSWHEN 204 THEN IF WinMenuItemIsChecked($Handle,204) THEN WinMenuCheckItem($Handle,204,FALSE); ELSE WinMenuCheckItem($Handle,204,TRUE); END; ELSWHEN 301 THEN WinMessageBox($Handle,'About',$MBOK,'Menu example'); END; END; END (* Main Event *);
PROCEDURE MenuExample IS VARIABLES whdlMain: WINDOW; ACTIONS WinCreate($Desktop,whdlMain,MainEvent,0,0,60,20, 'Menu example', BitOr($WinBorder,$WinTitle, $WinMenu,$WinMinMax, $WinTaskList,$WinAutoPos, $WinSysMenu)); WinWait(whdlMain); END (* Menu Example *);
Define o menu popup para uma janela, substituindo quaisquer menus popup existentes. O menu popup aparece automaticamente com a ação correta do mouse para a plataforma. As opções do menu popup são relatadas por $MsgMenu.
FUNCTION WinSetPopupMenu ( VAL whdl: WINDOW, VAL menuList: LIST OF STRING, ): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador do formulário da caixa de diálogo ou da janela cujo texto do título deve ser alterado |
menuList | Lista de itens do menu popup para a janela |
A lista de cadeias passada para WinSetPopupMenu especifica a estrutura de menus inteira. Tanto os itens de menu horizontais (principal) quanto os verticais (subsidiários) são especificados. Os itens do menu são codificados na lista no formato de cima para baixo, da esquerda para a direita. As cadeias vazias servem como separadores. Por exemplo, se o item do menu na extremidade esquerda for File, e seus itens incluírem New, Save, Save As e Exit, a lista do menu tem a seguinte aparência:
{'File','New','Save','Save ~As','Exit',''}: LIST OF STRING;
A segunda coluna de itens vem em seguida.
Um til (~) pode ser usado para tornar o seletor de um item do menu uma
letra. As opções na tabela a seguir podem ser colocadas no início de uma
opção da lista de menus para obter os resultados mostrados para cada opção.
Opção | Resultado |
/C | O item do menu está inicialmente marcado |
/D | O item do menu está inicialmente desativado |
/S | O item do menu é estático e não pode ser selecionado |
/L | O item do menu não é exibido. Aparece um separador de linha em seu lugar |
/H | O menu é mantido aberto quando o item é selecionado |
// | É exibida uma barra (/). Não são mais processadas opções |
Incluir uma barra de menus a uma janela que não possui uma envia um $MsgSize para a janela com o novo tamanho da área do usuário.
Quando se usa WinLoadPopupMenu, o menu aparece automaticamente com a ação correta do mouse para a plataforma. Quando o usuário seleciona um item do menu, $MsgMenu é enviado para a janela. Essa ação difere da função antiga WinPopup. Em WinPopup, o usuário precisaria capturar a ação correta do mouse e chamar WinPopup para exibir o menu popup. WinPopup retornaria o id do item de menu selecionado.
KNOWLEDGEBASE popup;
ROUTINES
PROCEDURE Main;
(* ***** PRIVATE ***** *)
PRIVATE
VARIABLES (* Global Variable to hold the Window handle of the window *) mainWindow: WINDOW;
ROUTINES
PROCEDURE Main IS
VARIABLES MAIN_MENU {'File', '/CNew', '/DExit' }: LIST OF STRING;
ACTIONS WinCreate($Desktop, mainWindow, $NullHandler, 10, 10, 80, 25, 'WinSetPopupMenu Test', $WinDefaultStyle); (* Set the popup menu. The 'New' menu item is initially checked and *) (* the 'Exit' menu item is initially diabled *) WinSetPopupMenu(mainWindow, MAIN_MENU); WinWait(mainWindow);
END;
WinLoadPopupMenu
Define a posição e tamanho da guia de uma barra de rolagem.
FUNCTION WinSetScrollBar(VAL whdl: WINDOW, VAL scrollBarID, windowSize, dataSize,windowLoc: INTEGER): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da janela onde a operação deve ser executada. |
scrollBarID | Rótulo da barra de rolagem a ser definida. Deve ser $WinVScroll (vertical) ou $WinHScroll (horizontal). Se a barra de rolagem indicada não existir, nenhuma ação é executada. Não são relatados erros. |
windowSize | Tamanho da janela em unidades de dados. As unidades são arbitrárias, relacionadas apenas com os parâmetros dataSize e windowLoc. Esses parâmetros devem ser expressos nas mesmas unidades. |
dataSize | Tamanho dos dados, nas mesmas unidades usadas para especificar o tamanho da janela. |
windowLoc | Localização do lado superior ou esquerdo da janela, expressa nas mesmas unidades que os parâmetros anteriores. |
KNOWLEDGEBASE FileView; CONSTANTS MENU_OPEN IS 101; MENU_EXIT IS 102; MENU_LIST IS {'~File','~Open','e~xit',''}: LIST OF STRING; TYPES EditorData IS RECORD fileName: STRING; yLen : INTEGER; lineCount: INTEGER; pageTop: INTEGER; statusLine: STRING; lines: LIST OF STRING;
END;
ROUTINES PROCEDURE FileView;
PRIVATE ROUTINES
EVENT EditorEvent(REF data: EditorData) IS VARIABLES loc: INTEGER; ROUTINES PROCEDURE ProcessMainMenu(VALUE selection: INTEGER) IS VARIABLES fileName: STRING; editFile: FILE; result: INTEGER; ACTIONS WHEN selection IS MENU_OPEN THEN WinFileDialog($Handle, fileName, '*.KB', 5, 5, 'Select file to edit', 0); result := FOpen(editFile, fileName, $Read); IF result <= 0 THEN WinMessageBox($Handle, 'Error', $MBOK + $MBIconError, 'Can not open file ' & fileName); Exit; END; data.lineCount := FReadText(editFile, data.lines); FClose(editFile); data.pageTop := 0; data.statusLine := ' File: ' & fileName; PostMessage($Handle, $MsgPaint); PostMessage($Handle, $MsgPaintStatus); ELSWHEN MENU_EXIT THEN SendMessage( $Handle, $MsgClose ); END;
END (* Process Main Menu *);
PROCEDURE ProcessChar(VALUE character: INTEGER) IS ACTIONS WHEN character IS $KeyDownArrow THEN IF data.pageTop + data.yLen < data.lineCount THEN data.pageTop := data.pageTop + 1; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyUPArrow THEN IF data.pageTop > 0 THEN data.pageTop := data.pageTop - 1; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyPageDown THEN IF data.pageTop + data.yLen < data.lineCount THEN data.pageTop := data.pageTop + data.yLen; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyPageUp THEN IF data.pageTop > 0 THEN data.pageTop := data.pageTop - data.yLen; IF data.pageTop < 0 THEN data.pageTop := 0; END; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyControlPageDown THEN IF data.pageTop + data.yLen < data.lineCount THEN data.pageTop := data.lineCount - data.yLen; PostMessage($Handle, $MsgPaint); END; ELSWHEN $KeyControlPageUp THEN IF data.pageTop > 0 THEN data.pageTop := 0; PostMessage($Handle, $MsgPaint); END; END; END (* ProcessChar *);
ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle, MENU_LIST); data.lineCount := 0; data.pageTop := 1; data.statusLine := 'File:'; ELSWHEN $MsgSize THEN (* Size Message *) data.yLen := $EventParm(2, INTEGER); WinSetScrollBar($Handle,$WinVScroll,data.lineCount, data.yLen,data.pageTop); ELSWHEN $MsgPaint THEN WinSetScrollBar($Handle,$WinVScroll,data.lineCount, data.yLen,data.pageTop); FOR loc := 1 to data.yLen + 1 DO IF loc + data.pageTop> data.lineCount THEN ExitLoop; END; WinGoToXY($Handle, 1, loc); WinClearEOL($Handle); WinWriteAt($Handle,1,loc,data.lines[ data.pageTop +loc ]); END; WinGoToXY($Handle, 1, loc); WinClearEOW($Handle); ELSWHEN $MsgMenu THEN (* Menu Message *) ProcessMainMenu($MenuSelection); ELSWHEN $MsgChar THEN ProcessChar($EventParm(1, INTEGER)); ELSWHEN $MsgScroll THEN (* Scroll bar *) IF $EventParm(1, INTEGER) =$WinVScroll THEN data.pageTop := $EventParm(2, INTEGER); PostMessage($Handle, $MsgPaint); END; ELSWHEN $MsgPaintStatus THEN (* Status Bar *) WinClear( $Handle ); WinWrite($Handle,data.statusLine); END; END (* Editor Event *);
PROCEDURE FileView IS VARIABLES whdl: WINDOW; ACTIONS WinCreate($Desktop,whdl,EditorEvent,0,0,0,0, 'KML File viewer', BitOr($WinBorder,$WinTitle, $WinResize,$WinSysMenu, $WinMenu,$WinVSCroll, $WinStatus,$WinAutoPos, $WinAutoSize,$WinTaskList)); WinWait(whdl); END (* File View *);
WinCreate
Define o texto na barra de título de um formulário da caixa de diálogo ou de uma janela.
FUNCTION WinSetTitle(VAL whdl: WINDOW, VAL newTitle: STRING): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da caixa de diálogo ou da janela cujo texto do título deve ser alterado. |
newTitle | O novo título do formulário da caixa de diálogo ou da janela. |
Essa função também é implementada como uma mensagem que pode ser passada para um formulário de caixa de diálogo ou uma janela ($MsgSetTitle).
KNOWLEDGEBASE title;
ROUTINES PROCEDURE Main;
PRIVATE
ROUTINES
PROCEDURE Main IS VARIABLES Handle : WINDOW; ACTIONS WinCreate($Desktop, Handle, $NullHandler, 1, 1, 80, 25, 'If you see this it did not work', $WinDefaultStyle); WinSetTitle(Handle, 'It works!'); WinWait(Handle); END;
Ativa ou desativa o ponteiro de espera (ampulheta). O ponteiro de espera afeta todas as janelas do aplicativo.
WinSetWaitPointer ( VAL state : BOOLEAN ) : INTEGER;
Nome do Argumento | Descrição |
state | 'True' exibe o ponteiro de espera, enquanto 'False' restaura o ponteiro anterior. |
WinSetWaitPointer ativa ou desativa o ponteiro de espera, dependendo do estado fornecido. É usado para fornecer a pista visual de que o aplicativo está ocupada ou em processamento.
KNOWLEDGEBASE wait;
ROUTINES
PROCEDURE Main;
(* ***** PRIVATE ***** *)
PRIVATE
VARIABLES (* Global Variable to hold the Window handle of the window *) mainWindow: WINDOW;
ROUTINES
PROCEDURE Main IS
VARIABLES
ACTIONS WinCreateScrollWindow($Desktop, mainWindow, $NullHandler, 10, 10, 80, 25, 'Test Window', $SystemMonoSpaced, 10, $WinDefaultStyle); WinSetWaitPointer(TRUE); (* Set the pointer to be the wait pointer before doing intensive processing *) (* and change it back afterwards *) WinSetWaitPointer(FALSE); WinWait(mainWindow);
END;
Mostra ou oculta uma caixa de diálogo ou uma janela.
FUNCTION WinShowWindow(VAL whdl: WINDOW, VAL state: BOOLEAN): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador do formulário da caixa de diálogo ou da janela cujo estado de visibilidade deve ser alterado |
state | Definido como TRUE se a janela deve ser "exibida", ou como FALSE se deve ser "oculta" |
Usado também como mensagem para uma caixa de diálogo ou janela ($MsgShow).
KNOWLEDGEBASE title;
ROUTINES PROCEDURE Main;
PRIVATE
ROUTINES
PROCEDURE Main IS VARIABLES Handle : WINDOW; ACTIONS WinCreate($Desktop, Handle, $NullHandler, 1, 1, 80, 25, 'If you see this it did not work', $WinDefaultStyle); WinShowWindow(Handle, FALSE); SysDelay(1000); WinShowWindow(HANDLE, TRUE); WinWait(Handle); END;
Pausa a execução enquanto existir uma janela.
FUNCTION WinWait(VAL whdl: WINDOW): INTEGER;
Não use WinWait ao processar uma mensagem $MsgDDEInitiate. $MsgDDEInitiate distribui uma mensagem para os aplicativos e bloqueia a fila de mensagens até que uma resposta seja retornada. Enquanto isso, a instrução WinWait inicia uma rotina de tratamento de eventos que também aguarda uma resposta da fila de mensagens. WinWait impede que os outros aplicativos enviem mensagens para a fila de mensagens. O resultado é um bloqueio e o travamento efetivo da interface com o usuário.
Nome do Argumento | Descrição |
whdl | O identificador da janela onde a operação deve ser executada |
WinWait normalmente é usado no procedimento principal do aplicativo para aguardar até que a janela principal não esteja mais ativa.
VARIABLES whdl: WINDOW; ACTIONS WinCreateScrollWindow($Desktop,whdl,$NullHandler,0,0,0,0, 'Window Title','',0, BitOr($WinBorder,$WinTitle, $WinResize,$WinSysMenu, $WinAutoPos,$WinAutoSize, $WinTaskList)); WinWait(whdl);
Consulta a largura de uma janela.
FUNCTION WinWidth(VAL whdl: WINDOW): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da janela onde a operação deve ser executada |
WinWidth retorna a largura atual da área do cliente da janela indicada, expressa em células de caracteres.
VARIABLES width: INTEGER; ACTIONS width := WinWidth($Handle);
Escreve uma cadeia em uma janela na posição atual.
FUNCTION WinWrite(VAL whdl: WINDOW, VAL outputText: LIST OF STRING): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da janela a ser escrita. O identificador pode fazer referência a uma janela padrão (genérica) ou a uma janela de rolagem. |
outputText | Uma lista de cadeias a ser exibida. Uma única cadeia também é válida. Este comando é executado em cada item da lista. |
WinWrite pode ser usado para gravar informações em uma janela genérica ou de rolagem. Não pode ser usado para gravar informações em uma caixa de diálogo.
Como Encontrar a Localização Atual de Desenho
O TSD Script mantém uma localização atual de desenho para cada janela genérica e de rolagem. O texto escrito por WinWrite aparece nessa localização e a posição x do local do desenho é avançada após a operação de escrita. A posição atual pode ser encontrada chamando as funções WinX e WinY.
Como Utilizar Especificadores de Formato
Os especificadores de formato são na realidade máscaras de bits onde bits diferentes controlam partes diferentes do formato. WinWrite processa uma lista de cadeias, permitindo que você controle a formatação para ser exibida em WinWrite e em outras instruções.
Em geral, qualquer expressão pode ser seguida de dois especificadores de formato:
Esses especificadores de formato são separados da expressão e uns dos outros por colunas. Por exemplo:
VARIABLES s : STRING; i: INTEGER; r: REAL; b: BOOLEAN; (* true false *) d: DATE; (* right, empty pad, usa *) t: TIME; (* right, empty pad, 24 hour military *) ACTIONS s := 'First Bank'; i := 951; r := 14567.89; d := {2,15,1956}: DATE; t := {11,45,0}: TIME; WinWrite($Handle,s:20); -- outputs 'First Bank' WinWrite($Handle,i:5); -- outputs '951 ' WinWrite($Handle,r:9:2);-- outputs '14567.89 ';
WinWrite($Handle,d:10:$FmtDateMonthDayYear); -- outputs '2/11/1956' WinWrite($Handle,d:10:BitOr($FmtDateMonthDayYear, $FmtDateTruncateCentury); -- outputs '2/11/56 ' WinWrite($Handle,t:7:$FmtTimeAMPM); -- outputs '11:45 AM';
Nota: Os diversos sinalizadores de formato são descritos em Sinalizadores de Formato do Tipo de Dados.
Especificadores de Formato para Números Reais
O especificador de formato para números reais também pode codificar o número de dígitos à direita do ponto decimal a ser exibido. Por exemplo,
WinWrite($Handle, r :10 : BitOr(2, $FmtLeftJustify));
alinha a saída à esquerda e exibe dois dígitos à direita do decimal. Por padrão, os números reais exibem seis dígitos à direita do ponto decimal.
Formatos Padrão para Tipos de Dados
Existem formatos padrão para os diversos tipos de dados. Esses padrões podem variar de acordo com o país, porque os padrões de tipo de dados (inclusive nos EUA) são baseados em definições de painel de controle internacionais.
A tabela a seguir mostra os formatos padrão dos Estados Unidos para tipos
de dados.
Tipo de Dados | Formato Padrão dos EUA |
cadeia | $FmtRightJustify |
inteiro | $FmtRightJustify+$FmtIntUngrouped+$FmtBlankPad+$FmtIntSignNegOnly+$FmtIntDecimal |
real | $FmtRightJustify+$FmtRealUngrouped+$FmtBlankPad+$FmtRealSignNegOnly+
$FmtRealDecimalDot |
Booleano | $FmtRightJustify+$FmtBoolTrueFalse |
data | $FmtRightJustify+$FmtDateMonthDayYear+$FmtBlankPad+$FmtDateSlashSeparators+
$FmtDateNumericMonth+$FmtDateFullYear |
hora | $FmtRightJustify+$FmtTimeWithSeconds+$FmtBlankPad+$FmtTimeMilitary |
Os formatos padrão podem ser alterados utilizando as funções StringFormat, IntegerFormat, RealFormat, BooleanFormat, DateFormat e TimeFormat.
KNOWLEDGEBASE Clip;
CONSTANTS MENU_REFRESH IS 101; MENU_EXIT IS 102;
ROUTINES PROCEDURE ClipView;
PRIVATE
CONSTANTS MENU_LIST IS {'~File','~Refresh','E~xit',''}: LIST OF STRING; ROUTINES EVENT ClipboardEvent(REF clipBoard: STRING) IS ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar($Handle,MENU_LIST); SysGetClipboard(clipBoard); WinWrite($Handle,clipBoard); ELSWHEN $MsgMenu THEN WHEN $MenuSelection IS MENU_REFRESH THEN SysGetClipboard(clipBoard); WinClear( $Handle ); WinWrite($Handle,clipBoard); ELSWHEN MENU_EXIT THEN SendMessage($Handle,$MsgClose); END; END; END (* Clipboard Event *); PROCEDURE ClipView IS VARIABLES whdl: WINDOW; ACTIONS WinCreateScrollWindow($Desktop,whdl,ClipboardEvent{''}, 0,0,0,0,'KML Clipboard viewer', '',10, BitOr($WinBorder,$WinTitle, $WinResize, $WinSysMenu, $WinMenu,$WinAutoPos, $WinAutoSize,$WinVScroll, $WinHScroll,$WinTaskList)); WinWait(whdl); END (* Clip View *);
Para obter mais informações, consulte Sinalizadores de Formato do Tipo de Dados.
Escreve uma cadeia em uma janela na localização especificada.
FUNCTION WinWriteAt(VAL whdl: WINDOW, VAL xLoc, yLoc: INTEGER, VAL outputText: LIST OF STRING): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da janela onde escrever. O identificador pode fazer referência à janela padrão (genérica) ou a uma janela de rolagem. |
xLoc | A localização X do início da cadeia. |
yLoc | A localização Y do início da cadeia. |
outputText | Uma lista de cadeias a ser exibida. Uma única cadeia também é válida. Este comando processa cada item da lista. |
WinWriteAt é usado para escrever informações a partir de uma localização especificada dentro de uma janela genérica ou de rolagem. No fim do processo, WinWriteAt deixa o local de desenho atual (a posição do cursor) uma posição de caractere à direita do último caractere escrito.
WHEN $Event IS $MsgPaint THEN WinWriteAt($Handle,1,1,context.fileName); END;
Escreve uma cadeia em uma janela e avança a o ponteiro de posição para o início da próxima linha.
FUNCTION WinWriteLN(VAL whdl: WINDOW, VAL outputText: LIST OF STRING): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da janela a ser escrita. O identificador pode fazer referência à janela padrão (genérica) ou a uma janela de rolagem. |
outputText | Uma lista de cadeias a ser exibida. Uma única cadeia também é válida. Este comando processa cada item da lista. |
WinWriteLN utiliza um loop FOR implícito: A lista inteira de cadeias é escrita em seqüência.
WinWriteLN é idêntico a WinWrite mas avança o cursor da janela para o início da próxima linha.
KNOWLEDGEBASE Scroll;
CONSTANTS MENU_OPEN IS 101; MENU_EXIT IS 102; MENU_LIST IS {'~File','~Open','E~xit',''}: LIST OF STRING;
TYPES EditorData IS RECORD statusLine: STRING; lines: LIST OF STRING; END;
ROUTINES PROCEDURE FileView; PRIVATE ROUTINES
EVENT EditorEvent(REF editorData: EditorData) IS ROUTINES PROCEDURE ProcessMainMenu(VALUE selection: INTEGER) IS VARIABLES fileName: STRING; editFile: FILE; result: INTEGER; ACTIONS WHEN selection IS MENU_OPEN THEN WinFileDialog($Handle,fileName,'*.KB',5,5, 'Select file to edit',0); IF FOpen(editFile,fileName,$Read) > 0 THEN FReadText(editFile,editorData.lines); FClose(editFile); editorData.statusLine := ' File: ' & fileName; WinClear( $Handle ); WinWriteLn($Handle,editorData.lines); PostMessage($Handle,$MsgPaintStatus); ELSWHEN MENU_EXIT THEN SendMessage($Handle,$MsgClose); END; END; END (* Process Main Menu *);
ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar( $Handle, menuList ); editorData.statusLine := 'File:'; ELSWHEN $MsgMenu THEN ProcessMainMenu($MenuSelection); ELSWHEN $MsgPaintStatus THEN (* Status Bar *) WinClear( $Handle ); WinWrite($Handle,editorData.statusLine); END; END (* Editor Event *);
PROCEDURE FileView IS VARIABLES whdl: WINDOW; ACTIONS WinCreateScrollWindow($Desktop,whdl,EditorEvent,0,0,0,0, 'KML File viewer',$SystemMonospaced, 10, BitOr($WinBorder,$WinTitle, $WinResize, $WinSysMenu,$WinMenu,$WinStatus, $WinAutoPos,$WinAutoSize, $WinVScroll,$WinHScroll, $WinTaskList)); WinWait(whdl); END (* File View *);
Retorna a coordenada x da posição de desenho atual.
FUNCTION WinX(VAL whdl: WINDOW): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da janela onde a operação deve ser executada |
WinX difere de WinGetXPos porque retorna uma posição de caractere dentro de uma janela, enquanto WinGetXPos consulta o canto superior esquerdo de uma janela ou caixa de diálogo.
WHEN $Event IS $MsgChar THEN WHEN $EventParm(1,INTEGER) IS $KeyUpArrow THEN WinGoToXY(Handle,$WinX($Handle),$WinY($Handle)-1); ELSWHEN $KeyRightArrow THEN WinGoToXY(Handle,$WinX($Handle)+1,$WinY($Handle)); END; END;
WinY
Retorna a coordenada y da posição de desenho atual.
FUNCTION WinY(VAL whdl: WINDOW): INTEGER;
Nome do Argumento | Descrição |
whdl | O identificador da janela onde a operação deve ser executada |
WinY difere de WinGetYPos porque retorna uma posição de caractere dentro de uma janela, enquanto WinGetYPos consulta o canto superior esquerdo de uma janela ou caixa de diálogo.
WHEN $Event IS $MsgChar THEN WHEN $EventParm(1,INTEGER) IS $KeyUpArrow THEN WinGoToXY(Handle,$WinX($Handle),$WinY($Handle)-1); ELSWHEN $KeyRightArrow THEN WinGoToXY(Handle,$WinX($Handle)+1,$WinY($Handle)); END; END;
WinX
Tivoli Service Desk 6.0 Developer's Toolkit - Referência da Linguagem de Script