Exemplo n.º 1
0
        /// <summary>
        /// Статическая процедура, вызываемая из MouseTimer_Task по срабатыванию MouseTimer для отображения подсказки при наведении мышкой на часть текста
        /// </summary>
        /// <param name="ActiveHMSEditor">Активный (вызвавший) элемент HMSEditor</param>
        public static void Task(HMSEditor ActiveHMSEditor)
        {
            var    TB    = ActiveHMSEditor.TB;
            Point  point = ActiveHMSEditor.MouseLocation;
            bool   debugMode  = TB.DebugMode;
            bool   selectMode = false;
            string expression = "";
            try {
                Place place = TB.PointToPlace(point);
                Range r = new Range(TB, place, place);
                if (r.IsStringOrCommentBefore()) return;
                if (r.IsErrorPlace) {
                    // Показываем инофрмацию об ошибке через ToolTip
                    ShowToolTip(TB, point, "Ошибка синтаксиса", "", "", TB.ErrorStyle.Message);
                    return;
                }
                if (debugMode && (TB.Selection.Start != TB.Selection.End) && TB.Selection.InRange(place)) {
                    expression = TB.SelectedText.Trim();
                    selectMode = true;
                }
                if (expression.Length == 0) {
                    expression = r.GetFragmentAroundThePlace(place).Text.Replace("#", "").Trim();
                }
                if (expression.Length == 0)
                    return;
                var item = ActiveHMSEditor.GetHMSItemByText(expression);
                if (item != null) {
                    // Если идёт отладка - проверяем, мы навели на переменную или свойство объекта?
                    if (debugMode && (OK4Evaluate(item) || selectMode)) {
                        // Проверяем тип объекта класса, может быть удобней представить в виде текста? (TStrings или TJsonObject)
                        string realExpression = expression;
                        expression = CheckTypeForToStringRules(item, expression);
                        ShowValue(TB, point, expression, realExpression);
                        return;
                    }
                    ShowToolTip(TB, point, item.ToolTipTitle, item.ToolTipText, "", item.Help);
                } else if (debugMode && !HMS.WordIsKeyword(expression)) {
                    ShowValue(TB, point, expression, expression);
                }

            } catch (Exception e) {
                HMS.LogError(e.ToString());
            }
        }