Как да получите местоположение на SWT Tray или TrayItem

Някакви идеи как да получите местоположението на системната област (Tray) или елемент в нея (TrayItem) с SWT? Получаването на границите от дисплея ми дава само границата на целия екран. т.е

item.getDisplay().getBounds();

ще ми даде (0, 0, 1024, 1024) на моя Windows кутия.

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

Това е дубликат на тази публикация, но искам да предложа премия (и така да контролирам какво считам за правилен отговор).


person Toby    schedule 23.06.2011    source източник
comment
Това би било наистина хубаво да се внедрят GUI тестове, които също зачитат тавата.   -  person Daniel    schedule 23.06.2011
comment
Въпрос: защо не започнахте награда за другата публикация, която споменахте?   -  person Sandman    schedule 24.06.2011
comment
нямаше да ми позволи! реших, че трябва да съм собственик   -  person Toby    schedule 30.06.2011
comment
наистина ли? Мислех, че човек може да даде награда за всеки въпрос?   -  person codejammer    schedule 14.02.2012


Отговори (5)


Ако просто искате да покажете обвивка близо до елемента в трея, реагиращ на потребителско събитие (както е моят случай). Можете да получите местоположението на показалеца, когато събитието се задейства над елемента в областта:

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 посочва в предишния отговор.

Късмет!!!

person jaguililla    schedule 08.02.2012

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

Доколкото виждам както за Win32, така и за MacOS, няма да получите местоположението преди първото събитие на мишката върху самия елемент ;-(

Ако желаете да добавите код, зависим от архитектурата, можете да опитате следното...

За MacOS - въпреки че не е тестван:

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

За Win32 - отново не е тествано - можете да опитате същото, но този път отменете messageProc(...). Едно от първите съобщения ще ви позволи да направите заявка за текущото местоположение на манипулатора...

person Tonny Madsen    schedule 23.06.2011
comment
благодаря, ще играя. какво ще кажете за някакъв начин за записване на местоположението, когато създавам елемента в таблата и просто го асоциирам с елемент addData(...) или подобен? Мислите ли, че има някакви опции? - person Toby; 23.06.2011
comment
Може би е по-добре да видите дали можете да получите достъп до съответната информация по различен начин. Например като погледнете в регистрите... Не може да се очаква решението по-горе да работи в основните версии на SWT :-( - person Tonny Madsen; 23.06.2011
comment
неприятности. някакви насоки откъде да започна с това предложение? :С - person Toby; 23.06.2011
comment
Съжалявам, не... нямам абсолютно никакви идеи :-( - person Tonny Madsen; 23.06.2011

Предполагайки от API, изглежда, че няма такава опция (за разлика от например ToolItem). :(

person Mot    schedule 23.06.2011

Благодаря на тези, които се опитаха да отговорят. Въпреки това, както при другата публикация, мисля, че просто не е възможно, така че отговарям на собствения си въпрос отрицателно :(

person Toby    schedule 20.07.2012

Можете да картографирате от една координатна система в друга с помощта на Display.map. Можете да картографирате 0,0 на вашия артикул (горе вляво) в координатите на дисплея, като направите:

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

Използвайте null като контрола "до" за картографиране към координатното пространство на дисплея.

person M.S.    schedule 10.02.2012
comment
Това не работи за TrayItem, тъй като не подкласира Control. - person dejuknow; 15.07.2015