Reihenfolge von Markierungen merken ?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Reihenfolge von Markierungen merken ?

Beitrag von AUGE_OHR »

hi,

der User kann in einem XbpBrowse() oder Listbox() mehrere Item markieren.
Nun möchte der User das ich mir "merke" in welcher Reihenfolge er die Items markiert hat ... ?

es gibt ja den :Itemselect und den :Itemmarked Callback ... wie kombiniere ich die beiden um mir
zu "merken" welche Reihenfolge der User hatte ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reichenfolge von markierungen merken ?

Beitrag von Martin Altmann »

Hallo Jimmy,
warum merkst Du Dir nicht in einem Array die Nummern, die angeklickt wurden?
Neu angeklickte immer hinten ran, "ab"geklickte wieder aus dem Array entfernen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Reichenfolge von markierungen merken ?

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: warum merkst Du Dir nicht in einem Array die Nummern, die angeklickt wurden?
Neu angeklickte immer hinten ran, "ab"geklickte wieder aus dem Array entfernen.
Ja ... sowas hatte ich mir schon gedacht. Also bei jedem :Itemmarked es ins Array aufnehmen
bzw. löschen und bei :Itemselect dann das Array mit den :Itemmarked vergleichen und dann
die :Itemmarked Reihenfolge nehmen ... hm ...

und wie vergleich ich am besten die beiden Arrays ... ? FOR / NEXT oder AEVAL() ...
hat das jemand in der Praxis schon gemacht und kann davon erzählen ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reichenfolge von markierungen merken ?

Beitrag von Martin Altmann »

Hallo Jimmy,
welche beiden Array willst Du vergleichen?
In Deinem einen Array stehen doch nur die markierten drin - noch dazu in der richtigen Reihenfolge!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Reichenfolge von markierungen merken ?

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: welche beiden Array willst Du vergleichen?
In Deinem einen Array stehen doch nur die markierten drin - noch dazu in der richtigen Reihenfolge!
Du hast ja Recht ! Das Array aus :Itemselect sollte ja das selbe sein wie meine "gesammelten"
Items. Also muss ich nur sicher gehen das die LEN(Array) gleich sind (was sie sein müssten wenn
alles richtig läuft)
hm ... also sieht der Wunsch des User gar nicht so schwer aus ... mal testen ...
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reichenfolge von markierungen merken ?

Beitrag von Martin Altmann »

Moin Jimmy,
AUGE_OHR hat geschrieben:Also muss ich nur sicher gehen das die LEN(Array) gleich sind (was sie sein müssten wenn
alles richtig läuft)
wozu willst Du das noch testen?

Gute Nacht,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Reichenfolge von markierungen merken ?

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: wozu willst Du das noch testen?
... D.A.U. ... alles ist möglich :)
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Reihenfolge von Markierungen merken ?

Beitrag von AUGE_OHR »

hi,

Tja es klappt ... nicht so wie ich mir das vorstelle.
mit dem aufnehmen und löschen klappt es im Prinzip

Code: Alles auswählen

oBrowse:itemMarked := {| aRowCol, uNIL2, oSelf | ;
   IF(lClick,Click2Array(aRowCol, oSelf),NIL) }

PROCEDURE Click2Array(aRowCol, oBrowse)
LOCAL cVal := ""
LOCAL nRow := aRowCol[1]
LOCAL cYY  := oBrowse:getColumn(9):getRow(nRow)
LOCAL nNo  := oBrowse:getColumn(2):getRow(nRow)
LOCAL nPosi

   cVal  := cYY+STRZERO(nNo,5)
   nPosi := ASCAN(aClick,cVal)
   IF nPosi > 0
      ARemove( aClick , nPosi )
   ELSE
      AADD(aClick,cVal)
   ENDIF
RETURN
aber leider gibt es einen "Harken" ... irgendwo "verliere" ich aClick[1] d.h. der 1st fehlt mir ... :(
also auf geht die suche wo ich den "verliere".
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Reihenfolge von Markierungen merken ?

Beitrag von AUGE_OHR »

hi,

ok vielleicht liegt es an der XbpCheckboxColumne(), aber ich habe mal bei AREMOVE() ein TONE()
eingebaut und ... bei scrollen "pieps" er nun ... es wird also der "marked" Event ausgelöst ...
was ja auch stimmt vom Browser her betrachtet. Ich interessiere mich aber für die Checkbox im
Browser ...

Die Lösung ergibt sich aus dem oben geschriebenen (!!!) und ist auch keine Frage von Code
d.h. die eigentliche Routine bleibt fast wie sie ist :)

Code: Alles auswählen

PROCEDURE Click2Array(oBrowse)
LOCAL cVal := ""
LOCAL nRow := oBrowse:rowPos
LOCAL cYY  := oBrowse:getColumn(9):getRow(nRow)
LOCAL nNo  := oBrowse:getColumn(2):getRow(nRow)
LOCAL nPosi

   cVal  := cYY+STRZERO(nNo,5)
   nPosi := ASCAN(aClick,cVal)
   IF nPosi > 0
      ARemove( aClick , nPosi )
      TONE(1000)
   ELSE
      AADD(aClick,cVal)
   ENDIF

RETURN
Also habe ich nach einem anderen Weg gesucht und gefunden ... Quiz Frage was wohl ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reihenfolge von Markierungen merken ?

Beitrag von Martin Altmann »

Moin Jimmy,
:lbClick() bzw. :lbDblClick() ?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Reihenfolge von Markierungen merken ?

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: :lbClick() bzw. :lbDblClick() ?
50% ... und die Tastatur ?

... es ist weniger ein Code technisches Problem (Code tippen) sondern vielmehr ein "alter Cl*pper
Programmierer denkt noch prozedural" Problem ... Xbase++ arbeitet unter Windows ...

die 50% sind richtig weil es die Stelle ist die ich gesucht habe um da was zu machen wobei ich
den evtl Codeblock nicht anfasse ! Ich schreibe 1 Befehl dahinter wie auch bei dem Tastatur
:keyboard Handler.

Wie könnte wohl die 1 Zeile lauten die ich geschrieben habe ... ?
Zuletzt geändert von AUGE_OHR am Mi, 01. Okt 2008 5:35, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Reihenfolge von Markierungen merken ?

Beitrag von Martin Altmann »

Na hattest Du da nicht schon von :keyboard gesprochen?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Reihenfolge von Markierungen merken ?

Beitrag von brandelh »

Hi,

ich würde weder die Keybord, noch die Maus Sachen anpacken.

Ich würde das Control ableiten, eine zusätzliche Instanz-Variable
einbauen und genau die Methode erweitern, die sich die normalen
Einträge merkt. Also je nach Wunsch itemMarked() oder itemSelected()
So kümmert sich das Control um sich selbst und hält die Daten immer richtig.
Dann braucht man noch eine Methode die einem das Array zurückgibt.
Die Instanzvars sollen von außen ja nicht mehr zugänglich sein ;-)
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Reihenfolge von Markierungen merken ?

Beitrag von Rolf Ramacher »

Hi Jmmy,

ich habe das bei mir so gelöst.

In diesem Programmteil gibt es mehrere Checkboxen, beim verlassen wird der Eintrag in einem Array geprüft.

Hier der Aufruf

Code: Alles auswählen

	oBox39 := XbpCheckBox():new( drawingArea,, {190,80}, {140,20} )
	oBox39:caption :=aFelder[39][1]
	oBox39:tabStop := .T.
	oBox39:create()
	oBox39:selected := ; 
	    {| mp1, mp2, oChk| IIf( oChk:getData(), aFelder[39][2]:=.t., aFelder[39][2]:=.f. ),;
				PrfSortBox(aFelder,oBox39,39)}
	AAdd(aBox,oBox39)
	oBox39:disable()
Hier die Prüffunktion

Code: Alles auswählen

Function PrfSortBox(aFelder,oBox,Nr)
Local lTreffer:=.f.
For i = 1 to Len(aObj)
	Do Case
		Case empty(aObj[i]) .and. aFelder[nr][2]=.t.
			aObj[i]:=oBox
			lTreffer=.t.
			exit
		Case aObj[i]=oBox .and. aFelder[nr][2]=.f.
			Do Case
				Case i=1
					aObj[1]:=aObj[2]
					aObj[2]:=aObj[3]
					aObj[3]:=Nil
				Case i=2
					aObj[2]:=aObj[3]
					aObj[3]:=Nil
				Case i =3
					aObj[3]:=Nil
			EndCase
			oBox:setdata(.f.)
			lTreffer:=.t.
			exit
		Otherwise
			lTreffer:=.f.
	EndCase
Next i
If lTreffer=.f. .and. aFelder[nr][2]=.t.
	oBox:setdata(.f.)
	aFelder[nr][2]:=.f.
EndIf
Return Nil
Gruß Rolf

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

Re: Reihenfolge von Markierungen merken ?

Beitrag von AUGE_OHR »

hi,

ich wollte auf was anderes raus :
a.) Ich darf den Itemmarked Event nicht benutzten weil ...
b.) Ich muss irgendwie :LbDown und xbeK_Space benutzen
c.) ... und wie bekommt das "Browse" davon was mit ?

der Source von b.) kann ja "irgendwo" sein z.b. in einer Class
und ich will ja nicht den ganzen Code umschreiben ...

ok ich werde es mal auflösen :
Das Itemmarked ist ja ein Event den ich nicht benutzen darf, also
muss ich einen "anderen" Event nehmen ... und wenn es keinen
"passenden" gibt dann muss man sich eben selbst einen definieren.

Also :

Code: Alles auswählen

#define xbeE_ChkClick   xbeP_User+10
nun habe ich also einen Event und immer wenn ich die Action
benötige sende ich nur ein PostappEvent(xbeE_ChkClick) welche
durch alle Eventloop´s "durchgeht" bis er die "richtige" gefunden
hat und dort ausführen kann.

Code: Alles auswählen

CASE nEvent == xbeE_ChkClick
   Click2Array(oBrowse)

INLINE METHOD _DownCheck( oCheck )
...
    PostAppEvent( xbeE_ChkClick )
deshalb sprach ich davon das es weniger eine Sache des Code ist.

Windows Programme "verständigen" sich eben indem sie Events
senden und dann "den Code ausführen lassen" der mit dem Event
zusammenhängt.
gruss by OHR
Jimmy
Antworten