ich hab mich nun heute neu hier im Forum angemeldet und hoffe Hilfe zu finden.
Kurz zu mir: Meine Name ist Luca, anfang 20 und aboslviere momentan mein 6-monatiges Praktikum im Rahmen meines Informatiksutdiums.
Bisher entwickelte ich hauptsächlich in Java und etwas im Webdev-Bereich (HTML, PHP, JS)
Seit Oktober nun in XBase++
Ziel
Ich möchte in einer Tabelle mit der Leertaste Zeilen farblich markieren und mit einer weiteren Taste die enthaltenen Informationen weitervararbeiten (in einer anderen Tabelle).
Logik
Beim drücken der Leertaste wird die RecNo Position und die TBrowse:Row in einem 2 Dimensionalen Array gespeichert.
Ich fange auch die Fälle ab, falls der Nutzer das fällt wieder abwählt in dem er das zweite mal Leertaste drückt und die gleiche Position ein zweites mal im Array landen würde.
Bei jedem Neuaufruf der so genannten tableViewControll, mit Hilfe desser ich mich über die Tabelle bewegen kann und wo auch die Leertasteeingabe abgefangen wird, wird dann das Array durchgegangen und eintsprechenden Zeilen Farblich markiert.
Problem
Soweit so gut, oder? Nein! Es färben sich zwar alle markierten Zeilen, aber nur wenn der Cursor 2 Felder entfernt ist. Wenn das zweite mal die Pfeil auf/ab oder Bild auf/ab Taste in die gleiche richtung gedrück wird, wird die gewünschte Zeile eingefärbt. Mein Kollege welcher auch mit Hilfe des Forums das TBrowse und vor allem auch das einfärben erstellte, verwies mich hier mein Glük zu Versuchen.
Ich würde auch noch ein kleines Video zur verdeutlichung hochladen, zur Verdeutlichung.
Anbei die Programmabschnitte die ich fürs erste als wichtig erachte:
Code: Alles auswählen
FUNCTION tableViewDefaultControl(oTBrowse, nKey, mark, array) //mark := .T. wenn per space zeilen markiert werden sollen
LOCAL lAction := .F., currentRec
IF mark == NIL
mark := .F.
ELSEIF mark == .T.
FOR m := 2 To Len(marked)
IF marked[m][2] != -1
oTBrowse:colorRect( {marked[m][2], 1, marked[m][2], oTBrowse:colCount}, {3, 2} )
ENDIF
NEXT
ENDIF
//Beispielhaft K_UP
CASE nKey == K_UP //Pfeil nach oben
oTBrowse:colorRect( {oTBrowse:rowpos, 1, oTBrowse:rowpos, oTBrowse:colCount}, {1, 2} )
oTBrowse:HILITE() //Browser Cursor wird hervorgehoben
oTBrowse:REFRESHCURRENT() //aktuelle Datenzeile neu anzeigen
oTBrowse:up() //Browser-Cursor um eine Zeile nach oben bewegen
lAction := .T.
//Space
CASE nKey == 32
IF mark == .T.
currentRec := RecNo()
AAdd(marked, {currentRec,oTBrowse:rowpos})
ENDIF
lAction := .T.