Laden in Xbplistbox

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Laden in Xbplistbox

Beitrag von Rolf Ramacher »

Hallo zusammen

das Laden Additem() dauert für 13 Datensätze 2 davon sind als gelöscht makiert 15 sekunden - das ist zu lange. Hat jemand eine Idee warum? gibt es bei Listbox etwas zu beachten

Code: Alles auswählen

   LOCAL nEvent, mp1, mp2
   LOCAL oDlg, oXbp, drawingArea, aEditControls := {}, aPos:={50,500}
	Local cVerz:=CurDrive()+":\"+CurDir(), cUser:="", aHProd:={}, oListbox

	If empty(cSatz)
		msgbox("Parameterübergabe falsch!"+CRLF+"Bitte das Programm über CRM-Modul starten")
		Return
	Endif 

	cUser:=cVerz+"\user"+cSatz
	oDlg:=DialogErzeugen({50,50},{800,600},"Haupt-Produkte-Auswahl","UP","m")
	drawingArea := oDlg:drawingArea
   drawingArea:setFontCompoundName( "9.Arial")
	aSize:=oDlg:CurrentSize()
	aPos:={100,150}

	use HProd New
	set index to "hprod.cdx"
	HProd->(DbGotop())
	Do while HProd->(!eof())
		AAdd(aHProd,{alltrim(HProd->Name),HProd->Notiz,HProd->(Recno())} )
		HProd->(DbSkip(+1))
	Enddo
	Close Data

	oListBox := XbpListbox():new(oDlg,, aPos, {800, 480}) 
   oListBox:markMode := XBPLISTBOX_MM_SINGLE 
	oListbox:ItemSelected:={||HProd(oDlg,oListBox,"bea",aHProd) }
   oListBox:create( ) 
	For j = 1 to Len(aHProd)
		oListbox:addItem(aHProd[j][1] )
	Next j
setze ich das create() nach Additem - habe ich sofort die Listbox da, aber ohne Inhalt. auch das Laden des Arrays aHProd geschieht sehr schnell
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Laden in Xbplistbox

Beitrag von Jan »

Halo Rolf,

was genau dauert 15 Sekunden? Der gesamte Code, oder nur die Schleife mit dem Hinzufügen der Listenelemenet?

Auf den ersten Blick seh ich (außer einigen merkwürdigen Schreibweisen) nur einen wirklich falschen Punkt: Setz mal den korrekten Parent. Das ist nicht oDlg, sondern oDlg:drawingArea. Du scheinst das ja eigentlich auch zu wollen, immerhin legst Du den extra auf eine Variable, und weißt der auch eine Schrift zu. Das dürfte aber kein Grund für das langsame Verhalten sein.

Und Du solltest mal das :itemSelected() hinter das :create() verschieben.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Laden in Xbplistbox

Beitrag von Rolf Ramacher »

Hi Jan

also oDlg:drawingArea hat keine n Änderung zur Folge
was passiert. - nach start des Programms erscheint die Listbox
dann passiert nichts und nach ca. 15 sekunden erscheinen die Informationen in der Liste
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Laden in Xbplistbox

Beitrag von Jan »

... und was ist mit dem :itemSelected()?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Laden in Xbplistbox

Beitrag von Rolf Ramacher »

Hi Jan,

was meinst du damit ? ich habe ItemSelected auch nach der for next schleife gesetzt - das gleiche.

Hier ein Besispiel aus Historie, wo es in sekundenbruchteile da ist. Ich sehe da keinen unterschied.

Code: Alles auswählen

	oListBox := XbpListbox():new(oDlg,, aPos, {800, 480}) 
   oListBox:markMode := XBPLISTBOX_MM_SINGLE 
	oListbox:ItemSelected:={|| HisAdrAnzeige(oDlg,oListBox) }
   oListBox:create( ) 
	For j = 1 to Len(aHist)
		oListbox:addItem(dtoc(aHist[j][1])+space(5)+aHist[j][2]+","+alltrim(str(aHist[j][3])))
	Next j
 
aHist ist genauso ein mehrdemensiolanes Array
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Laden in Xbplistbox

Beitrag von AUGE_OHR »

Jan hat geschrieben:... und was ist mit dem :itemSelected()?
einen Callback Slot für eine "Nachricht" kann man vor ODER nach einem o:Create() setzen.
lediglich die Property der "Konfiguration" müssen VOR einem o:Create() gesetzt werden.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Laden in Xbplistbox

Beitrag von AUGE_OHR »

Rolf Ramacher hat geschrieben:das Laden Additem() dauert für 13 Datensätze 2 davon sind als gelöscht makiert 15 sekunden - das ist zu lange. Hat jemand eine Idee warum? gibt es bei Listbox etwas zu beachten
hast du mal geprüft wie lange das :

use
set index
HProd->(DbGotop())
Do while HProd->(!eof())

dauert bis du zur Listbox kommst ?
wenn man eine Listbox füllt sollte die noch nicht angezeigt sein und erst am Ende per o:Show angezeigt werden.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Laden in Xbplistbox

Beitrag von Jan »

Nur zur Info: Rolf hat mir seine dbf durchgemailt. Ich habe daraus und aus dem Code im Eingangsposting ein Programm erstellt. Hier dauert das gesamte Einlesen und ANzeigen massiv unter einer Sekunde. Aber wenn Rolf exakt mein Projekt selber kompiliert, dauert das bei ihm wieder ewig.

Einziger aktuell bekannter Unterschied: Er arbeitet mit 1.9.331, ich mit 1.9.335

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Laden in Xbplistbox

Beitrag von peternmb »

Hallo,
das ist soweit ich weiss ein bekanntes Problem mit der Version 331.
Da müsstest du hier im Forum auch Beiträge (z.B. von mir) dazu finden.

Setze mal nach jedem addItem ein sleep(0.1)
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Laden in Xbplistbox

Beitrag von Rolf Ramacher »

Hallo Peter

vielen Dank für den Tip - es hat sich aber gezeigt das sleep(001) noch schneller ist.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Laden in Xbplistbox

Beitrag von brandelh »

Wenn Sleep() hilft, dann versuche auch mal Sleep(0), das veranlaßt nur, dass ein anderer Thread an die Reihe kommt.
Falls dieser Threadwechsel wichtig ist, z.B. um die GUI aufzubauen, dann könnte 0 reichen.
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Laden in Xbplistbox [erledigt]

Beitrag von Rolf Ramacher »

Hi Hubert

danke für den hinweis werde ich mal ausprobieren.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Antworten