Bug bei Linked List entdeckt
Verfasst: 25.03.2006 10:40
Linked List ist nicht mehr global wirksam
wenn man sie in einer prozedur erstellt kann aus einer anderen
prozedur nicht mehr darauf zugegrifen werden.
folgendes Beispiel ist unter PB 3.94 lauffähig:
dieses Beispiel ist auf PB4 umgestellt:
wenn man sie in einer prozedur erstellt kann aus einer anderen
prozedur nicht mehr darauf zugegrifen werden.
folgendes Beispiel ist unter PB 3.94 lauffähig:
Code: Alles auswählen
Structure TableLine
index.l
y.l
yl.l
EndStructure
Structure TableColumn
x.l
y.l
xl.l
yl.l
name.s
id.l
EndStructure
Enumeration
#Window_0
EndEnumeration
Procedure TableGadget(GadgetNr,x,y,width,height,name$,SpaltenBreite)
If CreateGadgetList(WindowID())
ScrollAreaGadget(GadgetNr, x, y, width, height, 80, 20, 15, #PB_ScrollArea_Single)
NewList TableColumnList.TableColumn()
NewList TableLineList.TableLine()
AddElement(TableLineList())
AddElement(TableColumnList())
TableColumnList()\x=30
TableColumnList()\y=0
TableColumnList()\xl=SpaltenBreite
TableColumnList()\yl=20
TableColumnList()\name=name$
TableColumnList()\id=ButtonGadget(#PB_Any, TableColumnList()\x,TableColumnList()\y, TableColumnList()\xl, TableColumnList()\yl, TableColumnList()\name, #PB_Button_MultiLine)
CloseGadgetList()
EndIf
EndProcedure
Procedure AddTableColumn(GadgetNr,Position,name$,Breite)
OpenGadgetList(GadgetNr)
istbreite=GetGadgetAttribute(GadgetNr,#PB_ScrollArea_InnerWidth)
SetGadgetAttribute(GadgetNr,#PB_ScrollArea_InnerWidth,Breite+istbreite)
LastElement(TableColumnList())
x=TableColumnList()\x
y=TableColumnList()\y
xl=TableColumnList()\xl
yl=TableColumnList()\yl
;TableColumnList()\title=titel$
AddElement(TableColumnList())
TableColumnList()\x=x+xl
TableColumnList()\y=y
TableColumnList()\xl=Breite
TableColumnList()\yl=yl
TableColumnList()\name=name$
TableColumnList()\id=ButtonGadget(#PB_Any, TableColumnList()\x, TableColumnList()\y, TableColumnList()\xl, TableColumnList()\yl, TableColumnList()\name, #PB_Button_MultiLine)
CloseGadgetList()
EndProcedure
Procedure AddTableLine(GadgetNr)
OpenGadgetList(GadgetNr)
isthoehe=GetGadgetAttribute(GadgetNr,#PB_ScrollArea_InnerHeight)
SetGadgetAttribute(GadgetNr,#PB_ScrollArea_InnerHeight,15+isthoehe)
Spaltenanzahl = CountList(TableColumnList())
LastElement(TableLineList())
index=TableLineList()\index
y=TableLineList()\y
yl=TableLineList()\yl
AddElement(TableLineList())
TableLineList()\index=index+1
TableLineList()\y=y+yl
TableLineList()\yl=15
indextaste=ButtonGadget(#PB_Any,0,TableLineList()\y+20,30,15,Str(TableLineList()\index))
ForEach TableColumnList()
x=TableColumnList()\x
y=TableColumnList()\yl+TableLineList()\y
xl=TableColumnList()\xl
yl=TableLineList()\yl
StringGadget(#PB_Any,x,y,xl-2,yl-1,"",#PB_String_MultiLine|#PB_String_BorderLess)
Next
CloseGadgetList()
EndProcedure
Procedure SaveTable()
EndProcedure
Procedure LoadTable()
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 74, 19, 459, 285, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "TableGadget")
TableGadget(1,5,5,300,200,"Index",50)
AddTableColumn(1,0,"Bemerkung",100)
AddTableColumn(1,0,"NotizAnweisung",100)
AddTableColumn(1,0,"Bemerkung",100)
AddTableColumn(1,0,"Bemerkung2",100)
For xxx= 1 To 50
AddTableLine(1)
Next
EndIf
EndeProcedure
Open_Window_0()
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
;Debug "WindowID: " + Str(EventWindowID())
GadgetID = EventGadgetID()
EndIf
Until Event = #PB_EventCloseWindow
End
Code: Alles auswählen
Structure TableLine
index.l
y.l
yl.l
EndStructure
Structure TableColumn
x.l
y.l
xl.l
yl.l
name.s
id.l
EndStructure
Enumeration
#Window_0
EndEnumeration
Procedure TableGadget(GadgetNr,x,y,width,height,name$,SpaltenBreite)
If CreateGadgetList(WindowID(#Window_0))
ScrollAreaGadget(GadgetNr, x, y, width, height, 80, 20, 15, #PB_ScrollArea_Single)
NewList TableColumnList.TableColumn()
NewList TableLineList.TableLine()
AddElement(TableLineList())
AddElement(TableColumnList())
TableColumnList()\x=30
TableColumnList()\y=0
TableColumnList()\xl=SpaltenBreite
TableColumnList()\yl=20
TableColumnList()\name=name$
TableColumnList()\id=ButtonGadget(#PB_Any, TableColumnList()\x,TableColumnList()\y, TableColumnList()\xl, TableColumnList()\yl, TableColumnList()\name, #PB_Button_MultiLine)
CloseGadgetList()
EndIf
EndProcedure
Procedure AddTableColumn(GadgetNr,Position,name$,Breite)
OpenGadgetList(GadgetNr)
istbreite=GetGadgetAttribute(GadgetNr,#PB_ScrollArea_InnerWidth)
SetGadgetAttribute(GadgetNr,#PB_ScrollArea_InnerWidth,Breite+istbreite)
LastElement(TableColumnList())
x=TableColumnList()\x
y=TableColumnList()\y
xl=TableColumnList()\xl
yl=TableColumnList()\yl
;TableColumnList()\title=titel$
AddElement(TableColumnList())
TableColumnList()\x=x+xl
TableColumnList()\y=y
TableColumnList()\xl=Breite
TableColumnList()\yl=yl
TableColumnList()\name=name$
TableColumnList()\id=ButtonGadget(#PB_Any, TableColumnList()\x, TableColumnList()\y, TableColumnList()\xl, TableColumnList()\yl, TableColumnList()\name, #PB_Button_MultiLine)
CloseGadgetList()
EndProcedure
Procedure AddTableLine(GadgetNr)
OpenGadgetList(GadgetNr)
isthoehe=GetGadgetAttribute(GadgetNr,#PB_ScrollArea_InnerHeight)
SetGadgetAttribute(GadgetNr,#PB_ScrollArea_InnerHeight,15+isthoehe)
Spaltenanzahl = CountList(TableColumnList())
LastElement(TableLineList())
index=TableLineList()\index
y=TableLineList()\y
yl=TableLineList()\yl
AddElement(TableLineList())
TableLineList()\index=index+1
TableLineList()\y=y+yl
TableLineList()\yl=15
indextaste=ButtonGadget(#PB_Any,0,TableLineList()\y+20,30,15,Str(TableLineList()\index))
ForEach TableColumnList()
x=TableColumnList()\x
y=TableColumnList()\yl+TableLineList()\y
xl=TableColumnList()\xl
yl=TableLineList()\yl
StringGadget(#PB_Any,x,y,xl-2,yl-1,"",#PB_String_MultiLine|#PB_String_BorderLess)
Next
CloseGadgetList()
EndProcedure
Procedure SaveTable()
EndProcedure
Procedure LoadTable()
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 74, 19, 459, 285, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "TableGadget")
TableGadget(1,5,5,300,200,"Index",50)
AddTableColumn(1,0,"Bemerkung",100)
AddTableColumn(1,0,"NotizAnweisung",100)
AddTableColumn(1,0,"Bemerkung",100)
AddTableColumn(1,0,"Bemerkung2",100)
For xxx= 1 To 50
AddTableLine(1)
Next
EndIf
EndProcedureOpen_Window_0()
;Schleife
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
;Debug "WindowID: " + Str(EventWindowID())
GadgetID = EventGadget()
EndIf
Until Event = #PB_Event_CloseWindow
End
;