Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Вниз

HWND   Найти похожие ветки 

 
Zlodey ©   (2006-11-25 11:10) [0]

Подскажите пожалуйста еще какие нибудь преобразования с чужим окном
вродe MoveWindow(h,11,11,300,300,true);
з.ы В хелпе встроеном не нашел где стоит поискать


 
Чапаев ©   (2006-11-25 12:28) [1]

Действия с посторонними окнами: Перемещение, изменение размеров, скрытие...

--------------------------------------------------------------------------------

Как "словить" окно? Под словом "словить" я имею ввиду то, как обнаружить наличие окна (любого окна) среди других окон. Функция "ловли окна" очень часто используется в том случае если вам необходимо совершить над ним (окном) какое-нибудь действие: закрыть, переместить, спрятать, изменить размеры и т.д. Еще раз скажу, что все эти действия будут совершаться над "чужими" окноми, т.е. не над теми которые ва разрабатываете, а над окнами других приложений. Итак вы уже поняли ( я надеюсь ) для чего нужно "словить" окно. Ниже представлен фрагмент кода, позволяющий определить наличие  окна в системе:

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_комманде и там вы увидете, какие должны быть параметры.


 
GrayFace ©   (2006-11-25 14:31) [2]

Help -> Windows SDK -> Набери в Index EnumWindows и нажми на Group - будет список основных функций. Еще есть разновидности SendMessage, изучай WM_, как советуется выше.


 
Zlodey ©   (2006-11-25 17:04) [3]

Спасибо


 
Palladin ©   (2006-11-25 18:31) [4]

Хоть бы вскл знак поставил :)
Люди то старались...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
3-1160454278
Merry
2006-10-10 08:24
2006.12.17
QReport: использование QRExpr1.


8-1146568808
Mirror
2006-05-02 15:20
2006.12.17
Скорость работы с Bitmap


2-1164635818
maxXP
2006-11-27 16:56
2006.12.17
Очистка Canvas на Timage


15-1164283016
kaif
2006-11-23 14:56
2006.12.17
Газпром-сити.


3-1160466849
Dmitry_Chernov
2006-10-10 11:54
2006.12.17
Аналог периодического реквизита в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский