Как получить местоположение SWT Tray или TrayItem - PullRequest
5 голосов
/ 23 июня 2011

Есть идеи, как получить местоположение системного трея (Tray) или элементов на нем (TrayItem) с помощью SWT?Получение границ от дисплея только дает мне границы всего экрана.т. е.

item.getDisplay().getBounds();

даст мне (0, 0, 1024, 1024) на моей коробке Windows.

Я также хотел бы знать, если позиция в системном трее (слева, справасверху, снизу) но, вероятно, можно догадаться, учитывая местоположение. Это все, чтобы я мог вывести сообщение рядом с системным треем .

Это дубликат этой записи , но я хочу предложить вознаграждение (и так контролироватьчто я считаю правильным ответом).

Ответы [ 5 ]

2 голосов
/ 09 февраля 2012

Если вы просто хотите отобразить оболочку рядом с элементом в трее, реагирующую на пользовательское событие (как в моем случае). Вы можете получить местоположение указателя, когда событие вызывается на панели задач:

trayItem.addSelectionListener (new SelectionListener () {
    @Override public void widgetDefaultSelected (SelectionEvent aEvent) {
        widgetSelected (aEvent);
    }

    @Override public void widgetSelected (SelectionEvent aEvent) {
        if (mWindow.isVisible ()) {
            Shell wnd = mWindow;
            mWindow = new Shell (mDisplay);
            wnd.close ();
        }
        else {
            mWindow.setLocation (mDisplay.getCursorLocation ());
            mWindow.open ();
        }
    }
});

Вы можете найти весь исходный код здесь .

Если вы хотите уведомить какое-либо другое событие (не сгенерированное пользовательским вводом), я думаю, что вам лучше всего использовать всплывающую подсказку, как указывает Sandman в предыдущем ответе.

Удачи !!!

1 голос
/ 23 июня 2011

widget.getDisplay() всегда возвращает отображение, используемое для указанного виджета, поэтому оно никогда не будет работать.

Насколько я вижу для Win32 и MacOS, вы не получите местоположение до первого события мыши на самом элементе; - (

Если вы хотите добавить некоторый архитектурно-зависимый код, вы можете попробовать следующее ...

Для MacOS - хотя и не тестировалось:

  • подкласс TrayItem (не забудьте переопределить checkSubClass())
  • используйте getLocation() для возврата текущего местоположения элемента

Для Win32 - опять не проверено - вы можете попробовать то же самое, но на этот раз переопределить messageProc(...). Одно из первых сообщений позволит вам запросить текущее местоположение дескриптора ...

0 голосов
/ 20 июля 2012

Спасибо тем, кто пытался ответить.Однако, как и в случае с другим постом , я думаю, что это просто невозможно, поэтому я отвечаю на свой собственный вопрос отрицательно: (

0 голосов
/ 10 февраля 2012

Вы можете отобразить из одной системы координат в другую, используя Display.map. Вы можете сопоставить 0,0 вашего элемента (верхний левый) с отображением координат, выполнив:

Display.map(item, null, 0, 0)

Используйте null в качестве элемента управления "to" для отображения в координатное пространство отображения.

0 голосов
/ 23 июня 2011

Судя по API, похоже, что такой опции нет (в отличие, например, от ToolItem)(

...