3.6.2 Textausgabe

Zur Textausgabe gilt es zu unterscheiden, ob man einfache Strings ausgeben möchte, ob man Listen mit Textstrings ausgeben möchte, oder ob man einen langen Fließtext ausgeben möchte.

Einfache Strings

Zur Ausgabe von Strings gibt es die folgenden Befehle:

LibPutProFont: Zur Ausgabe eines einzelnen Zeichens in einem bestimmten Font auf einer x/y-Koordinate.
Dieser Befehl gibt die x-Koordinate zurück, auf der das nächste Zeichen erscheinen könnte.

/* Hier kommen die Definitionen der einzelnen Screens */
int screen1()
{
  int ret_code=0;		/* Unser Ergebnis dieses Screens */
  TCHSTS tsts;		/* Ergebnis der Touch-Abfrage */

  /* Bildschirmaufbau */	
  LibClrDisp();		/* Bildschirm löschen */

  LibPutProFont(IB_PFONT1,'x',50,30);

			/* Bildschirm füllen */
  LibPutDisp();		/*Bildschirm anzeigen */

  /* Touch-Felder definieren */
  LibTchStackClr();	/* Keine Touch-Felder von früher zulassen */
  LibTchStackPush(NULL);	/* Stack initialisieren */
  LibTchStackPush(TchHardIcon);	/* Icons für die Menüleiste */
  LibTchInit();
 
  /* Hauptschleife */
  while (ret_code==0)	/* Solange nichts gemacht wurde */
  {
    LibTchWait(&tsts);	/* Auf Touch warten */
    switch(tsts.obj)	/* Auswerten des Touch */
    {
      case OBJ_HIC_ESC:	/* ESC_Taste gedrückt */
      {
        ret_code=PV_ESC1;	/* Screen1 beenden */
      }
      break;		
				/* Weitere Dinge tun */
    }
  }
  return(ret_code);			/* Ergebnis melden */
}
(Der Sourcecode gehört zu dem in Kapitel 3.5 angezeigten Grundprogramm)

Für komplette Zeichenketten bietet sich aber eher der Befehl LibPutProStr an, der eine ganze Zeichenkette mit einem Font an einer Koordinate ausgibt.
/* Hier kommen die Definitionen der einzelnen Screens */
int screen1()
{
  int ret_code=0;		/* Unser Ergebnis dieses Screens */
  TCHSTS tsts;		/* Ergebnis der Touch-Abfrage */

  /* Bildschirmaufbau */	
  LibClrDisp();		/* Bildschirm löschen */

  LibPutProStr(IB_PFONT1,50,30,"Dieser Beispieltext soll erscheinen",100);

			/* Bildschirm füllen */
  LibPutDisp();		/*Bildschirm anzeigen */

  /* Touch-Felder definieren */
  LibTchStackClr();	/* Keine Touch-Felder von früher zulassen */
  LibTchStackPush(NULL);	/* Stack initialisieren */
  LibTchStackPush(TchHardIcon);	/* Icons für die Menüleiste */
  LibTchInit();
 
  /* Hauptschleife */
  while (ret_code==0)	/* Solange nichts gemacht wurde */
  {
    LibTchWait(&tsts);	/* Auf Touch warten */
    switch(tsts.obj)	/* Auswerten des Touch */
    {
      case OBJ_HIC_ESC:	/* ESC_Taste gedrückt */
      {
        ret_code=PV_ESC1;	/* Screen1 beenden */
      }
      break;		
				/* Weitere Dinge tun */
    }
  }
  return(ret_code);			/* Ergebnis melden */
}

Das Besondere an diesem Befehl ist, dass man als letzten Parameter angeben kann, wieviele Pixel der Text maximal einnehmen kann. Zeichen, die zu lang für diese Darstellung sind, werden weggelassen.

Es gibt einen weiteren Befehl, LibStringDsp über den auch Zeichenketten an bestimmten Stellen ausgegeben werden können. Im Gegensatz zu LibPutProStr() prüft dieser Befehl, ob die Zeichen noch in die angegebene Länge passen und ersetzt gegebenenfalls die letzten 3 Zeichen durch ... um so anzuzeigen, dass der Text eigentlich noch länger wäre:
/* Hier kommen die Definitionen der einzelnen Screens */
int screen1()
{
  int ret_code=0;		/* Unser Ergebnis dieses Screens */
  TCHSTS tsts;		/* Ergebnis der Touch-Abfrage */

  /* Bildschirmaufbau */	
  LibClrDisp();		/* Bildschirm löschen */

  LibStringDsp("Dieser Beispieltext soll erscheinen",50,30,100,IB_PFONT1);

			/* Bildschirm füllen */
  LibPutDisp();		/*Bildschirm anzeigen */

  /* Touch-Felder definieren */
  LibTchStackClr();	/* Keine Touch-Felder von früher zulassen */
  LibTchStackPush(NULL);	/* Stack initialisieren */
  LibTchStackPush(TchHardIcon);	/* Icons für die Menüleiste */
  LibTchInit();
 
  /* Hauptschleife */
  while (ret_code==0)	/* Solange nichts gemacht wurde */
  {
    LibTchWait(&tsts);	/* Auf Touch warten */
    switch(tsts.obj)	/* Auswerten des Touch */
    {
      case OBJ_HIC_ESC:	/* ESC_Taste gedrückt */
      {
        ret_code=PV_ESC1;	/* Screen1 beenden */
      }
      break;		
				/* Weitere Dinge tun */
    }
  }
  return(ret_code);			/* Ergebnis melden */
}

Gibt folgendes aus:

Der nächste Befehl zur Ausgabe einer Zeichenkette ist LibPut35Str mit dem ein paar ausgewählte Zeichen ausgegeben werden können.
Mit diesem Befehl erscheinen die folgenden Zeichen in einem 3x5 Pixel Font. Diese Ausgabe ist geeignet, um die Ziffern und AM oder PM klein darstellen zu können. Andere Zeichen werden als ausgefülltes Rechteck dargestellt.
/* Hier kommen die Definitionen der einzelnen Screens */
int screen1()
{
  int ret_code=0;		/* Unser Ergebnis dieses Screens */
  TCHSTS tsts;		/* Ergebnis der Touch-Abfrage */

  /* Bildschirmaufbau */	
  LibClrDisp();		/* Bildschirm löschen */

  LibPut35Str(10,30,"0123456789AMP.,");

			/* Bildschirm füllen */
  LibPutDisp();		/*Bildschirm anzeigen */

  /* Touch-Felder definieren */
  LibTchStackClr();	/* Keine Touch-Felder von früher zulassen */
  LibTchStackPush(NULL);	/* Stack initialisieren */
  LibTchStackPush(TchHardIcon);	/* Icons für die Menüleiste */
  LibTchInit();
 
  /* Hauptschleife */
  while (ret_code==0)	/* Solange nichts gemacht wurde */
  {
    LibTchWait(&tsts);	/* Auf Touch warten */
    switch(tsts.obj)	/* Auswerten des Touch */
    {
      case OBJ_HIC_ESC:	/* ESC_Taste gedrückt */
      {
        ret_code=PV_ESC1;	/* Screen1 beenden */
      }
      break;		
				/* Weitere Dinge tun */
    }
  }
  return(ret_code);			/* Ergebnis melden */
}

Interessant ist, dass die Befehle zwar sehr ähnlich sind, aber die Reihenfolge und die Bedeutung der Aufrufparameter sehr stark unterschiedlich ist. So wird z.B. bei LibPutProStr() der Font als erster Parameter, bei LibStringDsp() als letzter Parameter angegeben. Die Länge des erlaubten Strings ist bei LibPutProStr() eine Längenangabe in Pixeln und bei LibStringDsp() wird die Endposition des Strings auf dem Bildschirm angegeben.
Dieser Umstand erschwert die Programmierung nicht unwesentlich.

Für Ergänzungen wenden Sie sich bitte an: Jürgen Wagner