Klick auf Column Spalten
Verfasst: 28.04.2008 16:08
Hallo,
ich beschäftige michs seit ein paar Tagen mit PB und habe ein Frage an die Experten.
Ich habe hier zwei Gadget "ListIconGadget" und "TextGadget" bei dem ListIconGadget kann ich durch klicken auf die Namen die Column auf-und absteigend sortieren lassen.
Jetzt möchte ich zwei weitere Funktionen einbauen, leider komme ich damit nicht klar.
Ich möchte jetzt durch einen einmaligen klick auf eine Spalte den Inhalt der dazugehörenden Variable (d0.s bis d7.s) in dem TextGadget rechts anzeigen lassen.
Die zweite Sache wäre, wenn ich zweimal auf einen Spalteneintrag klicke, sollte sich ein neues Window mit einem TextGadget öffnen und die dazugehörende Variable (e0.s bis e7.s) anzeigen.
Ich habe schon im Codearchiv geschaut und einiges dazu gefunden, leider komme ich nciht klar wie ich diese drei Routinen zusammen bekommen.
Vielleicht könnte mir jemand ein bischen helfen.
Gruss Holger
ich beschäftige michs seit ein paar Tagen mit PB und habe ein Frage an die Experten.
Ich habe hier zwei Gadget "ListIconGadget" und "TextGadget" bei dem ListIconGadget kann ich durch klicken auf die Namen die Column auf-und absteigend sortieren lassen.
Jetzt möchte ich zwei weitere Funktionen einbauen, leider komme ich damit nicht klar.
Ich möchte jetzt durch einen einmaligen klick auf eine Spalte den Inhalt der dazugehörenden Variable (d0.s bis d7.s) in dem TextGadget rechts anzeigen lassen.
Die zweite Sache wäre, wenn ich zweimal auf einen Spalteneintrag klicke, sollte sich ein neues Window mit einem TextGadget öffnen und die dazugehörende Variable (e0.s bis e7.s) anzeigen.
Ich habe schon im Codearchiv geschaut und einiges dazu gefunden, leider komme ich nciht klar wie ich diese drei Routinen zusammen bekommen.
Vielleicht könnte mir jemand ein bischen helfen.
Gruss Holger
Code: Alles auswählen
;Test Variablen
a0.s= "Sabine"
b0.s= "Karinerstrasse 2"
c0.s= "033-5435434534"
d0.s= "Rechts 0"
e0.s= "Window 0-ABC"
a1.s= "Peter"
b1.s= "Morenstrasse 12"
c1.s= "030-5435434534"
d1.s= "Rechts 1"
e1.s= "Window 1-DEF"
a2.s= "Klaus"
b2.s= "Rangoffstrasse 422"
c2.s= "089-34534534534"
d2.s= "Rechts 2"
e2.s= "Window 2-GHI"
a3.s= "Dieter"
b3.s= "Debattenstrasse 242"
c3.s= "010-3765756642"
d3.s= "Rechts 3"
e3.s= "Window 3-JKL"
a4.s= "Stefen"
b4.s= "Kölnerstrasse 222"
c4.s= "090-34345435342"
d4.s= "Rechts 4"
e4.s= "Window 4-MNO"
a5.s= "Rainer"
b5.s= "Simmstrasse 232"
c5.s= "070-342342342"
d5.s= "Rechts 5"
e5.s= "Window 5-PQR"
a6.s= "Holger"
b6.s= "Kalkstrasse 22"
c6.s= "060-33333332"
d6.s= "Rechts 6"
e6.s= "Window 6-STU"
a7.s= "Inge"
b7.s= "Bongostrasse 22"
c7.s= "020-3423423423"
d7.s= "Rechts 7"
e7.s= "Window 7-VWX"
Structure PB_ListIconItem
UserData.l
EndStructure
#LVM_SETEXTENDEDLISTVIEWSTYLE = #LVM_FIRST + 54
#LVM_GETEXTENDEDLISTVIEWSTYLE = #LVM_FIRST + 55
Global ListIconGadget.l, Buffer1.l, Buffer2.l, lvi.LV_ITEM, updown.l, lastcol.l
Buffer1 = AllocateMemory(128)
Buffer2 = AllocateMemory(128)
Procedure CompareFunc(*item1.PB_ListIconItem, *item2.PB_ListIconItem, lParamSort)
result = 0
lvi\iSubItem = lParamSort
lvi\pszText = Buffer1
lvi\cchTextMax = 512
lvi\Mask = #LVIF_TEXT
SendMessage_(ListIconGadget, #LVM_GETITEMTEXT, *item1\UserData, @lvi)
lvi\pszText = Buffer2
SendMessage_(ListIconGadget, #LVM_GETITEMTEXT, *item2\UserData, @lvi)
Seeker1 = Buffer1
Seeker2 = Buffer2
done = 0
While done=0
char1 = Asc(UCase(Chr(PeekB(Seeker1))))
char2 = Asc(UCase(Chr(PeekB(Seeker2))))
result = (char1-char2)*updown
If result<>0 Or (Seeker1-Buffer1)>511
done = 1
EndIf
Seeker1+1
Seeker2+1
Wend
ProcedureReturn result
EndProcedure
Procedure UpdatelParam()
Protected i.l, lTmp.l, lRecs.l, lvi.LV_ITEM
lRecs = SendMessage_(ListIconGadget, #LVM_GETITEMCOUNT, 0, 0)
For i = 0 To lRecs - 1
SetGadgetItemData(GetDlgCtrlID_(ListIconGadget), i, i)
Next
EndProcedure
Procedure ColumnClickCallback(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*msg.NMHDR = lParam
If *msg\hwndFrom = ListIconGadget And *msg\code = #LVN_COLUMNCLICK
*pnmv.NM_LISTVIEW = lParam
If lastcol<>*pnmv\iSubItem
updown = 1
EndIf
SendMessage_(ListIconGadget, #LVM_SORTITEMS, *pnmv\iSubItem, @CompareFunc())
UpdatelParam()
UpdateWindow_(ListIconGadget)
lastcol = *pnmv\iSubItem
updown = -updown
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 50, 50,900, 400, "Column Sortierung", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
;Gadget links
If CreateGadgetList(WindowID(0))
ListIconGadget = ListIconGadget(0, 0, 0, 460, 200, "ID", 50, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
AddGadgetColumn(0, 1, "Name", 100)
AddGadgetColumn(0, 2, "Adresse", 150)
AddGadgetColumn(0, 3, "Telefon", 150)
AddGadgetItem(0, 0, "0"+Chr(10)+a0+Chr(10)+b0+Chr(10)+c0)
AddGadgetItem(0, 1, "1"+Chr(10)+a1+Chr(10)+b1+Chr(10)+c1)
AddGadgetItem(0, 2, "2"+Chr(10)+a2+Chr(10)+b2+Chr(10)+c2)
AddGadgetItem(0, 3, "3"+Chr(10)+a3+Chr(10)+b3+Chr(10)+c3)
AddGadgetItem(0, 4, "4"+Chr(10)+a4+Chr(10)+b4+Chr(10)+c4)
AddGadgetItem(0, 5, "5"+Chr(10)+a5+Chr(10)+b5+Chr(10)+c5)
AddGadgetItem(0, 6, "6"+Chr(10)+a6+Chr(10)+b6+Chr(10)+c6)
AddGadgetItem(0, 7, "7"+Chr(10)+a7+Chr(10)+b7+Chr(10)+c7)
updown = 1
lastcol = 0
UpdatelParam()
SetWindowCallback(@ColumnClickCallback())
;Gadget rechts
TextGadget(2, 550, 5, 250, 200, "Rechts 0-7", #PB_Text_Center|#PB_Text_Border)
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
EndIf
EndIf