Operazioni con DataCell e Attribute

Questa macro illustra come utilizzare DataCell e AttributeSet per ispezionare testo e attributi in una determinata riga/colonna sullo schermo. In questo esempio si può vedere:

  • Come ottenere una raccolta di DataCell per una determinata posizione e lunghezza.

  • Come eseguire l'iterazione sui DataCell per creare una stringa di testo

  • Come, per confronto, è possibile eseguire un'operazione simile anche utilizzando getText().

  • E infine, come eseguire operazioni con gli attributi, ottenere un elenco di stringhe o determinare se stringhe specifiche sono impostate in una determinata posizione dello schermo.

var macro = createMacro(function*() {
	'use strict';
	
	// Ottenere PresentationSpace per interagire con l'host
	var ps = session.getPresentationSpace();
	
	// Dichiarare le variabili da utilizzare successivamente
	var cells;
	var text;
	var attrs;
	
	// Impostare il valore di timeout predefinito per le funzioni "wait"
	wait.setDefaultTimeout(10000);
	
	// Macro di esempio per operazioni con DataCell e Attributi
	try {
		yield wait.forCursor(new Position(24, 2));
		
		// Ottenere DataCell dallo spazio di presentazione.
		// Riga 19, col 3 è il prompt, lunghezza 35 caratteri
		// "Choose from the following commands:"
		cells = ps.getDataCells({row:19, col:3}, 35);
		text = '';
		
		// È possibile visualizzare il testo utilizzando getText
		yield ui.message("Screen text: " + ps.getText({row:19, col:3}, 35));
		
		// Oppure è possibile assemblare il testo da DataCell a ogni posizione
		for(var index = 0; index < cells.length; index++) {
			text = text.concat(cells[index].getChar());
		}
		// E visualizzare il testo
		yield ui.message("Cells text: " + text);
		
		// Ottenere gli attributi per la prima DataCell (cell[0])
		attrs = cells[0].getAttributes();
		
		// Visualizzare se sono presenti attributi nella cella dati
		yield ui.message("Attribute set is empty: " + attrs.isEmpty());
		
		// Visualizzare il numero di attributi impostato set
		yield ui.message("Number of attributes: " + attrs.size());
		
		// Visualizzare quali attributi sono impostati
		yield ui.message("Attributes: " + attrs.toString());
		
		// Ora visualizzare se l'attributo high intensity è impostato
		yield ui.message("Is high intensity: "
			+ attrs.contains(Attribute.HIGH_INTENSITY));
		
		// Ora visualizzare se l'attributo underline è impostato
		yield ui.message("Is underline: " +
			attrs.contains(Attribute.UNDERLINE));
			
		// Ora visualizzare se sono impostati gli attributi alphanumeric, intensified e pen-detectable
		yield ui.message("Is alphanumeric, intensified and pen-detectable: "
			+ attrs.containsAll([Attribute.ALPHA_NUMERIC, Attribute.HIGH_INTENSITY, Attribute.PEN_DETECTABLE]));
			
		// Ora visualizzare se sono impostati gli attributi underline, intensified e pen-detectable
		yield ui.message("Is underline, intensified and pen-detectable: "
			+ attrs.containsAll([Attribute.UNDERLINE, Attribute.HIGH_INTENSITY, Attribute.PEN_DETECTABLE]));
		} catch (error) {
			yield ui.message(error);
		}
		//Fine della macro generata
	});
	
// Eseguire la macro
return macro();