2. Zeile in Spaltenüberschrift

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

2. Zeile in Spaltenüberschrift

Beitrag von saul »

Hallo,
wie bekomme ich beim XBPBrowse() eine 2. Zeile in eine Spaltenüberschrift. Ich meine irgendwo gelesen zu haben, dass man dazu ein Semikolon benutzt, weiß aber nicht mehr ob das richtig ist.

Hat einer eine Idee?

mfg
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: 2. Zeile in Spaltenüberschrift

Beitrag von brandelh »

ich habe mal schnell ein "Test;345" versucht und die Spalte zeigt "Test345", also so einfach geht es nicht.
Seltsam, dass das Semikolon geschluckt wird. Es kann sein dass eine Art Steuerung vorgesehen ist, aber ich habe keine solche gesehen.

Was geht ist wohl ownerdrawing.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: 2. Zeile in Spaltenüberschrift

Beitrag von AUGE_OHR »

saul hat geschrieben: Sa, 09. Dez 2017 19:25 Hat einer eine Idee?
siehe PDR 4990
HOWTO set multiline header of XbpBrowse()
gruss by OHR
Jimmy
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: 2. Zeile in Spaltenüberschrift

Beitrag von saul »

Hallo,
danke für die Info. Zu 100% verstanden habe ich das alles nicht, habe aber versucht das für mein Programm umzusetzen.

Code: Alles auswählen

oBrowse := XbpBrowse():new(oDlg:drawingArea ,, {0,33}  , {300, 300},  PARA_LU ,.T.)
oBrowse : CursorMode:=XBPBRW_CURSOR_CELL   // Cursor für eine Zeile
oBrowse : create()
browseblock()							// Navigationsblöcke für den Browser

oxbpcol:=XbpColumn():new(,,,,PARA_LUTAB)
oXbpCol:dataLink := {|| " "+str(cyclelfz,6,0)+" " }
oBrowse:addColumn( oxbpcol)

oBrowse:getColumn(1):Heading:setCell(1,"Test")  	// erscheint als Heading 
oBrowse:getColumn(1):Heading:setCell(2,"Zeile 2")	// erscheint überhaupt nicht, gibt aber auch keine Fehlermeldung
oBrowse:getColumn(1):Heading:getCell(1)			// gibt nur "Test" zurück
Wo habe ich den Denkfehler?
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: 2. Zeile in Spaltenüberschrift

Beitrag von AUGE_OHR »

saul hat geschrieben: So, 10. Dez 2017 6:27 danke für die Info.
Zu 100% verstanden habe ich das alles nicht, habe aber versucht das für mein Programm umzusetzen.
...
Wo habe ich den Denkfehler?
wie wäre es wenn du das Beispiel aus PDR 4990 als Ausgangsbasis nehmen würdest ...

sicherlich gibt es auch andere Lösungen aber die CLASS MultiLineCellGroup ist schon mal der richtige Weg.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: 2. Zeile in Spaltenüberschrift

Beitrag von brandelh »

ein PDR ?
in dessen Beschreibung sehe ich keine Fehlermeldung, sondern eher wie man eine fehlende Eigenschaft nachrüstet...

Code: Alles auswählen

#include "Appevent.ch"
#include "Common.ch"
#include "Font.ch"
#include "Xbp.ch"

#pragma library( "xppui2.lib" )

PROCEDURE AppSys
   // no Crt instances are created
RETURN

PROCEDURE DbeSys
   // This program does not use index files.
   // Therefore, we do not load DBE ORDER components.
   IF ! DbeLoad( "DBFDBE" )
      MsgBox( "Unable to load DBFDBE" )
   ENDIF

   IF ! DbeLoad( "FOXDBE" )
      MsgBox( "Unable to load FOXDBE" )
   ENDIF

   DbeSetDefault( "DBFDBE" )
RETURN

CLASS MultiLineCellGroup FROM XbpCellGroup
EXPORTED:
  INLINE METHOD Create( oParent, oOwner, aPos, aSize, aPP, lVisible )
     // always make sure that we have two lines
     ::XbpCellGroup:MaxRow := 2
  RETURN ::XbpCellgroup:Create( oParent, oOwner, aPos, aSize, aPP, lVisible )
ENDCLASS

CLASS MultiLineColumn FROM XbpColumn
EXPORTED:
  INLINE METHOD Init( oParent, oOwner, aPos, aSize, aPP, lVisible )
     ::XbpColumn:Init( oParent, oOwner, aPos, aSize, aPP, lVisible )
     // exchange the heading by our own header object
     ::Heading := MultilineCellgroup():New( self )
  RETURN self
ENDCLASS

PROCEDURE Main ( name )
   LOCAL nEvent, mp1, mp2, oXbp, oBrowse, aStruct, i, imax, bError, cDbe
   LOCAL aCols, aPP

   DEFAULT name TO GetFilename()

   IF name == NIL
      MsgBox ( "No Filename specified" + CHR(10) + CHR(10)+ ;
               "Usage: DBBrowse []" )
      RETURN
   ENDIF

   bError := ErrorBlock( {|oErr| Break( oErr ) } )
   cDBE   := "DBFDBE"
   FOR i:=1 TO 2
      BEGIN SEQUENCE
         DbUseArea( .T., cDBE, name )
      RECOVER

         IF i== 1
            cDBE := "FOXDBE"
            LOOP
         ENDIF
      ENDSEQUENCE
      EXIT
   NEXT
   ErrorBlock( bError )


   IF ! Used()
      MsgBox ( "Unable to open file" + CHR(10) + CHR(10)+ Name )
      QUIT
   ENDIF

   // create std dialog
   oXbp := GuiStdDialog( "Standard GUI Browser for DBF" )

   // create browser in window
   oBrowse := GuiBrowseDb( oXbp:drawingArea )

   // create columns for all fields but exclude FoxPro specific data types
   imax    := FCount()
   aStruct := DbStruct()
   aCols   := Array( imax )
   FOR i:=1 TO imax
      IF .NOT. aStruct[i,2] $ "BOVTXY"
         aPP      := {}
         Aadd ( aPP, { XBP_PP_COL_HA_CAPTION,   aStruct[i,1] } )
         // Aadd ( aPP, { XBP_PP_COL_HA_CHARWIDTH, aStruct[i,1] } )
         aCols[i] := MultiLineColumn():new(,,,,aPP)
         aCols[i]:DataLink := FieldBlockTrimmed(aStruct[i,1], aStruct[i,2])
         oBrowse:addColumn( aCols[i] )
      ENDIF
   NEXT

   oBrowse:Create()

   // Apply the second header line
   AEval( aCols, { | o | o:Heading:SetCell( 2, "Second Line" ) } )

   // overload resize that browser fills the window
   oXbp:drawingArea:resize := ;
       {|mp1,mp2,obj| obj:childList()[1]:setSize(mp2) }

   // show browser and set focus on it
   oXbp:show()
   oBrowse:show()
   SetAppFocus( oBrowse )

   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO
RETURN


******************************************************************
* Create GUI Browser with navigation codeblocks
******************************************************************
FUNCTION GuiBrowseDB( oParent, aPos, aSize )
   LOCAL oBrowse

   oBrowse := XbpBrowse():new( oParent,, aPos, aSize,, .F. )

   // navigation codeblocks for the browser
   oBrowse:skipBlock     := {|n| DbSkipper(n) }
   oBrowse:goTopBlock    := {| | DbGoTop()    }
   oBrowse:goBottomBlock := {| | DbGoBottom() }
   oBrowse:phyPosBlock   := {| | Recno()      }

   // Code blocks for the vertical scrollbar.
   // Note: DbPosition() returns values in the range from 0 to 100.
   // We multiply this with 10 to increase the granularity of
   // the vertical scrollbar.
   oBrowse:posBlock      := {| | DbPosition()*10    }
   oBrowse:goPosBlock    := {|n| DbGoPosition(n/10) }
   oBrowse:lastPosBlock  := {| | 1000               }
   oBrowse:firstPosBlock := {| | 0                  }

RETURN oBrowse


******************************************************************
* Create std dialog window hidden
******************************************************************
FUNCTION GuiStdDialog( cTitle )
   LOCAL oDlg

   DEFAULT cTitle TO "Standard Dialog Window"

   oDlg          := XbpDialog():new( ,,{10,10}, {600,400},, .F. )
   oDlg:icon     := 1
   oDlg:taskList := .T.
   oDlg:title    := cTitle
   oDlg:drawingArea:ClipChildren := .T.
   oDlg:create()
   oDlg:drawingArea:setFontCompoundName( FONT_DEFPROP_SMALL )

RETURN oDlg


******************************************************************
* Get filename with filedialog
******************************************************************
FUNCTION GetFilename()
   LOCAL oDlg := XbpFiledialog():New(), cFile

   oDlg:Title := "Please select DBF file"
   oDlg:Create()
   cFile := oDlg:Open( "..\..\DATA\*.DBF" )

RETURN cFile


****************************************************************************
* Data code block for fields
****************************************************************************
FUNCTION FieldBlockTrimmed( cFieldName, cType )
   LOCAL bBlock
   IF FieldPos( cFieldName ) <> 0
      IF ! "->" $ cFieldName
         cFieldName := "FIELD->"+cFieldName
      ENDIF
      IF cType = "C"
         bBlock := &( "{|x| IIf(x==NIL,RTrim("+cFieldName+"), ;
                 "+cFieldName+":=x)}" )
      ELSE
         bBlock := &( "{|x| IIf(x==NIL,"+cFieldName+","+cFieldName+":=x) }" )
      ENDIF
   ENDIF
RETURN bBlock
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: 2. Zeile in Spaltenüberschrift

Beitrag von AUGE_OHR »

brandelh hat geschrieben: So, 10. Dez 2017 23:36 ein PDR ?
in dessen Beschreibung sehe ich keine Fehlermeldung, sondern eher wie man eine fehlende Eigenschaft nachrüstet...
es gibt diverse PDR mit dem Title "HOW TO ..."
HowTo.jpg
HowTo.jpg (385.5 KiB) 4890 mal betrachtet
gruss by OHR
Jimmy
Antworten