четвер, 3 вересня 2009 р.

wxRuby → Вікно

У статті Welcome to wxRuby! ми познайомилися з бібліотекою віджетів wxWidgets та обгорткою для роботи з Ruby. Також ми створили простий додаток на wxRuby, який показує вікно з однією кнопкою.

Розглянемо докладніше цей код.
У класі HelloApp є метод on_init(), який викликається під час запуску додатку.
Займемося головним вікном. За створення вікна відповідає конструктор класу Wx::Frame. Фрейм - це вікно, розмір і позиція якого можуть бути змінені користувачем. Зазвичай воно має рамку і заголовок, а також опціонально може містити рядок меню, панель інструментів і рядок стану(про які ми поговоримо в одній із майбутніх статей).

Конструктор класу Wx::Frame приймає 7 параметрів:
:parent => (Wx::Window) - це посилання на батьківський об'єкт(обов'язковий параметр)
:id => (Fixnum) - ідентифікатор вікна. -1 - значення по замовчуванню
:title => (String) - заголовок вікна
:pos => (Wxruby2::Point) - позиція вікна на екрані
:size => (Wxruby2::Size) - розмір вікна
:style => (Fixnum) - стиль вікна
:name => (String) - назва вікна

Змінимо код додатку з першої частини так, щоб наше вікно з'явилося у верхньому лівому куті і мало розмір 320х240 пікселів. Зміни вносимо у метод initialize() класу HelloFrame:

super(nil, :id => -1, :title => 'Hello World!', :pos => [0, 0], :size => [320, 240], :style => Wx::DEFAULT_FRAME_STYLE, :name => 'frame')


Щоб вікно з'явилося у центрі екрану можна скористатися методом centre():
self.centre


Для зміни позиції вікна після ініціалізації можна скористатись методам move(Wx::Point point):
self.move([100, 100])


Для зміни розміру вікна є метод set_size(Wx::Size size):
self.set_size([640, 480])


Для вікна можна задати один із стилів:
Wx::DEFAULT_FRAME_SLYLE - стиль по замовчуванню. Включає в себе Wx::MINIMIZE_BOX|Wx::MAXIMIZE_BOX|Wx::RESIZE_BORDER|Wx::SYSTEM_MENU|Wx::CAPTION|Wx::CLOSE_BOX|Wx::CLIP_CHILDREN
Wx::ICONIZE - показувати мінімізоване вікно. Тільки Windows
Wx::CAPTION - показувати заголовок вікна
Wx::MINIMIZE - аналогічно Wx::ICONIZE
Wx::MINIMIZE_BOX - показувати кнопку згортання вікна
Wx::MAXIMIZE - показувати максимізоване вікно. Тільки Windows
Wx::MAXIMIZE_BOX - показувати кнопку розгортання вікна на весь екран
Wx::CLOSE_BOX - показувати кнопку закриття вікна
Wx::STAY_ON_TOP - показувати поверх всіх вікон
Wx::SYSTEM_MENU - вікно буде мати системне меню
Wx::RESIZE_BORDER - показувати рамку для зміни розміру вікна.
Wx::FRAME_TOOL_WINDOW - вікно з рамкою невеликого розміру, і також вікно не буде показуватися на панелі задач. Тільки Windows і GTK+
Wx::FRAME_NO_TASKBAR - нормальне вікно, але воно не буде показуватися на панелі задач. Тільки Windows і GTK+
Wx::FRAME_FLOAT_ON_PARENT - вікно буде показуватися тільки поверх батьківського вікна (на відміну від Wx::STAY_ON_TOP)

Для того щоб створити вікно, розмір якого не може змінювати користувач, можна використати таку комбінацію стилів:
Wx::DEFAULT_FRAME_STYLE & ~ (Wx::RESIZE_BORDER|Wx::RESIZE_BOX|Wx::MAXIMIZE_BOX)

Тепер ви можете поекспериментувати із розміром, позицією і стилями вікна.
Стаття вийшла доволі коротка, і ми тут не розглянули всі нюанси роботи з вікнами. Виправлю цей недолік у майбутніх статтях.
На домашнє завдання така задачка: у випадку натиснення на кнопку пересунути вікно у позицію [10, 10].

На все добре і успіхів.

Немає коментарів: