Moderator: Moderatoren







PROCEDURE vodruck()
// Felder des Array
// Feld, Header,Browse,Folge,Breite
LOCAL aDaten := {;
{"(oVo:nArea)->datumein" ,"Erfass;Datum" ,.T., 1,70},;
{"(oVo:nArea)->ean" ,"Ean-8" ,.T., 2,70},;
{"IF((oVo:nArea)->internetno,'JA',' ')" ,"I-Net;Sp" ,.T., 3,10},;
{"(oVo:nArea)->lagerbs" ,"BS" ,.T., 4,30},;
{"(oVo:nArea)->lagernr" ,"Platz" ,.T., 5,50},;
{"(oVo:nArea)->preisinet" ,"Vk;Inet" ,.T., 6,50},;
{"(oVo:nArea)->preissoll" ,"Vk;Soll" ,.T., 7,50},;
{"(oVo:nArea)->preisek" ,"Preis;Ek" ,.T., 8,50},;
{"IF((oVo:nArea)->reserve,'JA',' ')" ,"UL" ,.T., 9,20},;
{"(oVostamm:nArea)->datumgestr" ,"Streich;Datum" ,.T.,10,70},;
{"(oVostamm:nArea)->datumvoe" ,"VÖ;Datum" ,.T.,11,70},;
{"(oVostamm:nArea)->fsk" ,"FSK" ,.T.,12,10},;
{"(oVostamm:nArea)->hap" ,"HAP" ,.T.,13,50},;
{"IF((oVostamm:nArea)->indiziert,'JA',' ')" ,"Indiz;iert" ,.T.,14,10},;
{"(oVostamm:nArea)->vkgbr" ,"VK;GBR" ,.T.,15,40},;
{"(oVostamm:nArea)->vkneu" ,"VK;NEU" ,.T.,16,40},;
{"TokenUpper(oVo:indexohneartikel((oVostamm:nArea)->v_darstell))","Interpret;Darsteller",.T.,17,200},;
{"TokenUpper(oVo:indexohneartikel((oVostamm:nArea)->v_titel))" ,"Titel" ,.T.,18,200},;
{"(oEan13:nArea)->ean" ,"EAN-13" ,.T.,19,85},;
{"Transform(Date() - (oVo:nArea)->datumein + 1,'9999')" ,"Lager;Tage" ,.T.,20,40},;
{"(oGenre:nArea)->bez" ,"Genre" ,.T.,21,150},;
{"(oSysteme:nArea)->kuerzel" ,"SYS" ,.T.,22,40},;
{"(oSysteme:nArea)->bez" ,"System" ,.T.,23,150};
}
LOCAL aVo := {}
LOCAL cVersion := "23.07.2010"
LOCAL getlist := {}
LOCAL GetOptions
LOCAL nFensterBreite
LOCAL nFensterHoehe
LOCAL nI
LOCAL nMenge
LOCAL nPbLaenge := 70
LOCAL oBrowse := NIL
LOCAL oDialog := NIL
LOCAL oDialogBrowse := NIL
LOCAL oDialogProgress := NIL
LOCAL oGruppeBrowse := NIL
LOCAL oGruppeButton := NIL
LOCAL oPbEnde := NIL
LOCAL oPbLinks := NIL
LOCAL oPbRechts := NIL
LOCAL oProgress := NIL
MEMVAR oGenre
MEMVAR oHauptDialog
MEMVAR oMessage
MEMVAR oSysteme
MEMVAR oVo
MEMVAR oVostamm
MEMVAR oEan13
nFensterBreite := oHauptDialog:clientsize[1]
nFensterHoehe := oHauptDialog:clientsize[2]
//------------------------------------------------------------------------------
oEan13 := ean13():new()
oGenre := genre():new()
oSysteme := systeme():new()
oVo := kassette():new()
oVostamm := fstamm():new()
oEan13:db_oeffnen(,,,,,,,,,,,,,.F.)
oGenre:db_oeffnen(,,,,,,,,,,,,,.F.)
oSysteme:db_oeffnen(,,,,,,,,,,,,,.F.)
oVo:db_oeffnen(,,,,.T.,,,,,,,,,.F.)
oVostamm:db_oeffnen(,,,,,,,,,,,,,.F.)
(oVo:nArea)->(DbSetRelation(oVostamm:nArea ,{|| Str((oVo:nArea)->idvostamm,8,0) } ,"Str((oVo:nArea)->idvostamm,8,0)" ,"id" ) )
(oVostamm:nArea)->(DbSetRelation(oEan13:nArea ,{|| Str((oVostamm:nArea)->id,8,0) } ,"Str((oVostamm:nArea)->id,8,0)" ,"idvostamm" ))
(oVostamm:nArea)->(DbSetRelation(oGenre:nArea ,{|| Str((oVostamm:nArea)->idgenre,8,0) } ,"Str((oVostamm:nArea)->idgenre,8,0)" ,"id" ))
(oVostamm:nArea)->(DbSetRelation(oSysteme:nArea,{|| Str((oVostamm:nArea)->idsystem,8,0) },"Str((oVostamm:nArea)->idsystem,8,0)","id" ))
//------------------------------------------------------------------------------
oDialogProgress := DialogFenster():new(AppDesktop(),SetAppWindow(),,{610,60},,,.F.)
oProgress := ProgressBar():new(oDialogProgress,,{ oDialogProgress:currentsize()[1]-10,24 },,.F.)
oDialogProgress:title := "Datenerzeugung VO-Druck..."
oDialogProgress:create()
oProgress:create()
oProgress:minimum := 1
oProgress:maximum := (oVo:nArea)->(LastRec())
oProgress:color := GRA_CLR_GREEN
(oVo:nArea)->(DbEval( { || fuelleVOArray(aVo,aDaten),oProgress:increment() }) )
oProgress:quit()
oDialogProgress:destroy()
(oVo:nArea)->(DbClearRelation())
(oVostamm:nArea)->(DbClearRelation())
oVo:schliesse_datenbank(.T.)
//------------------------------------------------------------------------------
@ 5,1 DCSTATIC;
OBJECT oDialogBrowse;
SIZE DCGUI_PARENTWIDTH,DCGUI_PARENTHEIGHT;
TYPE XBPSTATIC_TYPE_RECESSEDRECT
//------------------------------------------------------------------------------
@ 10,5 DCGROUP oGruppeBrowse;
CAPTION "VO-Auswahl";
PARENT oDialogBrowse;
SIZE DCGUI_PARENTWIDTH-10,DCGUI_PARENTHEIGHT - 65
@ 0,0 DCGROUP oGruppeButton;
EVAL {|| oGruppeButton:setPos( {5,5} ) };
PARENT oDialogBrowse;
SIZE DCGUI_PARENTWIDTH-10,50
//------------------------------------------------------------------------------
@ 15,5 DCBROWSE oBrowse;
DATA aVo;
HEADLINES 2;
OPTIMIZE;
PARENT oGruppeBrowse;
SIZE DCGUI_PARENTWIDTH-10,DCGUI_PARENTHEIGHT - 20
nMenge := Len(aDaten)
FOR nI := 1 TO nMenge
IF aDaten[nI][3]
DCBROWSECOL ELEMENT nI;
HEADER aDaten[nI][2];
PARENT oBrowse;
SORT {|aPos,nColPos,self| Spaltensortierung(aVo,nColPos,oBrowse) };
WIDTH aDaten[nI,5]
ENDIF
NEXT
//------------------------------------------------------------------------------
@ 0,0 DCPUSHBUTTON;
ACTION {|| MoveColumn(1,oBrowse),DC_GETREFRESH(GetList) };
CAPTION "<- Links";
EVAL {|| oPbLinks:setPos( {5,5} ) };
OBJECT oPbLinks;
PARENT oGruppeButton;
SIZE nPbLaenge,DCGUI_PARENTHEIGHT - 20;
WHEN {|| oBrowse:colpos > 1}
@ 0,0 DCPUSHBUTTON;
ACTION {|| MoveColumn(2,oBrowse),DC_GETREFRESH(GetList) };
CAPTION "Rechts ->";
EVAL {|| oPbRechts:setPos( {oPbLinks:currentpos()[1] + oPbLinks:currentsize()[1],5} ) };
OBJECT oPbRechts;
PARENT oGruppeButton;
SIZE nPbLaenge,DCGUI_PARENTHEIGHT - 20;
WHEN {|| oBrowse:colpos < oBrowse:ColCount }
@ 0,0 DCPUSHBUTTON;
ACTION {|| DC_ReadGuiEvent(DCGUI_EXIT_ABORT,GetList) };
CAPTION 7755;
EVAL {|| oPbEnde:setPos( {oPbRechts:currentpos()[1] + oPbRechts:currentsize()[1],5} ) };
OBJECT oPbEnde;
PARENT oGruppeButton;
SIZE nPbLaenge,DCGUI_PARENTHEIGHT - 20
//------------------------------------------------------------------------------
DCGETOPTIONS;
BORDER XBPDLG_SIZEBORDER;
NOMAXBUTTON;
NOMINBUTTON;
PIXEL;
WINDOWWIDTH nFensterBreite;
WINDOWHEIGHT nFensterHoehe
DCREAD GUI;
APPWINDOW oHauptDialog:drawingArea;
OPTIONS GetOptions;
PARENT @oDialog;
TITLE "VO-Druck " + cVersion
RETURN
********************************************************************************
FUNCTION fuelleVOArray(aVo,aDaten)
LOCAL aErgebnis := AClone(aDaten)
LOCAL cFeld := Aeval( aErgebnis, {|a| a := &(a[1]) },,, .T. )
AAdd(aVo, cFeld)
RETURN(.T.)
********************************************************************************
FUNCTION spaltenSortierung(aVo,nCol)
aVo := ASort(aVo,,,{|x,y|x[nCol] < y[nCol] } )
RETURN(.T.)
********************************************************************************
FUNCTION MoveColumn(nMode,oBrowse)
LOCAL nPos := oBrowse:colPos
LOCAL oColumn := oBrowse:getColumn(nPos)
LOCAL aSize := oColumn:currentSize()
oBrowse:delColumn(nPos)
IF nMode = 1
oBrowse:insColumn(nPos-1,oColumn)
oBrowse:left()
ELSE
oBrowse:insColumn(nPos+1,oColumn)
oBrowse:right()
ENDIF
oColumn:setSize(aSize)
oBrowse:forceStable()
RETURN(.T.)

SORT {|aPos,nColPos,self| Spaltensortierung(aVo,nColPos,oBrowse) }DCBROWSECOL ... CARGO nI SORT {|aPos,nColPos,self| Spaltensortierung(aVo,self:Cargo[3],oBrowse) }

FOR nI := 1 TO nMenge
IF aDaten[nI][3]
DCBROWSECOL ELEMENT nI;
CARGO nI;
HEADER aDaten[nI][2];
PARENT oBrowse;
SORT {|aPos,nColPos,self| Spaltensortierung(aVo,self:cargo[3],oBrowse) };
WIDTH aDaten[nI,5]
ENDIF
NEXT

oBrowse:GetColumn(oBrowse:ColPos):Cargo[3]


du willst es scheinbar in der Sort Function "korrigieren" ... ich würde das schon in der Function MoveColumn() machen.Manfred hat geschrieben:gerade habe ich in einem Arraybrowse Spalten verschoben und mußte feststellen, das danach die SORT Option nicht mehr klappt.
ansehen ob es da einen "Index" für das Array gibt und es in MoveColumn() "korrigeren"SORT-Option


nSortColumn := 1
...
bColumnClick := {||nSortColumn := o:Cargo[3]}
DCBROWSECOLUMN ELEMENT 1 ... EVAL {|o|o:Heading:LbClick := bColumnClick,o:Heading:RbClick := bColumnClick} ... CARGO nI



#include "dcdialog.ch"
#pragma library("dclipx.lib")
PROCEDURE appsys() ; RETURN
procedure main()
local GetList := {}, oBrowse, aDir := Directory()
nSortColumn := 1
bSort := {||aDir := MySort(aDir,nSortColumn)}
bColumnClick := {|a,b,o|nSortColumn := o:SetParent():Cargo[3],DC_DebugQout(nSortColumn)}
bEval := {|o|o:Heading:LbClick := bColumnClick,o:Heading:RbClick := DC_MergeBlocks(bColumnClick,o:Heading:RbClick)}
@ 1,1 DCBROWSE oBrowse DATA aDir SIZE 100,20 RBSELECT
DCBROWSECOL ELEMENT 1 HEADER 'Name' WIDTH 10 PARENT oBrowse CARGO 1 EVAL bEval SORT bSort
DCBROWSECOL ELEMENT 2 HEADER 'Größe' WIDTH 10 PARENT oBrowse CARGO 2 EVAL bEval SORT bSort
DCBROWSECOL ELEMENT 3 HEADER 'Datum' WIDTH 10 PARENT oBrowse CARGO 3 EVAL bEval SORT bSort
DCBROWSECOL ELEMENT 4 HEADER 'Zeit' WIDTH 10 PARENT oBrowse CARGO 4 EVAL bEval SORT bSort
DCBROWSECOL ELEMENT 5 HEADER 'Attribs' WIDTH 10 PARENT oBrowse CARGO 5 EVAL bEval SORT bSort
DCBROWSECOL ELEMENT 6 HEADER 'Erw.Attr.' WIDTH 10 PARENT oBrowse CARGO 6 EVAL bEval SORT bSort
@ 21,1 DCPUSHBUTTON CAPTION 'Links' SIZE 10,1 ACTION {||MoveColumn(1,oBrowse),DC_GetRefresh(GetList)} ;
WHEN {||oBrowse:ColPos > 1}
@ 21,15 DCPUSHBUTTON CAPTION 'Rechts' SIZE 10,1 ACTION {||MoveColumn(2,oBrowse),DC_GetRefresh(GetList)} ;
WHEN {||oBrowse:ColPos < 6}
DCREAD GUI FIT ADDBUTTONS
return
STATIC FUNCTION MySort(aDir,nCol)
ASort( aDir,,,{|aY1,aY2| aY1[nCol] < aY2[nCol]})
RETURN aDir
STATIC FUNCTION MoveColumn( nMode, oBrowse )
* aus Rogers Beispielen
LOCAL oColumn, nPos, aFrozen, aSize, oHeading
aFrozen := oBrowse:setLeftFrozen({})
nPos := oBrowse:colPos
oColumn := oBrowse:getColumn(nPos)
aSize := oColumn:currentSize()
oBrowse:delColumn(nPos)
IF nMode = 1
oBrowse:insColumn(nPos-1,oColumn)
oBrowse:left()
ELSE
oBrowse:insColumn(nPos+1,oColumn)
oBrowse:right()
ENDIF
oColumn:setSize(aSize)
oBrowse:forceStable()
oBrowse:setLeftFrozen(aFrozen)
RETURN nil






Manfred hat geschrieben:Aber wie wird es dann im puren Xbase++ geregelt?



ataSource ist eine von Roger eingeführte iVar. Und, ja, das ist alles "plain Xbase++". 



aMyArray := NeuesArray(aMyArray)
FUNCTION NeuesArray(a)
aSize(a,0)
a := Directory()
RETURN a
oBrowse:DataSource := a

#include "dcdialog.ch"
#pragma library("dclipx.lib")
PROCEDURE appsys() ; RETURN
procedure main()
local GetList := {}, oBrowse, aDir := Directory()
nSortColumn := 1
bSort := {|a,n|MySort(aDir,nSortColumn)}
bColumnClick := {|a,b,o|nSortColumn := o:Parent:Cargo[3],oBrowse:SortColumn := nSortColumn}
bEval := {|o|o:Heading:LbClick := bColumnClick,o:Heading:RbClick := bColumnClick}
@ 1,1 DCBROWSE oBrowse DATA aDir SIZE 100,20 RBSELECT NODESCENDTOGGLE
DCBROWSECOL DATA {||DC_GetColArray(1,oBrowse)} HEADER 'Name' WIDTH 10 PARENT oBrowse CARGO 1 SORT bSort EVAL bEval
DCBROWSECOL DATA {||DC_GetColArray(2,oBrowse)} HEADER 'Größe' WIDTH 10 PARENT oBrowse CARGO 2 SORT bSort EVAL bEval
DCBROWSECOL DATA {||DC_GetColArray(3,oBrowse)} HEADER 'Datum' WIDTH 10 PARENT oBrowse CARGO 3 SORT bSort EVAL bEval
DCBROWSECOL DATA {||DC_GetColArray(4,oBrowse)} HEADER 'Zeit' WIDTH 10 PARENT oBrowse CARGO 4 SORT bSort EVAL bEval
DCBROWSECOL DATA {||DC_GetColArray(5,oBrowse)} HEADER 'Attribs' WIDTH 10 PARENT oBrowse CARGO 5 SORT bSort EVAL bEval
DCBROWSECOL DATA {||DC_GetColArray(6,oBrowse)} HEADER 'Erw.Attr.' WIDTH 10 PARENT oBrowse CARGO 6 SORT bSort EVAL bEval
@ 21.5,1 DCPUSHBUTTON CAPTION 'Links' SIZE 10,1 ACTION {||oBrowse:MoveColumn(-1),DC_GetRefresh(GetList)} ;
WHEN {||oBrowse:ColPos > 1}
@ 21.5,15 DCPUSHBUTTON CAPTION 'Rechts' SIZE 10,1 ACTION {||oBrowse:MoveColumn(1),DC_GetRefresh(GetList)} ;
WHEN {||oBrowse:ColPos < 6}
DCREAD GUI FIT ADDBUTTONS
return
STATIC FUNCTION MySort(aDir,nCol)
ASort( aDir,,,{|aY1,aY2| aY1[nCol] < aY2[nCol]})
RETURN aDir




Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast