Question

J'écris un complément dans SQL Server Management Studio à l'aide des API Visual Studio Extensibilty. J'ai réussi à superposer un contrôle sur la surface du texte (j'essaie d'émuler la liste d'actions CodeRush / Refactor, similaire au combo intellisense), mais je ne peux localiser que son espace de coordonnées en fonction de la propriété suivante:

get
{
    var point = TextDocument.Selection.TopPoint;
    return new Cursor( point.DisplayColumn, point.Line );
}

Ce code me permet de convertir ensuite les colonnes / lignes en pixels. Cependant, je ne trouve pas le moyen de décaler les colonnes / lignes lorsque l'éditeur de texte a défilé verticalement ou horizontalement. Cela fait disparaître la zone de liste sous l'espace d'écran visible.

Ce que je recherche, c’est une méthode permettant d’obtenir les coordonnées de l’écran à partir de la paire col / rangée actuelle, afin de pouvoir placer la zone de liste à côté du curseur, quelle que soit la position de défilement.

Était-ce utile?

La solution

La propriété TextDocument.Selection, de type TextSelection, a une propriété TextPane - voir ici pour plus d'informations. Cela ne le dit pas explicitement, mais le TextPane est la partie visible de l'écran. De plus, la propriété StartPoint pour un TextPane fournit le "décalage" du texte défilé.

J'ai donc pu déterminer la position du curseur de décalage en soustrayant TextPane.StartPoint du point de départ de la sélection:

get
{
    var start = TextDocument.Selection.TextPane.StartPoint;
    var top = TextDocument.Selection.TopPoint;
    return new Cursor( 
        top.DisplayColumn - start.DisplayColumn + 1 , 
        top.Line - start.Line + 1 
    );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top