Seite 4 von 4

Verfasst: 09.03.2009 23:03
von ts-soft
Bevor ich dem Einsteiger erkläre:
ListIconGadget = ListView
ListViewGadget = ListBox
laß ich es lieber :lol: und warte bis er selber nach API verlangt

Verfasst: 10.03.2009 00:27
von jear
Werden hier nicht Äpfel und Birnen verglichen?

Der "API - Test" liefert den Index des ersten selektierten Items.
Das macht PB wahrscheinlich genau so und genau so schnell mit

Code: Alles auswählen

GetGadgetState()
Irgendwann im letzten Jahrtausend habe ich mal verinnerlicht:
Bei normalen Applikationen kann kein Nutzer Reaktionszeiten unter einer Zehntelsekunde wahrnehmen.

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 100000 
    AddGadgetItem(0,-1,"item " + Str(i)) 
  Next    
  
  Repeat 
    event = WaitWindowEvent() 
    
    If event = #PB_Event_Gadget 
      
      If EventGadget() = 1 
        
        time = ElapsedMilliseconds() : i = 0
        Repeat
          item = i
          i = SendMessage_(lv,#LVM_GETNEXTITEM,i,#LVNI_SELECTED) 
        Until i = -1 
        
        SetGadgetText(2,"Time : " + Str(ElapsedMilliseconds() - time) + " " + Str(item)) 
        
        item = 0
        
      EndIf 
      
      If EventGadget() = 3 
        
        time = ElapsedMilliseconds() 
        
        item = GetGadgetState(0)
       
        SetGadgetText(4,"Time : " + Str(ElapsedMilliseconds() - time) + " " + Str(item)) 
        
        item = 0
        
      EndIf 
      
    EndIf 
    
  Until event = #PB_Event_CloseWindow 
  
EndProcedure:main() 

Verfasst: 10.03.2009 00:48
von Falko
>>> Werden hier nicht Äpfel und Birnen verglichen?

Wie kommst du denn darauf?

Die API-Funktion von edel ist rekursiv und erhält automatisch das darauffolgende Item zurück. Also wenn Item bei 0 anfängt, kommt beim
nächsten Durchlauf 1, darauf 2 usw. bis keins mehr da ist. Das wäre dann -1

Bei der PB-Funktion ist das leider nicht möglich, womit man dann die Gesamtanzahl der items vorher festlegen muss:

count = CountGadgetItems(0) - 1

Diese können dann mit Hilfe von For/Next, While / Wend oder Repeat / Until durchlaufen werden.

denn SetGadgetItemState() gibt nur den Status der Items in ListIconGadget zurück. Aber nicht den Index, wie die Api das machen kann.

Was nützt dann einem das GetGadgetState(0) , womit man nur den ersten Index erhält, aber nicht damit prüfen kann, ob ein Index des ListIconGadget gesetzt wurde.

Wo sind da die Äpfel und die Birnen :freak:

Hast du deinen Source mal ausprobiert, die Items mal alle markiert, als auch mal bei beiden Funktionen ein Debug Item gesetzt?

Gruß, Falko

Verfasst: 10.03.2009 16:47
von edel
Item sollte eigentlich -1 sein, also so

Code: Alles auswählen

item = -1
Repeat 
  item = SendMessage_(lv,#LVM_GETNEXTITEM,item,#LVNI_SELECTED) 
Until item = -1
Und es ist nicht der gleiche Befehl, PB nutzt LVM_GETITEMSTATE.

Ich weiss ja nicht was ihr alles fuer super Rechner habt, aber bei
mir ist PB, in meinem Beispiel, 200 mal langsamer.

Verfasst: 10.03.2009 16:50
von cxAlex
Ich hab jetzt dein Bsp. getestet.

Api ergibt immer 0, PB fast immer 0, ab und zu 16 ms.

Verfasst: 10.03.2009 16:53
von Kaeru Gaman
cxAlex hat geschrieben:Ich hab jetzt dein Bsp. getestet.

Api ergibt immer 0, PB fast immer 0, ab und zu 16 ms.
also, wie ich sagte, keine Aussagekraft, überhaupt keine.

den Vorgang vertausendfachen, damit ein überhaupt wahrnehmbarer Meßwert entsteht,
am besten verZEHNtausendfachen, damit der Meßwert auch eine wirkliche Aussagekraft bekommt.

Verfasst: 10.03.2009 17:23
von Andesdaf
@php-freak: Bei hjbremers 1.Code musst du eben List einfügen. Dann gehts.

Verfasst: 10.03.2009 17:26
von php-freak
Jo ich habs jetzt!

Verfasst: 10.03.2009 17:29
von Andesdaf
php-freak hat geschrieben:Jo ich habs jetzt!
gut dass das jetzt funktioniert.
und.., ähem... viel Spaß noch, wenn du jetzt wieder gesund bist...