Hybrid-Programme (XbpCRT)
Migration mit grafischen Elementen
Das RootCRT-Fenster ist kaum konfigurierbar und hängt von den Einstellungen von cmd.exe ab. Wo mehr Flexibilität, und sei es nur in Bezug auf die verwendeten Schriftarten, gewünscht ist, scheidet RootCRT() aus.
An dieser Stelle kommt XbpCRT() ins Spiel. XbpCRT() ist eine Mischung (Hybrid) von Konsolprogramm und Programm mit (optionalen) grafischen Elementen.
In dem Moment, wo in der XPJ-Datei einer der Schalter
GUI = YES LINK_FLAGS = /PM:PM
verwendet wird, liefert die Funktion AppType() den Wert APPTYPE_PM zurück. Aufgrund dieses Status wird in der Standard-AppSys.prg ein XbpCRT()-Fenster erstellt und mit DEF_ROWS = 25 und DEF_COLS = 80 konfiguriert, d.h. mit den Standard-Parametern, die auch ein Clipper-Programm vorzuweisen hatte.
Werfen wir hierzu mal einen Blick in die Standard-AppSys.prg:
#define DEF_ROWS 25 #define DEF_COLS 80 #define DEF_FONTHEIGHT 16 #define DEF_FONTWIDTH 8 ... aSizeDesktop := AppDesktop():currentSize() aPos := { (aSizeDesktop[1]-(DEF_COLS * DEF_FONTWIDTH)) /2, ; (aSizeDesktop[2]-(DEF_ROWS * DEF_FONTHEIGHT)) /2 }
Es wird die Grösse des Desktops ermittelt: AppDesktop() liefert eine Referenz auf den Desktop. Diese Referenz wird durch ein Objekt der XbpDialog()-Klasse dargestellt und unterstützt daher auch die Methode :currentSize(), die ein Array mit den Desktop-Dimensionen zurückliefert. Diese Dimension umfasst immer den gesamten Desktop und rechnet eine Taskbar nicht heraus!
DEF_COLS * DEF_FONTWIDTH entspricht einem 80 * 8 = 640 Pixel
DEF_ROWS * DEF_FONTHEIHT entspricht einem 25 * 16 = 400 Pixel
Unterstellen wir eine Desktopgrösse von 1024 * 768 Pixel ergibt sich folgende Anweisung
aPos := {(1024 - 640) / 2, (768 - 400) / 2} aPos := {384 / 2, 368 / 2} aPos := {192, 184}
Mit diesen Positionsangaben wird das Fenster zentriert auf dem Desktop angezeigt. Man merkt an dieser Stelle auch, dass AppSys.prg in der letzten Zeit nicht aktualisiert wurde, da es inzwischen die Funktion CenterControl() gibt, mit der das gleiche Ergebnis erzielt werden kann.
Unterstellen wir jetzt eine Auflösung von 1920 * 1200 Pixel, bleibt das Fenster immer noch 640 * 400 Pixel gross und nimmt damit ziemlich genau 1/9 der verfügbaren Fläche ein, während es bei 1024 * 768 Pixel immerhin noch 1/3 war.
Der andere, denkbare Ansatz ist, ein Fenster in der maximal möglichen Grösse zu erzeugen (und natürlich jede denkbare Kombination dazwischen). In diesem Zusammenhang
(artikelinarbeit)