Seite 2 von 2

Verfasst: 26.01.2006 23:11
von Macros
Hier ein kompletter Code zur Veranschaulichung:

Code: Alles auswählen

OpenWindow(1,200,200,200,200,#PB_Window_SystemMenu,"test")
CreateGadgetList(WindowID())
ListViewGadget(1,0,0,200,200)
For a=1 To 10
  AddGadgetItem(1,-1,"test"+Str(a))
Next
AddKeyboardShortcut(1,#PB_Shortcut_Delete,5) 

Repeat 
  event=WaitWindowEvent()
  Delay(1)
  
  If event=#PB_Event_Menu
    
    If EventMenuID()=5
      RemoveGadgetItem(1, GetGadgetState(1))
    EndIf
    
  EndIf 
  
  If event=#PB_Event_CloseWindow
    End
  EndIf
  
ForEver

Verfasst: 26.01.2006 23:34
von edel
Es ist bewusst einfach gehalten, sollte damit einiges klarer werden.

Code: Alles auswählen

  Enumeration
    #listview ; = 0
  EndEnumeration
  
  Enumeration
    #PopupMenu   ; = 0
    #DeleteEntry ; = 1
    #AddEntry    ; = 2
  EndEnumeration
  
  OpenWindow(0,0,0,300,300,1|#WS_SYSMENU,"")
  
  ; rechtsklick aktivieren
  AdvancedGadgetEvents(#True)
  
  CreateGadgetList(WindowID())
   
  ;listview erstellen und fuellen
  ListIconGadget(#listview,0,0,300,300,"blub",100)
  
  For i = 0 To 10
    AddGadgetItem(#listview,-1,"blaaaaaaa"+Str(i))
  Next
  
  ;popup menue erstellen
  CreatePopupMenu(#PopupMenu)
  MenuItem(#AddEntry ,"Eintrag hinzufuegen")
  MenuItem(#DeleteEntry,"Eintrag loeschen")    
  
  ; entf
  AddKeyboardShortcut(0,#PB_Shortcut_Delete,#DeleteEntry) ; sendet das gleice event wie ein klick auf den menue eintrag #DeleteEntry
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
      Case #PB_Event_Menu  ; Event vom Menu
        
        If  EventMenuID() = #DeleteEntry 
          
          item = GetGadgetState(#listview)
          
          If item >= 0 ; wenn item -1 ist nichts ausgewaehlt
          
            RemoveGadgetItem(#listview,item) ; item entfernen
            SetGadgetState(#listview,item)   ; naechste item markieren
            
          EndIf 
          
        EndIf 
      
        If EventMenuID() = #AddEntry  ; m
          
          AddGadgetItem(#listview,-1,"blaaaaaaa") ; neues item
          
        EndIf 
        
      Case #PB_Event_Gadget   ; Event auf irgendeinem Gadget 
        
        If  EventGadgetID() = #listview 
          
          If EventType() = #PB_EventType_RightClick
            
            DisplayPopupMenu(#PopupMenu,WindowID())   ; popmenu anzeigen
            
          EndIf 
          
        EndIf 
        
    Case #WM_CLOSE  ; Programm beenden
      Break
    EndSelect
    
  ForEver
  
  End

edit : Warum sagt mir kein Mensch das Threads auch mal 2 Seiten haben koennen :-/

Verfasst: 26.01.2006 23:39
von Macros
Stimmt, wenn bei einem Thread eine neue Seite
hinzukommt, sollte auf der davor ein dickes
rotes Banner mit der Aufschrift Neue Seite
angezeigt werden. :D

@dietmar: schau dir am besten zuerst
meinen kleinen Code an und dann Hallodris
(ist auch nicht viel komplizierter und gut auskommentiert)

Verfasst: 28.01.2006 15:08
von dietmar
Da ich eine Sortierfunktion aus dem PurBoard-Archiv verwende, hat das nicht ganz zusammen gepasst. Ohne diese funktioniert es einwandfrei. Jetzt sellt sich die Frage, wie geht beides gleichzeitig?

Verfasst: 28.01.2006 15:09
von Macros
Dazu müsste man natürlich wissen, welche Sortierfunktion.

Verfasst: 28.01.2006 16:02
von roherter
Hier mal ne selbstgeschriebene Sortier - Procedure ist keine dokumentation dabei aber vieleicht steigst du auch so durch:

Code: Alles auswählen

Procedure sortlist1(wert)
  listlaenge=CountGadgetItems(#List_1)
  listlae=listlaenge
  Structure daten
    spalte0.s
    spalte1.s
    spalte2.s
    spalte3.s
  EndStructure 
  Dim upe.daten(listlaenge)
  
  For a=0 To listlae
    upe(a)\spalte0=GetGadgetItemText(#List_1,a,0)
    upe(a)\spalte1=GetGadgetItemText(#List_1,a,1)
    upe(a)\spalte2=GetGadgetItemText(#List_1,a,2)
    upe(a)\spalte3=GetGadgetItemText(#List_1,a,3)
    
  Next a
  SortStructuredArray(upe(),wert,OffsetOf(daten\spalte0),#PB_Sort_String ) 
  If wert=3
    For a=0 To listlae
      SetGadgetItemText(#List_1,a,upe(a)\spalte0,0)
      SetGadgetItemText(#List_1,a,upe(a)\spalte1,1)
      SetGadgetItemText(#List_1,a,upe(a)\spalte2,2)
      SetGadgetItemText(#List_1,a,upe(a)\spalte3,3)
    Next a
  Else
    
  For a=0 To listlae
    SetGadgetItemText(#List_1,a,upe(a+1)\spalte0,0)
    SetGadgetItemText(#List_1,a,upe(a+1)\spalte1,1)
    SetGadgetItemText(#List_1,a,upe(a+1)\spalte2,2)
    SetGadgetItemText(#List_1,a,upe(a+1)\spalte3,3)
  Next a
EndIf 
EndProcedure

Verfasst: 30.01.2006 11:00
von dietmar
Seh schon so einfach ist das ganze nicht, werd die ganze Sache nochmal überdenken müssen. Auf jeden Fall war das alles jetzt sehr hilfreich.

Vielen Dank