Как я могу показать systray подсказке дольше, чем 63 символа?

Класс axes имеет функцию set_yticklabels , которая позволяет вам устанавливать метки меток следующим образом:

#ax is the axes instance
group_labels = ['control', 'cold treatment',
             'hot treatment', 'another treatment',
             'the last one']

ax.set_xticklabels(group_labels)

Я все еще работаю над тем, почему ваш пример выше не был Не работай.

17
задан Hans Passant 24 February 2009 в 02:48
поделиться

4 ответа

На самом деле это - ошибка в методе set свойства для текстового свойства. Объявление P/Invoke для NOTIFYICONDATA в Windows Forms использует 128 символьных пределов. Можно бездельничать он с Отражением:

using System;
using System.Windows.Forms;
using System.Reflection;

    public class Fixes {
      public static void SetNotifyIconText(NotifyIcon ni, string text) {
        if (text.Length >= 128) throw new ArgumentOutOfRangeException("Text limited to 127 characters");
        Type t = typeof(NotifyIcon);
        BindingFlags hidden = BindingFlags.NonPublic | BindingFlags.Instance;
        t.GetField("text", hidden).SetValue(ni, text);
        if ((bool)t.GetField("added", hidden).GetValue(ni))
          t.GetMethod("UpdateIcon", hidden).Invoke(ni, new object[] { true });
      }
    }
28
ответ дан 30 November 2019 в 12:08
поделиться

Из документации MSDN относительно структуры Win32 NOTIFYICONDATA :

szTip

А завершенная пустым указателем строка, которая указывает текст для стандартного ToolTip. Это может иметь максимум 64 символов, включая завершающийся нулевой символ.

Для Windows 2000 (версия 5.0 Shell32.dll) и позже, szTip может иметь максимум 128 символов, включая завершающийся нулевой символ.

похоже, что библиотека Windows Forms поддерживает наименьший общий знаменатель здесь.

8
ответ дан 30 November 2019 в 12:08
поделиться

Подробно останавливаясь на корректном ответе bk1e.

Под капотом, значок системного лотка в WinForms реализован, поскольку Win32 Уведомляет Значок. Поэтому версия winforms имеет все ограничения как собственное. Ограничение размера подсказки является всего одним примером.

1
ответ дан 30 November 2019 в 12:08
поделиться

bk1e здесь говорит, что предел является 128 символами, теперь при использовании UTF-16 который является собственным unicode форматом в окнах и особенно.NET, которая означает, что Вы ограничены 64 символы , включая NUL.

я полагал бы, что Вы используете unicode API, который ограничивает подсказки 64 16-разрядными символами (включая пустой указатель), и что Сервер VNC использует ASCII (или ANSI) API вместо этого, позволяя использование 128 8-разрядных символов (включая пустой указатель).

РЕДАКТИРОВАНИЕ: Этот ответ является неправильным, вот полезный комментарий Cody Gray, объясняющего почему:

Это обоснование востребовано, но не на самом деле корректно. Когда документация MSDN говорит о "символах", это на самом деле означает количество символа или wchar_t объектов в массиве (в зависимости от того, нацелены ли Вы на Unicode). Таким образом, Вы получаете полные 128 символов, обещанных при работе Windows 2000 +. Windows 9x был ограничен 64 символами. †“Cody Gray 19 июня в 4:11"

-4
ответ дан 30 November 2019 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: