xbptreeview und itemfrompos

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

xbptreeview und itemfrompos

Beitrag von stevie »

Mir scheint, dass itemfromPos nur die Zeilen nach Items absucht und den Bereich nicht auf das sichtbare Item reduziert.
Ich klicke bestimmt 10 Leerzeichen vom Text entfernt in den Tree und trotzdem gibt itemfrompos das Item zurück.
Kann das jemand bestätigen?
Gibts ne andere Möglichkeit?
Konkret möchte ich über oTree:rbdown ein Menü aufrufen, wo aber, falls man dabei genau auf den Text eines Items geklickt hat, vorher per setdata die Markierung darauf gesetzt wird.
Aktuell kommt halt die Markierung auch, wenn man neben den Text geklickt hat.
Hat jemand eine Idee?
Viele Grüße
Stevie
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: xbptreeview und itemfrompos

Beitrag von Sören »

Hallo Stevie,

mit dieser TreeView-Klasse kannst Du ein Tree-Item auch mittels der rechten Maus-Taste markieren (siehe Member "RBMark" bzw. Methode "rbDown"):

Code: Alles auswählen

CLASS MyTreeView FROM XbpTreeView
  EXPORTED:
    VAR RBMark
    METHOD Init, Create
    METHOD rbDown
ENDCLASS

METHOD MyTreeView:Init( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  ::XbpTreeView:Init( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  ::RBMark := .T.
RETURN Self

METHOD MyTreeView:Create( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
  ::XbpTreeView:Create( oParent, oOwner, aPos, aSize, aPresParam, lVisible )
RETURN Self

METHOD MyTreeView:rbDown( aPos )
  LOCAL oItem
  if ::RBMark
    ::XbpTreeView:lbDown( aPos )
    oItem := ::editBuffer()
    if ValType( oItem ) == "O"
      ::XbpTreeView:setData( oItem )
    endif
  endif
RETURN self
Beste Grüße,
Sören
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: xbptreeview und itemfrompos

Beitrag von stevie »

Hmm... also editbuffer() scheint nicht immer das richtige zu bringen.

Code: Alles auswählen

Method Aktpl:rightclick(aRect)       // bei Rechtsklick auf TreeviewItem Markierung draufsetzen
  local oItem

  ::oTree:lbdown(aRect)
  oItem:=::oTree:editbuffer()
  //oItem:=::oTree:itemFromPos( aRect )
  if valtype(oItem)=="O"
     ::oTree:SetData(oItem)
  endif

return
::oTree beinhaltet den originalen xbptreeview, die Methode wird aufgerufen bei ::oTree:rbdown bevor das Menü aufgerufen wird.
Am Anfang steht der Editrahmen und die Markierung.
Es scheint, dass Editbuffer() nur das Element mit dem Editrahmen und nicht der Markierung zurückgibt, bzw. lbdown nicht den Editrahmen aber die Markierung setzt? Lieg ich da richtig oder muss ich das unbedingt ableiten?
Viele Grüße
Stevie
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: xbptreeview und itemfrompos

Beitrag von Sören »

Hallo Stevie,

Ich kann Deine Probleme leider nicht ganz nachvollziehen...

ich verwende die oben gepostete Klasse seit vielen Jahren in meinem Dokumentenverzeichnis, um mit Rechtsklick ein TreeItem zu markieren und gleichzeitig ein Menu für dieses Item anzeigen zu lassen (also das, was auch Du willst) - und habe keinerlei Probleme damit.

Welche Xbase-Version verwendest Du (Patches/SL)? Ich verwende z.Z. Xbase++ 1.90.331 (bis Patch 6, dann war meine Subscription abgelaufen).

Was meinst Du eigentlich mit Editrahmen (zusätzlich zur Markierung des TreeItems)? Verwendest Du ThirdParty-Klassen (z.B. XClass++)? Wenn dem so ist, kann die Funktionalität sehr verschieden von der ursprünglichen Xbase-Funktionalität sein, somit könnten Deine Probleme bei der Nutzung meines Beispiels daher rühren.
Beste Grüße,
Sören
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: xbptreeview und itemfrompos

Beitrag von Martin Altmann »

Hallo Sören,
Stevie hat das Problem, dass er den Rechtsklick nur zulassen will, wenn der Text genau getroffen wird!
Das wird sich aber so ohne weiteres nicht ändern lassen - das Verhalten ist nämlich SWB und auch sehr leicht im Explorer nachzuvollziehen.
Vielleicht könnte man was in Zusammenhang mit OwnerDraw machen - aber warum soll das Verhalten anders sein, als man es unter Windows gewohnt ist, Stevie? Ist vielleicht nicht so sinnvoll und würde den Anwender eher irritieren, denke ich mal.

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.
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: xbptreeview und itemfrompos

Beitrag von Sören »

Hallo!
Martin hat geschrieben: Stevie hat das Problem, dass er den Rechtsklick nur zulassen will, wenn der Text genau getroffen wird!
Aha... Das hatte ich so nicht mitbekommen!
Ist das denn wirklich ein Problem, dass das Menü auch dann angezeigt wird, wenn man nicht direkt auf das Item klickt? Man sieht doch, welches Item markiert ist (vorausgesetzt man hat ::alwaysShowSelection := .T. gesetzt)!

Bleibt für mich dennoch die Frage nach dem Unterschied zw. "Markierung" und "Editrahmen" im Zusammenhang mit einem TreeViewItem.
Beste Grüße,
Sören
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: xbptreeview und itemfrompos

Beitrag von stevie »

Sören hat geschrieben:Hallo!
Martin hat geschrieben: Stevie hat das Problem, dass er den Rechtsklick nur zulassen will, wenn der Text genau getroffen wird!
richtig
Aha... Das hatte ich so nicht mitbekommen!
Ist das denn wirklich ein Problem, dass das Menü auch dann angezeigt wird, wenn man nicht direkt auf das Item klickt? Man sieht doch, welches Item markiert ist (vorausgesetzt man hat ::alwaysShowSelection := .T. gesetzt)!
speziell das item gibt ein anderes Kontextmenü als der Baum, halt genauso wie im Explorer.
Bleibt für mich dennoch die Frage nach dem Unterschied zw. "Markierung" und "Editrahmen" im Zusammenhang mit einem TreeViewItem.
Naja im Xclass bringt getdata() halt immer nur das Objekt (über editbuffer()) welches den Editrahmen besitzt, nicht aber das was mit lbdown markiert wurde und der Editrahmen scheint bei lbdown nicht umgesetzt zu werden.
Viele Grüße
Stevie
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: xbptreeview und itemfrompos

Beitrag von stevie »

Ist das denn wirklich ein Problem, dass das Menü auch dann angezeigt wird, wenn man nicht direkt auf das Item klickt? Man sieht doch, welches Item markiert ist (vorausgesetzt man hat ::alwaysShowSelection := .T. gesetzt)!

Bleibt für mich dennoch die Frage nach dem Unterschied zw. "Markierung" und "Editrahmen" im Zusammenhang mit einem TreeViewItem.
Hab das ganze mal in einem alten Xbaseprogramm versucht.
Habe deine Klasse vollständig implementiert und ein kleines Menü eingerichtet, was per msgbox die Caption von getdata() ausgibt.
gleicher Effekt:
editbuffer() bringt wirklich nur das Element was vorher markiert war und den Eingabefokus hat, der bei lbdown nicht verändert wird.
Muss ich mich mich wohl damit abfinden, dass nur die ganze Zeile funktioniert (eben über itemfrompos).
Viele Grüße
Stevie
Antworten