Konfiguration von Xbase-Parts

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 11. Juni 2013, 14:05 Uhr von Georg (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Was sind Xbase-Parts == Xbase-Parts sind überwiegend von Windows-Controls abgeleitete graphische Elemente, die dazu verwendet werden, graphische Benutzer…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Was sind Xbase-Parts

Xbase-Parts sind überwiegend von Windows-Controls abgeleitete graphische Elemente, die dazu verwendet werden, graphische Benutzerschnittstellen zu erstellen.

Die unterstützten Fenstertypen sind ebenfalls als Xbase-Parts definiert.

Alle Xbase-Parts, die im Zusammenhang mit der XbpBrowse()-Klasse stehen, sind nicht direkt von "echten" Windows-Controls abgeleitet.


Der Lebenszyklus eines Xbase-Parts

Der Lebenszyklus eines Xbase-Parts ist grundsätzlich durch drei Methoden gekennzeichnet:

  • :new()
  • :create()
  • :destroy()


:new()

Jedes Xbase-Part "reagiert" auf die Methode :new() mit der Rückgabe einer Referenz auf ein neues Xbase-Part der eigenen Klasse:

oDlg := XbpDialog():new(<Parent>, <Owner>, >Position>, <Grösse>,;
   <Präsentations-Parameter>, <sichtbar>)

Im Anschluss kann das neue Xbase-Part konfiguriert werden, um den gewünschten Anforderungen zu genügen.

Einige der Konfigurationsparameter können über eigene Instanzvariablen oder Methoden eingestellt (oder geändert) werden, während andere nur über das Präsentations-Parameter Array festgelegt werden können. Spätere Änderungen sind dann über eine Änderung der Präsentations-Parameter und einen Aufruf der Methode :configure() möglich.


:create()

Wenn die Konfiguration abgeschlossen ist, wird das Xbase-Part "funktionsfähig" gemacht, indem Systemresourcen angefordert werden und (unter normalen Umständen) das Xbase-Part sichtbar gemacht wird.

Ab diesem Zeitpunkt können Änderungen an den Präsentations-Parametern nur über

oXbp:setPresParam(aPP)
oXbp:configure()

geändert werden, d.h. das Xbase-Part muss explizit neu konfiguriert werden, damit die Änderungen auch wirksam werden.


:destroy()

Diese Methode wird wohl selten explizit ausgeführt. Sie wird jedoch rekursiv durchgeführt, wenn z.B. ein XbpDialog() mittels :destroy() zerstört wird. In diesem Fall wird bei allen abhängigen Xbase-Parts die Methode :destroy() ausgeführt, sofern sie nicht noch in einem anderen Kontext vorhanden sind (z.B. abweichender Owner).


Auswahl von Konfigurations-Variablen:

:caption

Falls verfügbar, zeigt diese Variable einen beschreibenden/ergänzenden Text am Xbase-Part an.


:tabStop

Diese Instanz-Variable legt fest, ob das Xbase-Part unter Verwendung der Tab-Taste angesprungen werden kann (Standard-Verhalten unter Windows). Entscheidend für die Reihenfolge, in der die Xbase-Parts angesprungen werden, ist die zeitliche Reihenfolge, in der :tabStop gesetzt wurde.


:cargo

Diese Instanz-Variable wird von Xbase++ nicht verwendet, sondern räumt dem Programmierer die Möglichkeit ein, bestimmte Information in einem Xbase-Part zu hinterlegen, ohne eine eigenen Klasse abzuleiten und darin weitere Felder zu definieren. Verwendung von :cargo auf eigene Gefahr.


Beispiele

Beispiel 1 - Auswahl aus einer Liste über einen modalen Dialog

Dialoge unter Windows sollten so gestaltet werden, dass sie nicht modal sind. Unter einem modalen Dialog versteht man eine Abfrage, die ein anderweitiges Arbeit mit dem Programm so lange blockiert, bis die Abfrage beantwortet wurde.

Das Beispiel fragt zu Programm-Start ab, welche SQL-Datenbank für den Programm-Lauf verwendet werden soll. Unterstellt wird die Verwendung der AppSys() aus dem AppSys.prg Artikel

Function Main()
  Local aPos, aSize, aList
  Local cTitle, cDataBase
  Local nI, nResult
  Local oDlg, oDlgWin, oXbp, oList
  // Schritt 1 - Definition der Auswahlliste
  aList := {"Produktion", "Test 1", "Test 2", "Remote Test"}
  // Schritt 2 - Erstellen des Dialogs
  aPos := {100, 100}
  aSize := {300, 300}
  cTitle := "Select Database For Operation"
  oDlgWin := XbpDialog():new(RootWindow():drawingArea,;
     RootWindow():drawingarea, aPos, aSize, NIL, .F.)
  oDlgWin:title := cTitle
  oDlgWin:create()
  // Schritt 3 - Bereitstellen einer Variablen für die :drawingArea
  oDlg := oDlgWin:drawingArea
  // Schritt 4 - Erzeugen einer XBpListbox()
  aPos := {10, 50}
  aSize := {260, 200}
  oList := XbpListBox():new(oDlg, oDlg, aPos, aSize)
  oList:tabStop := .T.
  oList:create()
  // Schritt 5 - Füllen der XbpListBox() mit den Daten der Auswahlliste
  FOR nI := 1 TO Len(aList)
     oList:addItem(aList[nI])
  NEXT
  // Schritt 6 - Erstellen eines OK-Buttons
  aPos := {10, 10}
  aSize := {120, 30}
  oXbp := XbpPushButton():new(oDlg, oDlg, aPos, aSize)
  oXbp:tabStop := .T.
  oXbp:caption := "OK"
  oXbp:default := .T.
  oXbp:create()
  // Schritt 7 - Erstellen eines Cancel-Buttons
  aPos := {160, 10}
  oXbp := XbpPushButton():new(oDlg, oDlg, aPos, aSize)
  oXbp:tabStop := .T.
  oXbp:caption := "Cancel"
  oXbp:cancel  := .T.
  oXbp:create()
  // Schritt 8 - Anzeigen des XbpDialog()
  CenterControl(oDlgWin)
  oDlgWin:show()
  // Schritt 9 - modale Anzeige des Dialogs
  nResult := oDlgWin:showModal()
  // Schritt 10 - verstecken und zerstören des Dialogs
  oDlgWin:hide()
  oDlgWin:destroy()
  // Schritt 11 - Abfrage der Auswahl
  IF nResult = XBP_MRESULT_OK
     cDatabase := oList:getItem(oList:getData()[1])
  ELSE
     cDatabase := ""
  ENDIF
  ConfirmBox(, "Ausgewählt wurde Datenbank " + cDatabase, "Ergebnis",;
     XBPMB_OK, XBPMB_INFORMATION)
RETURN(.T.)

Schritt 1 - Definition der Auswahlliste

Der Variablen aList wird für unser Beispiel eine Liste von zur Verfügung stehenden Datenbanken zugewiesen.


Schritt 2 - Erstellen des Dialogs

Hierzu werden Position und Grösse des Dialogs festgelegt, und der Variablen cTitle die Überschrift für den Dialog zugewiesen.

Anschliessend wird der Instanzvariablen :title der String zugewiesen, der in cTitle hinterlegt ist. Man kann alternativ die Zuweisung auch ohne den Umweg über cTitle machen.

Danach wird der Dialog erzeugt, indem Systemresourcen angefordert werden. Der Dialog selbst ist aber noch "unsichtbar".


Schritt 3 - Bereitstellen einer Variablen für die :drawingArea

Ein Fenster ist erst einmal ein rechtwinkliger Bereich. Ein XbpDialog() umfasst standardmässig (!)