Hi Jimmy,
du hast folgendes geschrieben:
Code: Alles auswählen
wenn du XbpCrt() "Fenster" benutzt musst du ausser SetAppFocus() auch
SetAppWindow() benutzten um zum XbpDialog() zu kommen.
Du hast vollkommen recht! Ich habe vor der Event-Schleife in der Main-Procedure folgende Zeilen stehen:
Code: Alles auswählen
oXbp:=RootWindow()
oXbp:SetTitle("FI-Datenbank "+man->name)
oXbp:show()
SetAppWindow(oXbp)
SetAppFocus(oXbp)
Die Funktion RootWindow() habe ich aus dem Alaska-Source übernommen:
Code: Alles auswählen
/*
* Routine zur Abfrage des Anwendungsfensters
*/
FUNCTION RootWindow( oDlg )
STATIC soDialog
IF PCount() > 0
soDialog := oDlg
ENDIF
RETURN soDialog
Die Funktion teil1() die ein CRT-Fenster aufruft sieht wie folgt aus:
Code: Alles auswählen
Function teil1()
// Belege bearbeiten
LOCAL n,i,oCrt,oParent := RootWindow():DrawingArea
PRIVATE neuanlage,gespeichert,maske_verlassen,b[25],s[25],getlist:={ },;
titel:=man->name
PRIVATE b_loesch
ALTD()
//RootWindow():Disable() // darf nicht, sonst funktioniert das Get-system nicht mehr
oCrt := XbpCrt():new(oParent,,,25,80,"Belegbearbeitung")
oCrt:titleBar := .F.
oCrt:closeAble := .F.
oCrt:sysMenu := .F.
//oCrt:close := {|| CrtDestroy()}
oCrt:create()
SetAppWindow(oCrt)
SetMouse( .T. )
oCrt:show()
SetAppFocus(oCrt)
farbe()
CLEAR SCREEN
IF .NOT. sicherheit(3)
SetAppWindow(RootWindow())
RETURN NIL
ENDIF
bearbeite ("Belegbearbeitung "+man->name,;
"fin","eine Beleg",6,.F.,"einen Beleg",;
{|| STR(fin->beleg_nr,6)+STR(fin->baust_nr,6)+SPACE(1)+;
LEFT(b_dbseek("fir",2,fin->firmen_nr,"firmen_nam"),24)+;
SPACE(1)+DTOC(fin->rg_datum)+SPACE(1)+DTOC(fin->valuta)+;
TRANSFORM(fin->betrag,"@E 999,999,999.99")},;
{|| akt->(DBGOBOTTOM() ) , FIELDPUT(6,akt->nr),;
FIELDPUT(7,akt->mwst_proz),;
FIELDPUT(17,CTOD("01.01.2150")),;
FIELDPUT(22,"N");
},;
{|| beleg_maske() },;
.F.;
)
SetAppWindow(RootWindow())
RETURN NIL
Wie gesagt: Mit der Mausbedienung funktioniert der Aufruf des Crt-Fensters. Nach dem Schließen des Crt-Fenster (geschieht in der Funktion bearbeite() durch Drücken der ESC-Taste), kann ich das Crt-Fenster wieder aufrufen usw. usw.
Sobald aber das Menü mit der Tastatur durch ALT-B das CRT-Fenster aufruft ( dies funktioniert noch!) friert das System nach einem erneuten Menüzugriff ein.