Seite 1 von 1

Einlesen einer NEWLIST

Verfasst: 08.06.2012 12:57
von Velindos
Hallo Leute,

Möchte meinen Daten von der Datenbank in einen Listgadget anzeigen und dort über die Newlist navigieren etc. Dies wegen der Vorteile von NEWLIST beim Löschen eines Eintrages oder Hinzufügen.

Nun habe ich begonnen die Newlist zu meinen Daten zu füttern.
Wenn ich jedoch den letzten Datensatz auslese stürtzt die Sache, warum ???

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #MyWindow
EndEnumeration

;- Gadget Constants
;
Enumeration
  #ListIcon_0
  #NewLaden
  #NewNeuladen
  #NewErster
  #NewMinus
  #New_Data
  #NewPlus
  #NewEnde
  #NewInsert
  #NewDelete
  #String_1
  #String_2
  #String_3
EndEnumeration

Structure sData
  ID.s
  Stichwort.s
  DID.s
EndStructure


Global NewList MyDataList.sData()
Global stichwort$="Testeintrag"

Procedure Listgadgetfuellen()
  For k = 0 To 120
    AddElement(MyDataList())
    MyDataList()\ID        = Str(k)
    MyDataList()\Stichwort = stichwort$+" "+Str(k)
    MyDataList()\DID = Str(120-k)
    AddGadgetItem(#ListIcon_0,-1,Str(k)+ Chr(10)+stichwort$+" "+Str(k)+Chr(10)+Str(120-k)  )
    SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0)-1, k-1)
  Next
EndProcedure


Procedure Open_Window_0()
  If OpenWindow(#MyWindow, 220, 0, 551, 484, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ;-
    ListIconGadget(#ListIcon_0, 16, 32, 515, 221, "LID", 100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
    AddGadgetColumn(#ListIcon_0, 1, "Stichwort", 367)
    AddGadgetColumn(#ListIcon_0, 2, "DB", 60)
    
    
    
    ButtonGadget(#NewLaden, 19, 265, 53, 27, "Laden")
    ButtonGadget(#NewNeuladen, 78, 265, 57, 27, "Refresh")
    ButtonGadget(#NewErster, 188, 264, 55, 29, "|<")
    ButtonGadget(#NewMinus, 248, 265, 59, 27, "<")
    StringGadget(#New_Data, 315, 266, 61, 29, "")
    ButtonGadget(#NewPlus, 382, 265, 61, 30, ">")
    ButtonGadget(#NewEnde, 447, 263, 48, 31, ">|")
    ButtonGadget(#NewInsert, 498, 263, 43, 31, "Insert")
    ButtonGadget(#NewDelete, 142, 265, 38, 28, "Delete")
    StringGadget(#String_1, 22, 320, 39, 30, "")
    StringGadget(#String_2, 119, 318, 209, 34, "")
    StringGadget(#String_3, 377, 320, 92, 34, "")
    
  EndIf
  
EndProcedure

Open_Window_0()



;{- WINDWOS Repeat
;- WINDWOS Repeat
Repeat
  
  Select WaitWindowEvent()
      
    Case #PB_Event_CloseWindow
      Break
      
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #NewLaden
          Listgadgetfuellen()
          
        Case #ListIcon_0
          Select EventType()
            Case #PB_EventType_LeftDoubleClick
              GID2= GetGadgetItemData(#ListIcon_0, GetGadgetState(#ListIcon_0))
              Debug GID2
              
              ListenEnde = ListSize(MyDataList()) 
              Debug ListenEnde
              
              SelectElement (MyDataList(), ListenEnde )
              meinid$ = MyDataList()\ID     
              
              SetGadgetText(#New_Data, meinid$)
              
          EndSelect
          
          
          
      EndSelect
  EndSelect      
Until EventID = #PB_Event_CloseWindow And EventWindow = #MyWindow

Gruss ... Velindos

Re: Einlesen einer NEWLIST

Verfasst: 08.06.2012 13:10
von NicTheQuick
Weil du vergessen hast bei 'SelectElement()' beim Index eins abzuziehen:

Code: Alles auswählen

SelectElement (MyDataList(), ListenEnde - 1 )
An dieser Stelle empfehle ich dir auch das ganze etwas anders anzugehen, nämlich mit Pointern zu den Elementen in der LinkedList und einem 'ChangeCurrentElement()' zum Auswählen. Das ist wesentlich performanter und weniger Fehleranfällig, falls man nicht aus Versehen irgendwo einen Nullpointer rein gepackt hat.

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
	#MyWindow
EndEnumeration

;- Gadget Constants
;
Enumeration
	#ListIcon_0
	#NewLaden
	#NewNeuladen
	#NewErster
	#NewMinus
	#New_Data
	#NewPlus
	#NewEnde
	#NewInsert
	#NewDelete
	#String_1
	#String_2
	#String_3
EndEnumeration

Structure sData
	ID.s
	Stichwort.s
	DID.s
EndStructure


Global NewList MyDataList.sData()
Global stichwort$="Testeintrag"

Procedure Listgadgetfuellen()
	For k = 0 To 120
		AddElement(MyDataList())
		MyDataList()\ID        = Str(k)
		MyDataList()\Stichwort = stichwort$+" "+Str(k)
		MyDataList()\DID = Str(120-k)
		AddGadgetItem(#ListIcon_0,-1,Str(k)+ Chr(10)+stichwort$+" "+Str(k)+Chr(10)+Str(120-k)  )
		SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0)-1, @MyDataList())
	Next
EndProcedure


Procedure Open_Window_0()
	If OpenWindow(#MyWindow, 220, 0, 551, 484, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
		;-
		ListIconGadget(#ListIcon_0, 16, 32, 515, 221, "LID", 100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
		AddGadgetColumn(#ListIcon_0, 1, "Stichwort", 367)
		AddGadgetColumn(#ListIcon_0, 2, "DB", 60)
		
		
		
		ButtonGadget(#NewLaden, 19, 265, 53, 27, "Laden")
		ButtonGadget(#NewNeuladen, 78, 265, 57, 27, "Refresh")
		ButtonGadget(#NewErster, 188, 264, 55, 29, "|<")
		ButtonGadget(#NewMinus, 248, 265, 59, 27, "<")
		StringGadget(#New_Data, 315, 266, 61, 29, "")
		ButtonGadget(#NewPlus, 382, 265, 61, 30, ">")
		ButtonGadget(#NewEnde, 447, 263, 48, 31, ">|")
		ButtonGadget(#NewInsert, 498, 263, 43, 31, "Insert")
		ButtonGadget(#NewDelete, 142, 265, 38, 28, "Delete")
		StringGadget(#String_1, 22, 320, 39, 30, "")
		StringGadget(#String_2, 119, 318, 209, 34, "")
		StringGadget(#String_3, 377, 320, 92, 34, "")
		
	EndIf
	
EndProcedure

Open_Window_0()



;{- WINDWOS Repeat
;- WINDWOS Repeat
Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow
			Break
			
		Case #PB_Event_Gadget
			Select EventGadget()
					
				Case #NewLaden
					Listgadgetfuellen()
					
				Case #ListIcon_0
					Select EventType()
						Case #PB_EventType_LeftDoubleClick
							ChangeCurrentElement(MyDataList(), GetGadgetItemData(#ListIcon_0, GetGadgetState(#ListIcon_0)))
							meinid$ = MyDataList()\ID     
							
							SetGadgetText(#New_Data, meinid$)
							
					EndSelect
					
					
					
			EndSelect
	EndSelect     
Until EventID = #PB_Event_CloseWindow And EventWindow = #MyWindow

Re: Einlesen einer NEWLIST

Verfasst: 09.06.2012 11:38
von Velindos
Hallo NicTheQuick,
danke für deinen hinweis. Habe das eingearbeitet.

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
  #MyWindow
EndEnumeration

;- Gadget Constants
;
Enumeration
  #ListIcon_0
  #NewLaden
  #Refresh
  #NewErster
  #NewMinus
  #New_Data
  #NewPlus
  #NewEnde
  #NewInsert
  #NewDelete
  #String_1
  #String_2
  #String_3
EndEnumeration

Structure sData
  ID.s
  Stichwort.s
  DID.s
EndStructure


Global NewList MyDataList.sData()
Global stichwort$="Testeintrag"

Procedure Listgadgetfuellen()
  For k = 0 To 120
    AddElement(MyDataList())
    MyDataList()\ID        = Str(k)
    MyDataList()\Stichwort = stichwort$+" "+Str(k)
    MyDataList()\DID = Str(120-k)
    AddGadgetItem(#ListIcon_0,-1,Str(k)+ Chr(10)+stichwort$+" "+Str(k)+Chr(10)+Str(120-k)  )
    SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0)-1, @MyDataList())
    
  Next
  ListenEnde = ListSize(MyDataList())-1
  SetGadgetText(#String_1, Str(ListenEnde-1));Zeilenzeiger anzeigen
  
EndProcedure


Procedure Open_Window_0()
  If OpenWindow(#MyWindow, 220, 0, 551, 484, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ;-
    ListIconGadget(#ListIcon_0, 16, 32, 515, 221, "LID", 100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
    AddGadgetColumn(#ListIcon_0, 1, "Stichwort", 367)
    AddGadgetColumn(#ListIcon_0, 2, "DB", 60)
    
    
    
    ButtonGadget(#NewLaden, 19, 265, 53, 27, "Laden")
    ButtonGadget(#Refresh, 78, 265, 57, 27, "Refresh")
    ButtonGadget(#NewErster, 188, 264, 55, 29, "|<")
    ButtonGadget(#NewMinus, 248, 265, 59, 27, "<")
    StringGadget(#New_Data, 315, 266, 61, 29, "")
    ButtonGadget(#NewPlus, 382, 265, 61, 30, ">")
    ButtonGadget(#NewEnde, 447, 263, 48, 31, ">|")
    ButtonGadget(#NewInsert, 498, 263, 43, 31, "Insert")
    ButtonGadget(#NewDelete, 142, 265, 38, 28, "Delete")
    StringGadget(#String_1, 22, 320, 39, 30, "")
    StringGadget(#String_2, 119, 318, 209, 34, "")
    StringGadget(#String_3, 377, 320, 92, 34, "")
    
  EndIf
  
EndProcedure

Open_Window_0()



;{- WINDWOS Repeat
;- WINDWOS Repeat
Repeat
  
  Select WaitWindowEvent()
      
    Case #PB_Event_CloseWindow
      Break
      
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #NewLaden
          Listgadgetfuellen()
          
        Case #ListIcon_0
          Select EventType()
            Case #PB_EventType_LeftDoubleClick;>>>>>>>>>>>>>Bei leeren Gadget ist ein Absturz
              SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, -1,-1)
              test =ChangeCurrentElement(MyDataList(), GetGadgetItemData(#ListIcon_0, GetGadgetState(#ListIcon_0)))
              meinid$ = MyDataList()\ID
              SetGadgetText(#New_Data, meinid$)
              Listiconzeile=Val(meinid$)
              SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Listiconzeile, 1)
              SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, $DCDCDC,-1)
          EndSelect
          
        Case #NewErster
          SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, -1,-1)
          If FirstElement(MyDataList()) <> 0
            meinid$ = MyDataList()\ID   
            SetGadgetText(#New_Data, meinid$)
            Listiconzeile=Val(meinid$)
            SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Listiconzeile, 1)
            SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, $DCDCDC,-1)
          EndIf
          
        Case #NewMinus
          SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, -1,-1)
          If PreviousElement(MyDataList())<> 0
            meinid$ = MyDataList()\ID   
            SetGadgetText(#New_Data, meinid$)
            Listiconzeile=Val(meinid$)
            SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Listiconzeile, 1)
            SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, $DCDCDC,-1)
          EndIf
          
        Case #NewPlus
          SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, -1,-1)
          If NextElement(MyDataList())<> 0
            meinid$ = MyDataList()\ID     
            SetGadgetText(#New_Data, meinid$)
            Listiconzeile=Val(meinid$)
            SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Listiconzeile, 1)
            SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, $DCDCDC,-1)
            
          EndIf
          
        Case #NewEnde
          SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, -1,-1)
          If LastElement(MyDataList()) <> 0
            meinid$ = MyDataList()\ID     
            SetGadgetText(#New_Data, meinid$)
            Listiconzeile=Val(meinid$)
            SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Listiconzeile, 1)
            SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, $DCDCDC,-1)
          EndIf
          
        Case #NewInsert;hüpft durch die Tabelle??? fehlt noch einfügen auf nach focus der zeile
          SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, -1,-1)
          If LastElement(MyDataList()) <> 0
            meinid$ = MyDataList()\ID     
            neuerid=Val(meinid$)+1
            If InsertElement(MyDataList()) <> 0
              If LastElement(MyDataList()) <> 0
                MyDataList()\ID        = Str(neuerid)
                SetGadgetText(#New_Data, MyDataList()\ID)
                Listiconzeile=Val(MyDataList()\ID)
                AddGadgetItem(#ListIcon_0,-1,Str(Listiconzeile)+ Chr(10)+stichwort$+" "+Str(k)+Chr(10)+Str(120-k)  )
                SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0)-1, Listiconzeile)
                SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Listiconzeile, 1)
                SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, $DCDCDC,-1)
              EndIf
            EndIf
          EndIf
          
        Case #NewDelete
          SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, -1,-1); Vorherige Markierung löschen
          ListIndex(MyDataList()) 
          meinid$ = MyDataList()\ID;Zeilenzeiger aus der Newlist
          SetGadgetText(#New_Data, meinid$);Zeilenzeiger anzeigen
          Listiconzeile=Val(MyDataList()\ID)
          If DeleteElement(MyDataList(), 1) <> 0; Löscht aktuelles Element.
            RemoveGadgetItem(#ListIcon_0, Listiconzeile)
            Listiconzeile=Listiconzeile-1
            SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Listiconzeile, 1);Auf Zeile Focusieren
            SetGadgetItemColor(#ListIcon_0,Listiconzeile, #PB_Gadget_BackColor, $DCDCDC,-1);Zeile neu markieren
          EndIf
          
        Case #Refresh;Obwohl List gelöscht wird sie immer länger
          ClearGadgetItems(#ListIcon_0) 
          Listgadgetfuellen()
          ListenEnde = ListSize(MyDataList())
          ClearList(MyDataList()) 
          For k = 0 To ListenEnde
            AddElement(MyDataList())
            MyDataList()\ID        = Str(k)
            MyDataList()\Stichwort = stichwort$+" "+Str(k)
            MyDataList()\DID = Str(120-k)
            AddGadgetItem(#ListIcon_0,-1,Str(k)+ Chr(10)+stichwort$+" "+Str(k)+Chr(10)+Str(ListenEnde-k)  )
            SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0)-1, @MyDataList())
          Next
          
          
      EndSelect
  EndSelect     
Until EventID = #PB_Event_CloseWindow And EventWindow = #MyWindow
Habe nun noch ein Problem mit dem Refresh, die Liste wird immer länger und mt deinen Vorschlag "mit Pointern zu den Elementen in der LinkedList". Wie spreche ich dann die Funktionen (erster ... delete.. etc..) an?

Gruss ... Velindos

Re: Einlesen einer NEWLIST

Verfasst: 09.06.2012 15:34
von NicTheQuick
Du musst natürlich das 'ClearList(MyDataList())' auch direkt nach 'ClearGadgetItems(#ListIcon_0)' aufrufen.

FirstElement, NextElement, PreviousElement und LastElement brauchst du doch gar nicht. Du weißt doch den Index im ListIconGadget und musst ihn nur entweder auf 0 setzen, auf eins erhöhen, eins erniedrigen oder auf die Elementanzahl minus 1 setzen. Dann kannst du immer mit GetGadgetItemData() den Pointer zum Element in der LinkedList nehmen, ihn mit 'ChangeCurrentElement()' setzen und dann mit dem Element machen, was du willst.

Und wegen dem Kommentar ">>>>>>>>>>>>>Bei leeren Gadget ist ein Absturz": Das ist natürlich klar, denn wenn kein Element da ist, gibt 'GetGadgetState()' immer -1 zurück. Eingesetzt in 'GetGadgetItemData()' ergibt das nichts sinnvolles, also wahrscheinlich 0, und die 0 dann als Parameter für 'ChangeCurrentElement()' versucht das Element mit dem Nullpointer zu ersetzen, was natürlich fehlschlägt und das Programm abstürzen lässt. Dass du da aufpassen musst, hatte ich im letzten Post ja angedeutet, deswegen immer überprüfen, ob 'GetGadgetState()' auch einen sinnvollen Wert zurück gibt.

Re: Einlesen einer NEWLIST

Verfasst: 09.06.2012 20:34
von Velindos
Hallo NicTheQuick,
danke für deine Tips, hab die Sache mal eingearbeitet. Probleme noch beim Neuen Datensatz, ansonsten läufts.

Code: Alles auswählen

;- Ver.Forum 005
;- Window Constants
Enumeration
  #Window_0
EndEnumeration
;- Gadget Constants
Enumeration
  #ListIcon_0
  #NewDelete
  #S_Work_Data
  #NewInsert
  #NewFocus
  #NewErster
  #NewMinus
  #NewPlus
  #NewEnde
  #New_Text
  #New_ID
  #New_Stichwort
  #New_Genre
  #New_DB
  #Refresh
EndEnumeration
;- Gadget Variablen
Global MaxIndex=30 ;<<<<<<<<<<<< hier die Anzahl der Einträge eintragen
Global Index
Global Index = 0
Global DatenSatzZiel$
Global MessageRequesterDatenString$
Global Index
Global IndexEnde
;-
;{ Structure Newlist
;-Structure
Structure sData
  ID.s
  Stichwort.s
  Genre.s
  DB.s
EndStructure
Global NewList MyDataList.sData()
;}  
Procedure DatensatzEinlesen()
  For a = 0 To MaxIndex
    ID$= Str(MaxIndex-a)
    Stichwort$= "ListIconEintrag "+Str(a)
    Genre$= "NEU"
    
    AddGadgetItem(#ListIcon_0,-1, Str(Index)+Chr(10)+Stichwort$+Chr(10)+Genre$+Chr(10)+ID$)
    SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0) - 1, Index)
    AddElement(MyDataList())
    MyDataList()\ID        = Str(Index)
    MyDataList()\Stichwort = Stichwort$
    MyDataList()\Genre     = Genre$
    MyDataList()\DB    = ID$
    
    IndexEnde=Index
    Index=Index+1
  Next
EndProcedure

Procedure SetFocusLetztenDatensatz()
  Index=IndexEnde
  SetGadgetText(#S_Work_Data, Str(Index))
  SetActiveGadget(#ListIcon_0)
  SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Index, 1);Focus auf neue Zeile
  SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, $DCDCDC,-1);Zeile färben
EndProcedure
Procedure SetFocusNachIndexZeiger()
  SetGadgetText(#S_Work_Data, Str(Index))
  SetActiveGadget(#ListIcon_0)
  SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Index, 1);Focus auf neue Zeile
  SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, $DCDCDC,-1);Zeile färben
EndProcedure
Procedure NewListAuslesen()
  ;NewList Lesen und Anzeigen
  If SelectElement(MyDataList(), Index) <> 0
    SetGadgetText(#New_ID, MyDataList()\ID)
    SetGadgetText(#New_Stichwort, MyDataList()\Stichwort)
    SetGadgetText(#New_Genre, MyDataList()\Genre)
    SetGadgetText(#New_DB, MyDataList()\DB)
  EndIf
EndProcedure
Procedure NewListRefresh()
  Index=0
  ClearGadgetItems(#ListIcon_0)
  ForEach MyDataList()
    AddGadgetItem(#ListIcon_0,-1, MyDataList()\ID+Chr(10)+MyDataList()\Stichwort+Chr(10)+MyDataList()\Genre +Chr(10)+MyDataList()\DB)
    SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0) - 1, Index)
  Next
EndProcedure
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 724, 115, 487, 579, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ListIconGadget(#ListIcon_0, 20, 15, 420, 415, "IDX", 30,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
    AddGadgetColumn(#ListIcon_0, 1, "Stichwort", 310)
    AddGadgetColumn(#ListIcon_0, 2, "GX", 20)
    AddGadgetColumn(#ListIcon_0, 3, "DDX", 40)
    ButtonGadget(#NewDelete, 20, 435, 38, 28, "Delete")
    ButtonGadget(#NewErster, 60, 435, 55, 28, "|<")
    ButtonGadget(#NewMinus, 120, 435, 59, 28, "<")
    StringGadget(#S_Work_Data, 185, 435, 82, 28, "Data",#ES_CENTER)
    ButtonGadget(#NewPlus, 280, 435, 61, 28, ">")
    ButtonGadget(#NewEnde, 340, 435, 48, 28, ">|")
    ButtonGadget(#NewInsert, 390, 435, 43, 28, "Insert")
    ButtonGadget(#NewFocus, 442, 435, 43, 28, "Focus")
    ButtonGadget(#Refresh, 442, 405, 43, 28, "'Ref")
    ;NEWLIST Einträge Anzeigen
    TextGadget(#New_Text,20, 480, 430, 28,"NEWLIST Einträge Anzeigen")
    StringGadget(#New_ID,20, 500, 30, 28, "")
    StringGadget(#New_Stichwort, 51, 500, 310, 28, "")
    StringGadget(#New_Genre,370, 500, 60, 28, "")
    StringGadget(#New_DB, 440, 500, 40, 28, "")
  EndIf
EndProcedure
;-START
Open_Window_0()
DatensatzEinlesen()
SetFocusLetztenDatensatz()
;-EVENT
Repeat
  EventID = WaitWindowEvent()
  If  EventID = #PB_Event_Gadget
    GadgetID = EventGadget()
    Select GadgetID
        
      Case #ListIcon_0
        Select EventType()
          Case #PB_EventType_LeftDoubleClick;>>>>>>>>>>>>>Bei leeren Gadget ist ein Absturz
            SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, -1,-1);Letzen ColorFocus löschen
            Index = GetGadgetState(#ListIcon_0);Index lesen
            SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Index, 1);Focus auf neue Zeile
            SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, $DCDCDC,-1);Zeile färben
            Index = GetGadgetState(#ListIcon_0)
            DatenSatzZiel$= (GetGadgetItemText(#ListIcon_0,GetGadgetState(#ListIcon_0),3))
            MessageRequesterDatenString$ = "Index= "+ Str(Index)+" Datensatzziel= "+ DatenSatzZiel$
            MessageRequester("DB Info",MessageRequesterDatenString$ ,  #PB_MessageRequester_Ok )
            SetGadgetText(#S_Work_Data, Str(Index))
        EndSelect   
        
      Case #NewDelete
        RemoveGadgetItem(#ListIcon_0, Index)
        IndexEnde=CountGadgetItems(#ListIcon_0)-1
        SetGadgetText(#S_Work_Data, Str(Index))
        SetFocusNachIndexZeiger()
        SetActiveGadget(#ListIcon_0)
        If SelectElement(MyDataList(), Index) <> 0
          If DeleteElement(MyDataList(), 1) <> 0; Löscht aktuelles Element.
          EndIf
        EndIf      
        
      Case #NewInsert
        ;Insert Element
        If LastElement(MyDataList()) <> 0
          If AddElement(MyDataList()) <> 0
            MyDataList()\ID        = Str(IndexEnde+1)
            MyDataList()\Stichwort = "Neuer Eintrag"
            MyDataList()\Genre     = "INSERT"
            MyDataList()\DB        = "xx"
          EndIf
        EndIf      
        SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, -1,-1);Letzen ColorFocus löschen
        IndexEnde = IndexEnde + 1
        Index = IndexEnde+1
        ;listicon mit neuer Zeile füllen
        AddGadgetItem(#ListIcon_0,-1, MyDataList()\ID+Chr(10)+MyDataList()\Stichwort+Chr(10)+MyDataList()\Genre +Chr(10)+MyDataList()\DB)
        SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0) - 1, Index)
        Debug index
        SetGadgetText(#S_Work_Data, Str(Index))
        SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Index, 1);Focus auf neue Zeile
        SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, $DCDCDC,-1);Zeile färben

      Case #NewFocus
        Debug IndexEnde
        Ergebnis = CountGadgetItems(#ListIcon_0)-1
        SetGadgetText(#S_Work_Data, "Focus "+Str(Ergebnis))
        
      Case #NewErster
        Index=0
        SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Index, 1);Focus auf neue Zeile
        SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, $DCDCDC,-1);Zeile färben
        SetGadgetText(#S_Work_Data, Str(Index))
        ;NewList Lesen und Anzeigen
        NewListAuslesen()
        
      Case #NewMinus
        If Index>0
          SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, -1,-1);Letzen ColorFocus löschen
          Index=Index-1
        EndIf
        SetFocusNachIndexZeiger()
        ;NewList Lesen und Anzeigen
        NewListAuslesen()
        
      Case #NewPlus
        If Index<IndexEnde
          SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, -1,-1);Letzen ColorFocus löschen
          Index=Index+1
        EndIf
        SetFocusNachIndexZeiger()
        ;NewList Lesen und Anzeigen
        NewListAuslesen()
        
      Case #NewEnde
        Index=IndexEnde
        SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Index, 1);Focus auf neue Zeile
        SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, $DCDCDC,-1);Zeile färben
        SetGadgetText(#S_Work_Data, Str(Index))
        SetGadgetText(#S_Work_Data, Str(Index))
        ;NewList Lesen und Anzeigen
        NewListAuslesen()
        
      Case #Refresh
        NewListRefresh()
        Debug index
        Index = IndexEnde
        SetGadgetText(#S_Work_Data, Str(Index))
        SendMessage_(GadgetID(#ListIcon_0), #LVM_ENSUREVISIBLE, Index, 1);Focus auf neue Zeile
        SetGadgetItemColor(#ListIcon_0,Index, #PB_Gadget_BackColor, $DCDCDC,-1);Zeile färben

    EndSelect
  EndIf 
Until EventID = #PB_Event_CloseWindow

; Purebasic 4.6 x64
Gruss ... Velindos

Re: Einlesen einer NEWLIST

Verfasst: 16.06.2012 11:05
von Velindos
Hallo Leute!

Wenn ich mit den Button navigiere dann bleibt der blaue Focus am letzten Doppelklick. Wie kann ich den Focus auf meine neue Navi-Zeile setzten?
Vielleicht hat jemand einen Tip!

Gruss ... Velindos

Re: Einlesen einer NEWLIST

Verfasst: 16.06.2012 13:33
von matbal
Velindos hat geschrieben: Wenn ich mit den Button navigiere dann bleibt der blaue Focus am letzten Doppelklick. Wie kann ich den Focus auf meine neue Navi-Zeile setzten?
Vielleicht hat jemand einen Tip!
Mit SetGadgetState setzt du den Cursor. Das solltest du verwenden anstatt SetGagetItemColor den Hintergrund zu färben

Re: Einlesen einer NEWLIST

Verfasst: 17.06.2012 11:02
von Velindos
Hallo,
hab deinen Vorschlag
SetGadgetState(#ListIcon_0,Index)
integriert und funzt, Danke!

Gruss .. Velindos