ListIconGadget gibt keine Nummer zurück

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

ListIconGadget gibt keine Nummer zurück

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIconGadget gibt keine Nummer zurück

Beitrag 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
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: ListIconGadget gibt keine Nummer zurück

Beitrag von Velindos »

Hallo Kiffi,
besten Dank, hat auf Anhieb funktioniert.

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: ListIconGadget gibt keine Nummer zurück

Beitrag von edel »

Wozu getData? Die Zeilen bekommt man doch mit GetGadgetState.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIconGadget gibt keine Nummer zurück

Beitrag 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
a²+b²=mc²
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: ListIconGadget gibt keine Nummer zurück

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ListIconGadget gibt keine Nummer zurück

Beitrag von STARGÅTE »

PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: ListIconGadget gibt keine Nummer zurück

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIconGadget gibt keine Nummer zurück

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIconGadget gibt keine Nummer zurück

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten