seit langem habe ich mal wieder versucht GUI Elemente in meine Programme einzubinden. Leider ist eine kopmplette Umstellung aus Zeitgründen nicht zu machen. Ich möchte mich aber gern mit GUI beschäftigen und Stück für Stück weitermachen. Nun habe ich im CRT Fenster eine Tabelle ausgeben können. Dies Beispiel habe ich aus der Xbase++ Hilfe genommen. Es funktioniert bis auf den Ausstieg.
Code: Alles auswählen
#include "Xbp.ch"
#include "Appevent.ch"
#include "Appevent.ch"
#include "Common.ch"
#include "Directry.ch"
#include "Dmlb.ch"
#include "Fileio.ch"
#include "GRA.ch"
#include "Inkey.ch"
#include "Memoedit.ch"
#include "Setcurs.ch"
#include "XBP.ch"
#pragma Library( "XppUi2.lib" )
PROCEDURE Main
LOCAL nEvent, mp1, mp2, oXbp, oBrowse, cField, i
use lfz_zeit // Datenbank öffnen
// Dialogfenster versteckt erzeugen
oXbp := GuiStdDialog( "Standard GUI Browser for DBF" )
// Browser im Fenster erzeugen
oBrowse := GuiBrowseDb( oXbp:drawingArea )
// Spalten für alle Felder anfügen
FOR i:=1 TO FCount()
cField := FieldName( i )
oBrowse:addColumn( FieldBlock(cField), , cField )
NEXT
// Der Browser füllt nach :resize() immer das Fenster aus
oXbp:drawingArea:resize := {|mp1,mp2,obj| obj:childList()[1]:setSize(mp2) }
oXbp:show()
oBrowse:show()
SetAppFocus( oBrowse )
nEvent = 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
DO CASE
CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_ESC
exit
OTHERWISE
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDCASE
ENDDO
oXbp:destroy()
?"Hier bin ich wieder im CRT Fenster"
wait
RETURN
******************************************************************
* GUI Browser mit Navigations-Codeblöcken für DBF erzeugen
******************************************************************
FUNCTION GuiBrowseDB( oParent, aPos, aSize )
LOCAL oBrowse
oBrowse := XbpBrowse():new( oParent,, aPos, aSize ):create()
// Navigationscodeblöcke für den Browser
oBrowse:skipBlock := {|n| DbSkipper(n) }
oBrowse:goTopBlock := {| | DbGoTop() }
oBrowse:goBottomBlock := {| | DbGoBottom() }
oBrowse:phyPosBlock := {| | Recno() }
// Navigationscodeblöcke für den vertikalen Scrollbar
oBrowse:posBlock := {| | DbPosition() }
oBrowse:goPosBlock := {|n| DbGoPosition(n) }
oBrowse:lastPosBlock := {| | 100 }
oBrowse:firstPosBlock := {| | 0 }
RETURN oBrowse
******************************************************************
* Standard Dialogfenster versteckt erzeugen
******************************************************************
FUNCTION GuiStdDialog( cTitle )
LOCAL oDlg
DEFAULT cTitle TO "Standard Dialog Window"
oDlg := XbpDialog():new( ,,{10,10}, {500,300},, .F. )
oDlg:icon := 1
oDlg:taskList := .T.
oDlg:title := cTitle
oDlg:titlebar := .T.
oDlg:create()
oDlg:drawingArea:setFontCompoundName( "10.Helv" )
RETURN oDlg
Schließe ich das GUI FEnster über das X rechts oben in der Titelzeile, so wird das GUI Fenster vollständig beseitigt und ich kann mittels einer Taste im Programm fortfahren.
Was mache ich beim Aussteig mittels ESC Taste falsch?
mfg
Wolfgang