Delphi. Дії з сторонніми вікнами: Переміщення, зміна розмірів, приховування …, Delphi, Програмування, статті

Винокуров Данило

Як “зловити” вікно? Під словом “зловити” я маю на увазі те, як виявити наявність вікна (будь-якого вікна) серед інших вікон. Функція “лову вікна “дуже часто використовується в тому випадку якщо вам необхідно зробити над ним (вікном) якесь дію: закрити, перемістити, сховати, змінити розміри і т.д. Ще раз скажу, що всі ці дії будуть відбуватися над “чужими” вікном, тобто не над тими які ва розробляєте, а над вікнами інших додатків. Отже ви вже зрозуміли (я сподіваюся) для чого потрібно “Зловити” вікно. Нижче представлений фрагмент коду, що дозволяє визначити наявність вікна в системі:





if findwindow (nil, ‘1. txt – Блокнот ‘) <> 0 then showmessage (‘Вікно присутній ‘);

Якщо ви помістіть цю строчку в процедуру обробки події натискання на кнопку (або в інше місце), запустіть програму і натиснете на кнопку, ваша програма видасть повідомлення “Вікно присутній” якщо ви перед цим запустили блокнот і зберегли документ під назвою 1.txt Іншими словами програма дивиться чи є вікно з таким заголовком який ви вказали (він виділено ось таким кольором) і якщо воно є – видає повідомлення, в іншому ж випадку нічого не відбудеться.


Тепер коли, ви знаєте як використовувати функцію лову вікна, спробуємо пересунути його:


/ / Помістіть цей код в процедуру обробки події натискання на кнопку


if findwindow (nil, ‘1. txt – Блокнот ‘)
<>0 then
SetWindowPos(findwindow(nil,’1.txt – Блокнот ‘), HWND_BOTTOM, 1,1,20,20, SWP_nosize);
//——————————————————————————–


Запустіть Блокнот збережіть порожній (чи не порожній) документ під ім’ям 1.txt (Зверніть увагу, що заголовок вікна буде 1.txt – Блокнот) Тепер запустіть програму і натисніть на кнопку. Якщо все зроблено правильно, то вікно блокнота наведіть в лівий верхній кут екрану. Тепер давайте розберемо, як ви це зробили.


Перший рядок – функція “лову” вікна. Вона перевіряє чи є вікно з таким заголовком. Якщо є, то виконується наступна (друга) рядок:


SetWindowPos (findwindow (nil, ‘1. Txt – Блокнот ‘), HWND_BOTTOM, 1,1,20,20, SWP_nosize);
Де:


перший параметр – заголовок вікна, з яким треба щось зробити (в даному випадку – пересунути). Тема передається функцією “лову” вікна


          findwindow(nil,’1.txt – Блокнот ‘), де 1.txt – Блокнот заголовок вікна


Другий параметр – положення вікно (тобто його Z-розташування) він нам зараз не потрібен. Просто вважайте, що він повинен бути HWND_BOTTOM


Третій параметр – коордінити вікна по “Осі X” в пікселах.


Четвертий параметр – коордінити вікна по “Осі Y” в пікселах


(Тобто цими коордінмтамі ви вказуєте куди рухати вікно).


П’ятий – розмір вікна по горизонталі


Шостий – розмір вікна по вертикалі


І, нарешті, сьомий параметр, він має кілька значень. Ось основні з них:




SWP_HIDEWINDOW – після зроблене дій над вікном (переміщенням і зміною розміру) вікно ховається

SWP_NOSIZE – якщо вказаний цей параметр, то 5й та 6й параметри враховуватися не будуть, тобто вікно міняти розмір не буде (цей параметр вказаний в нашому прикладі)


SWP_NOMOVE – якщо вказаний цей параметр, то 3й і 4й параметри враховуватися не будуть, тобто вікно не буде переміщатися.


SWP_SHOWWINDOW – після зроблене дій над вікном ( переміщенням і зміною розміру) вікно буде показано (працює тільки якщо вікно було заховано)


 

Тепер можна і текст змінити … Ось, наприклад, є у вас якесь вікно, припустимо заголовок у нього все той же – 1.txt – Блокнот. Як же зі своєї програми поміняти заголовок у цього вікна? А дуже просто:

/ / Помістіть цей код в процедуру обробки події натискання на кнопку

           
setwindowtext (findwindow(nil,’1.txt – Блокнот ‘),’ Вікно By Vasya Pupkin ‘)

//———————————————————————————

Запустіть програму, натисніть на кнопку і … о диво – вікно названо вашим ім’ям 🙂

Функція setwindowtext має 2 параметра:

Перший – заголовок вікна, у якого будемо міняти заголовок. (Пробачте за каламбур). Він визначається через функцію “Лову” вікна:

                 findwindow (nil, ‘1. txt – Блокнот ‘), де 1.txt – Блокнот і є той самий (початковий) заголовок вікна

Другий – новий заголовок (типу String)

 

Є ще одна цікава функція, яка може вам нагоді. Це – Showwindow. Використовуючи її ви зможете ховати (і, природно, показавают назад) вікна. Використання цієї функції ще легше, ніж використання попередніх:

                
Showwindow(findwindow(nil,’1.txt – Блокнот ‘), sw_hide);

Після виконання програми вікно “1.txt – Блокнот” буде заховано (але не закрита!). У цієї функції теж 2 параметри:

Перший – заголовок вікна. Він визначається через функцію “Лову” вікна:

                 findwindow (nil, ‘1. txt – Блокнот ‘), де 1.txt – Блокнот заголовок вікна

Другий – вказівки, що робити:

SW_HIDE-Ховати вікно


SW_MAXIMIZE-Максимізувати вікно


SW_MINIMIZE-Мінімізувати вікно


SW_SHOW-показати вікно (Його треба викликати якщо ви хочете показати вже заховане вікно)

Ще один спосіб передачі команд вікнам – це використання функції Postmessage. Наприклад, щоб закрити вікно з заголовком “1.txt – Блокнот “вставте цей код в процедуру обробки події натискання на кнопку:

              postmessage (findwindow (nil, ‘1. txt – Блокнот ‘),
wm_quit,0,0);

Якщо у вас було запущено вікно з заголовком 1.txt – Блокнот, то воно закриється.

Postmessage має кілька параметрів, і в різних випадках вони різні. Ось якийсь шаблон використання
Postmessage:

               postmessage (findwindow (nil, ‘заголовок вікна’), wm_команда, парам3, парам4);

У першому параметрі – findwindow (nil, ‘заголовок вікна ‘) ви передаєте заголовок вікна.

Другий пареметр – комманда, яка вказує яке дія повинна відбутися над вікном (в даному прикладі ця комманда – WM_QUIT, вона закриває вікно). Всі ці команди починаються на WM_ (wm_size, wm_quit, і т.д.)

Третій і четвертий параметри (парам3 і парам4) – це параметри wm_комманди. Щоб отримати відомості про цих параметрах (та й про самих wm_коммандах) відкрийте довідку Delphi
(ПУСК => Програми => Borland Delphi => HELP => MS
SDK Help Files=> Win32 Programmer’s Reference
) відкрийте вкладку “Покажчик” і наберіть WM_ і ви побачите цілий список цих команд. Якщо ви хочете дізнатися параметри для даної wm_комманди, відкрийте довідку з цієї wm_комманде і там ви побачите, які повинні бути параметри.


Винокуров Данило, 2000 Використання статті можливо
тільки за згодою автора.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*