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

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

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

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

Сообщение badaninslava » 17.05.2006 20:56:17

Как узнать информацию об окне(положение и размер) по его Handle?
badaninslava
постоялец
 
Сообщения: 101
Зарегистрирован: 12.12.2005 01:21:44

Сообщение SovNarKom » 17.05.2006 22:24:36

WinAPI?
В Windows.pp куча функций, описание читай либо в MSDN либо в делфовской справке.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение IUnknown » 18.05.2006 09:50:22

вызываешь GetWindowInfo( HWND hwnd, PWINDOWINFO pwi), потом в структуре WINDOWINFO будет куча всякой инфы об окне
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение badaninslava » 18.05.2006 18:38:35

Спасибо.

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

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

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

Сообщение badaninslava » 18.05.2006 18:56:12

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

Сообщение badaninslava » 18.05.2006 22:28:48

TWindow= TForm.Handle ???

Кто-нибудь программировал под Х-ами?
badaninslava
постоялец
 
Сообщения: 101
Зарегистрирован: 12.12.2005 01:21:44

Сообщение IUnknown » 19.05.2006 09:30:33

Вот http://www.sources.ru/pascal/graph/xwinfpc/index.htm посмотри. А вообще ж надо предупреждать что это вопрос про X Window
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение badaninslava » 19.05.2006 10:25:40

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

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

Я вообщето думал, что здесь тех кто под виндой сисдит меньшинство, а по ходу дела практически все... :cry:
badaninslava
постоялец
 
Сообщения: 101
Зарегистрирован: 12.12.2005 01:21:44

Сообщение IUnknown » 19.05.2006 11:06:23

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

Сообщение badaninslava » 19.05.2006 13:07:07

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}.
Замкнутый круг.

Чего я невтыкаю? Помогите пожалуйста.
badaninslava
постоялец
 
Сообщения: 101
Зарегистрирован: 12.12.2005 01:21:44

Сообщение IUnknown » 19.05.2006 13:23:10

Код: Выделить всё
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:
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение badaninslava » 20.05.2006 21:11:14

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

Сообщение badaninslava » 23.05.2006 18:06:13

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

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

Сообщение badaninslava » 25.05.2006 20:46:57

А вообще "display" что характеризует?
badaninslava
постоялец
 
Сообщения: 101
Зарегистрирован: 12.12.2005 01:21:44

Сообщение IUnknown » 26.05.2006 15:25:11

Display - это что-то вроде переменной среды окружения, определена в системе, а getenv - получает это значение в данном случае
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru