[Win] ListIconGadget mit Pfeilen für die Sortierrichtung

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
bommel
Beiträge: 32
Registriert: 31.07.2006 13:21

[Win] ListIconGadget mit Pfeilen für die Sortierrichtung

Beitrag von bommel »

Morgen,

da ich die Suche hier und im englischen Forum nicht das brachte, was ich wollte bzw. mit PB4 nicht funktionierte, habe ich mal selbst was zusammengeklöppelt, um die Sortierrichtung in Listicongadgets mit Pfeilen (wie im Explorer) anzuzeigen. Hatte nämlich auch keine Lust, mich erst durch fremden Code zu wühlen oder riesige Fremdlibs einzubinden. Vielleicht gibt's da sogar eine Api-Funktion. Die habe ich aber nicht gefunden. Es werden wirklich nur die Pfeile gezeichnet. Die Eventabfrage für den Klick auf die Kopfzeile und das Sortieren selbst (geht bei mir über Datenbankabfrage) ist nicht mit drin. Aber im Beispiel ist das ja eingebaut. Sollte also jeder gleich loslegen können. Wer sowas einbauen will, kann den Code gerne benutzen, ausbauen und hier zur Verfügung stellen.
Verkleinern der Spalten sollte korrekt behandelt werden. Habe aber sicher nicht alle Möglichkeiten durchgetestet.
Die Erklärung der Parameter ist mit im Code.
Vielleicht kann es ja jemand gebrauchen.

Hier mal die Include-Datei:

Code: Alles auswählen

; SortArrow.pbi
;
; zeichnen von Pfeilen zum Anzeigen der Sortierrichtung in ListIconGadgets
; 
; SA_Register(SA_Window.l, SA_Gadget.l, SA_sortcol.b, SA_sortDir.b) - registriert ein ListIconGadget
    ; - SA_Window (Fenster, welches das ListIconGadget enthält)
    ; - SA_Gadget (das betreffende Gadget)
    ; - SA_sortcol (Spalte, die bei der Initialisierung den Pfeil enthält)
    ; - SA_sortDir (Pfeilrichtung bei der Initialisierung -> 0 = aufsteigend, 1 = absteigend)
; 
; SA_Unregister(SA_Window.l, SA_Gadget.l) - entfernt ein Gadget aus dem System
    ; - SA_Gadget (das betreffende Gadget)

; SA_Change(SA_Gadget.l, SA_sortcol.b, SA_sortDir.b)
    ; - SA_Gadget (das betreffende Gadget)
    ; - SA_sortcol (die Spalte, in der der Pfeil angezeigt werden soll)
    ; - SA_sortDir (Pfeilrichtung bei der Initialisierung -> 0 = aufsteigend, 1 = absteigend)
;
; SA_DirFlip(SA_Gadget.l) - kehrt die Pfeilrichtung um
    ; - SA_Gadget (das betreffende Gadget)
;
; SA_GetDir(SA_Gadget.l) - gibt die Pfeilrichtung für das Gadget zurück (0 = aufsteigend, 1 = absteigend)
    ; - SA_Gadget (das betreffende Gadget)
;
; SA_GetSortColumn(SA_Gadget.l) - gibt die Spalte zurück, die den Pfeil enthält
    ; - SA_Gadget (das betreffende Gadget)
;
; SA_draw() - zeichnet die Pfeile (muß in der Eventschleife aufgerufen werden!)

Structure SortArrowGadget
  Window.l
  Gadget.l     
  left.l   
  top.l          
  sortcol.l
  sortDir.l 
EndStructure

Global NewList SA_Gadgets.SortArrowGadget()

Procedure SA_Register(SA_Window.l, SA_Gadget.l, SA_sortcol.b, SA_sortDir.b)
  AddElement(SA_Gadgets())
  SA_Gadgets()\Window = SA_Window
  SA_Gadgets()\Gadget = SA_Gadget
  SA_Gadgets()\left = GadgetX(SA_Gadgets()\Gadget)
  SA_Gadgets()\top = GadgetY(SA_Gadgets()\Gadget)
  SA_Gadgets()\sortcol = SA_sortcol
  SA_Gadgets()\sortDir = SA_sortDir
EndProcedure

Procedure SA_Unregister(SA_Gadget.l)
  ForEach SA_Gadgets()
    If (SA_Gadgets()\Gadget = SA_Gadget)
      ; Kopfzeile neu zeichnen, um alte Pfeile zu löschen
      SetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , SA_Gadgets()\sortcol), SA_Gadgets()\sortcol)
      DeleteElement(SA_Gadgets())
      Break
    EndIf
  Next 
EndProcedure

Procedure SA_Change(SA_Gadget.l, SA_sortcol.b, SA_sortDir.b) 
  ForEach SA_Gadgets()
    If (SA_Gadgets()\Gadget = SA_Gadget) And (SA_Gadgets()\Window = SA_Window)
      ; Kopfzeile neu zeichnen, um alte Pfeile zu löschen
      SetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , SA_Gadgets()\sortcol), SA_Gadgets()\sortcol)
      SA_Gadgets()\sortcol = SA_sortcol
      SA_Gadgets()\sortDir = SA_sortDir
      Break
    EndIf
  Next
  
EndProcedure

Procedure SA_DirFlip(SA_Gadget.l)
  ForEach SA_Gadgets()
    If (SA_Gadgets()\Gadget = SA_Gadget) And (SA_Gadgets()\Window = SA_Window)
      If SA_Gadgets()\sortDir = 1
        SA_Gadgets()\sortDir = 0
      Else
        SA_Gadgets()\sortDir = 1
      EndIf
      Break
    EndIf
  Next
EndProcedure

Procedure.l SA_GetDir(SA_Gadget.l)
  ForEach SA_Gadgets()
    If (SA_Gadgets()\Gadget = SA_Gadget) And (SA_Gadgets()\Window = SA_Window)
      ProcedureReturn SA_Gadgets()\sortDir
    EndIf
  Next
EndProcedure

Procedure.l SA_GetSortColumn(SA_Gadget.l)
  ForEach SA_Gadgets()
    If (SA_Gadgets()\Gadget = SA_Gadget) And (SA_Gadgets()\Window = SA_Window)
      ProcedureReturn SA_Gadgets()\sortcol
    EndIf
  Next
EndProcedure

Procedure SA_draw()
  grey = RGB(130, 130, 130)
  Static drawoffsety = 8
  
  ForEach SA_Gadgets()
    colwidth = 0
    For countcol = 0 To SA_Gadgets()\sortcol-1
      colwidth + GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , countcol)
    Next
    drawx = SA_Gadgets()\left
    drawy = SA_Gadgets()\top
    StartDrawing(WindowOutput(SA_Gadgets()\Window))
    DrawingFont(GetGadgetFont(SA_Gadgets()\Gadget))
    drawoffsetx = TextWidth(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol)) + 15
    If GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , SA_Gadgets()\sortcol) < drawoffsetx+10
      If Right(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol), 2) <> "  "
        SetGadgetItemText(SA_Gadgets()\Gadget, -1, RTrim(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol))+"  ", SA_Gadgets()\sortcol)
      EndIf
      drawoffsetx = GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , SA_Gadgets()\sortcol)-8
    Else
      If Right(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol), 2) = "  "
        SetGadgetItemText(SA_Gadgets()\Gadget, -1, RTrim(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol)), SA_Gadgets()\sortcol)
      EndIf
    EndIf
    If SA_Gadgets()\sortDir = 1
      Line(drawx+colwidth+drawoffsetx,drawy+drawoffsety,7,0, grey)
      Line(drawx+colwidth+drawoffsetx+1,drawy+drawoffsety+1,5,0, grey)
      Line(drawx+colwidth+drawoffsetx+2,drawy+drawoffsety+2,3,0, grey)
      Plot(drawx+colwidth+drawoffsetx+3,drawy+drawoffsety+3, grey)
    Else
      Plot(drawx+colwidth+drawoffsetx+3,drawy+drawoffsety, grey)
      Line(drawx+colwidth+drawoffsetx+2,drawy+drawoffsety+1,3,0, grey)
      Line(drawx+colwidth+drawoffsetx+1,drawy+drawoffsety+2,5,0, grey)
      Line(drawx+colwidth+drawoffsetx,drawy+drawoffsety+3,7,0, grey)
    EndIf
    StopDrawing()
  Next
EndProcedure
Und noch ein Beispiel mit zwei ListIconGadgets
Beim Druck auf die Enter-Taste wird das untere Gadget wieder freigegeben und der Pfeil sollte verschwinden.

Code: Alles auswählen

Enumeration
  #MainWindow
  #ListIcon_1
  #ListIcon_2
EndEnumeration

IncludeFile "SortArrows.pbi"

Procedure Open_Window() 
  If OpenWindow(#MainWindow, 5, 5, 450, 420, "SortArrow Example",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered) 
    If CreateGadgetList(WindowID(#MainWindow))
      ListIconGadget(#ListIcon_1, 0, 0, 760, 200, "Spalte1", 70, #PB_ListIcon_GridLines)
      AddGadgetColumn(#ListIcon_1, 1, "Spalte2", 120)
      AddGadgetColumn(#ListIcon_1, 2, "Spalte3", 80)
      AddGadgetColumn(#ListIcon_1, 3, "Spalte4", 80)
      
      ListIconGadget(#ListIcon_2, 0, 210, 760, 200, "Spalte1", 90, #PB_ListIcon_GridLines)
      AddGadgetColumn(#ListIcon_2, 1, "Spalte2", 100)
      AddGadgetColumn(#ListIcon_2, 2, "Spalte3", 90)
      AddGadgetColumn(#ListIcon_2, 3, "Spalte4", 70)
      AddGadgetColumn(#ListIcon_2, 4, "Spalte5", 100)
    EndIf
  EndIf
EndProcedure

Procedure wndproc(hwnd,msg,wParam,lParam)
  retrn=#PB_ProcessPureBasicEvents
  Select msg
    Case #WM_NOTIFY
      *pnmhdr.NMHDR=lParam
      If *pnmhdr\code=#LVN_COLUMNCLICK
        *pnmlistview.NMLISTVIEW=lParam
        If *pnmlistview\hdr\hwndFrom=GadgetID(#ListIcon_1)
          sortcolumn=*pnmlistview\iSubItem
          Select sortcolumn
            Case 1
              ;Aktionen für Spalte1
            Case 2
              ;Aktionen für Spalte2
              ;usw.
          EndSelect
          
          If SA_GetSortColumn(#ListIcon_1) <> sortcolumn
            SA_Change(#ListIcon_1, sortcolumn, 0)
          Else
            SA_DirFlip(#ListIcon_1)
          EndIf
          oldsortcolumn = sortcolumn
         
        ElseIf *pnmlistview\hdr\hwndFrom=GadgetID(#ListIcon_2)
          sortcolumn=*pnmlistview\iSubItem
          
          Select sortcolumn
            Case 1
              ;Aktionen für Spalte1
            Case 2
              ;Aktionen für Spalte2
              ;usw.
          EndSelect
          
          If SA_GetSortColumn(#ListIcon_2) <> sortcolumn
            SA_Change(#ListIcon_2, sortcolumn, 0)
          Else
            SA_DirFlip(#ListIcon_2)
          EndIf
        EndIf
      EndIf
      
  EndSelect
  ProcedureReturn retrn
EndProcedure

Open_Window()
SetWindowCallback(@wndproc())
SA_Register(#MainWindow, #ListIcon_1, 1, 1)
SA_Register(#MainWindow, #ListIcon_2, 3, 0)

Repeat ; Eventschleife
  SA_draw() ; Pfeile zeichnen
  Event = WaitWindowEvent(1)
  If Event = #WM_KEYDOWN
    Select EventwParam()
      Case #VK_RETURN
        SA_Unregister(#ListIcon_2)
    EndSelect
  EndIf
Until Event = #PB_Event_CloseWindow
Gruß
bommel
PB 4
pbnewby
Beiträge: 34
Registriert: 21.01.2008 16:10

Beitrag von pbnewby »

Coole Sache. :allright:
Schade dass es solche Features nicht schon als native PB-Befehle gibt und man eine "Mega-Hook-Funktion" dazu benötigt. Das Selbe gilt ja auch für die Spaltenformatierung usw. :cry:
-=[ PBNewBy ]=-
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Ich fand das so toll, das ich gleich nen Beispiel proggen musste:

Code: Alles auswählen

;{
; SortArrow.pbi 
; 
; zeichnen von Pfeilen zum Anzeigen der Sortierrichtung in ListIconGadgets 
; 
; SA_Register(SA_Window.l, SA_Gadget.l, SA_sortcol.b, SA_sortDir.b) - registriert ein ListIconGadget 
    ; - SA_Window (Fenster, welches das ListIconGadget enthält) 
    ; - SA_Gadget (das betreffende Gadget) 
    ; - SA_sortcol (Spalte, die bei der Initialisierung den Pfeil enthält) 
    ; - SA_sortDir (Pfeilrichtung bei der Initialisierung -> 0 = aufsteigend, 1 = absteigend) 
; 
; SA_Unregister(SA_Window.l, SA_Gadget.l) - entfernt ein Gadget aus dem System 
    ; - SA_Gadget (das betreffende Gadget) 

; SA_Change(SA_Gadget.l, SA_sortcol.b, SA_sortDir.b) 
    ; - SA_Gadget (das betreffende Gadget) 
    ; - SA_sortcol (die Spalte, in der der Pfeil angezeigt werden soll) 
    ; - SA_sortDir (Pfeilrichtung bei der Initialisierung -> 0 = aufsteigend, 1 = absteigend) 
; 
; SA_DirFlip(SA_Gadget.l) - kehrt die Pfeilrichtung um 
    ; - SA_Gadget (das betreffende Gadget) 
; 
; SA_GetDir(SA_Gadget.l) - gibt die Pfeilrichtung für das Gadget zurück (0 = aufsteigend, 1 = absteigend) 
    ; - SA_Gadget (das betreffende Gadget) 
; 
; SA_GetSortColumn(SA_Gadget.l) - gibt die Spalte zurück, die den Pfeil enthält 
    ; - SA_Gadget (das betreffende Gadget) 
; 
; SA_draw() - zeichnet die Pfeile (muß in der Eventschleife aufgerufen werden!) 

Structure SortArrowGadget 
  Window.l 
  Gadget.l      
  left.l    
  top.l          
  sortcol.l 
  sortDir.l 
EndStructure 

Global NewList SA_Gadgets.SortArrowGadget() 

Procedure SA_Register(SA_Window.l, SA_Gadget.l, SA_sortcol.b, SA_sortDir.b) 
  AddElement(SA_Gadgets()) 
  SA_Gadgets()\Window = SA_Window 
  SA_Gadgets()\Gadget = SA_Gadget 
  SA_Gadgets()\left = GadgetX(SA_Gadgets()\Gadget) 
  SA_Gadgets()\top = GadgetY(SA_Gadgets()\Gadget) 
  SA_Gadgets()\sortcol = SA_sortcol 
  SA_Gadgets()\sortDir = SA_sortDir 
EndProcedure 

Procedure SA_Unregister(SA_Gadget.l) 
  ForEach SA_Gadgets() 
    If (SA_Gadgets()\Gadget = SA_Gadget) 
      ; Kopfzeile neu zeichnen, um alte Pfeile zu löschen 
      SetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , SA_Gadgets()\sortcol), SA_Gadgets()\sortcol) 
      DeleteElement(SA_Gadgets()) 
      Break 
    EndIf 
  Next 
EndProcedure 

Procedure SA_Change(SA_Gadget.l, SA_sortcol.b, SA_sortDir.b) 
  ForEach SA_Gadgets() 
    If (SA_Gadgets()\Gadget = SA_Gadget) And (SA_Gadgets()\Window = SA_Window) 
      ; Kopfzeile neu zeichnen, um alte Pfeile zu löschen 
      SetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , SA_Gadgets()\sortcol), SA_Gadgets()\sortcol) 
      SA_Gadgets()\sortcol = SA_sortcol 
      SA_Gadgets()\sortDir = SA_sortDir 
      Break 
    EndIf 
  Next 
  
EndProcedure 

Procedure SA_DirFlip(SA_Gadget.l) 
  ForEach SA_Gadgets() 
    If (SA_Gadgets()\Gadget = SA_Gadget) And (SA_Gadgets()\Window = SA_Window) 
      If SA_Gadgets()\sortDir = 1 
        SA_Gadgets()\sortDir = 0 
      Else 
        SA_Gadgets()\sortDir = 1 
      EndIf 
      Break 
    EndIf 
  Next 
EndProcedure 

Procedure.l SA_GetDir(SA_Gadget.l) 
  ForEach SA_Gadgets() 
    If (SA_Gadgets()\Gadget = SA_Gadget) And (SA_Gadgets()\Window = SA_Window) 
      ProcedureReturn SA_Gadgets()\sortDir 
    EndIf 
  Next 
EndProcedure 

Procedure.l SA_GetSortColumn(SA_Gadget.l) 
  ForEach SA_Gadgets() 
    If (SA_Gadgets()\Gadget = SA_Gadget) And (SA_Gadgets()\Window = SA_Window) 
      ProcedureReturn SA_Gadgets()\sortcol 
    EndIf 
  Next 
EndProcedure 

Procedure SA_draw() 
  grey = RGB(130, 130, 130) 
  Static drawoffsety = 8 
  
  ForEach SA_Gadgets() 
    If SA_Gadgets()\sortcol >= 0
      colwidth = 0 
      For countcol = 0 To SA_Gadgets()\sortcol-1 
        colwidth + GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , countcol) 
      Next 
      drawx = SA_Gadgets()\left 
      drawy = SA_Gadgets()\top 
      StartDrawing(WindowOutput(SA_Gadgets()\Window)) 
      DrawingFont(GetGadgetFont(SA_Gadgets()\Gadget)) 
      drawoffsetx = TextWidth(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol)) + 15 
      If GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , SA_Gadgets()\sortcol) < drawoffsetx+10 
        If Right(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol), 2) <> "  " 
          SetGadgetItemText(SA_Gadgets()\Gadget, -1, RTrim(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol))+"  ", SA_Gadgets()\sortcol) 
        EndIf 
        drawoffsetx = GetGadgetItemAttribute(SA_Gadgets()\Gadget, -1, #PB_ListIcon_ColumnWidth , SA_Gadgets()\sortcol)-8 
      Else 
        If Right(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol), 2) = "  " 
          SetGadgetItemText(SA_Gadgets()\Gadget, -1, RTrim(GetGadgetItemText(SA_Gadgets()\Gadget, -1, SA_Gadgets()\sortcol)), SA_Gadgets()\sortcol) 
        EndIf 
      EndIf 
      If SA_Gadgets()\sortDir = 1 
        Line(drawx+colwidth+drawoffsetx,drawy+drawoffsety,7,0, grey) 
        Line(drawx+colwidth+drawoffsetx+1,drawy+drawoffsety+1,5,0, grey) 
        Line(drawx+colwidth+drawoffsetx+2,drawy+drawoffsety+2,3,0, grey) 
        Plot(drawx+colwidth+drawoffsetx+3,drawy+drawoffsety+3, grey) 
      Else 
        Plot(drawx+colwidth+drawoffsetx+3,drawy+drawoffsety, grey) 
        Line(drawx+colwidth+drawoffsetx+2,drawy+drawoffsety+1,3,0, grey) 
        Line(drawx+colwidth+drawoffsetx+1,drawy+drawoffsety+2,5,0, grey) 
        Line(drawx+colwidth+drawoffsetx,drawy+drawoffsety+3,7,0, grey) 
      EndIf 
      StopDrawing() 
    EndIf
  Next 
EndProcedure
;}

Enumeration 
  #MainWindow 
  #ListIcon_1 
  #ListIcon_2 
EndEnumeration 

;IncludeFile "SortArrows.pbi" 

Structure items
  column.l[4]
EndStructure
Global NewList List1.items()
Global NewList List2.items()
for i = 1 to 100
  AddElement(List1())
  List1()\column[0] = Random(1000)
  List1()\column[1] = Random(1000)
  List1()\column[2] = Random(1000)
  List1()\column[3] = Random(1000)
  
  AddElement(List2())
  List2()\column[0] = Random(1000)
  List2()\column[1] = Random(1000)
  List2()\column[2] = Random(1000)
  List2()\column[3] = Random(1000)
next i


Procedure RefreshItems(ListGadgetID.l, List.items())
  ClearGadgetItemList(ListGadgetID)
  
  ForEach List()
    AddGadgetItem(ListGadgetID, #PB_Any, Str(List()\column[0])+Chr(10)+Str(List()\column[1])+Chr(10)+Str(List()\column[2])+Chr(10)+Str(List()\column[3]))
  Next List()
EndProcedure

Procedure Open_Window() 
  If OpenWindow(#MainWindow, 5, 5, 450, 420, "SortArrow Example",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered) 
    If CreateGadgetList(WindowID(#MainWindow)) 
      ListIconGadget(#ListIcon_1, 0, 0, 760, 200, "Spalte1", 70, #PB_ListIcon_GridLines) 
      AddGadgetColumn(#ListIcon_1, 1, "Spalte2", 120) 
      AddGadgetColumn(#ListIcon_1, 2, "Spalte3", 80) 
      AddGadgetColumn(#ListIcon_1, 3, "Spalte4", 80)
      RefreshItems(#ListIcon_1, List1())
      
      ListIconGadget(#ListIcon_2, 0, 210, 760, 200, "Spalte1", 90, #PB_ListIcon_GridLines) 
      AddGadgetColumn(#ListIcon_2, 1, "Spalte2", 100) 
      AddGadgetColumn(#ListIcon_2, 2, "Spalte3", 90) 
      AddGadgetColumn(#ListIcon_2, 3, "Spalte4", 70) 
      RefreshItems(#ListIcon_2, List2())
      
    EndIf 
  EndIf 
EndProcedure 

Procedure wndproc(hwnd,msg,wParam,lParam) 
  retrn=#PB_ProcessPureBasicEvents 
  Select msg 
    Case #WM_NOTIFY 
      *pnmhdr.NMHDR=lParam 
      If *pnmhdr\code=#LVN_COLUMNCLICK 
        *pnmlistview.NMLISTVIEW=lParam 
        If *pnmlistview\hdr\hwndFrom=GadgetID(#ListIcon_1) 
          sortcolumn=*pnmlistview\iSubItem 
          
          SortStructuredList(List1(), 1!SA_GetDir(#ListIcon_1), SizeOf(Long)*sortcolumn, #PB_Sort_Long)
          RefreshItems(#ListIcon_1, List1())
          
          If SA_GetSortColumn(#ListIcon_1) <> sortcolumn 
            SA_Change(#ListIcon_1, sortcolumn, 0) 
          Else 
            SA_DirFlip(#ListIcon_1) 
          EndIf 
          oldsortcolumn = sortcolumn 
          
        ElseIf *pnmlistview\hdr\hwndFrom=GadgetID(#ListIcon_2) 
          sortcolumn=*pnmlistview\iSubItem 
          
          SortStructuredList(List2(), 1!SA_GetDir(#ListIcon_2), SizeOf(Long)*sortcolumn, #PB_Sort_Long)
          RefreshItems(#ListIcon_2, List2())
          
          If SA_GetSortColumn(#ListIcon_2) <> sortcolumn 
            SA_Change(#ListIcon_2, sortcolumn, 0) 
          Else 
            SA_DirFlip(#ListIcon_2) 
          EndIf 
        EndIf 
      EndIf 
      
  EndSelect 
  ProcedureReturn retrn 
EndProcedure 

Open_Window() 
SetWindowCallback(@wndproc()) 
SA_Register(#MainWindow, #ListIcon_1, -1, 1) 
SA_Register(#MainWindow, #ListIcon_2, -1, 0) 

Repeat ; Eventschleife 
  SA_draw() ; Pfeile zeichnen 
  Event = WaitWindowEvent(1) 
  If Event = #WM_KEYDOWN 
    Select EventwParam() 
      Case #VK_RETURN 
        SA_Unregister(#ListIcon_2) 
    EndSelect 
  ElseIf Event = #PB_Event_Gadget
    Select EventGadget()
    Case #ListIcon_1, #ListIcon_2
      ;If EventType() = #pb_eventType_
      ;EndIf
    EndSelect
  EndIf 
Until Event = #PB_Event_CloseWindow
bommel
Beiträge: 32
Registriert: 31.07.2006 13:21

Beitrag von bommel »

@Leonhard:

Vielen Dank für Deinen Beispielcode. Vielleicht können so etwas mehr Leute was sinnvolles damit anfangen. Habe im Moment leider keine Zeit zum coden, da ich mitten im Renovieren bzw. Umzug stecke.

Gruß
bommel
PB 4
Antworten