// Best5f.prg - Funktionen zu Best5p.prg #include "Gra.ch" #include "Xbp.ch" #include "Appevent.ch" #include "Font.ch" #define xbeUser_FileMarked xbeP_User + 1 #define xbeUser_FileSelected xbeP_User + 2 PROCEDURE AppQuit() LOCAL nButton, oXbp := SetAppFocus() nButton := ConfirmBox( , ; "Wollen Sie das Programm beenden ?", ; "Beenden", ; XBPMB_YESNO , ; XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE ) IF nButton == XBPMB_RET_YES CLOSE ALL QUIT ENDIF SetAppFocus( oXbp ) RETURN FUNCTION IsIndexUnique( nOrder, xIndexValue ) LOCAL nOldOrder := OrdNumber() LOCAL nRecno := Recno() LOCAL lUnique := .F. OrdSetFocus( nOrder ) lUnique := ! DbSeek( xIndexValue ) OrdSetFocus( nOldOrder ) DbGoTo( nRecno ) RETURN lUnique FUNCTION Satzsp( oDlg1, nRl ) DO WHILE nRl == NIL IF DbRlock( Recno() ) nRl := 1 ELSE ModalFen( ,,oDlg1 ) ENDIF ENDDO RETURN (.T.) FUNCTION ZumAnfang() IIF( 1->Auftrnr>0, , 1->(DbDelete()) ) 1->(DbRUnlock( Recno() ) ) 1->(DbGoTop()) RETURN .T. FUNCTION Zurueck() IIF( 1->Auftrnr>0, , 1->(DbDelete()) ) 1->(DbRUnlock( Recno() ) ) 1->(DbSkip(-1)) RETURN .T. FUNCTION Vorwaerts() IIF( 1->Auftrnr>0, , 1->(DbDelete()) ) 1->(DbRUnlock( Recno() ) ) VorSkip() RETURN .T. FUNCTION ZumEnde() IIF( 1->Auftrnr>0, , 1->(DbDelete()) ) 1->(DbRUnlock( Recno() ) ) 1->(DbGoBottom()) RETURN .T. FUNCTION VorSkip() IF ! Eof() 1->(DbSkip(1) ) IF Eof() 1->(DbSuspendNotifications()) 1->(DbSkip(-1) ) // Append-Situation vermeiden 1->(DbResetNotifications()) 1->(DbGobottom()) // Notification ausl”sen ENDIF ENDIF RETURN (.T.) PROCEDURE HiliteSle( oXbpSle ) LOCAL aPP := { { XBP_PP_FGCLR , GRA_CLR_WHITE } , ; { XBP_PP_BGCLR , GRA_CLR_RED } } // { XBP_PP_COMPOUNDNAME, FONT_TIMES_MEDIUM + FONT_STYLE_BOLD } } oXbpSle:setPresParam( aPP ) RETURN PROCEDURE DeHiliteSle( oXbpSle ) LOCAL aPP := { { XBP_PP_FGCLR , GRA_CLR_BLACK } , ; { XBP_PP_BGCLR , GRA_CLR_WHITE } } // { XBP_PP_COMPOUNDNAME, FONT_TIMES_MEDIUM + FONT_STYLE_BOLD } } oXbpSle:setPresParam( aPP ) RETURN /* * Prozedur, die Daten aus einem modalen Dialog abfragt */ //PROCEDURE Modal() PROCEDURE Suchen( oDlg1, aData1, nXsize, nYsize ) LOCAL cAuf := Space(6) LOCAL cTitle := "Auftrag-Nr. eingeben :" DO WHILE .T. cAuf := Padl( Trim( ModalDialog( cAuf, cTitle, oDlg1, nXsize, nYsize ) ), 6 ) FIND &cAuf IF val(cAuf) == 1->Auftrnr .or. cAuf == "" EXIT ELSE cAuf := Space(6) cTitle := "Andere Auftrag-Nr. :" ENDIF ENDDO aData1 := SatzGet( Select(), RecNo() ) SetAppFocus( oDlg1 ) RETURN /* * Die Funktion zeigt, wie ein modaler Dialog genutzt wird. * Da der Dialog modal ist, kann die Funktion Daten zurckgeben. */ FUNCTION Modaldialog( cString, cTitle, oDlg1, nXsize, nYsize ) LOCAL nEvent, mp1, mp2, oXbp, lExit LOCAL oDlg, oSle, oMle, oFocus, aPos, aSize //, drawingArea // LOCAL nXsize := 240 // LOCAL nYsize := 180 IF nXsize>399 cString := MemoRead( cString ) ENDIF drawingArea := oDlg1:drawingArea //* /* * Gr”áe des Desktop Fensters */ // aSize := AppDeskTop():currentSize() aSize := drawingArea:currentSize() /* * Position fr zentrierte Anzeige des Dialogfensters berechnen */ aPos := { ( aSize[1]-nXsize )/2, ( aSize[2]-nYsize+20 ) / 2 } /* * Dialogfenster mit unterschiedlichem Parent und Owner erzeugen */ // oDlg := XbpDialog():new( AppDesktop(), SetAppWindow(), aPos, {nXsize,nYsize} ) // oDlg := XbpDialog():new( drawingArea, SetAppWindow(), aPos, {nXsize,nYsize} ) oDlg := XbpDialog():new( oDlg1, drawingArea, aPos, {nXsize,nYsize} ) oDlg:title := cTitle oDlg:taskList := .T. oDlg:minButton := .F. oDlg:maxButton := .F. oDlg:create() // oDlg:drawingArea:setFontCompoundName( FONT_HELV_SMALL ) // oDlg:Close := {|| lExit := .T. } SetAppFocus( oDlg ) /* * Gr”áe der drawing area */ aSize := oDlg:drawingArea:currentSize() IF nXsize<400 /* * Zentrierte Position fr SLE berechnen und SLE erzeugen * 48 = Abstand von unten * 20 = H”he des SLE */ aPos := { 12, ( aSize[2] - 20 ) / 2 } oSle := XbpSle():new( oDlg:drawingArea, , aPos, { aSize[1] - 24, 20 } ) oSle:TabStop := .T. oSle:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle:create() oSle:setData( cString ) oSle:setName( 111 ) ENDIF IF nXsize>399 oDlg:drawingArea:setFontCompoundName( "8.Courier" ) oMle := XbpMle():new( oDlg:drawingArea,, {30,40}, {nXsize-60,nYsize-70}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oMle:dataLink := {|x| IIf( x==NIL, cString, cString := x ) } oMle:wordWrap := .T. oMle:horizScroll := IIf( cTitle="Bestatt", .T., .F. ) oMle:create():setData() ENDIF /* * Berechne zentrierte Position fr Pushbutton und erzeuge ihn */ aPos := { ( aSize[1]-72 ) / 2, 12 } oXbpBok := XbpPushbutton():new( oDlg:drawingArea,, aPos, {72,24} ) oXbpBok:caption := "OK" // oXbpBok:activate := {|| lExit := .T. } oXbpBok:TabStop := .T. oXbpBok:create() oXbpBok:activate := {|| PostAppEvent( xbeP_Close ) } /* * XBP der gerade Fokus hat sichern und Fokus auf Sle setzen */ IF nXsize<400 oFocus := SetAppFocus( oSle ) ENDIF IF nXsize>399 oFocus := SetAppFocus( oMle ) ENDIF /* * Dialogfenster modal schalten. * WICHTIG: Dadurch wird das Owner Fenster gesperrt -> SetAppWindow() */ oDlg:setModalState( XBP_DISP_APPMODAL ) oDlg:show() /* * Eine Event-Loop muá jetzt verwendet werden, da die * Funktion einen Rckgabewert hat. */ // lExit := .F. // DO WHILE ! lExit nEvent := xbe_None DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeP_Keyboard DO CASE CASE mp1 == xbeK_RETURN .OR. mp1 == xbeK_F10 .OR. mp1 == xbeK_ESC PostAppEvent( xbeP_Activate,,, oXbpBok ) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO /* * Dialogfenster nicht-modal schalten. * WICHTIG: Dadurch wird das Owner Fenster entsperrt */ oDlg:setModalState( XBP_DISP_MODELESS ) /* * Daten vom Sle holen, Dialogfenster freigeben und * Fokus auf vorherigen XBP setzen */ IF nXsize<400 cString := oSle:getData() ELSE cString := oMle:getData() ENDIF oDlg:destroy() SetAppFocus( oFocus ) RETURN Trim( cString ) FUNCTION Neu( oDlg1, aData1, nXsize, nYsize ) LOCAL cAuf := Space(6) LOCAL cTitle := "Neue Auftrag-Nr. eingeben :" IIF( 1->Auftrnr>0, , DbDelete()) DO WHILE .T. cAuf := Padl( ModalDialog( cAuf, cTitle, oDlg1, nXsize, nYsize ), 6 ) FIND &cAuf IF Found() .AND. VAL( cAuf ) > 0 cAuf := Space(6) cTitle := "Schon belegt! Neue Auftrag-Nr. :" ELSEIF VAL( cAuf ) < 1000000 EXIT ELSE cAuf := Space(6) cTitle := "Zu lang! Neue Auftrag-Nr. :" ENDIF ENDDO aData1 := SatzGet( Select(), RecNo() ) IF VAL( cAuf ) > 0 1->(DbAppend()) REPLACE 1->AUFTRNR WITH Val( cAuf ) aData1[1] := Val( cAuf ) REPLACE todesurs with "natrlicher Tod" REPLACE staatsan with "deutsch" ENDIF SetAppFocus ( oDlg1 ) RETURN aData1 PROCEDURE F1( cDatei, cTitle, oDlg1, nXsize, nYsize ) ModalDialog( cDatei, cTitle, oDlg1, nXsize, nYsize ) SetAppFocus ( oDlg1 ) RETURN FUNCTION Ehe( oDlg1, aEditcontrols, nXsize, nYsize ) LOCAL aEhe := {} LOCAL cTitle := "Ehe-Partner :" aEhe := IIf( 1->EH_NAME = " " , ; { 1->NAME," "," ",1->STRASSE, ; 1->PLZ_ORT,CtoD(" "),CtoD(" ") } , ; { 1->EH_NAME,1->EH_VNAME,1->EH_GEBN, ; 1->EH_STR,1->EH_ORT,1->EH_GEBD, ; 1->EH_GEST } ) aEhe := EheDialog( aEhe, cTitle, oDlg1, nXsize, nYsize ) SetAppFocus ( oDlg1 ) RETURN aEditcontrols FUNCTION Ehedialog( aEhe, cTitle, oDlg1, nXsize, nYsize ) LOCAL nEvent, mp1, mp2, oXbp, lExit, aEditControls := {} LOCAL oDlg, oSle, oFocus, aPos, aSize //, drawingArea LOCAL nBo := nYsize - 50 // tats„chliche Bildschirmaufl”sung: LOCAL aSizeDesktop := AppDesktop():currentSize() LOCAL nBSb := aSizeDesktop[1] LOCAL nBSh := aSizeDesktop[2] // folgende Zahlen-Werte basieren auf 800x600: LOCAL nV := nBSb/800 // Korrekturfaktor fr tats„chliche Aufl”sung LOCAL n5 := 5*nV LOCAL n10 := 10*nV LOCAL nBl1 := int(60*nV) // L„nge des Bezeichnungsfeldes LOCAL nBl2 := int(50*nV) // L„nge des Bezeichnungsfeldes LOCAL nBl3 := int(30*nV) // L„nge des Bezeichnungsfeldes LOCAL nBl4 := int(20*nV) // L„nge des Bezeichnungsfeldes LOCAL nBh := int(20*nV) // H”he des Bezeichnungsfeldes =20 LOCAL nBz := int(25*nV) // Zeilenh”he des Bezeichnungsfeldes =25 LOCAL nR1 := 5 // linker Rand Bezeichnungsfeld LOCAL nR2 := int(70*nV) // linker Rand EingabeFeld LOCAL nFl1 := int(170*nV) // L„nge des Eingabefeldes LOCAL nFl2 := int(120*nV) // L„nge des Eingabefeldes LOCAL nFl3 := int(80*nV) // L„nge des Eingabefeldes LOCAL nFl4 := int(60*nV) // L„nge des Eingabefeldes LOCAL nFl5 := int(30*nV) // L„nge des Eingabefeldes LOCAL nFa := 0 LOCAL nT1 := int(200*nV) // Linker Rand Taste LOCAL nT2 := int(430*nV) // Linker Rand Taste LOCAL nT3 := int(490*nV) // Linker Rand Taste LOCAL nT4 := int(550*nV) // Linker Rand Taste LOCAL nT5 := int(610*nV) // Linker Rand Taste LOCAL nT6 := int(670*nV) // Linker Rand Taste LOCAL nT7 := int(730*nV) // Linker Rand Taste LOCAL nTl := int(40*nV) // Linker Rand Taste drawingArea := oDlg1:drawingArea aSize := drawingArea:currentSize() aPos := { ( aSize[1]-nXsize )/2, ( aSize[2]-nYsize+20 ) / 2 } // oDlg := XbpDialog():new( drawingArea, SetAppWindow(), aPos, {nXsize,nYsize} ) oDlg := XbpDialog():new( oDlg1, drawingArea, aPos, {nXsize,nYsize} ) oDlg:title := cTitle oDlg:taskList := .T. oDlg:minButton := .F. oDlg:maxButton := .F. oDlg:create() // oDlg:drawingArea:setFontCompoundName( FONT_HELV_SMALL ) oDlg:Close := {|| lExit := .T. } drawingArea := oDlg:drawingArea // oFocus := SetAppFocus( drawingArea ) oXbp := XbpStatic():new( drawingarea, , {nR1-n5,nR1-n5}, {nXSize-n10,nYSize-nBl3},) oXbp:clipSiblings := .T. oXbp:type := XBPSTATIC_TYPE_GROUPBOX oXbp:create() nBo := nBo-nBz oSle := XbpStatic():new( drawingarea, , {nR1,nBo}, {nBl1,nBh} ) oSle:caption := "Name:" oSle:clipSiblings := .T. oSle:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oSle:create() nFa := 28 ; nFl := nFa*6 oSle := XbpSLE():new( drawingarea, , {nR2,nBo}, {nFl1,nBh}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle:bufferLength := nFa oSle:TabStop := .T. oSle:clipSiblings := .T. oSle:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle:group := XBP_WITHIN_GROUP oSle:dataLink := {|x| IIf( PCOUNT()==0, Trim( 1->EH_NAME ), 1->EH_NAME := x ) } oSle:create():setData( TRIM(aEhe[1]) ) AAdd ( aEditControls, oSle ) nBo := nBo-nBz oXbp := XbpStatic():new( drawingarea, , {nR1,nBo}, {nBl1,nBh} ) oXbp:caption := "Vorname:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() nFa := 28 ; nFl := nFa*6 oXbp := XbpSLE():new( drawingarea, , {nR2,nBo}, {nFl1,nBh}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oXbp:bufferLength := nFa oXbp:clipSiblings := .T. oXbp:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oXbp:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oXbp:group := XBP_WITHIN_GROUP oXbp:dataLink := {|x| IIf( PCOUNT()==0, Trim( 1->EH_VNAME ), 1->EH_VNAME := x ) } oXbp:create():setData( TRIM(aEhe[2]) ) AAdd ( aEditControls, oXbp ) nBo := nBo-nBz oXbp := XbpStatic():new( drawingarea, , {nR1,nBo}, {nBl1,nBh} ) oXbp:caption := "Geb.-Name:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() nFa := 28 ; nFl := nFa*6 oXbp := XbpSLE():new( drawingarea, , {nR2,nBo}, {nFl1,nBh}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oXbp:bufferLength := nFa oXbp:clipSiblings := .T. oXbp:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oXbp:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oXbp:group := XBP_WITHIN_GROUP oXbp:dataLink := {|x| IIf( PCOUNT()==0, Trim( 1->EH_GEBN ), 1->EH_GEBN := x ) } oXbp:create():setData( TRIM(aEhe[3]) ) AAdd ( aEditControls, oXbp ) nBo := nBo-nBz oXbp := XbpStatic():new( drawingarea, , {nR1,nBo}, {nBl1,nBh} ) oXbp:caption := "Straáe:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() nFa := 28 ; nFl := nFa*6 oXbp := XbpSLE():new( drawingarea, , {nR2,nBo}, {nFl1,nBh}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oXbp:bufferLength := nFa oXbp:clipSiblings := .T. oXbp:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oXbp:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oXbp:group := XBP_WITHIN_GROUP oXbp:dataLink := {|x| IIf( PCOUNT()==0, Trim( 1->EH_STR ), 1->EH_STR := x ) } oXbp:create():setData( TRIM(aEhe[4]) ) AAdd ( aEditControls, oXbp ) nBo := nBo-nBz oXbp := XbpStatic():new( drawingarea, , {nR1,nBo}, {nBl1,nBh} ) oXbp:caption := "PLZ/Ort:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() nFa := 28 ; nFl := nFa*6 oXbp := XbpSLE():new( drawingarea, , {nR2,nBo}, {nFl1,nBh}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oXbp:bufferLength := nFa oXbp:clipSiblings := .T. oXbp:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oXbp:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oXbp:group := XBP_WITHIN_GROUP oXbp:dataLink := {|x| IIf( PCOUNT()==0, Trim( 1->EH_ORT ), 1->EH_ORT := x ) } oXbp:create():setData( TRIM(aEhe[5]) ) AAdd ( aEditControls, oXbp ) nBo := nBo-nBz oXbp := XbpStatic():new( drawingarea, , {nR1,nBo}, {nBl1,nBh} ) oXbp:caption := "geb/gest:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:create() nFa := 10 ; nFl := nFa*7 oXbp := XbpSLE():new( drawingarea, , {nR2,nBo}, {nFl3,nBh}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oXbp:bufferLength := nFa oXbp:clipSiblings := .T. oXbp:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oXbp:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oXbp:group := XBP_WITHIN_GROUP oXbp:dataLink := {|x| IIf( PCOUNT()==0, ; IIf( DtoC( 1->EH_GEBD )=" ", trim(" "), DtoC( 1->EH_GEBD )), ; IIf( len(x)<7, 1->EH_GEBD := CtoD(x+str(year(date(),4,0))), ; 1->EH_GEBD := CtoD(x) ) ) } oXbp:create():setData( IIf( ValType(aEhe[6])=="D", ; IIf( DtoC(aEhe[6])=" ", TRIM(" "), DtoC(aEhe[6])), ) ) AAdd ( aEditControls, oXbp ) nFa := 10 ; nFl := nFa*7 oXbp := XbpSLE():new( drawingarea, , {nR2+nFl1-nFl3,nBo}, {nFl3,nBh}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oXbp:bufferLength := nFa oXbp:clipSiblings := .T. oXbp:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oXbp:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oXbp:group := XBP_WITHIN_GROUP oXbp:dataLink := {|x| IIf( PCOUNT()==0, ; IIf( DtoC( 1->EH_GEST )=" ", trim(" "), DtoC( 1->EH_GEST )), ; IIf( len(x)<7, 1->EH_GEST := CtoD(x+str(year(date(),4,0))), ; 1->EH_GEST := CtoD(x) ) ) } oXbp:create():setData( IIf( ValType(aEhe[7])=="D", ; IIf( DtoC(aEhe[7])=" ", TRIM(" "), DtoC(aEhe[7])), ) ) AAdd ( aEditControls, oXbp ) oXbpBok := XbpPushbutton():new( drawingarea, , {nXSize/2-36,20}, {72,24} ) oXbpBok:caption := "OK" oXbpBok:activate := {|| Satzsp(), Gather( aEditControls ), DbRUnlock(), ; PostAppEvent( xbeP_Close ) } oXbpBok:TabStop := .T. oXbpBok:group := XBP_WITHIN_GROUP oXbpBok:create() oDlg:show() oFocus := SetAppFocus( oSle ) oDlg:setModalState( XBP_DISP_APPMODAL ) // lExit := .F. // DO WHILE ! lExit nEvent := xbe_None DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeP_Keyboard DO CASE CASE mp1 == xbeK_RETURN .AND. oXbp == oXbpBok PostAppEvent( xbeP_Activate,,, oXbpBok ) CASE mp1 == xbeK_ESC .OR. mp1 == xbeK_F10 .OR. mp1 == xbeK_PGDN PostAppEvent( xbeP_Activate,,, oXbpBok ) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO oDlg:setModalState( XBP_DISP_MODELESS ) // aEhe := oSle:getData() oDlg:destroy() SetAppFocus( oFocus ) RETURN aEhe FUNCTION Krankenhaus( cKkh, cVerst1, cVerst2, cVerst3 ) LOCAL nOldArea := Select() select 5 find &(Upper(cKkh)) IF Eof() cVerst1 := cVerst2 := cVerst3 := "?? " ELSE cVerst1 := name1 cVerst2 := strasse cVerst3 := plz_ort ENDIF SELECT &nOldArea RETURN Found() //------------------------------------------------- FUNCTION ModalFen( cString, cTitle, oDlg1, nXsize, nYsize, nCase ) LOCAL nEvent, mp1, mp2, oXbp, lExit LOCAL oDlg, oSle, oMle, oFocus, aPos, aSize //, drawingArea nXsize := IIf( nXSize<>NIL, nXSize, 300 ) nYsize := IIf( nYsize<>NIL, nYsize, 300 ) cTitle := IIf( cTitle<>NIL, cTitle, "A C H T U N G !" ) cString := IIf( cString<>NIL, cString, "Datensatz ist z.Zt. gesperrt!" ) oDlg1 := IIf( oDlg1<>NIL, oDlg1, AppDesktop() ) drawingArea := oDlg1:drawingArea //* aSize := drawingArea:currentSize() aPos := { ( aSize[1]-nXsize )/2, ( aSize[2]-nYsize+20 ) / 2 } oDlg := XbpDialog():new( oDlg1, drawingArea, aPos, {nXsize,nYsize} ) oDlg:title := cTitle oDlg:taskList := .T. oDlg:minButton := .F. oDlg:maxButton := .F. oDlg:create() // oDlg:drawingArea:setFontCompoundName( "12.Arial" ) oFocus := SetAppFocus( oDlg ) DO CASE CASE nCase == NIL oXbp := XbpStatic():new( oDlg:drawingarea, , {20,nYsize/2}, {nXsize-40,30} ) oXbp:caption := cString oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_CENTER oXbp:create() CASE nCase == 1 oXbp := GStat( oDlg:drawingarea, cString, {20,50}, {nXsize-40, nYsize-100}, "TEXT" ) CASE nCase == 31 oXbp := GMulti( oDlg:drawingarea, , {20,50}, {nXsize-40, nYsize-100}, Bss(cString), cString ) ENDCASE aSize := oDlg:drawingArea:currentSize() aPos := { ( aSize[1]-72 ) / 2, 12 } oXbpBok := XbpPushbutton():new( oDlg:drawingArea,, aPos, {72,24} ) oXbpBok:caption := "OK" oXbpBok:TabStop := .T. oXbpBok:create() oXbpBok:activate := {|| PostAppEvent( xbeP_Close ) } oDlg:setModalState( XBP_DISP_APPMODAL ) oDlg:show() nEvent := xbe_None DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeP_Keyboard DO CASE CASE mp1 == xbeK_RETURN .OR. mp1 == xbeK_F10 .OR. mp1 == xbeK_ESC PostAppEvent( xbeP_Activate,,, oXbpBok ) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() SetAppFocus( oFocus ) RETURN Trim( cString ) // Fktn Bs/Bn/Bd als Codebl”cke fr das :datalink: FUNCTION Bs( cFeld ) cBs1 := "{|x| IIf( PCOUNT()==0, Trim(" cBs2 := ")," cBs3 := ":= x ) }" cBs := cBs1+cFeld+cBs2+cFeld+cBs3 RETURN cBs FUNCTION Bss( cFeld ) cBs1 := "{|x| IIf( PCOUNT()==0, Trim(ï" cBs2 := "ï),ï" cBs3 := "ï:= x ) }" cBs := cBs1+cFeld+cBs2+cFeld+cBs3 RETURN cBs // oXbp:dataLink := {|x| IIf( PCOUNT()==0, Trim( 1->RING ), 1->RING := x ) } FUNCTION Bn( cFeld ) cBn1 := "{|x| IIf( PCOUNT()==0, Transform(" cBn2 := ", '@N' )," cBn3 := " := Val(x) ) }" cBn := cBn1+cFeld+cBn2+cFeld+cBn3 RETURN cBn FUNCTION Bd( cFeld ) cBd1 := "{|x| IIf( PCOUNT()==0, IIf( DtoC(" cBd2 := ")=ï ï, trim(ï ï), DtoC(" cBd3 := " )), IIf( len(x)<7," cBd4 := " := CtoD(x+str(year(date(),4,0)))," cBd5 := " := CtoD(x) ) ) }" cBd := cBd1+cFeld+cBd2+cFeld+cBd3+cFeld+cBd4+cFeld+cBd5 RETURN cBd //XBase-Parts: FUNCTION GStat( oDlg1, cText, aPos, aSize, cType ) // cType := "XBPSTATIC_TYPE_"+cType oXbp := XbpStatic():new( oDlg1, , aPos, aSize ) oXbp:caption := cText oXbp:clipSiblings := .T. // oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT // oXbp:type := &(cType) DO CASE CASE cType = "GROUPBOX" oXbp:type := XBPSTATIC_TYPE_GROUPBOX CASE cType = "TEXT" oXbp:type := XBPSTATIC_TYPE_TEXT ENDCASE oXbp:create() RETURN oXbp FUNCTION GSingle( oDlg1, oDlg2, aPos, aSize, cFeld, nFa , cGroup ) oXbp := XbpSLE():new( oDlg1, oDlg2, aPos, aSize, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oXbp:bufferLength := nFa oXbp:clipSiblings := .T. oXbp:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oXbp:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } // oXbp:group := &cGroup oXbp:dataLink := &( cFeld ) oXbp:create():setData() RETURN oXbp FUNCTION GMulti( oDlg1, oDlg2, aPos, aSize, cFeld, cString, cGroup ) oXbp := XbpMle():new( oDlg1, oDlg2, aPos, aSize, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) // oXbp:dataLink := &( cFeld ) oXbp:clipSiblings := .T. oXbp:ignoreTab := .T. oXbp:tabStop := .T. oXbp:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oXbp:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oXbp:wordWrap := .T. oXbp:horizScroll := .F. // oXbp:group := XBP_END_GROUP oXbp:create():setData(cString) RETURN oXbp