Hirarchische Liste: Position unter dem Mauszeiger

Hirarchische Liste: Gibt es in 4D eine Möglichkeit die Referenznummer oder Position unter dem Mauszeiger herauszufinden?

Ich würde gerne für die Zeile unter dem Mauszeiger bei einer Mehrfachauswahl per Rechtsklick ein Kontextmenü erstellen. Leider habe ich in 4D noch keine gute Möglichkeit gefunden die Zeilenposition herauszufinden. Gibt es dazu einen Lösungsansatz?

[]33322601;“Hirarchische Liste: Position unter dem Mauszeiger”[/]

Mein bisheriger 2 Versuch:

  1. Selected list items
    Bei dem Befehl “Selected list items” lässt sich bei einer Mehrfachauswahl leider nicht erkennen auf welcher Position sich der Mauszeiger gerade befinden. Desshalb ist der Befehl für meinen Zweck nicht geeignet.

  2. Mausposition selbst errechnen
    Mit den Funktionen:

  • OBJECT GET SCROLL POSITION
  • GET MOUSE
    habe ich die Mausposition auf der Hirarchschen Liste errechnet und somit die akutelle Position ermittelt. Diese herangehensweise klappt aber nur wenn beim Scrollen der erste Listeneintrag vollständig angezeigt wird. Sobald der letzte Listeneintrag vollständig angezeigt wird (z.B. wenn ganz nach unten gescrollt wurde) stimmt diese Berechnung nicht mehr.

Vielen Dank im Vorhinein
Markus

'llo,

GET MOUSE gibt die Position des Mausezeiger. Jetzt ist es leicht eine Variable zu verschieben. Wenn nicht verwendet, wird die Variable ausgeblendet sein.

Moin,

Habe dies Code gefunden der deine Anfrage antwortet:

https://forums.4d.com/4DBB_Main/x_User/3906/files/33356834.zip

<code 4D>
// La méthode 4DLISTE_Get_text_survol retourne le texte de l’item d’une liste
// La méthode lit la position de la souris sur la liste et retourne le texte de l’élément
//
// #SYNTAX: $T_text:=4DLISTE_Get_text_survol
// #PARAMETERS:
// $0 Text : Texte de l’élément survolé

// #DATE CREATION: 23/10/2014 #AUTHOR: Vincent de lachaux
// #DATE MODIFICATION: 00/00/0000
// #NOTE:

// #HEADER VERSION: 2

C_LONGINT($L_mouseX;$L_mouseY)
C_LONGINT($L_mousebutton)
GET MOUSE($L_mouseX;$L_mouseY;$L_mousebutton)

//vertical offset

C_TEXT($T_Current_list_name)
$T_Current_list_name:=OBJECT Get name(Object current)

C_LONGINT($L_left;$L_top;$L_right;$L_bottom)
OBJECT GET COORDINATES(*;
$T_Current_list_name;
$L_left;
$L_top;
$L_right;
$L_bottom
)
$L_mouseY:=$L_mouseY-$L_top

//get scroll and line height
C_LONGINT($L_firstLine;$L_lineHeight)
OBJECT GET SCROLL POSITION(*;$T_Current_list_name;$L_firstLine)
GET LIST PROPERTIES(Self->;$L_;$L_;$L_lineHeight)

//find the line
C_LONGINT($L_line)
$L_line:=$L_firstLine+($L_mouseY$L_lineHeight)

//get id
C_LONGINT($L_ID)
C_TEXT($T_Buffer)
GET LIST ITEM(Self->;$L_line;$L_ID;$T_Buffer)

$0:=$T_Buffer

//EOM

</code 4D>

Vielen Dank für die schnelle Antwort.

Dieser Lösungsansatz ist für mein Problem leider nicht ausreichend (siehe Versuch 2). Bei einer “ungeraden” Scrollposition bekomme ich leider eine falsche Listenposition heraus.

[]33368211;“UngeradeScrollPosition”[/]