Daten löschen im ListIconGadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 :-/
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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)
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag 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?
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Dazu müsste man natürlich wissen, welche Sortierfunktion.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag 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
Purebasic 5.0 32bit und 64 bit

I'm back from hell
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag 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
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Antworten