Filterbar in einem Listicon Header

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.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Filterbar in einem Listicon Header

Beitrag von nicolaus »

Hier mal ein beispiel für eine Filterbar in einem Columheader mit suchfunktion.
Hoffe es gefällt und es kann mal jemand gebrauchen.

Das beispiel ist für PB 3.94! Es läuft auch ohne probs unter PB v4 jedoch müßt ihr bei OpenWindow die Parameter vertauschen für Flags und WindowText

Code: Alles auswählen

;ListIcon Filter example
;by nicolaus in the german and english PureBasic board
; 10.06.2006
;..............................
;in this example you see in the header of the listicon a filterbar.
;in this bar you can type a string and after 3 secs the filter will search the string in
;the listicon items. after you type a string in the filterbar you can also click the button at the
;right side of the filterbar.
;after click the button or wait 3 secs the function "SearchInLI()" will search the string in the listicon
;and select it if the string is found.
;
;hope you like it.
;
;regards nico

#LVM_FIRST = $1000
#HDM_LAYOUT = (#HDM_FIRST+5)
#LVM_GETHEADER = (#LVM_FIRST+31)
#HDS_BUTTONS = $0002
#HDS_FLAT = $0200
#HDS_FILTERBAR = $0100
#HDN_FILTERBTNCLICK = (#HDN_FIRST-13)
#HDN_FILTERCHANGE = (#HDN_FIRST-12)
#LVM_SETEXTENDEDLISTVIEWSTYLE = (#LVM_FIRST+54)
#LVS_EX_FLATSB = $100
#LVS_EX_HEADERDRAGDROP = $00000010
#LVS_EX_FULLROWSELECT = $00000020
#HDI_FILTER = $0100
#HDFT_ISSTRING = $0000
#HDM_SETFILTERCHANGETIMEOUT = (#HDM_FIRST+22)

Global oldproc, newheight, hListIcon, hHeader

Structure HDITEM
  mask.l
  cxy.l
  pszText.l
  hbm.l
  cchTextMax.l
  fmt.l
  lParam.l
  iImage.l
  iOrder.l
  type.l
  pvFilter.l
EndStructure
Structure HDTEXTFILTER
  pszText.l
  cchTextMax.l
EndStructure

Procedure SearchInLI(gadget.l,String.s) ; search in the listicon for the givend string
  SendMessage_(GadgetID(gadget), #LVM_FIRST + $54, $8, 1) 
  fItem.LV_FINDINFO 
  fItem\flags   = #LVFI_STRING 
  fItem\psz     = @String 
  itemNumber = SendMessage_(GadgetID(gadget), #LVM_FINDITEM, -1, fItem) ; find Item 
  If itemNumber > -1 
    Goto SCROLL_AND_SELECT 
  Else 
    For I = 0 To CountGadgetItems(gadget) - 1 
      If String = GetGadgetItemText(gadget, I, 1) 
        itemNumber = I 
        Goto SCROLL_AND_SELECT 
      EndIf 
    Next 
  EndIf 
  Goto PROC_ERROR 
  SCROLL_AND_SELECT: 
  pItem.POINT 
  SendMessage_(GadgetID(gadget), #LVM_GETITEMPOSITION, itemNumber , pItem) ; get item position 
  SendMessage_(GadgetID(gadget), #LVM_SCROLL, pItem\x, pItem\y - 150)     ; scroll to item position 
  sItem.LV_ITEM 
  sItem\mask      = #LVIF_STATE 
  sItem\state     = #LVIS_SELECTED 
  sItem\stateMask = #LVIS_SELECTED 
  SendMessage_(GadgetID(gadget), #LVM_SETITEMSTATE, itemNumber , sItem)    ; set item state as selected      
  Goto PROC_END 
  PROC_ERROR: 
  MessageRequester("Error", "Can´t finde'" + String + "' in the list", #MB_ICONEXCLAMATION | #MB_OK)  
  PROC_END: 
EndProcedure 
Procedure.l WinProc(hwnd.l, msg.l, wParam.l, lParam.l)
  Result.l = 0
  If msg = #HDM_LAYOUT
    Result = CallWindowProc_(oldproc, hwnd, msg, wParam, lParam)
    *hdlayout.HD_LAYOUT = lParam 
    If *hdlayout\prc <> 0
      *rect.RECT = *hdlayout\prc
      *rect\Top = newheight
    EndIf
    If *hdlayout\pwpos <> 0
      *windowpos.WINDOWPOS = *hdlayout\pwpos
      *windowpos\cy = newheight
    EndIf
  Else
    Result = CallWindowProc_(oldproc, hwnd, msg, wParam, lParam)
  EndIf 
  ProcedureReturn Result
EndProcedure
Procedure CallBack(hwnd.l, msg.l, wParam.l, lParam.l)
  Result = #PB_ProcessPureBasicEvents
  hHDItem.HDITEM
  TFilter.HDTEXTFILTER
  If msg = #WM_NOTIFY
    *pNMHdr.NMHEADER = lParam 
    If *pNMHdr\hdr\code = #HDN_FILTERCHANGE  
      TFilter\pszText = AllocateMemory(256)
      TFilter\cchTextMax = 256
      hHDItem\mask = #HDI_FILTER
      hHDItem\type = #HDFT_ISSTRING
      hHDItem\pvFilter = @TFilter 
      SendMessage_(hHeader,#HDM_GETITEM,*pNMHdr\iItem,@hHDItem)
      SearchInLI(1,PeekS(TFilter\pszText,256)) 
    ElseIf *pNMHdr\hdr\code = #HDN_FILTERBTNCLICK
      TFilter\pszText = AllocateMemory(256)
      TFilter\cchTextMax = 256
      hHDItem\mask = #HDI_FILTER
      hHDItem\type = #HDFT_ISSTRING
      hHDItem\pvFilter = @TFilter 
      SendMessage_(hHeader,#HDM_GETITEM,*pNMHdr\iItem,@hHDItem)
      SearchInLI(1,PeekS(TFilter\pszText,256))
    EndIf
  EndIf
  ProcedureReturn Result
EndProcedure

OpenWindow(0,0,0,400,200,#PB_Window_SystemMenu,"ListIcon-FilterTest")

CreateGadgetList(WindowID(0))
hListIcon = ListIconGadget(1,0,0,400,195,"Name",200,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
; next we set the ext-style of the listicon
SendMessage_(hListIcon,#LVM_SETEXTENDEDLISTVIEWSTYLE,#LVS_EX_FLATSB|#LVS_EX_HEADERDRAGDROP,#LVS_EX_FLATSB|#LVS_EX_HEADERDRAGDROP)
; now we look for the handle of the listicon header....
hHeader = SendMessage_(hListIcon,#LVM_GETHEADER,0,0)
; and look for the winproc of the header
oldproc = SetWindowLong_(hHeader, #GWL_WNDPROC, @WinProc())
newheight = 35
; we set a new height of the listicon header so that we can set the filterbar into the header
SetWindowPos_(hHeader, 0, 0, 0, GadgetWidth(1), newheight, #SWP_NOZORDER | #SWP_NOMOVE)
hdItem.HDITEM
hdItem\mask = #HDI_FILTER
hdItem\type = #HDFT_ISSTRING
; now we set the timeout for the retur of the filter
SendMessage_(hHeader,#HDM_SETFILTERCHANGETIMEOUT, 0, 3000)
; we retrieves the actuall style of the listicon header....
lStyle = GetWindowLong_(hHeader,#GWL_STYLE)
; and add the style #HDS_FILTERBAR to the retrievet style
lStyle = lStyle | #HDS_FILTERBAR
; ok we set the new style to the listicon header
SetWindowLong_(hHeader,#GWL_STYLE, lStyle)
AddGadgetColumn(1,1,"City",180)
SetWindowCallback(@CallBack())

AddGadgetItem(1, -1, "Andreas" +Chr(10)+ "New York")
AddGadgetItem(1, -1, "Martin" +Chr(10)+ "Suhl")
AddGadgetItem(1, -1, "Fred" +Chr(10)+ "Paris")
AddGadgetItem(1, -1, "Andre" +Chr(10)+ "Erfurt")
AddGadgetItem(1, -1, "Rene" +Chr(10)+ "Leipzig")
AddGadgetItem(1, -1, "Sven" +Chr(10)+ "Emden")
AddGadgetItem(1, -1, "Mischael" +Chr(10)+ "Dresden")
AddGadgetItem(1, -1, "Marc" +Chr(10)+ "Rom")
AddGadgetItem(1, -1, "Nico" +Chr(10)+ "Bern")
AddGadgetItem(1, -1, "Karsten" +Chr(10)+ "Wien")
AddGadgetItem(1, -1, "Thomas" +Chr(10)+ "Hamburg")
AddGadgetItem(1, -1, "Bill" +Chr(10)+ "Gera")
AddGadgetItem(1, -1, "John" +Chr(10)+ "Tokyo")
AddGadgetItem(1, -1, "Elke" +Chr(10)+ "Miami")
AddGadgetItem(1, -1, "Sandra" +Chr(10)+ "Moskau")
AddGadgetItem(1, -1, "Sina" +Chr(10)+ "Jena")
AddGadgetItem(1, -1, "Liesa" +Chr(10)+ "Berlin")
AddGadgetItem(1, -1, "Laura" +Chr(10)+ "Lobenstein")
AddGadgetItem(1, -1, "Terry" +Chr(10)+ "Las Vegas")
AddGadgetItem(1, -1, "Dave" +Chr(10)+ "London")

Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow
Gruß,
Nico
Zuletzt geändert von nicolaus am 11.06.2006 14:32, insgesamt 2-mal geändert.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Hallo nico,

Läuft prima, auch unter PB4, wenn man die Parameter und den String in OpenWindow() tauscht.
Kann ich bestimmt gut gebrauchen.

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Anderer Forum-Code (http://www.purebasic.fr/english/viewtopic.php?t=22238)

Code: Alles auswählen

;#################################
;##### LISTICONGADGET FILTER #####
;#################################

#LVM_GETHEADER = (#LVM_FIRST+31)
#HDI_FILTER = $0100
#HDFT_ISSTRING = $0000
#HDS_FILTERBAR = $0100
#HDM_SETFILTERCHANGETIMEOUT = #HDM_FIRST+22
#HDM_EDITFILTER = #HDM_FIRST+23
#HDM_CLEARFILTER = #HDM_FIRST+24
#HDN_FILTERCHANGE = #HDN_FIRST-12
#HDN_FILTERBTNCLICK = #HDN_FIRST-13

Structure HDITEM
  mask.l
  cxy.l
  pszText.l
  hbm.l
  cchTextMax.l
  fmt.l
  lParam.l
  iImage.l
  iOrder.l
  type.l
  pvFilter.l
EndStructure
Structure HDTEXTFILTER
  pszText.s
  cchTextMax.l
EndStructure

Procedure.l ListIconGadget_CallBack(hwnd.l, msg.l, wParam.l, *lParam.NMHDFILTERBTNCLICK)
 
  Protected Result.l, item.HDITEM, filter.HDTEXTFILTER
 
  Result = CallWindowProc_(GetProp_(hwnd, "USER_OLDPROC"), hwnd, msg, wParam, *lParam)
 
  If msg = #WM_NOTIFY
    Select *lParam\hdr\code
      Case #HDN_FILTERCHANGE, #HDN_FILTERBTNCLICK
        filter\pszText = Space(256)
        filter\cchTextMax = 256
        item\mask = #HDI_FILTER
        item\type = #HDFT_ISSTRING
        item\pvFilter = @filter
        SendMessage_(GetProp_(hwnd, "USER_HEADER"), #HDM_GETITEM, *lParam\iItem, @item)
        If GetProp_(hwnd, "USER_HPROC")
          CallFunctionFast(GetProp_(hwnd, "USER_HPROC"), filter\pszText, *lParam\iItem)
        EndIf
    EndSelect
  EndIf
 
  ProcedureReturn Result
 
EndProcedure
Procedure.l ListIconGadget_Filter(gadget.l, *window, *hProc, timeOut.l = 50)
 
  Protected *header, hdItem.HDITEM
 
  *header = SendMessage_(GadgetID(gadget), #LVM_GETHEADER, #Null, #Null)
 
  If *header
    hdItem\mask = #HDI_FILTER
    hdItem\type = #HDFT_ISSTRING
    SendMessage_(*header, #HDM_SETFILTERCHANGETIMEOUT, 0, timeOut)
    SetWindowLong_(*header, #GWL_STYLE, GetWindowLong_(*header, #GWL_STYLE) | #HDS_FILTERBAR )
    SetProp_(*window, "USER_OLDPROC", SetWindowLong_(*window, #GWL_WNDPROC, @ListIconGadget_CallBack()))
    SetProp_(*window, "USER_HEADER", *header)
    SetProp_(*window, "USER_HPROC", *hProc)
  EndIf
 
EndProcedure

;###################
;##### EXAMPLE #####
;###################

Procedure.l search(text.s, column.l)
 
  If ExamineEnvironmentVariables()
   
    ClearGadgetItemList(1)
   
    While NextEnvironmentVariable()
      Select column
        Case 0: EnvironmentVariable$ = EnvironmentVariableName()
        Case 1: EnvironmentVariable$ = EnvironmentVariableValue()
      EndSelect
      If text = #NULL$ Or FindString(LCase(EnvironmentVariable$), LCase(text), 1)
        AddGadgetItem(1, -1, EnvironmentVariableName() + #LF$ + EnvironmentVariableValue())
      EndIf
    Wend
   
  EndIf
 
  StatusBarText(0, 0, "Search for '" + text + "' returns " + Str(CountGadgetItems(1)) + " result(s).")
 
EndProcedure

If OpenWindow(0, 0, 0, 640, 400, "EnvironmentVariable", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  If CreateStatusBar(0, WindowID(0))
    AddStatusBarField(800)
  EndIf
 
  If CreateGadgetList(WindowID(0))
    ListIconGadget(1, 5, 5, WindowWidth(0)-10, 370, "Name", 180, #PB_ListIcon_FullRowSelect)
    AddGadgetColumn(1, 1, "Value", WindowWidth(0)-215)
    ListIconGadget_Filter(1, WindowID(0), @search())
  EndIf
 
  search(#NULL$, #Null)
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
 
EndIf
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

jedoch ist dieser code auch nur eine antwort auf meinen post zu dem beispiel von mir, im englishen forum ;)
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Beitrag von SimonSimCity »

Dieser Code geht aber nur ohne Panel-Gadget...

Ich bekomme das einfach nicht hin...
Der geht nur, wenn ich bei diesem Code die Zeile 254-256 und Zeile 265 lösche...

Kann mir jn. helfen?

Oder können wir mal ne Sammlung aller Zusätze für das ListGadget machen?
Da gibts doch diesen Filter, dann kann man noch die Spalten verschieben (Drag&Drop) und noch vieles mehr...
Aber das ist mir im Moment zu viel gesuche bzw ich weiß nicht das richtige Suchwort :)

Code: Alles auswählen

Enumeration
  #Window
  #MenuBar
  #StatusBar
  #popup_menu
  #popup_menu_new
  
;- Menu Constants
  #MENU_Save
  #MENU_End 
  #MENU_Undo
  #MENU_Help
  
;- Gadget Constants
  #Daten
  #Daten2
  #KalenderGadget
  #Panel
  #List_Changes
EndEnumeration

;#################################
;##### LISTICONGADGET FILTER #####
;#################################
#LVM_GETHEADER = (#LVM_FIRST+31)
#HDI_FILTER = $0100
#HDFT_ISSTRING = $0000
#HDS_FILTERBAR = $0100
#HDM_SETFILTERCHANGETIMEOUT = #HDM_FIRST+22
#HDM_EDITFILTER = #HDM_FIRST+23
#HDM_CLEARFILTER = #HDM_FIRST+24
#HDN_FILTERCHANGE = #HDN_FIRST-12
#HDN_FILTERBTNCLICK = #HDN_FIRST-13

Structure HDITEM
  mask.l
  cxy.l
  pszText.l
  hbm.l
  cchTextMax.l
  fmt.l
  lParam.l
  iImage.l
  iOrder.l
  type.l
  pvFilter.l
EndStructure
Structure HDTEXTFILTER
  pszText.s
  cchTextMax.l
EndStructure

Procedure.l ListIconGadget_CallBack(hwnd.l, msg.l, wParam.l, *lParam.NMHDFILTERBTNCLICK)
  Protected Result.l, item.HDITEM, filter.HDTEXTFILTER
  Result = CallWindowProc_(GetProp_(hwnd, "USER_OLDPROC"), hwnd, msg, wParam, *lParam)
  If msg = #WM_NOTIFY
    Select *lParam\hdr\code
      Case #HDN_FILTERCHANGE, #HDN_FILTERBTNCLICK
        filter\pszText = Space(256)
        filter\cchTextMax = 256
        item\mask = #HDI_FILTER
        item\type = #HDFT_ISSTRING
        item\pvFilter = @filter
        SendMessage_(GetProp_(hwnd, "USER_HEADER"), #HDM_GETITEM, *lParam\iItem, @item)
        If GetProp_(hwnd, "USER_HPROC")
          CallFunctionFast(GetProp_(hwnd, "USER_HPROC"), filter\pszText, *lParam\iItem)
        EndIf
    EndSelect
  EndIf
  ProcedureReturn Result
EndProcedure
Procedure.l ListIconGadget_Filter(gadget.l, *window, *hProc, timeOut.l = 50)
 
  Protected *header, hdItem.HDITEM
 
  *header = SendMessage_(GadgetID(gadget), #LVM_GETHEADER, #Null, #Null)
 
  If *header
    hdItem\mask = #HDI_FILTER
    hdItem\type = #HDFT_ISSTRING
    SendMessage_(*header, #HDM_SETFILTERCHANGETIMEOUT, 0, timeOut)
    SetWindowLong_(*header, #GWL_STYLE, GetWindowLong_(*header, #GWL_STYLE) | #HDS_FILTERBAR )
    SetProp_(*window, "USER_OLDPROC", SetWindowLong_(*window, #GWL_WNDPROC, @ListIconGadget_CallBack()))
    SetProp_(*window, "USER_HEADER", *header)
    SetProp_(*window, "USER_HPROC", *hProc)
  EndIf
 
EndProcedure

;###################
;##### EXAMPLE #####
;###################

Procedure.l search(text.s, column.l)
  If ExamineEnvironmentVariables()
    ClearGadgetItemList(#Daten2)
    While NextEnvironmentVariable()
      Select column
        Case 0: EnvironmentVariable$ = EnvironmentVariableName()
        Case 1: EnvironmentVariable$ = EnvironmentVariableValue()
      EndSelect
      If text = #NULL$ Or FindString(LCase(EnvironmentVariable$), LCase(text), 1)
        AddGadgetItem(#Daten2, -1, EnvironmentVariableName() + #LF$ + EnvironmentVariableValue())
      EndIf
    Wend
  EndIf
  StatusBarText(#StatusBar, 0, "Search for '" + text + "' returns " + Str(CountGadgetItems(#daten2)) + " result(s).")
EndProcedure

Structure phpkit_content
  id.l
  cat.l
  time.l
  title.s{250}
  autor.s{60}
  text.s
  altdat.s{250}
  altdat2.s{250}
  option.b
  status.b
  subid.l
  expire.l
  header.s
  autorid.l
  themeid.l
  views.l
  rating.d
  rating_total.l
  comment_status.b
  rating_status.b
  ubb.b
  html.b
  smilies.b
  filesize.l
  template.s{250}
  teaser.s
  related.s
EndStructure

Global NewList Content.phpkit_content()
Procedure __ReadContentFromXML_ForData(iXML.l, *Node, bNewContent.b = #False)
  Protected i.l
  
  If XMLStatus(iXML) <> #PB_XML_Success
    Debug "ERROR"
    Debug Str(XMLErrorLine(iXML))+":"+Str(XMLErrorPosition(iXML))
    Debug XMLError(iXML)
    CallDebugger
  EndIf
  
  If XMLNodeType(*Node) = #PB_XML_Normal And LCase(GetXMLNodeName(*Node)) = "phpkit_content"
    bNewContent = #True
    AddElement(Content())
  EndIf
  
  If bNewContent
    Select LCase(GetXMLNodeName(*Node))
      Case "content_id"             : Content()\id             = Val(GetXMLNodeText(*Node))
      Case "content_cat"            : Content()\cat            = Val(GetXMLNodeText(*Node))
      Case "content_time"           : Content()\time           = Val(GetXMLNodeText(*Node))
      Case "content_title"          : Content()\title          = GetXMLNodeText(*Node)
      Case "content_autor"          : Content()\autor          = GetXMLNodeText(*Node)
      Case "content_text"           : Content()\text           = GetXMLNodeText(*Node)
      Case "content_altdat"         : Content()\altdat         = GetXMLNodeText(*Node)
      Case "content_altdat2"        : Content()\altdat2        = GetXMLNodeText(*Node)
      Case "content_option"         : Content()\option         = Val(GetXMLNodeText(*Node))
      Case "content_status"         : Content()\status         = Val(GetXMLNodeText(*Node))
      Case "content_subid"          : Content()\subid          = Val(GetXMLNodeText(*Node))
      Case "content_expire"         : Content()\expire         = Val(GetXMLNodeText(*Node))
      Case "content_header"         : Content()\header         = GetXMLNodeText(*Node)
      Case "content_autorid"        : Content()\autorid        = Val(GetXMLNodeText(*Node))
      Case "content_themeid"        : Content()\themeid        = Val(GetXMLNodeText(*Node))
      Case "content_views"          : Content()\views          = Val(GetXMLNodeText(*Node))
      Case "content_rating"         : Content()\rating         = Val(GetXMLNodeText(*Node))
      Case "content_rating_total"   : Content()\rating_total   = Val(GetXMLNodeText(*Node))
      Case "content_comment_status" : Content()\comment_status = Val(GetXMLNodeText(*Node))
      Case "content_rating_status"  : Content()\rating_status  = Val(GetXMLNodeText(*Node))
      Case "content_ubb"            : Content()\ubb            = Val(GetXMLNodeText(*Node))
      Case "content_html"           : Content()\html           = Val(GetXMLNodeText(*Node))
      Case "content_smilies"        : Content()\smilies        = Val(GetXMLNodeText(*Node))
      Case "content_filesize"       : Content()\filesize       = Val(GetXMLNodeText(*Node))
      Case "content_template"       : Content()\template       = GetXMLNodeText(*Node)
      Case "content_teaser"         : Content()\teaser         = GetXMLNodeText(*Node)
      Case "content_related"        : Content()\related        = GetXMLNodeText(*Node)
      Case "phpkit_content"
      Default                                
        Debug "Falscher Eintrag!!! ("+GetXMLNodeName(*Node)+")"
    EndSelect
    SetGadgetItemState(#KalenderGadget, Content()\time, #PB_Calendar_Bold)
  EndIf
  
  If XMLChildCount(*Node)
    For i=1 To XMLChildCount(*Node)
      If Not bNewContent
        SetGadgetState(22, i)
      EndIf
      __ReadContentFromXML_ForData(iXML.l, ChildXMLNode(*Node, i), bNewContent)
    Next i
  EndIf
  
EndProcedure
Procedure.b ReadContentFromXML(XMLFile.s)
  Protected iXML.l = LoadXML(#PB_Any, XMLFile)
   OpenWindow(23, 244, 202, 290, 40, "Fortschritt", #PB_Window_BorderLess)
   CreateGadgetList(WindowID(23))
   ProgressBarGadget(22, 0,0,290, 40, 0, 100)

  If Not IsXML(iXML)
    ProcedureReturn #False
  EndIf
  __ReadContentFromXML_ForData(iXML.l, RootXMLNode(iXML))

  FreeGadget(22)
  CloseWindow(23)
  FreeXML(iXML)
  ProcedureReturn #True
EndProcedure
Procedure GetAllTimeBetween(first_time.l, last_time.l)
  ClearGadgetItemList(#Daten)
  ForEach Content()
    If Content()\time >= first_time And Content()\time <= last_time
      If Content()\status & %1  : SetStatus.s="Aktiv" : Else : SetStatus.s="Inaktiv" : EndIf
      If Content()\status & %10 : SetStatus2.s="Ja"   : Else : SetStatus2.s="Nein"   : EndIf
      AddGadgetItem(#Daten, #PB_Any, Str(Content()\id)+Chr(10)+Content()\title+Chr(10)+FormatDate("%dd.%mm.%yyyy", Content()\time)+Chr(10)+FormatDate("%hh:%ii:%ss", Content()\time)+Chr(10)+Content()\text+Chr(10)+SetStatus+Chr(10)+SetStatus2)
      SetGadgetItemData(#Daten, CountGadgetItems(#Daten)-1, @Content())
    EndIf
  Next
EndProcedure
Procedure GetAllTime()
  ClearGadgetItemList(#Daten2)
  ForEach Content()
    If Content()\status & %1  : SetStatus.s="Aktiv" : Else : SetStatus.s="Inaktiv" : EndIf
    If Content()\status & %10 : SetStatus2.s="Ja"   : Else : SetStatus2.s="Nein"   : EndIf
    AddGadgetItem(#Daten2, #PB_Any, Str(Content()\id)+Chr(10)+Content()\title+Chr(10)+FormatDate("%dd.%mm.%yyyy", Content()\time)+Chr(10)+FormatDate("%hh:%ii:%ss", Content()\time)+Chr(10)+Content()\text+Chr(10)+SetStatus+Chr(10)+SetStatus2)
    SetGadgetItemData(#Daten2, CountGadgetItems(#Daten2)-1, @Content())
  Next
EndProcedure

OpenWindow(#Window, 58, 152, 810, 534, "Kalender",  #PB_Window_SystemMenu | #PB_Window_Invisible | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered )
  CreateMenu(#MenuBar, WindowID(#Window)) ;{
    MenuTitle("Datei")
     MenuItem(#MENU_Save, "Speichern")
     MenuBar()
     MenuItem(#MENU_End, "Beenden")
    MenuTitle("Bearbeiten")
     MenuItem(#MENU_Undo, "Rückgängig")
    MenuTitle("Hilfe")
     MenuItem(#MENU_Help, "Hilfe")
  DisableMenuItem(#MenuBar, #MENU_Undo, 1)
  ;}
  CreateStatusBar(#StatusBar, WindowID(#Window)) ;{  
  ;}
  CreateGadgetList(WindowID(#Window))
   PanelGadget(#Panel, 0, 0, 810, 490)
    AddGadgetItem(#Panel, 0, "Kalender")
    AddGadgetItem(#Panel, 2, "Alle Kalendereinträge")
     ListIconGadget(#Daten2, 8, 8, 790, 450, "ID", 40, #PB_ListIcon_GridLines | #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_FullRowSelect)
      AddGadgetColumn(#Daten2, 1, "Titel", 300)
      AddGadgetColumn(#Daten2, 2, "Datum:", 70)
      AddGadgetColumn(#Daten2, 3, "Uhrzeit:", 55)
      AddGadgetColumn(#Daten2, 4, "Text", 169)
      AddGadgetColumn(#Daten2, 5, "Status",45)
      AddGadgetColumn(#Daten2, 6, "Durchgestrichen",90)
    ListIconGadget_Filter(#Daten2, WindowID(#Window), @search())
  CloseGadgetList()
  CreatePopupMenu(#popup_menu)
    MenuItem(1, "Eintrag löschen")
    MenuItem(2, "Gehe zu 'Alle Kalendereinträge'")
  CreatePopupMenu(#popup_menu_new)
    MenuItem(3, "Neuer Eintrag")
HideWindow(#Window, 0)



  
  search(#NULL$, #Null)
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
[/code]
Antworten