XbpBrowse itemRbDown

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Christof
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 01. Okt 2007 17:14
Wohnort: Bedburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

XbpBrowse itemRbDown

Beitrag von Christof »

Hallo zusammen,

ich komme mal wieder nicht weiter. Ich habe einen Browser. Es Funktioniert auch alles. Zeilencursor. Die linke Maustaste ist mittlerweile wg. "marked" und "ItemSelected" im Einsatz. Jetzt bräuchte ich die rechte Maustaste für einen anderen Zweck. Ich möchte in Abhängigkeit von der aktuellen Browserzeile eine weitere Tabelle damit anzeigen. Ich kriege es nur nicht hin, dass nach dem Klick auf die rechte Maustaste auch die Browserzeile unter dem Cursor markiert und damit auch die Daten synchronisiert werden. Über oListe:GetData() kriege ich immer die Werte des bisherigen Datensatzes, der ja auch durch den Zeilencursor repräsentiert wird. Hab' schon gelesen, dass ich mit :rowPos die Zeile im Browser einstellen und dann "von Hand" synchronisieren muss. Tja, wie mache ich das denn? Ein RefreshAll() scheint auch nicht die Lösung zu sein... :(

Code: Alles auswählen

   oListe := XbpBrowse():new( drArea,, {  8*MEMVAR->nx,184*MEMVAR->nY}, {512*MEMVAR->nx,240*MEMVAR->nY},,.T.)

// Navigationscodeblöcke für den Browser
   oListe:skipBlock     := {|n| ergebnis->(DbSkipper(n)) }
   oListe:goTopBlock    := {| | ergebnis->(DbGoTop())    }
   oListe:goBottomBlock := {| | ergebnis->(DbGoBottom()) }
   oListe:phyPosBlock   := {| | ergebnis->(Recno())      }

// Navigationscodeblöcke für den vertikalen Scrollbar
   oListe:posBlock      := {| | ergebnis->(DbPosition())    }
   oListe:goPosBlock    := {|n| ergebnis->(DbGoPosition(n)) }
   oListe:lastPosBlock  := {| | 100             }
   oListe:firstPosBlock := {| | 0               }

   oListe:useVisualStyle := .F.
   oListe:hScrollObject:useVisualStyle := .T.
   oListe:vScrollobject:useVisualStyle := .T.


   oListe:addColumn( {|x| IIf(x==NIL, ergebnis->auswahl, Auswahl:=x)},, "[ ]")
   IF MEMVAR->cPf<>"A"
    oListe:addColumn( {|x| IIf(x==NIL, Str(ergebnis->KDEN,13,0), KDEN:=x)},, "     KDEN     ")
   ELSE
    oListe:addColumn( {|x| IIf(x==NIL, Str(ergebnis->KDEN,13,0), KDEN:=x)},, "     KDNR     ")
   ENDIF
   oListe:addColumn( {|x| IIf(x==NIL, ergebnis->F03_NAME, F03_NAME:=x)},, "        Sortiername       ")
   oListe:addColumn( {|x| IIf(x==NIL, ergebnis->KE, KE:=x)},, "KE")
   oListe:addColumn( {|x| IIf(x==NIL, ergebnis->NEU, NEU:=x)},, "NEU")

   oListe:CursorMode:=XBPBRW_CURSOR_ROW
   oListe:SetInputFocus := {|x,y,oSLE| dbselectArea("ergebnis") }
   *oListe:ItemSelected := {|| EngAnzeige(oListe:getData()) }          <== DAS HIER SOLL EIG. JETZT BEI RECHTSKLICK PASSIEREN
   oListe:ItemRbDown:={|aMousePos, aRowCol, oSelf| PostAppEvent(xbeM_LbClick,NIL,NIL,oSelf)}
   oListe:ItemSelected := {|| iif(ergebnis->auswahl=chr(158),ergebnis->auswahl:="",ergebnis->auswahl:=chr(158)),oListe:RefreshCurrent() }
   oListe:create()
   oListe:setLeftFrozen({1,2,3})
   oListe:show()
Der Versuch mit dem PostAppEvent() schlägt leider auch fehl.

So schwer kann das doch nicht sein, oder?

DANKE!!!

Gruß

Christof
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: XbpBrowse itemRbDown

Beitrag von georg »

Hallo, Christof -


also, diesen Code habe ich hier vor Jahren gefunden und verwende ihn, um ein Popup-Menü anzuzeigen. Es sollte kein Problem sein, ihn für Deine Belange anzupassen:

Code: Alles auswählen

function ActRbMenu(aMPos,aLC,oBr,oRightMenu)
	** Erzeugt ein Kontextmenu an der Stelle, an der mit
	** der rechten Maustaste geklickt wurde
	** aLC   Array(2) mit Zeilen-(Line) und Spaltenposition
	** siehe Slot :itemRbDown := {| aMousePos, aRowCol, self | ... }

	local nRight:=0, nLeft:=0, nUp:=0, nDown:=0, i:=0
	nRight:=aLC[2] - oBr:ColPos
	nDown :=aLC[1] - oBr:RowPos
	if nRight < 0
		nLeft:=nRight * -1
	endif
	if nDown < 0
		nUp:=nDown * -1
	endif
	for i:=1 to nUp
		oBr:up()
	next
	for i:=1 to nDown
		oBr:down()
	next
	for i:=1 to nRight
		oBr:right()
	next
	for i:=1 to nLeft
		oBr:left()
	next
	oBr:RefreshAll()
	oRightMenu:Popup(oBr,aMPos)
return NIL
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Christof
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 01. Okt 2007 17:14
Wohnort: Bedburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: XbpBrowse itemRbDown [ERLEDIGT]

Beitrag von Christof »

Hallo Georg,

funktioniert einwandfrei. Danke!!! :D

Gruß

Christof
Antworten