ListIconGadget und #PB_ListIcon_MultiSelect

Anfängerfragen zum Programmieren mit PureBasic.
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

Beitrag von ts-soft »

Mal nen Tip am Rande:
wenn API, dann möglichst komplett API, also erstellen des Controls und
auswerten im Callback,
wenn PB, dann möglichst nur PB, es sei denn die Funktionalität fehlt.
Das Mixen kann zu Fehlfunktionalität, wenn nicht jetzt, evtl. mit der nächsten
Version von PB, führen.

Geschwindigkeitsunterschiede sind mehr als unwahrscheinlich, da PB intern
meist auch nichts anderes macht, als die API aufrufen.
Selbst das Aufrufen der API per ASM bringt da meist keine Unterschiede, die
irgendwie Meßbar wären :mrgreen:
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
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

sehe ich völlig anders !!!

und FehlFunktionalität siehe PB 3.9x zu 4.0 und 4.2 zu 4.3 und was hat das mit Api zu tun ?
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

ts-soft hat geschrieben:
Geschwindigkeitsunterschiede sind mehr als unwahrscheinlich, da PB intern
meist auch nichts anderes macht, als die API aufrufen.
Selbst das Aufrufen der API per ASM bringt da meist keine Unterschiede, die
irgendwie Meßbar wären :mrgreen:
Das braucht man nicht mal messen. PB hat in diesem Fall gar keine
Chance gegen die API Variante. API ist gerade bei grossen Listen
vorzuziehen. Das Argument mit dem Mixen ist auch an den Haaren
herbeigezogen, es sei denn Fred benutzt in der naechsten Version
ein anderes GUI Framework, was recht unwahrscheinlich ist.
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

Beitrag von ts-soft »

> Das Argument mit dem Mixen ist auch an den Haaren herbeigezogen
Dann lies mal mehr im engl. Bugforum.
Z.B. das Windows-Problem mit den Gridlines wird PB-Intern gelöst, so das
es hier Einschränkungen bezüglich der API-Nutzung gibt.
Kann das jetzt aber im Bug-Forum nicht mehr finden, da Fehler durch
mixen von API und nativen PB-Befehlen keine Bugs darstellen und der
Beitrag dort inzwischen gelöscht oder verschoben wurde.

> Das braucht man nicht mal messen. PB hat in diesem Fall gar keine Chance gegen die API Variante
Warum sollte PB da intern was anderes nutzen?
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
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

PB benutzt hier ein ganz anderen Befehl. Aber extra fuer dich :

Code: Alles auswählen


DisableDebugger

Procedure main()
  Protected win
  Protected lv
  Protected event
  Protected i
  Protected item
  Protected time
  Protected count
  
  win = OpenWindow(0,#PB_Ignore,#PB_Ignore,304,304,"Test")
  
  lv = ListIconGadget(0,2,2,200,300,"Test",200,#PB_ListIcon_MultiSelect|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)  
  ButtonGadget(1,205,2,75,23,"API Test")
  TextGadget(2,205,32,75,23,"Time : ")
  
  ButtonGadget(3,205,57,75,23,"PB Test")
  TextGadget(4,205,87,75,23,"Time : ")  
  
  For i = 0 To 10000
    AddGadgetItem(0,-1,"null")
  Next   
  
  Repeat 
    event = WaitWindowEvent()
    
    If event = #PB_Event_Gadget
      
      If EventGadget() = 1
        
        time = ElapsedMilliseconds()
        Repeat 
          item = SendMessage_(lv,#LVM_GETNEXTITEM,item,#LVNI_SELECTED)
        Until item = -1
        
        SetGadgetText(2,"Time : " + Str(ElapsedMilliseconds() - time))
        
        item = 0
        
      EndIf 
      
      If EventGadget() = 3
        
        time = ElapsedMilliseconds()
        count = CountGadgetItems(0) - 1 
        
        For i = 0 To count
          item = GetGadgetItemState(0,i) 
        Next 
        
        SetGadgetText(4,"Time : " + Str(ElapsedMilliseconds() - time))
        
        item = 0
        
      EndIf 
      
    EndIf 
    
  Until event = #PB_Event_CloseWindow
  
EndProcedure:main()
php-freak
Beiträge: 536
Registriert: 07.02.2009 18:08

Beitrag von php-freak »

Naja jetzt funktioniert es ja! Danke an euch alle!
PureBasic 4.30 (x86)
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

Beitrag von ts-soft »

> Aber extra fuer dich :
Soll das ein Witz sein? 0 - 15 ms Unterschied :mrgreen:
Ich glaubs ja nicht

Und wenn ich für die API Routine auch For Next nehme ist der Unterschied weg :wink:
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
php-freak
Beiträge: 536
Registriert: 07.02.2009 18:08

Beitrag von php-freak »

Um noch einmal kurz aufs Thema zu kommen:

Wie funzt das ganze für die 2. Spalte? Zum reinschreiben musste ich Chr(10) verwenden!
PureBasic 4.30 (x86)
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

Beitrag von ts-soft »

Code: Alles auswählen

GetGadgetItemText(0, i, 1)
siehe dritter optionaler Parameter (ist Deine Hilfe kaputt?)
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
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

ts-soft hat geschrieben:> Aber extra fuer dich :
Soll das ein Witz sein? 0 - 15 ms Unterschied :mrgreen:
Ich glaubs ja nicht

Und wenn ich für die API Routine auch For Next nehme ist der Unterschied weg :wink:
Wenn du 3 Items markierst, wird die Schleife 4 mal durchlaufen, dann
abgebrochen. Mit PB durchlaeufst du immer alle Items.

aber von mir aus kannste dann auch noch nen Delay(1000) reinpacken,
damit es mit API dann noch langsamer ist ... /:->
Antworten