Hybrid-Programme (XbpCRT)

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 10. Juli 2013, 09:51 Uhr von Georg (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Migration mit grafischen Elementen == Das RootCRT-Fenster ist kaum konfigurierbar und hängt von den Einstellungen von cmd…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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)