Reihenfolge von Markierungen merken ?
Moderator: Moderatoren
- AUGE_OHR
- 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 ?
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 ?
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
Jimmy
- Martin Altmann
- 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 ?
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
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
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.
- AUGE_OHR
- 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 ?
hi,
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 ?
Ja ... sowas hatte ich mir schon gedacht. Also bei jedem :Itemmarked es ins Array aufnehmenMartin 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.
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
Jimmy
- Martin Altmann
- 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 ?
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
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
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.
- AUGE_OHR
- 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 ?
hi,
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 ...
Du hast ja Recht ! Das Array aus :Itemselect sollte ja das selbe sein wie meine "gesammelten"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!
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
Jimmy
- Martin Altmann
- 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 ?
Moin Jimmy,
Gute Nacht,
Martin
wozu willst Du das noch testen?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)
Gute Nacht,
Martin
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.
- AUGE_OHR
- 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 ?
hi,
... D.A.U. ... alles ist möglichMartin Altmann hat geschrieben: wozu willst Du das noch testen?
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- 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 ?
hi,
Tja es klappt ... nicht so wie ich mir das vorstelle.
mit dem aufnehmen und löschen klappt es im Prinzip
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".
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
also auf geht die suche wo ich den "verliere".
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- 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 ?
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
Also habe ich nach einem anderen Weg gesucht und gefunden ... Quiz Frage was wohl ?
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
gruss by OHR
Jimmy
Jimmy
- Martin Altmann
- 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 ?
Moin Jimmy,
:lbClick() bzw. :lbDblClick() ?
Viele Grüße,
Martin
:lbClick() bzw. :lbDblClick() ?
Viele Grüße,
Martin
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.
- AUGE_OHR
- 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 ?
hi,
... 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 ... ?
50% ... und die Tastatur ?Martin Altmann hat geschrieben: :lbClick() bzw. :lbDblClick() ?
... 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
Jimmy
- Martin Altmann
- 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 ?
Na hattest Du da nicht schon von :keyboard gesprochen?
Viele Grüße,
Martin
Viele Grüße,
Martin
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.
- brandelh
- 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 ?
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
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
Hubert
- Rolf Ramacher
- 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 ?
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
Hier die Prüffunktion
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()
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
- AUGE_OHR
- 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 ?
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 :
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.
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.
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
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 )
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
Jimmy