Seite 1 von 2

ListIconGadget gibt keine Nummer zurück

Verfasst: 14.12.2010 13:49
von Velindos
Hallo,

Setzte gerade das ListIconGadget ein. Lese meinen Datensätze ein und versuche beim anklicken der Zeile ein Ergebnis mit der Zeilennummer zu erhalten. Über die ich später auf den Datensatz zugreifen will, funkt aber nicht!

Code: Alles auswählen

;- ListIconGadget_006 vom 14-12-2010
;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #ListIcon_0
EndEnumeration
;- Gadget Variablen
Global Dim TID$(10)
Global Dim TStichwort$(10)
Global Liste

For K= 1 To 10 
  TID$(K)=Str(K)
  TStichwort$(K)=" Meldung"+Str(K)
  Debug TStichwort$
  
Next k

Procedure LetzterDatensatz()
  
  
  
  a=1;Datensatzzeiger auf Null
  Liste=1
  Protected DB
  DB=1
  ;OpenDatabase(DB, DatabaseFile$, "", "", #PB_Database_SQLite)
  ;If DatabaseQuery(DB, "SELECT * FROM Velindos")
  ;  While NextDatabaseRow(DB)
  For q= 1 To 10
    ;ID$= GetDatabaseString(DB,0)
    ;Stichwort$= GetDatabaseString(DB,1)
    ID$=TID$(q)
    Stichwort$=TStichwort$(q)
    AddGadgetItem(#ListIcon_0,-1, ID$+Chr(10)+Stichwort$+Chr(10)+Str(Liste))
    Liste = CountGadgetItems(#ListIcon_0)
    SetGadgetItemData(#ListIcon_0, Liste,q)
    Debug Liste
    ;Debug Eintrag(Liste)
    ;Debug a
    ;DatenSatzZeiger$(a)=ID$
    ;DatenSatzEnde$=ID$
    ;DatenSatzEnde= Val(ID$)
    ;DatensatzNaviEnde = a
    a=a+1  
    ;Liste=Liste+1
    
  Next q
  ;Wend 
  ;EndIf
  
  ;FinishDatabaseQuery(DB)
  
  ;CloseDatabase(DB)
EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 1024, 115, 457, 479, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    
    ListIconGadget(#ListIcon_0, 20, 15, 350, 115, "ID", 40)
    AddGadgetColumn(#ListIcon_0, 1, "Stichwort", 310)
    
    
    ;EndIf
  EndIf
EndProcedure

Open_Window_0()

LetzterDatensatz()

Repeat
  
  EventID = WaitWindowEvent()
  
  If  EventID = #PB_Event_Gadget
    
    GadgetID = EventGadget()
    
    Select GadgetID
        
      Case #ListIcon_0
        
        Anzeige= GetGadgetItemData(#ListIcon_0,Liste)
        Debug anzeige
        
    EndSelect    
    
  EndIf   
  
Until EventID = #PB_Event_CloseWindow 

; Purebasic 4.5 x64
Gruss … Velindos

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 14.12.2010 13:57
von Kiffi
beim Eintragen:

Code: Alles auswählen

SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0) - 1, q)
beim Auslesen:

Code: Alles auswählen

Anzeige= GetGadgetItemData(#ListIcon_0, GetGadgetState(#ListIcon_0))
Grüße ... Kiffi

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 14.12.2010 14:27
von Velindos
Hallo Kiffi,
besten Dank, hat auf Anhieb funktioniert.

Gruss ... Velindos

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 14.12.2010 20:26
von edel
Wozu getData? Die Zeilen bekommt man doch mit GetGadgetState.

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 15.12.2010 01:20
von Kiffi
edel hat geschrieben:Wozu getData? Die Zeilen bekommt man doch mit GetGadgetState.
wenn Velindos das in seiner finalen Version richtig macht, wird mit SetGadgetItemData()
die (Autoincrement-)ID des Datensatzes in jede Zeile des ListIconGadget eingetragen.
Somit hat man dann eine eindeutige Identifikation eines jeden Datensatzes mit
GetGadgetItemData().

GetGadgetState liefert ja nur den Index der ausgewählten Zeile zurück.

Grüße ... Kiffi

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 15.12.2010 10:47
von Velindos
Hallo,
möchte während einer Aktion wie "Neuer Datensatz eingeben" den Button für Speicher blockieren(verriegeln) und erst bei Eingabe im letzten Feld mit Enter Freigeben.
Gibt es diese Funktion im PureBasic?

Gruss ... Velindos

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 15.12.2010 10:53
von STARGÅTE

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 15.12.2010 11:19
von Velindos
Hallo STARGÅTE,
danke für den Tip, genau so wollte ich es.

Gibt es auch für den Abschluss einer Eingabe in einem StringGadget mit ENTER einen eigenen Befehl?

Gruss Velindos

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 15.12.2010 11:41
von ts-soft
Velindos hat geschrieben:Gibt es auch für den Abschluss einer Eingabe in einem StringGadget mit ENTER einen eigenen Befehl?
Nein, da dies kein normales Verhalten eines Fensters ist. Man verwendet stattdessen "TAB".

Wenn Du dieses untypische Verhalten eines Dialogfensters benötigst, musst Du das selber
programmieren. AddKeyBoardShortcut und GetActiveGadget sollten dabei hilfreich sein.

Gruß
Thomas

Re: ListIconGadget gibt keine Nummer zurück

Verfasst: 15.12.2010 12:05
von ts-soft
Hier ein schnell zusammgehacktes Beispiel:

Code: Alles auswählen

Procedure CreateWindow()
  OpenWindow(0, #PB_Ignore, #PB_Ignore, 400, 400, "", #PB_Window_SystemMenu)
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 1)
  StringGadget(0, 50, 35, 230, 25, "")
  StringGadget(1, 50, 80, 230, 25, "")
  ButtonGadget(2, 60, 130, 170, 35, "Okay")
  SetActiveGadget(0)
EndProcedure

CreateWindow()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow : Break
    
    Case #PB_Event_Menu
      If EventMenu() = 1
        Select GetActiveGadget()
          Case 0
            SetActiveGadget(1)
          Case 1
            SetActiveGadget(2)
        EndSelect
      EndIf
    
    Case #PB_Event_Gadget
      If GetActiveGadget() > 1
        RemoveKeyboardShortcut(0, 1)
      Else
        AddKeyboardShortcut(0, #PB_Shortcut_Return, 1)
      EndIf
      If EventGadget() = 2
        Debug "Okay"
      EndIf
  EndSelect
ForEver