AppSys.prg

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 11. Juni 2013, 11:03 Uhr von Georg (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Bedeutung der Funktion AppSys() == Unter Clipper gab es nur ein "Fenster", das quasi den ganzen DOS-Bildschirm einnahm. Unter Windows muss ein Applikation…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Bedeutung der Funktion AppSys()

Unter Clipper gab es nur ein "Fenster", das quasi den ganzen DOS-Bildschirm einnahm. Unter Windows muss ein Applikations-Fenster erzeugt werden, das dazu dient, dass das Programm mit dem Anwender (und Windows) kommunizieren kann.

Die generische AppSys()-Funktion von Xbase++ orientiert sich an der Art des Programms, die über die XPJ-Datei bzw. eine entsprechende Linker-Option festgelegt wird.

Es gibt eine Vielzahl von Optionen, die in der Funktion AppSys() eingestellt werden können, und auf die hier nicht in aller Tiefe eingegangen werden kann.


Beispiel einer AppSys() Funktion

#INCLUDE "AppEvent.CH"
#INCLUDE "Gra.CH"
#INCLUDE "NLS.CH"
#INCLUDE "Xbp.CH"
FUNCTION AppSys()
   Local aSize[2], aPos[2]
   Local nI
   Local oDlg
   SetLocale(NLS_ICURRENCYEURO, "1")
   SET CHARSET TO ANSI
   aPos := {1, 1}
   aSize := {800, 600}
   oDlg := XbpDialog():new(AppDesktop(), AppDesktop(), aPos, aSize)
   oDlg:sysmenu := .T.
   oDlg:hideButton := .T.
   oDlg:taskList := .T.
   oDlg:close := {|| PostAppEvent(xbeP_Quit)}
   oDlg:title := GetProgramTitle()
   oDlg:create()
   CenterControl(oDlg)
   RootWindow(oDlg)
   oDlg:setTitle(GetProgramTitle())
   SetAppWindow(oDlg)
RETURN (.T.)
FUNCTION RootWindow(oDlg)
   Static oStatic
   IF oDlg <> NIL
      oStatic := oDlg
   ENDIF
   IF oStatic = NIL
      ConfirmBox(, "Fehler", "Programm nicht richtig geladen", XBPMB_CRITICAL, XBPMB_OK)
      QUIT
   ENDIF
RETURN (oStatic)
FUNCTION GetProgramTitle
   //
RETURN("Ein erstes Programm")


Die einzelnen Schritte

Zeichensatz und Darstellung des €-Zeichens

Diese Angaben gehören nicht zwingend in die AppSys(), sondern können auch an andere Stelle im Programm stehen, wobei von den Start-Funktionen die AppSys() sicherlich die geeigneteste Funktion hierfür ist.


Grösse und Position

Ein Fenster benötigt eine Grösse und eine Position.

Standardmässig wird die Grösse und die Position in Pixel bestimmt. Für die Position ist der Ausgangspunkt die untere, linke Ecke des Windows-Desktop.

Beide Parameter werden in einem Array definiert und übergeben.

In diesem Beispiel ist das Fenster 800 Pixel breit und 600 Pixel hoch, und die Position, an der das Fenster angezeigt werden soll, befindet sich einen Pixel in horizontaler und vertikaler Richtung von Ausgangspunkt entfernt.

Die Grösse bezieht sich übrigens auf das Fenster, beinhaltet also (falls definiert) Titelleiste, Rahmen etc.


Erstellen des XbpDialog() Objektes

Unser Programm-Fenster benötigt einen Parent, sowie einen Owner. Dies ist in beiden Fällen der Windows-Desktop, der über die Funktion AppDesktop() ermittelt werden kann. Diese Funktion liefert eine Referenz (!) auf den Windows-Desktop zurück (übrigens auch ein XbpDialog() Objekt).

Als weitere Parameter werden die Arrays mit den Angaben zur Grösse und zur Position des Fensters übergeben.

Die weiteren Parameter der :new() Methode sind nicht angegeben, daher werden hier zum einen die Windows-Standards verwendet, und das Fenster ist nach erstellen direkt sichtbar.

Die Methode :new() erzeugt ein Objekt von einer bestimmten Klasse, das Objekt ist jedoch noch nicht "funktionsfähig". Gewisse Instanzvariablen sind verfügbar, bestimmte Methoden jedoch noch nicht.

Die Funktionsfähigkeit wird später durch das Ausführen der Methode :create() hergestellt. Dazu gleich noch ein wenig mehr.


Konfiguration des XbpDialog() Objektes

Anfordern der System-Resourcen

Positionieren des Fensters

Bedeutung der Funktion RootWindow()

Festlegen des Anwendungsfensters

(Artikelinarbeit)