XboListBox() Zeile markieren [Erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
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:

XboListBox() Zeile markieren [Erledigt]

Beitrag von Jan »

Hallo,

ich baue eine Listbox auf, und habe den :itemMarked() mit einer Anzeige zusätzlicher Details belegt. Sobald man sich in der Liste bewegt werden passend zu dem jeweils markierten Satz die Details angezeigt.

Dumm ist nur, das direkt nach dem Aufbau der Liste zwar der erste Satz markiert ist, der Fokus liegt auch dadrauf (ich kann mich direkt mit den Cursortasten bewegen). Aber die Details werden nicht angezeigt. Dazu muß ich mich erstmal in der Liste bewegen. Das ist natürlich ärgerlich.

Wie bekomme ich das hin der Liste nicht nur zu sagen wo die stehen soll, und das die auch den Fokus hat, sondern dem Eintrag auch zu sagen "Fühl Dich bitte markiert und mache, was in :itemMarked() steht"?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XboListBox() Zeile markieren

Beitrag von georg »

Hallo, Jan -


aus dem Ärmel geschüttelt wurde ich auf :setData() tippen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: XboListBox() Zeile markieren

Beitrag von Jan »

Hallo Georg,

:setData() hab ich da längst drin. Das stellt sicher das ich zum Start richtig stehe. Ändert aber leider nichts daran das :setMarked() beim Start nicht greift.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: XboListBox() Zeile markieren

Beitrag von AUGE_OHR »

Jan hat geschrieben::setData() hab ich da längst drin. Das stellt sicher das ich zum Start richtig stehe.
was vermutlich dein Problem ist wenn das o:SetData vor der Event Schleife ist ...

IMHO wird xbeLB_ItemMarked erst bei einer Änderung des 1st. Zustand gesendet wenn sich die Auswahl des Items ändert.
ich würde versuchen, per verzögerten Thread, die Markierung zu setzten.
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: XboListBox() Zeile markieren

Beitrag von Tom »

Mach doch einfach ein Eval(oXbpListbox:ItemMarked) direkt vor dem Aufruf des Handlers.
Herzlich,
Tom
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: XboListBox() Zeile markieren

Beitrag von brandelh »

das Eval führt zwar aus was als Codeblock hinterlegt ist, aber optisch ändert es nicht.
Das habe ich mit Pushbuttons auch schon versucht ...
Es hilft nur ein PostAppEvent() aufzurufen, nachdem der Aufbau steht, aber bei einer Listbox müsste man auch markieren wo genau geklickt wurde.
Beim Button war das einfach.
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XboListBox() Zeile markieren

Beitrag von georg »

Hallo, Jan -


ich habe Dein Problem mal nachgestellt, und kann Dein Problem nicht nachvollziehen:

Code: Alles auswählen

#INCLUDE "AppEvent.ch"
#INCLUDE "Xbp.ch"

FUNCTION Main()
	Local aPos, aSize, aEntries
	Local mp1, mp2
	Local nEvent
	Local oXbp
	
	aEntries := {}
	
	aPos := {50, 50}
	aSize := {200, 100}
	oXbp := XbpLIstBox():new(, , aPos, aSize)
	oXbp:tabStop := .T.
	oXbp:itemMarked := {|uNIL1, uNIL2, self| ShowAddInfo(self, aEntries)}
	oXbp:create()
	oXbp:addItem("Eins")
	oXbp:addItem("Zwei")
	oXbp:addItem("Drei")
	AAdd(aEntries, oXbp)
	oXbp:setData(1)
	
	aPos[1] += 10 + aSize[1]
	aSize[2] := 40
	oXbp := XbpStatic():new(, , aPos, aSize)
	oXbp:type := XBPSTATIC_TYPE_TEXT
	oXbp:create()
	oXbp:configure()
	AAdd(aEntries, oXbp)
	
	PostAppEvent(xbeLB_ItemMarked, NIL, NIL, aEntries[1])
	
	nEvent := xbe_None
	WHILE nEvent <> xbeP_Close
		nEvent := AppEvent(@mp1, @mp2, @oXbp)
		oXbp:handleEvent(nEvent, mp1, mp2)
	END
RETURN(.T.)

FUNCTION ShowAddInfo(oList, aEntries)
	Local aItem
	Local cText
	aItem := oList:getData()
	IF Empty(aItem)
		aEntries[2]:caption := Space(50)
		aEntries[2]:configure()
		RETU(.F.)
	ENDIF
	cText := oList:getItem(aItem[1])
	aEntries[2]:caption := PadR(cText, 50)
	aEntries[2]:configure()
RETURN(.T.)
Das PostAppEvent() vor dem Event-Loop sorgt dafür, dass der Callback :itemMarked ausgeführt wird.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: XboListBox() Zeile markieren

Beitrag von Jan »

Hallo Tom und Georg,

danke für die Tipps. Werd ich heute Abend testen und dann Bescheid geben.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: XboListBox() Zeile markieren

Beitrag von Jan »

So, hab das mal ausprobiert.

Der Vorschlag von Tom gibt mir leider einen Laufzeitfehler in dem Codeblock von :itemMarked.

Der Vorschlag von Georg klappt. Ich hatte sowas auch schon getestet gehabt, aber nicht mit xbeLB_ItemMarked, sondern mit Cursortasten - weil die Anzeige eben dann passte wenn ich damit gearbeitet hab. Nur im PostAppEvent klappte das nicht.

Danke für all Eure Gedanken und Vorschläge.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten