*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.21" SourceFile="scrollcontainer.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
*
DEFINE CLASS _scrollcontainer AS _container OF "_baza.vcx"
*< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="But_sus1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="But_jos1" UniqueID="" Timestamp="" />
*
*m: do_adaugaobiect && Adauga un obiect la container.
*m: do_initializeaza
*m: do_initializeazaobiect
*m: do_redimensioneaza
*m: do_scrolldown
*m: do_scrollup
*m: do_stergeobiect && Sterge un obiect din container.
*p: cultimulobiect && Numele ultimului obiect adaugat.
*p: nactualheight && Distanta de la marginea de sus a ferestrei pana la marginea inferioara a celui mai de jos obiect.
*p: nactualwidth && Distanta de la marginea din stanga a ferestrei pana la marginea din dreapta a celui mai din dreapta obiect.
*p: nheightoffset && Distanta pe verticala dintre doua obiecte.
*p: nmaxheight && Inaltimea maxima vizibila a containerului.
*p: nmaxwidth && Latimea maxima vizibila a containerului.
*p: nnrobiecte && Numarul actual de obiecte din container.
*p: nnrobiectebottom && Numarul de obiecte care se afla sub linia de vizibilitate.
*p: nnrobiectetop && Numarul de obiecte care se afla deasupra liniei de vizibilitate.
*p: nnrobiectevizibile && Numarul maxim de obiecte vizibile la un moment dat.
*p: nwidthoffset && Distanta pe orizontala dintre doua obiecte.
*
PROTECTED nnrobiectebottom,nnrobiectetop,nnrobiectevizibile
*
cultimulobiect =
Height = 250
nactualheight = 0
nactualwidth = 0
Name = "_scrollcontainer"
nheightoffset = 0
nmaxheight = 0
nmaxwidth = 0
nnrobiecte = 0
nnrobiectebottom = 0
nnrobiectetop = 0
nnrobiectevizibile = 0
nwidthoffset = 0
Width = 409
*
ADD OBJECT 'But_jos1' AS but_jos WITH ;
Anchor = 8, ;
Left = 379, ;
Name = "But_jos1", ;
Top = 33, ;
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
ADD OBJECT 'But_sus1' AS but_sus WITH ;
Anchor = 8, ;
Left = 379, ;
Name = "But_sus1", ;
Top = 4, ;
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
PROCEDURE do_adaugaobiect && Adauga un obiect la container.
Lparameters tcNume,tcClasa,toHash
With This
If Type('toHash') <> 'O'
.AddObject(tcNume,tcClasa)
Else
.AddObject(tcNume,tcClasa,toHash)
EndIf
.nnrobiecte=.nnrobiecte+1
.&tcNume..Top=.nactualheight+.nheightoffset
.&tcNume..Left=3
.nactualheight=.&tcNume..Top+.&tcNume..Height
Do Case
Case .nnrobiecte-.nnrobiectetop>.nnrobiectevizibile
.but_jos1.Visible=.T.
Case .nnrobiecte<=.nnrobiectevizibile And .nnrobiectetop=0
.nmaxheight=.nactualheight+.nheightoffset
.Height=.nmaxheight
Otherwise
.but_jos1.Visible=.F.
Endcase
.cultimulobiect=tcNume
Endwith
ENDPROC
PROCEDURE do_initializeaza
Lparameters tnNrObiecteVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte
If Type('tnDistantaVObiecte')<>'N'
tnDistantaVObiecte=0
Endif
If Type('tnDistandaOObiecte')<>'N'
tnDistandaOObiecte=0
Endif
This.nnrobiectevizibile=tnNrObiecteVizibile
This.nheightoffset=tnDistantaVObiecte
This.nwidthoffset=tnDistandaOObiecte
This.Top=tnTop
This.Left=tnLeft
This.Width=tnWidth
This.BorderWidth=0
ENDPROC
PROCEDURE do_initializeazaobiect
Lparameters tcNume,tcClasa
With This
.AddObject(tcNume,tcClasa)
.nnrobiecte=.nnrobiecte+1
.&tcNume..Top=.nactualheight+.nheightoffset
.&tcNume..Left=3
.nactualheight=.&tcNume..Top+.&tcNume..Height
Do Case
Case .nnrobiecte=.nnrobiectevizibile
.nmaxheight=.nactualheight+.nheightoffset
Case .nnrobiecte>.nnrobiectevizibile
.but_jos1.Visible=.T.
.cultimulobiect=tcNume
Case .nnrobiectetop=0
.nmaxheight=.&tcNume..Top+.&tcNume..Height
Endcase
Endwith
ENDPROC
PROCEDURE do_redimensioneaza
This.Height=This.nmaxheight
This.but_jos1.Left=This.Width-This.but_jos1.Width
This.but_sus1.Left=This.Width-This.but_sus1.Width
ENDPROC
PROCEDURE do_scrolldown
With This
.nnrobiectetop=.nnrobiectetop+1
lnMinTop=0
For i=1 To .Objects.Count
With This.Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
.Top=.Top-.Height-This.nheightoffset
lnMinTop=Min(lnMinTop,.Top)
Endif
Endwith
Endfor
lcUltimulObiect=.cultimulobiect
.nactualheight=.&lcUltimulObiect..Top+.&lcUltimulObiect..Height
If lnMinTop<0
.but_sus1.Visible=.T.
Endif
If .&lcUltimulObiect..Top<.nmaxheight
.but_jos1.Visible=.F.
Endif
Endwith
ENDPROC
PROCEDURE do_scrollup
With This
.nnrobiectetop=.nnrobiectetop-1
lnMaxTop=0
lnMinTop=.nmaxheight
For i=1 To .Objects.Count
With .Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
.Top=.Top+.Height+This.nheightoffset
lnMinTop=Min(lnMinTop,.Top)
lnMaxTop=Max(lnMaxTop,.Top+.Height)
Endif
Endwith
Endfor
lcUltimulObiect=.cultimulobiect
With .&lcUltimulObiect.
This.nactualheight=.Top+.Height
Endwith
If lnMaxTop>.nmaxheight
.but_jos1.Visible=.T.
Else
.but_jos1.Visible=.F.
Endif
If lnMinTop>0
.but_sus1.Visible=.F.
Else
.but_sus1.Visible=.T.
Endif
Endwith
ENDPROC
PROCEDURE do_stergeobiect && Sterge un obiect din container.
Lparameters tcNume
With This
lcUltimulObiect=[]
lnMaxHeight=Iif(.nnrobiecte>1,-50000,0)
lnTopObiectSters=.&tcNume..Top
lnHeightObiectSters=.&tcNume..Height
.RemoveObject(tcNume)
For i=1 To .Objects.Count
With .Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
If Between(lnTopObiectSters,0,.Top)
.Top=.Top-lnHeightObiectSters-This.nheightoffset
Else
If Between(lnTopObiectSters,.Top,0)
.Top=.Top+lnHeightObiectSters+This.nheightoffset
Endif
Endif
If .Top+.Height>lnMaxHeight
lcUltimulObiect=.Name
lnMaxHeight=.Top+.Height
Endif
Endif
Endwith
Endfor
.nnrobiectetop=.nnrobiectetop+Iif(lnTopObiectSters<0,-1,0)
.nnrobiecte=.nnrobiecte-1
.nactualheight = lnMaxHeight
If Type("this."+.cultimulobiect)='U'
.cultimulobiect=lcUltimulObiect
Endif
If .nnrobiectetop=0
.but_sus1.Visible=.F.
Endif
If .nnrobiecte<=.nnrobiectevizibile+.nnrobiectetop
.but_jos1.Visible=.F.
Endif
Endwith
ENDPROC
PROCEDURE Init
Lparameters tnNrObiecteVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte
DoDefault()
This.do_initializeaza(tnNrObiecteVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte)
This.do_redimensioneaza()
ENDPROC
PROCEDURE MouseWheel
Lparameters nDirection, nShift, nXCoord, nYCoord
If nDirection>0 And This.but_sus1.Visible
This.do_scrollup
Endif
If nDirection<0 And This.but_jos1.Visible
This.do_scrolldown
Endif
ENDPROC
PROCEDURE Resize
DoDefault()
This.do_redimensioneaza()
ENDPROC
ENDDEFINE
DEFINE CLASS _scrollcontainer1201 AS _container OF "_baza.vcx"
*< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="But_sus1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="But_jos1" UniqueID="" Timestamp="" />
*
*m: do_adaugaobiect && Adauga un obiect la container.
*m: do_initializeaza
*m: do_redimensioneaza
*m: do_scrolldown
*m: do_scrollup
*m: do_stergeobiect && Sterge un obiect din container.
*p: cultimulobiect && Numele ultimului obiect adaugat.
*p: nactualheight && Distanta de la marginea de sus a ferestrei pana la marginea inferioara a celui mai de jos obiect.
*p: nactualwidth && Distanta de la marginea din stanga a ferestrei pana la marginea din dreapta a celui mai din dreapta obiect.
*p: nheightoffset && Distanta pe verticala dintre doua obiecte.
*p: nmaxheight && Inaltimea maxima vizibila a containerului.
*p: nmaxwidth && Latimea maxima vizibila a containerului.
*p: nnrobiecte && Numarul actual de obiecte din container.
*p: nnrobiectetop && Numarul de obiecte care se afla deasupra liniei de vizibilitate.
*p: nnrobiectevizibile && Numarul maxim de obiecte vizibile la un moment dat.
*p: nwidthoffset && Distanta pe orizontala dintre doua obiecte.
*
*
cultimulobiect =
Height = 250
nactualheight = 0
nactualwidth = 0
Name = "_scrollcontainer"
nheightoffset = 0
nmaxheight = 0
nmaxwidth = 0
nnrobiecte = 0
nnrobiectetop = 0
nnrobiectevizibile = 0
nwidthoffset = 0
Width = 409
*
ADD OBJECT 'But_jos1' AS but_jos WITH ;
Anchor = 8, ;
Left = 379, ;
Name = "But_jos1", ;
Top = 33, ;
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
ADD OBJECT 'But_sus1' AS but_sus WITH ;
Anchor = 8, ;
Left = 379, ;
Name = "But_sus1", ;
Top = 4, ;
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
PROCEDURE do_adaugaobiect && Adauga un obiect la container.
Lparameters tcNume,tcClasa
With This
.AddObject(tcNume,tcClasa)
.nnrobiecte=.nnrobiecte+1
&& .nactualheight se modifica la stergere
*!* STRTOFILE("Adaugat obiect>> Actual height:"+ALLTRIM(STR(.nactualheight)),"C:\startroa.txt",1)
.&tcNume..Top=.nactualheight+.nheightoffset
.&tcNume..Left=3
*!* .&tcNume..AddProperty("nordine_container",.nnrobiecte)
.nactualheight=.&tcNume..Top+.&tcNume..Height
*!* STRTOFILE("; Top:"+ALLTRIM(STR(.&tcNume..Top))+"; nr.obiecte:"+ALLTRIM(STR(.nnrobiecte))+;
*!* "; Actual height:"+ALLTRIM(STR(.nactualheight))+CHR(13)+CHR(10),"C:\startroa.txt",1)
Do Case
Case .nnrobiecte=.nnrobiectevizibile
.nmaxheight=.nactualheight+.nheightoffset
Case .nnrobiecte>.nnrobiectevizibile
.but_jos1.Visible=.T.
.cultimulobiect=tcNume
Case .nnrobiectetop=0
.nmaxheight=.&tcNume..Top+.&tcNume..Height
*!* Case .nnrobiecte=.nnrobiectevizibile-.nnrobiectetop
*!* .nmaxheight=.nactualheight+.nheightoffset
*!* Case .nnrobiecte-.nnrobiectetop>.nnrobiectevizibile
*!* .but_jos1.Visible=.T.
*!* .cultimulobiect=tcNume
*!* Case .nnrobiecte>.nnrobiectevizibile
*!* .but_jos1.Visible=.T.
*!* .cultimulobiect=tcNume
*!* Case .nnrobiectetop=0
*!* .nmaxheight=.&tcNume..Top+.&tcNume..Height
Endcase
*!* If .nactualheight>.nmaxheight
*!* *!* .&tcNume..Visible=.F.
*!* .but_jos1.Visible=.T.
*!* *!* Else
*!* Endif
Endwith
ENDPROC
PROCEDURE do_initializeaza
Lparameters tnNrObiecteVizibile,tnDistantaVObiecte,tnDistantaOObiecte
If Type('tnDistantaVObiecte')='U'
tnDistantaVObiecte=0
Endif
If Type('tnDistandaOObiecte')='U'
tnDistandaOObiecte=0
Endif
This.nnrobiectevizibile=tnNrObiecteVizibile
This.nheightoffset=tnDistantaVObiecte
This.nwidthoffset=tnDistandaOObiecte
This.BorderWidth=0
ENDPROC
PROCEDURE do_redimensioneaza
This.Height=This.nmaxheight
This.but_jos1.Left=This.Width-This.but_jos1.Width
This.but_sus1.Left=This.Width-This.but_sus1.Width
ENDPROC
PROCEDURE do_scrolldown
With This
.nnrobiectetop=.nnrobiectetop+1
lnMinTop=0
For i=1 To .Objects.Count
With This.Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
.Top=.Top-.Height-This.nheightoffset
lnMinTop=Min(lnMinTop,.Top)
Endif
Endwith
Endfor
lcUltimulObiect=.cultimulobiect
.nactualheight=.&lcUltimulObiect..Top+.&lcUltimulObiect..Height
If lnMinTop<0
.but_sus1.Visible=.T.
Endif
If .&lcUltimulObiect..Top<.nmaxheight
.but_jos1.Visible=.F.
Endif
Endwith
ENDPROC
PROCEDURE do_scrollup
With This
.nnrobiectetop=.nnrobiectetop-1
lnMaxTop=0
lnMinTop=.nmaxheight
For i=1 To .Objects.Count
With .Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
.Top=.Top+.Height+This.nheightoffset
lnMinTop=Min(lnMinTop,.Top)
lnMaxTop=Max(lnMaxTop,.Top+.Height)
Endif
Endwith
Endfor
lcUltimulObiect=.cultimulobiect
With .&lcUltimulObiect.
This.nactualheight=.Top+.Height
Endwith
If lnMaxTop>.nmaxheight
.but_jos1.Visible=.T.
Else
.but_jos1.Visible=.F.
Endif
If lnMinTop>0
.but_sus1.Visible=.F.
Else
.but_sus1.Visible=.T.
Endif
Endwith
ENDPROC
PROCEDURE do_stergeobiect && Sterge un obiect din container.
Lparameters tcNume
With This
lnMaxHeight=0
lnTopObiectSters=.&tcNume..Top
lnHeightObiectSters=.&tcNume..Height
lcPenultimulObiect=[]
lnNrObiecteInvizibile=0
.RemoveObject(tcNume)
For i=1 To .Objects.Count
With .Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
If .Top>lnTopObiectSters
.Top=.Top-lnHeightObiectSters-This.nheightoffset
Else
If .Top<0
lnNrObiecteInvizibile=lnNrObiecteInvizibile+1
Endif
Endif
*!* *!* If .Top+.Height>lnMaxHeight
*!* *!* lnMaxHeight=.Top+.Height
*!* *!* ENDIF
*!* If .nordine_container=This.nnrobiecte-1
*!* lcUltimulObiect=.Name
*!* lnMaxHeight=.Top+.Height
*!* Endif
If This.nactualheight-lnHeightObiectSters-This.nheightoffset=.Top+.Height
lcPenultimulObiect=.Name
lnMaxHeight=.Top+.Height
Endif
Endif
Endwith
Endfor
.nnrobiecte=.nnrobiecte-1
.nactualheight = lnMaxHeight
If Type("this."+.cultimulobiect)='U'
.cultimulobiect=lcPenultimulObiect
Endif
*!* STRTOFILE("Sters obiect>> Top:"+ALLTRIM(STR(lnTopObiectSters))+"; nr.obiecte ramase:"+ALLTRIM(STR(.nnrobiecte))+;
*!* "; Actual height:"+ALLTRIM(STR(.nactualheight))+CHR(13)+CHR(10),"C:\startroa.txt",1)
If .nnrobiecte=.nnrobiectevizibile And lnNrObiecteInvizibile=0
.but_jos1.Visible=.F.
.but_sus1.Visible=.F.
Endif
Endwith
ENDPROC
PROCEDURE Init
Lparameters tnNrObiecteVizibile,tnDistantaVObiecte,tnDistantaOObiecte
DoDefault()
This.do_initializeaza(tnNrObiecteVizibile,tnDistantaVObiecte,tnDistantaOObiecte)
ENDPROC
PROCEDURE MouseWheel
Lparameters nDirection, nShift, nXCoord, nYCoord
If nDirection>0 And This.but_sus1.Visible
This.do_scrollup
Endif
If nDirection<0 And This.but_jos1.Visible
This.do_scrolldown
Endif
ENDPROC
PROCEDURE Resize
DoDefault()
This.do_redimensioneaza()
ENDPROC
ENDDEFINE
DEFINE CLASS _scrollcontainer1301 AS _container OF "_baza.vcx"
*< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="But_sus1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="But_jos1" UniqueID="" Timestamp="" />
*
*m: do_adaugaobiect && Adauga un obiect la container.
*m: do_initializeaza
*m: do_initializeazaobiect
*m: do_redimensioneaza
*m: do_scrolldown
*m: do_scrollup
*m: do_stergeobiect && Sterge un obiect din container.
*p: cultimulobiect && Numele ultimului obiect adaugat.
*p: nactualheight && Distanta de la marginea de sus a ferestrei pana la marginea inferioara a celui mai de jos obiect.
*p: nactualwidth && Distanta de la marginea din stanga a ferestrei pana la marginea din dreapta a celui mai din dreapta obiect.
*p: nheightoffset && Distanta pe verticala dintre doua obiecte.
*p: nmaxheight && Inaltimea maxima vizibila a containerului.
*p: nmaxwidth && Latimea maxima vizibila a containerului.
*p: nnrobiecte && Numarul actual de obiecte din container.
*p: nnrobiectebottom && Numarul de obiecte care se afla sub linia de vizibilitate.
*p: nnrobiectetop && Numarul de obiecte care se afla deasupra liniei de vizibilitate.
*p: nnrobiectevizibile && Numarul maxim de obiecte vizibile la un moment dat.
*p: nwidthoffset && Distanta pe orizontala dintre doua obiecte.
*
PROTECTED nnrobiectebottom,nnrobiectetop,nnrobiectevizibile
*
cultimulobiect =
Height = 250
nactualheight = 0
nactualwidth = 0
Name = "_scrollcontainer"
nheightoffset = 0
nmaxheight = 0
nmaxwidth = 0
nnrobiecte = 0
nnrobiectebottom = 0
nnrobiectetop = 0
nnrobiectevizibile = 0
nwidthoffset = 0
Width = 409
*
ADD OBJECT 'But_jos1' AS but_jos WITH ;
Anchor = 8, ;
Left = 379, ;
Name = "But_jos1", ;
Top = 33, ;
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
ADD OBJECT 'But_sus1' AS but_sus WITH ;
Anchor = 8, ;
Left = 379, ;
Name = "But_sus1", ;
Top = 4, ;
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
PROCEDURE do_adaugaobiect && Adauga un obiect la container.
Lparameters tcNume,tcClasa
With This
.AddObject(tcNume,tcClasa)
.nnrobiecte=.nnrobiecte+1
.&tcNume..Top=.nactualheight+.nheightoffset
.&tcNume..Left=3
.nactualheight=.&tcNume..Top+.&tcNume..Height
Do Case
Case .nnrobiecte-.nnrobiectetop>.nnrobiectevizibile
.but_jos1.Visible=.T.
Case .nnrobiecte<=.nnrobiectevizibile
.nmaxheight=.nactualheight+.nheightoffset
.Height=.nmaxheight
Otherwise
.but_jos1.Visible=.F.
Endcase
.cultimulobiect=tcNume
Endwith
ENDPROC
PROCEDURE do_initializeaza
Lparameters tnNrObiecteVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte
If Type('tnDistantaVObiecte')<>'N'
tnDistantaVObiecte=0
Endif
If Type('tnDistandaOObiecte')<>'N'
tnDistandaOObiecte=0
Endif
This.nnrobiectevizibile=tnNrObiecteVizibile
This.nheightoffset=tnDistantaVObiecte
This.nwidthoffset=tnDistandaOObiecte
This.Top=tnTop
This.Left=tnLeft
This.Width=tnWidth
This.BorderWidth=0
ENDPROC
PROCEDURE do_initializeazaobiect
Lparameters tcNume,tcClasa
With This
.AddObject(tcNume,tcClasa)
.nnrobiecte=.nnrobiecte+1
.&tcNume..Top=.nactualheight+.nheightoffset
.&tcNume..Left=3
.nactualheight=.&tcNume..Top+.&tcNume..Height
Do Case
Case .nnrobiecte=.nnrobiectevizibile
.nmaxheight=.nactualheight+.nheightoffset
Case .nnrobiecte>.nnrobiectevizibile
.but_jos1.Visible=.T.
.cultimulobiect=tcNume
Case .nnrobiectetop=0
.nmaxheight=.&tcNume..Top+.&tcNume..Height
Endcase
Endwith
ENDPROC
PROCEDURE do_redimensioneaza
This.Height=This.nmaxheight
This.but_jos1.Left=This.Width-This.but_jos1.Width
This.but_sus1.Left=This.Width-This.but_sus1.Width
ENDPROC
PROCEDURE do_scrolldown
With This
.nnrobiectetop=.nnrobiectetop+1
*!* .nnrobiectebottom=.nnrobiectebottom-1
lnMinTop=0
For i=1 To .Objects.Count
With This.Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
.Top=.Top-.Height-This.nheightoffset
lnMinTop=Min(lnMinTop,.Top)
Endif
Endwith
Endfor
lcUltimulObiect=.cultimulobiect
.nactualheight=.&lcUltimulObiect..Top+.&lcUltimulObiect..Height
If lnMinTop<0
.but_sus1.Visible=.T.
Endif
If .&lcUltimulObiect..Top<.nmaxheight
.but_jos1.Visible=.F.
Endif
Endwith
ENDPROC
PROCEDURE do_scrollup
With This
.nnrobiectetop=.nnrobiectetop-1
*!* .nnrobiectebottom=.nnrobiectebottom+1
lnMaxTop=0
lnMinTop=.nmaxheight
For i=1 To .Objects.Count
With .Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
.Top=.Top+.Height+This.nheightoffset
lnMinTop=Min(lnMinTop,.Top)
lnMaxTop=Max(lnMaxTop,.Top+.Height)
Endif
Endwith
Endfor
lcUltimulObiect=.cultimulobiect
With .&lcUltimulObiect.
This.nactualheight=.Top+.Height
Endwith
If lnMaxTop>.nmaxheight
.but_jos1.Visible=.T.
Else
.but_jos1.Visible=.F.
Endif
If lnMinTop>0
.but_sus1.Visible=.F.
Else
.but_sus1.Visible=.T.
Endif
Endwith
ENDPROC
PROCEDURE do_stergeobiect && Sterge un obiect din container.
Lparameters tcNume
With This
lnMaxHeight=0
lnTopObiectSters=.&tcNume..Top
lnHeightObiectSters=.&tcNume..Height
lcPenultimulObiect=[]
lnNrObiecteInvizibile=0
.RemoveObject(tcNume)
For i=1 To .Objects.Count
With .Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
If .Top>lnTopObiectSters
.Top=.Top-lnHeightObiectSters-This.nheightoffset
Else
If .Top<0
lnNrObiecteInvizibile=lnNrObiecteInvizibile+1
Endif
Endif
If This.nactualheight-lnHeightObiectSters-This.nheightoffset=.Top+.Height
lcPenultimulObiect=.Name
lnMaxHeight=.Top+.Height
Endif
Endif
Endwith
Endfor
.nnrobiecte=.nnrobiecte-1
.nactualheight = lnMaxHeight
If Type("this."+.cultimulobiect)='U'
.cultimulobiect=lcPenultimulObiect
Endif
If .nnrobiecte=.nnrobiectevizibile And lnNrObiecteInvizibile=0
.but_jos1.Visible=.F.
.but_sus1.Visible=.F.
Endif
Endwith
ENDPROC
PROCEDURE Init
Lparameters tnNrObiecteVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte
DoDefault()
This.do_initializeaza(tnNrObiecteVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte)
This.do_redimensioneaza()
ENDPROC
PROCEDURE MouseWheel
Lparameters nDirection, nShift, nXCoord, nYCoord
If nDirection>0 And This.but_sus1.Visible
This.do_scrollup
Endif
If nDirection<0 And This.but_jos1.Visible
This.do_scrolldown
Endif
ENDPROC
PROCEDURE Resize
DoDefault()
This.do_redimensioneaza()
ENDPROC
ENDDEFINE
DEFINE CLASS _scrollcontainer_col AS _container OF "_baza.vcx"
*< CLASSDATA: Baseclass="container" Timestamp="" Scale="Pixels" Uniqueid="" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="But_sus1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="But_jos1" UniqueID="" Timestamp="" />
*
*m: do_adaugaobiect && Adauga un obiect la container.
*m: do_cauta
*m: do_cautaobiect
*m: do_initializeaza
*m: do_initializeazaobiect
*m: do_redimensioneaza
*m: do_scrolldown
*m: do_scrollup
*m: do_stergeobiect && Sterge un obiect din container.
*m: do_stergeobiecte
*p: cultimulobiect && Numele ultimului obiect adaugat.
*p: lcoloanemultiple && .T. - daca obiectele sunt aranjate pe mai multe coloane ( in functie de nmaxwidth si de nwidthoffset )
*p: nactualheight && Distanta de la marginea de sus a ferestrei pana la marginea inferioara a celui mai de jos obiect.
*p: nactualwidth && Distanta de la marginea din stanga a ferestrei pana la marginea din dreapta a celui mai din dreapta obiect.
*p: nheightoffset && Distanta pe verticala dintre doua obiecte.
*p: nmaxheight && Inaltimea maxima vizibila a containerului.
*p: nmaxwidth && Latimea maxima vizibila a containerului.
*p: nnrranduri && Numarul actual de randuri din container.
*p: nnrranduribottom && Numarul de randuri care se afla sub linia de vizibilitate.
*p: nnrranduritop && Numarul de randuri care se afla deasupra liniei de vizibilitate.
*p: nnrrandurivizibile && Numarul maxim de randuri vizibile la un moment dat.
*p: nwidthoffset && Distanta pe orizontala dintre doua obiecte.
*
PROTECTED nactualheight,nactualwidth,nmaxheight,nmaxwidth,nnrranduri,nnrranduribottom,nnrranduritop
*
cultimulobiect =
Height = 250
lcoloanemultiple = .F.
nactualheight = 0
nactualwidth = 0
Name = "_scrollcontainer_col"
nheightoffset = 0
nmaxheight = 0
nmaxwidth = 0
nnrranduri = 0
nnrranduribottom = 0
nnrranduritop = 0
nnrrandurivizibile = 0
nwidthoffset = 0
Width = 409
*
ADD OBJECT 'But_jos1' AS but_jos WITH ;
Left = 379, ;
Name = "But_jos1", ;
Top = 33, ;
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
ADD OBJECT 'But_sus1' AS but_sus WITH ;
Left = 379, ;
Name = "But_sus1", ;
Top = 4, ;
Visible = .F.
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
PROCEDURE do_adaugaobiect && Adauga un obiect la container.
Lparameters tcNume,tcClasa,toHash
With This
If Type('toHash') <> 'O'
.AddObject(tcNume,tcClasa)
Else
.AddObject(tcNume,tcClasa,toHash)
Endif
If .lcoloanemultiple And .nactualwidth + .nwidthoffset + .&tcNume..Width <= .nmaxwidth AND .nactualwidth <> .nwidthoffset
.&tcNume..Left=.nactualwidth + .nwidthoffset
Else
.&tcNume..Left = .nwidthoffset
.nactualheight = .nactualheight + IIF(.nnrranduri=0,0,.&tcNume..Height+.nheightoffset)
.nnrranduri = .nnrranduri + 1
Endif
.nactualwidth = .&tcNume..Left + .&tcNume..Width
.&tcNume..Top = .nactualheight
If Pemstatus(.&tcNume.,[nnrrandsccont],5)
.&tcNume..nnrrandsccont = .nnrranduri
Else
AddProperty(.&tcNume.,[nnrrandsccont],.nnrranduri)
Endif
Do Case
Case .nnrranduri-.nnrranduritop>.nnrrandurivizibile
.but_jos1.Visible=.T.
Case .nnrranduri<=.nnrrandurivizibile And .nnrranduritop=0
.nmaxheight = .nactualheight + IIF(.nnrranduri=0,0,.&tcNume..Height+.nheightoffset)
.Height=.nmaxheight
Otherwise
.but_jos1.Visible=.F.
Endcase
.cultimulobiect=tcNume
Endwith
ENDPROC
PROCEDURE do_cauta
Lparameters tnTip,tcCriteriu,tcClasa
*!* tnTip = 1 - este
*!* 2 - incepe cu ...
Local lcObiect,lcConditieC
Do Case
Case tnTip = 1
lcConditieC = [UPPER(This.Objects(i).Caption) = '] + Upper(tcCriteriu) + [']
Case tnTip = 2
lcConditieC = [UPPER(SUBSTR(This.Objects(i).Caption,1,] + Alltrim(Str(Len(tcCriteriu))) + [)) = ] + ;
['] + Upper(tcCriteriu) + [']
Endcase
For i = 1 To This.Objects.Count
If Upper(This.Objects(i).Class) = Upper(tcClasa)
If Evaluate(lcConditieC)
lcObiect = This.Objects(i).Name
Exit
Endif
Endif
Endfor
If !Empty(lcObiect)
This.do_cautaobiect(lcObiect)
Else
amessagebox("Nu exista rezultate!",48,"Atentie")
Endif
ENDPROC
PROCEDURE do_cautaobiect
Lparameters tcNumeObiect
Local lnNrRand,llVizibil
lnNrRand = Evaluate([This.] + tcNumeObiect + [.nnrrandsccont])
llVizibil = This.Visible
IF llVizibil
This.Visible = !llVizibil
ENDIF
Do While .T.
Do Case
Case lnNrRand < This.nnrranduritop + 1
This.do_scrollup()
Case lnNrRand > This.nnrranduritop + 1
This.do_scrolldown()
Otherwise
This.&tcNumeObiect..SetFocus()
Exit
Endcase
Enddo
IF llVizibil
This.Visible = llVizibil
ENDIF
ENDPROC
PROCEDURE do_initializeaza
Lparameters tnNrRanduriVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte
If Type('tnDistantaVObiecte')<>'N'
tnDistantaVObiecte=0
Endif
If Type('tnDistandaOObiecte')<>'N'
tnDistandaOObiecte=0
Endif
This.nnrrandurivizibile=tnNrRanduriVizibile
This.nheightoffset=tnDistantaVObiecte
This.nwidthoffset=tnDistantaOObiecte
This.nactualheight = This.nheightoffset
This.nactualwidth = This.nwidthoffset
This.Top=tnTop
This.Left=tnLeft
This.Width=tnWidth
This.BorderWidth=0
ENDPROC
PROCEDURE do_initializeazaobiect
Lparameters tcNume,tcClasa,toHash
With This
If Type('toHash') <> 'O'
.AddObject(tcNume,tcClasa)
Else
.AddObject(tcNume,tcClasa,toHash)
Endif
*!* am pus .nmaxwidth in loc de .Width
If .lcoloanemultiple And .nactualwidth + .nwidthoffset + .&tcNume..Width <= .nmaxwidth AND .nactualwidth <> .nwidthoffset
.&tcNume..Left=.nactualwidth + .nwidthoffset
Else
.&tcNume..Left = .nwidthoffset
.nactualheight = .nactualheight + IIF(.nnrranduri=0,0,.&tcNume..Height+.nheightoffset)
.nnrranduri = .nnrranduri + 1
Endif
.nactualwidth = .&tcNume..Left + .&tcNume..Width
.&tcNume..Top = .nactualheight
Do Case
Case .nnrranduri-.nnrranduritop>.nnrrandurivizibile
.but_jos1.Visible=.T.
Case .nnrranduri<=.nnrrandurivizibile And .nnrranduritop=0
.nmaxheight = .nactualheight + IIF(.nnrranduri=0,0,.&tcNume..Height+.nheightoffset)
.Height=.nmaxheight
Otherwise
.but_jos1.Visible=.F.
Endcase
*!* Do Case
*!* Case .nnrobiecte=.nnrrandurivizibile
*!* .nmaxheight=.nactualheight+.nheightoffset
*!* Case .nnrobiecte>.nnrrandurivizibile
*!* .but_jos1.Visible=.T.
*!* .cultimulobiect=tcNume
*!* Case .nnrobiectetop=0
*!* .nmaxheight=.&tcNume..Top+.&tcNume..Height
*!* Endcase
Endwith
ENDPROC
PROCEDURE do_redimensioneaza
This.Height=This.nmaxheight
This.but_jos1.Left=This.Width-This.but_jos1.Width-FLOOR(This.but_jos1.Width/9)
This.but_sus1.Left=This.Width-This.but_sus1.Width-FLOOR(This.but_sus1.Width/9)
This.nmaxwidth = This.but_sus1.Left
ENDPROC
PROCEDURE do_scrolldown
With This
.nnrranduritop=.nnrranduritop+1
lnMinTop=0
For i=1 To .Objects.Count
With This.Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
.Top=.Top-.Height-This.nheightoffset
lnMinTop=Min(lnMinTop,.Top)
Endif
Endwith
Endfor
lcUltimulObiect=.cultimulobiect
.nactualheight = .&lcUltimulObiect..Top + .&lcUltimulObiect..Height
If lnMinTop<0
.but_sus1.Visible=.T.
Endif
If .&lcUltimulObiect..Top<.nmaxheight
.but_jos1.Visible=.F.
Endif
Endwith
ENDPROC
PROCEDURE do_scrollup
With This
.nnrranduritop=.nnrranduritop-1
lnMaxTop=0
lnMinTop=.nmaxheight
For i=1 To .Objects.Count
With .Objects(i)
If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
.Top=.Top+.Height+This.nheightoffset
lnMinTop=Min(lnMinTop,.Top)
lnMaxTop=Max(lnMaxTop,.Top+.Height)
Endif
Endwith
Endfor
lcUltimulObiect=.cultimulobiect
With .&lcUltimulObiect.
This.nactualheight=.Top+.Height
Endwith
If lnMaxTop>.nmaxheight
.but_jos1.Visible=.T.
Else
.but_jos1.Visible=.F.
Endif
If lnMinTop>0
.but_sus1.Visible=.F.
Else
.but_sus1.Visible=.T.
Endif
Endwith
ENDPROC
PROCEDURE do_stergeobiect && Sterge un obiect din container.
*!* Lparameters tcNume
*!* With This
*!* lcUltimulObiect=[]
*!* lnMaxHeight=Iif(.nnrobiecte>1,-50000,0)
*!* lnTopObiectSters=.&tcNume..Top
*!* lnHeightObiectSters=.&tcNume..Height
*!* .RemoveObject(tcNume)
*!* For i=1 To .Objects.Count
*!* With .Objects(i)
*!* If !Inlist(Upper(Alltrim(.Class)),[BUT_SUS],[BUT_JOS])
*!* If Between(lnTopObiectSters,0,.Top)
*!* .Top=.Top-lnHeightObiectSters-This.nheightoffset
*!* Else
*!* If Between(lnTopObiectSters,.Top,0)
*!* .Top=.Top+lnHeightObiectSters+This.nheightoffset
*!* Endif
*!* Endif
*!* If .Top+.Height>lnMaxHeight
*!* lcUltimulObiect=.Name
*!* lnMaxHeight=.Top+.Height
*!* Endif
*!* Endif
*!* Endwith
*!* Endfor
*!* .nnrobiectetop=.nnrobiectetop+Iif(lnTopObiectSters<0,-1,0)
*!* .nnrobiecte=.nnrobiecte-1
*!* .nactualheight = lnMaxHeight
*!* If Type("this."+.cultimulobiect)='U'
*!* .cultimulobiect=lcUltimulObiect
*!* Endif
*!* If .nnrobiectetop=0
*!* .but_sus1.Visible=.F.
*!* Endif
*!* If .nnrobiecte<=.nnrrandurivizibile+.nnrobiectetop
*!* .but_jos1.Visible=.F.
*!* Endif
*!* Endwith
ENDPROC
PROCEDURE do_stergeobiecte
Lparameters tcClasaObiect
Local i,j
j = 0
With This
Dimension laObiecte[.Objects.Count]
For i=1 To .Objects.Count
With .Objects(i)
If Upper(Alltrim(.Class)) = Upper(Alltrim(tcClasaObiect))
j = j + 1
laObiecte[j] = Upper(.Name)
Endif
Endwith
Endfor
Endwith
For i = 1 To j
This.RemoveObject(laObiecte[i])
Endfor
*!* resetare
This.nactualheight = This.nheightoffset
This.nactualwidth = This.nwidthoffset
This.nmaxheight = 0
This.but_jos1.Visible = .F.
This.but_sus1.Visible = .F.
This.nnrranduri = 0
This.nnrranduritop = 0
RELEASE laObiecte
ENDPROC
PROCEDURE Init
Lparameters tnNrRanduriVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte
DoDefault()
tnNrRanduriVizibile = Iif(Empty(tnNrRanduriVizibile),This.nnrrandurivizibile,tnNrRanduriVizibile)
tnTop = Iif(Empty(tnTop),This.Top,tnTop)
tnLeft = Iif(Empty(tnLeft),This.Left,tnLeft)
tnWidth = Iif(Empty(tnWidth),This.Width,tnWidth)
tnDistantaVObiecte = Iif(Empty(tnDistantaVObiecte),This.nwidthoffset,tnDistantaVObiecte)
tnDistantaOObiecte = Iif(Empty(tnDistantaOObiecte),This.nheightoffset,tnDistantaOObiecte)
This.do_initializeaza(tnNrRanduriVizibile,tnTop,tnLeft,tnWidth,tnDistantaVObiecte,tnDistantaOObiecte)
This.do_redimensioneaza()
ENDPROC
PROCEDURE MouseWheel
Lparameters nDirection, nShift, nXCoord, nYCoord
If nDirection>0 And This.but_sus1.Visible
This.do_scrollup
Endif
If nDirection<0 And This.but_jos1.Visible
This.do_scrolldown
Endif
ENDPROC
PROCEDURE Resize
DoDefault()
This.do_redimensioneaza()
ENDPROC
ENDDEFINE