Как найти окно?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Как найти окно?

Сообщение shade » 31.10.2008 12:56:19

Logo писал(а):Понятно, имеем в виду, буду искать. Помойму нужно смотреть конкретно каждый ВиджетСет.

А может XLib ? Я так и не нашел функции для получения окна по координатам точки.
Есть функия для обхода всех окон, но как учитывать перекрытия - хз...
http://tronche.com/gui/x/xlib/window-in ... yTree.html
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Как найти окно?

Сообщение shade » 01.11.2008 22:45:23

Код: Выделить всё
uses ..., x, xlib;
...

procedure WindowRectFromPoint(x, y: Integer; out rect: TRect);
var
  dsp: PDisplay;
  wnd, root, parent: TWindow;
  childs: PWindow;
  i, count: cardinal;
  status: TStatus;
  attr: TXWindowAttributes;
begin
  dsp := XOpenDisplay(nil);
  try
    wnd := XRootWindow(dsp, XDefaultScreen(dsp));
    status := XQueryTree(dsp, wnd, @root, @parent, @childs, @count);
    assert(status <> 0);
    for i := count-1 downto 0 do
    begin
      status := XGetWindowAttributes(dsp, childs[i], @attr);
      assert(status <> 0);
      if ( attr.map_state = IsViewable) and (x >= attr.x) and (y >= attr.y) and
         (x < attr.x + attr.width) and (y < attr.y + attr.height) then
      begin
        rect.Left := attr.x;
        rect.Top := attr.y;
        rect.Right := attr.x + attr.width;
        rect.Bottom := attr.y + attr.height;
        Exit;
      end; // if
    end; // for i
    rect.Left := 0;
    rect.Top := 0;
    rect.Right := Screen.Width;
    rect.Bottom := Screen.Height;
  finally
    XCloseDisplay(dsp);
  end;
end;


Фух, вымучал :D
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Как найти окно?

Сообщение Logo » 02.11.2008 18:07:32

shade писал(а):Фух, вымучал :D

У меня оно на одном окне показывает разные данные. На окне есть еще компоненты при попадании н них курсором, получаем 0,0. При перемещении курсора по форме, но ниже расположеных компонент, - размеры формы "урезаются", пока не разобрался в чем дело, есть другая работа.

А как находить координаты чужих форм, есть решение?
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Как найти окно?

Сообщение shade » 02.11.2008 19:54:51

У меня работает стабильно, как часы.. может у тебя проблемы с определением координат курсора?
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Как найти окно?

Сообщение Logo » 03.11.2008 02:25:43

shade писал(а):У меня работает стабильно, как часы.. может у тебя проблемы с определением координат курсора?

Проверю.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48

Рейтинг@Mail.ru