Как узнать информацию об окне?

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

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

Ответить
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Как узнать информацию об окне?

Сообщение badaninslava »

Как узнать информацию об окне(положение и размер) по его Handle?
SovNarKom
постоялец
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]
Контактная информация:

Сообщение SovNarKom »

WinAPI?
В Windows.pp куча функций, описание читай либо в MSDN либо в делфовской справке.
IUnknown
новенький
Сообщения: 73
Зарегистрирован: 10.03.2006 13:25:02
Откуда: Донецк

Сообщение IUnknown »

вызываешь GetWindowInfo( HWND hwnd, PWINDOWINFO pwi), потом в структуре WINDOWINFO будет куча всякой инфы об окне
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Сообщение badaninslava »

Спасибо.

А как узнать параметр "dpDisplay"?

Я не силён в XWindow.. Но передо мной задача
1.- необходимо вызвать функцию с параметром (display : PDisplay) {для уже существующего работающего окна}
2. (win: TWindow;) как я понимаю это просто Form1.Handle?

Пожалуйста кто знает ответьте на вопрос 1... :(
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Сообщение badaninslava »

Ну чего, никто не знает? :cry: :cry: :cry:
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Сообщение badaninslava »

TWindow= TForm.Handle ???

Кто-нибудь программировал под Х-ами?
IUnknown
новенький
Сообщения: 73
Зарегистрирован: 10.03.2006 13:25:02
Откуда: Донецк

Сообщение IUnknown »

Вот http://www.sources.ru/pascal/graph/xwinfpc/index.htm посмотри. А вообще ж надо предупреждать что это вопрос про X Window
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Сообщение badaninslava »

Статью "X WINDOW средствами Free Pascal" я читал, но там ведётся работа с окном, созданным с нуля, так сказать на API.
А меня интересует работа с уже созданным и "работающим" окном.
Поэтому я и задал вопрос в разделе "Lazarus".

IUnknown и SovNarKom спасибо, что откликнулись.

Я вообщето думал, что здесь тех кто под виндой сисдит меньшинство, а по ходу дела практически все... :cry:
IUnknown
новенький
Сообщения: 73
Зарегистрирован: 10.03.2006 13:25:02
Откуда: Донецк

Сообщение IUnknown »

Как-то я существенной разницы не вижу как окно было создано, что мешает вызвать функцию XGetWindowAttributes ? display = XOpenDisplay(display_name) - оно? TWindow - это дескриптор, значит полагаю Handle в Lazarus, хотя не уверен, 3 года уже иксы в глаза не видел.
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Сообщение badaninslava »

IUnknown писал(а):Как-то я существенной разницы не вижу как окно было создано, что мешает вызвать функцию XGetWindowAttributes ? display = XOpenDisplay(display_name) - оно? TWindow - это дескриптор, значит полагаю Handle в Lazarus, хотя не уверен, 3 года уже иксы в глаза не видел.

Ну мне это понятно, а как определить display_name?
У меня ведь кроме Form1.Handle никакой информации об окне нет.

Код: Выделить всё

XGetWindowAttributes(para1:PDisplay; para2:TWindow; para3:PXWindowAttributes):TStatus;

Ето описание этой функции.

Код: Выделить всё

  TXWindowAttributes = record
        x, y : cint;
        width, height : cint;
        border_width : cint;
        depth : cint;
        visual : PVisual;
        root : TWindow;
        c_class : cint;
        bit_gravity : cint;
        win_gravity : cint;
        backing_store : cint;
        backing_planes : culong;
        backing_pixel : culong;
        save_under : TBool;
        colormap : TColormap;
        map_installed : TBool;
        map_state : cint;
        all_event_masks : clong;
        your_event_mask : clong;
        do_not_propagate_mask : clong;
        override_redirect : TBool;
        screen : PScreen;
     end;

Это описание переменной para3.
display_name:Pchar здесь вроде не встречается.
И опять же XGetWindowAttributes не вызвать, т.к. я не знаю display {para1}.
Замкнутый круг.

Чего я невтыкаю? Помогите пожалуйста.
IUnknown
новенький
Сообщения: 73
Зарегистрирован: 10.03.2006 13:25:02
Откуда: Донецк

Сообщение IUnknown »

Код: Выделить всё

var
display_name: array [0..30] of Char;
win: TWindow;
win_attr: TXWindowAttributes;

name := getenv('DISPLAY');
 for i:=1 to byte(name[0]) do
   display_name[i-1]:=name[i];
 display_name[byte(name[0])]:=#0;

XGetWindowAttributes(display, win, @win_attr);


Скопипейстил из той самой статьи которую ты читал :wink:
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Сообщение badaninslava »

name какой тип имет?
Что-то у меня программа вылетает(в рантайм) при использовании этой функции...
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Сообщение badaninslava »

Да нифига не получается... :cry:
Программа при использовании такого дисплея вылетает.
(Когда всё в АПИ- и дисплей получается при соединении к Х-серверу, всё работает!)

Вот как, например, получит дисплей для окна, созданного другим приложением (зная его хандл)?
badaninslava
постоялец
Сообщения: 101
Зарегистрирован: 12.12.2005 00:21:44

Сообщение badaninslava »

А вообще "display" что характеризует?
IUnknown
новенький
Сообщения: 73
Зарегистрирован: 10.03.2006 13:25:02
Откуда: Донецк

Сообщение IUnknown »

Display - это что-то вроде переменной среды окружения, определена в системе, а getenv - получает это значение в данном случае
Ответить