/// <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()); } }