Wenn man mal Stringadressen in einem Bereich braucht, wie z.B. bei Frank Abbings
Listview.dll mit der Funktion SItem().
Declare Handle grid
Declare Long ende
Window 600, 400
ImportDll("Listview.dll", "")
grid = CreateListview(%HWnd, %HInstance, 0, Rgb(255,255,255), -1, $31)
IColumn(grid, "Lagercode", 70, 0)
IColumn(grid, "Artikelnr", 64, 0)
IColumn(grid, "Warengruppe", 148, 0)
SItem(grid, SAddrToMem("0815,4711,Werkzeug"), 3)
SItem(grid, SAddrToMem("1000,4712,Elektronik"), 3)
SItem(grid, SAddrToMem("2000,4713,Haushalt"), 3)
InitMessages(%HWnd)
ShowListview(grid, 10, 100, 300, 150)
ende = 0
WhileNot ende
WaitInput
Case %Key = 2 : ende = 1
EndWhile
CloseMessages(%HWnd)
Proc SAddrToMem
Parameters String zeile
Declare Memory b, Long pos, x, String col[]
Dim b, Len(zeile)
pos = Len(zeile, ",")
x = 0
WhileLoop 1, pos
col[&LOOP - 1] = SubStr$(zeile, &LOOP, ",")
Long b, x = Addr(col[&LOOP - 1])
Inc x, 4
EndWhile
Return b
EndProc
FreeDLL ccdll
End
Alles anzeigen
Finde ich etwas eleganter, als SetItem in der von Frank beigelegten Include Listviewfunktionen.inc.
Etwas eigenartig finde ich, daß der Bereich b außerhalb der Proc noch gültig ist, da er ja eine lokale
Variable ist. Oder denke ich da falsch ?
Wenn das zu unsicher ist, kann man obigen Code ja so umstellen, daß der Bereich im Hauptprogramm
deklariert und gedimt wird und als Parameter der Proc mitgegeben wird. Ein Clear Bereich sorgt dann
dafür, daß immer ein 'frischer' Bereich in der Proc ankommt. Bei mehrmaligem Aufruf der Proc könnten
ja noch Reste übrigbleiben, die dann für Fehler sorgen.
Ansonsten : vielleicht kann es ja jemand brauchen.