Delphi. Установка ловушек в Windows

Сегодня мы поговорим об установке hook'ов (ловушек) в Windows. Hook - это механизм перехвата сообщений, путем установки специальной функции на верх стека hook-функций системы. Без установки таких ловушек практически невозможно обойтись при написании различных средств удаленного администрирования, шпионов и других программ в той или иной степени осуществляющих контроль за пользователем, использующем ОС Windows. Hook'и бывают глобальные (на всю систему) и локальные (на какой-либо поток).

Установить в систему hook можно при помощи функции SetWindowsHookEx(), со следующим заголовком:

HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);

Если ты плохо воспринимаешь Си-шный код, на Delphi заголовок выглядит так:

SetWindowsHookEx(idHook: Integer; lpfn: TFNHookProc;
    hmod: HINST; dwThreadId: DWORD): HHOOK;

Функция SetWindowsHookEx() в случае установки hook'a возвращает его дескриптор, в случае ошибки возвращает 0.

Разберем подробней все входящие параметры этой функции:

1. idHook - константа, определяет типа устанавливаемого hook'а. Может принимать одно из ниже перечисленных значений:

WH_CALLWNDPROC - Следит за сообщениями до отправки в оконную функцию и вызывается, когда процедуре окна посылается сообщение. Ловушка срабатывает при каждом вызове функции SendMessage.

WH_CALLWNDPROCRET - Контролирует сообщения после их отправки в оконную функцию.

WH_CBT - Вызывается перед обработкой большинства сообщений окон, мыши и клавиатуры (созданием окон, активация окон, уничтожением окон, сменой размера окон, перед установкой фокуса и.т.п.)

WH_DEBUG - Вызывается перед любой другой ловушкой. Полезно для отладки hook'ов.

WH_GETMESSAGE - Вызывается, когда из очереди приложения считывается сообщение.

WH_HARDWARE - Вызывается, когда из очереди приложения считывается сообщение установленного на компьютере оборудования.

WH_JOURNALPLAYBACK - Вызывается, когда из очереди системы считывается сообщение. Применяется для добавления в очередь системных событий.

WH_JOURNALRECORD - Вызывается, когда из очереди системы запрашивается какое-нибудь событие. Применяется для регистрации системных событий.

WH_KEYBOARD - Вызывается, когда из очереди приложения считывается сообщения WM_Keydown или WM_Keyup. Одна из самых распространенных ловушек -).

WH_MOUSE - Вызывается, когда из очереди приложения считывается сообщение мыши.

WH_MSGFILTER - Вызывается, когда сообщение должно быть обработано диалоговым окном приложения, меню или окном приложения.

WH_SHELL - Вызывается, когда создаются и разрушаются окна верхнего уровня или когда приложению-оболочке требуется стать активным.

2. lpfn - указатель на саму hook функцию. Ее заголовок:

function HOOKFUNCTION(code: Integer; wparam: WPARAM;
    lparam: LPARAM): LRESULT stdcall;

Значения входящих параметров зависят от типа hook'a. Если ставится глобальный hook, эта функция должна обязательно находиться в dll.

3. hmod - принимает значение hInstance или дескриптор DLL (в глобальных ловушках).

4. dwThreadId - идентифицирует поток, в который вставляется ловушка. В глобальных hook'ах этот параметр должен быть равен 0.

Для удаления установленной ловушки существует функция UnhookWindowsHookEx(). В качестве параметра нужно использовать указатель (дескриптор) на hook функцию (значение, которое возвращает функция SetWindowsHookEx()).

Ну вот и все, с основами мы ознакомлены. Теперь напишем маленькую шуточную программу, ставящую hook на считывания сообщений мыши (WH_MOUSE). Сделаем так, чтобы при нажатии на правую кнопку мыши скрывалась кнопка "Пуск", при нажатии на левую - появлялась, среднею - изменялся заголовок активного окна. Сама hook функция будет находиться в dll. Кроме того, в dll будут находиться две процедуры - sethook() и removehook(), соответственно устанавливающие и удаляющие ловушку.

Привожу код dll библиотеки:

library lib;

uses
  windows,messages;
var
  H : THandle;

{Hook-функция}
function hook(c0de, wParam, lParam : integer): Lresult; stdcall;
{Объявления переменных}
var
  w : THandle;
  hw : hwnd;
begin
{Если c0de не меньше 0, все в порядке, продолжаем}
if c0de >= 0 then
begin
  { Если wParam = WM_RBUTTONUP, т.е. нажата правая кнопка мыши, получаем
  хендл (handle) кнопки "Пуск" и скрываем ее }
  case wParam of
WM_RBUTTONUP :
begin
  W:= FindWindow('Shell_TrayWnd', nil);
  W:= FindWindowEx(W, HWND(0),'Button', nil);
  ShowWindow(W, SW_hide);
end;
{ Если wParam = WM_LBUTTONUP, т.е. нажата левая кнопка мыши, получаем
хендл кнопки пуск и показываем ее }
WM_LBUTTONUP:
begin
  W:= FindWindow('Shell_TrayWnd', nil);
  W:= FindWindowEx(W, HWND(0),'Button', nil);
  ShowWindow(W, SW_SHOW);
end;
{ Если wParam = WM_MBUTTONUP, т.е. нажата средняя кнопка мыши, получаем
указатель на заголовок активного окна и изменяем его }
WM_MBUTTONUP:
begin
  hw:=GetForegroundWindow;
  SetWindowText(hw,'EXAMPLE OF WINDOWS HOOK (WH_MOUSE) - by Dark Lord <darklord@smtp.ru>');
end;
end;
end else
{Если c0de меньше 0}
begin
  {Вызываем следующую ловушку в цепочке ловушек Windows и выходим из процедуры}
  result := CallNextHookEx(H, c0de, wParam, lParam);
  exit;
end;
{Вызываем следующую ловушку в цепочке ловушек Windows}
result := CallNextHookEx(H, c0de, wParam, lParam);
End;

{ Процедура установки ловушки, если не удалось
установить - выводим сообщение об ошибке }
procedure sethook;
begin
H:= SetWindowsHookEx(WH_MOUSE, @hook, hInstance, 0);
if H = 0 then
  messagebox(0,'hmmm..','ERROR',mb_iconhand);
end;

{ Процедура удаления ловушки }
procedure removehook;
begin
  UnhookWindowsHookEx(H);
end;

{ Экспорт процедур установки и удаления hook'a }
exports
sethook index 1  name 'sethook',
removehook index 2 name 'removehook';
end.

В самой программе ловушка будет устанавливаться вызовом из dll процедуры sethook, удаляться - вызовом процедуры removehook. Пример установки и удаления hook'а и исходник dll библиотеки есть в прилагающемся исходнике. В данной статье были рассмотрены только основы установки ловушек. Есть немалое количество нюансов и возникающих проблем при установке нескольких hook'ов, установки hook'ов в разных ОС (особенно это касается глобальных ловушек). Для получения подробностей по этим вопросам рекомендую использовать Win32 API Reference или MSDN (если нет диска с MSDN - прогуляйтесь на http://msdn.microsoft.com, здесь правда не вся информация, но большая ее часть). Ну что же, на сегодня это все. Будьте здоровы! -)


Delphi. Работа с winsock на Delphi

Наверное, все, кто хотя бы немного работал с Delphi, сталкивались с компонентами закладки Internet, а именно с TServerSocket и TClientSocket. Эти два невизуальных компонента очень просты в использовании и вполне пригодны для выполнения стандартных задач. Но что делать, если мы хотим написать приложение малого размера или нам необходим больший контроль над сокетом, чем дают стандартные компоненты? В этом случае необходимо использовать средство Windows для работы с сокетами, чем и является библиотека winsock.dll. Заголовки всех процедур и функций, находящихся в этой dll-ке можно найти в Delphi5\source\rtl\win\winsock.pas. Я кратко опишу те из них, который понадобятся для понимания нижеприведенного исходника:

1. function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer; Входящий параметр wVersionRequired - наивысшая версия сокетов Windows, которую можно использовать. Исходящий параметр WSData - указатель на структуру данных WSAData. В случае успешного завершения функция возвращает значение ноль, в противном случае код ошибки. Эта функция должна быть ОБЯЗАТЕЛЬНО вызвана один раз, перед началом работы с сокетами.

2. function inet_addr(cp: PChar): u_long; Входящий параметр cp - нуль терминальная строка. Если нет ошибок, функция возвращает стандартный IP адрес для использования по протоколу TCP\IP. В случае ошибки возвращаемое значение - INADDR_NONE.

3. function htons(hostshort: u_short): u_short; Входящий параметр hostshort - число (16 битное). Функция возвращает 16 битный номер в специальном формате, который можно использовать в протоколе TCP\IP.

4. function socket(af, Struct, protocol: Integer): TSocket; Входящий параметр af - спецификация семейства сокетов, может принимать значение AF_INET, AF_IPX и др. struct - спецификация типа нового сокета (принимает значение SOCK_STREAM или SOCK_DGRAM). protocol - специфический протокол, который будет использоваться сокетом (если не хочешь ничего специфического - пиши 0). Если функция выполнена без ошибок, она возвращает дескриптор на новый сокет, если ошибки есть возвращается INVALID_SOCKET. Код ошибки можно узнать, вызвав функцию WSAGetLastError.

5. function connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; Входящий параметр s - дескриптор, идентифицырующий сокет (это значение возвращает функция socket). name - имя с которым будет связан сокет после коннекта, namelen - длинна этого имени (легко можно получить, используя функцию sizeof). В случае успешного коннекта функция возвращает значение ноль. Если коннект не удался, возвращаемое значение - SOCKET_ERROR (код ошибки можно получить, используя функцию WSAGetLastError).

6. function WSACleanup: Integer; Если выполнена успешно - возвращает ноль и прекращает использования сокетов Windows. Если есть ошибка во время выполнения возвращает код ошибки.

Это далеко не все функции, находящиеся в winsock.dll. Еще раз повторю, что полный их список можно найти в файле winsock.pas, а описание можно посмотреть в Win32 API Reference - Windows Sockets 2 Reference. Надеюсь, что Вы поняли все вышенаписанное и знакомы с основами функционирования сокетов, т.е. понимаете, что такое сокет. Для закрепления полученных знаний, как обычно, напишим маленькую программку.. Все знают, что такое Socks сервер и для чего он нужен.. Если у Вас провал в памяти, я напомню: Socks прокси работают по Socks протоколу, который не зависит от высокоуровневых протоколов (http, ftp, telnet и.т.д.) и поэтому может использоваться для передачи данных по любому протоколу "высокого уровня". После всего выше изложенного будет вполне закономерно, что для тренировки мы напишем простой консольный сканер диапазонов IP адресов на открытый 1080 порт, который является стандартным портом Socks серверов.

program scan;

{$APPTYPE CONSOLE}

{ Для использования winsock необходимо описать этот модуль в uses. }
uses
  sysutils,winsock;

{ дефолтовый порт Socks прокси. Сюда можно вписать любой порт,
превратив наш сканнер, к примеру, в httpd (80 порт) сканнер. }
const
  port = 1080;

{ Здесь объявляем переменные }
var
  D:WSAData;
  S:TSocket;
  A:TSockAddr;
  m1,m2,mask,val:String;
  i:Integer;
begin
  { Если наш сканер запущен без параметров, выводим некоторую информацию.. }
  if paramcount < 1 then
  begin
    writeln('Socks Scanner by har0n, har0n@gmx.net');
    writeln('Example: scan.exe 127.0.0 1-255');
    writeln('http://www.security.net.tf');
  exit;
end
else
{ Если сканер запущен с параметрами, в переменную mask заносим 1-ый параметр,
в val 2-ой параметр }
begin
  mask:=paramstr(1);
  val:=paramstr(2);
  { Определяем диапазон сканирования}
  m1:= copy(val,1,pos('-',val)-1);
  m2:= copy(val,pos('-',val)+1,length(val));
  writeln('- Scanning begin: '+mask+'.'+m1+' - '+mask+'.'+m2+' -');
  writeln;
  { Если WSAStartup() возвращает не нулевое значение, выводим сообщение об ошибке
  и выходим из программы}
if WSAStartup($101,D)<>0 then
begin
  writeln('error..');
  exit;
end;
{ Начинаем процесс сканирования }
for i:= strtoint(m1) to strtoint(m2) do
begin
  { Определяем тип семейства сокетов, и IP адрес для сканирования }
  A.sin_family:=AF_INET;
  A.sin_addr.S_addr:=inet_addr(pchar(mask+'.'+inttostr(i)));
  { Создаем сокет }
  S:=socket(AF_INET,SOCK_STREAM,0);
  { Если возвращено значение INVALID_SOCKET, выводим сообщение об ошибке }
  if S=INVALID_SOCKET then
    writeln('socket error');
  { Определяем порт (задается константой) }
  A.sin_port:=htons(port);
  { Пытаемся подконнектиться, если удачно - выводим сообщение, что порт открыт,
  в другом случае - сообщение о том, что порт закрыт (или недоступен) }
  if connect(S,A,sizeof(A))=0 then
    writeln(mask+'.'+inttostr(i)+' port '+inttostr(port)+' opened') else
  writeln(mask+'.'+inttostr(i)+' port '+inttostr(port)+' closed');
end;
{ Завершаем работу с сокетами }
WSACleanup;
writeln;
writeln('- Scanning is completed -');
end;
end.

Запускать сканер будем так: scan.exe 127.0.0 1-255, при этом будут проверены IP адреса с 127.0.0.1 по 127.0.0.255. Я компилировал исходник на Delphi 5 update pack 1, Windows 2000 SP2, но, думаю, и под другими версиями Delphi и Windows проблем не возникнет. Ну все, удачи!

(c) har0n, http://www.security.net.tf


Кея

Кея | Код
vk_LButton | $01
vk_RButton | $02
vk_Cancel | $03
vk_MButton | $04
vk_Back | $08
vk_Tab | $09
vk_Clear | $0C
vk_Return | $0D
vk_Shift | $10
vk_Control | $11
vk_Menu | $12
vk_Pause | $13
vk_Capital | $14
vk_Escape | $1B
vk_Space | $20
vk_Prior | $21
vk_Next | $22
vk_End | $23
vk_Home | $24
vk_Left | $25
vk_Up | $26
vk_Right | $27
vk_Down | $28
vk_Select | $29
vk_Print | $2A
vk_Execute | $2B
vk_SnapShot | $2C
vk_Copy | $2C ( не используется клавиатурами )
vk_Insert | $2D
vk_Delete | $2E
vk_Help | $2F
vk_A - vk_Z | 'A' - 'Z'
vk_0 - vk_9 | '0' - '9'
vk_NumPad0 | $60
vk_NumPad1 | $61
vk_NumPad2 | $62
vk_NumPad3 | $63
vk_NumPad4 | $64
vk_NumPad5 | $65
vk_NumPad6 | $66
vk_NumPad7 | $67
vk_NumPad8 | $68
vk_NumPad9 | $69
vk_Multiply | $6A
vk_Add | $6B
vk_Separator | $6C
vk_Subtract | $6D
vk_Decimal | $6E
vk_Divide | $6F
vk_F1 | $70
vk_F2 | $71
vk_F3 | $72
vk_F4 | $73
vk_F5 | $74
vk_F6 | $75
vk_F7 | $76
vk_F8 | $77
vk_F9 | $78
vk_F10 | $79
vk_F11 | $7A
vk_F12 | $7B
vk_F13 | $7C
vk_F14 | $7D
vk_F15 | $7E
vk_F16 | $7F
vk_F17 | $80
vk_F18 | $81
vk_F19 | $82
vk_F20 | $83
vk_F21 | $84
vk_F22 | $85
vk_F23 | $86
vk_F24 | $87
vk_NumLock | $90
vk_Scroll | $91


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

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

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


Забавное программирование в Delphi

Приведённый здесь материал можно озаглавить не иначе как "Чем заняться программисту, если нечего делать". На самом деле, Delphi настолько интересная среда, что в ней наряду с разработкой серьёзных приложений можно легко увлечься созданием абсолютно бесполезных вещей.

Итак, поехали...

Автоматически нажимающаяся кнопка

Этот компонент представляет из себя кнопку, на которую не надо нажимать, чтобы получить событие OnClick. Достаточно переместить курсор мышки на кнопку. При создании такого компонента традиционным способом, требуется довольно много времени, так как необходимо обрабатывать мышку, перехватывать её и т.д. Однако результат стоит того!

Предлагаю взглянуть на две версии данного компонента. В более простой версии обработчик перемещения мышки просто перехватывает сообщения Windows с нужным кодом и вызывает обработчик события OnClick:

type
  TAutoButton1 = class(TButton)
  private
    procedure WmMouseMove (var Msg: TMessage);
      message wm_MouseMove;
  end;

procedure TAutoButton1.WmMouseMove (var Msg: TMessage);
begin
  inherited;
  if Assigned (OnClick) then
    OnClick (self);
end;

Вторая версии имеет больше исходного кода, так как в ней я просто пытаюсь повторить событие мышки OnClick когда пользователь перемещает мышку над кнопкой либо по истечении определённого времени. Далее следует объявление класса:

type
  TAutoKind = (akTime, akMovement, akBoth);

  TAutoButton2 = class(TButton)
  private
    FAutoKind: TAutoKind;
    FMovements: Integer;
    FSeconds: Integer;
    // really private
    CurrMov: Integer;
    Capture: Boolean;
    MyTimer: TTimer;
    procedure EndCapture;
    // обработчики сообщений
    procedure WmMouseMove (var Msg: TWMMouse);
      message wm_MouseMove;
    procedure TimerProc (Sender: TObject);
    procedure WmLBUttonDown (var Msg: TMessage);
      message wm_LBUttonDown;
    procedure WmLButtonUp (var Msg: TMessage);
      message wm_LButtonUp;
  public
    constructor Create (AOwner: TComponent); override;
  published
    property AutoKind: TAutoKind
      read FAutoKind write FAutoKind default akTime;
    property Movements: Integer
      read FMovements write FMovements default 5;
    property Seconds: Integer
      read FSeconds write FSeconds default 10;
  end;

Итак, когда курсор мышки попадает в область кнопки (WmMouseMove), то компонент запускает таймер либо счётчик количества сообщений о перемещении. По истечении определённого времени либо при получении нужного количества сообщений о перемещении, компонент эмулирует событие нажатия кнопкой.

procedure TAutoButton2.WmMouseMove (var Msg: TWMMouse);
begin
  inherited;
  if not Capture then
  begin
    SetCapture (Handle);
    Capture := True;
    CurrMov := 0;
    if FAutoKind <> akMovement then
    begin
      MyTimer := TTimer.Create (Parent);
      if FSeconds <> 0 then
        MyTimer.Interval := 3000
      else
        MyTimer.Interval := FSeconds * 1000;
      MyTimer.OnTimer := TimerProc;
      MyTimer.Enabled := True;
    end;
  end
  else // захватываем
  begin
    if (Msg.XPos > 0) and (Msg.XPos < Width)
      and (Msg.YPos > 0) and (Msg.YPos < Height) then
    begin
      // если мы подсчитываем кол-во движений...
      if FAutoKind <> akTime then
      begin
        Inc (CurrMov);
        if CurrMov >= FMovements then
        begin
          if Assigned (OnClick) then
            OnClick (self);
          EndCapture;
        end;
      end;
    end
    else // за пределами... стоп!
      EndCapture;
  end;
end;

procedure TAutoButton2.EndCapture;
begin
  Capture := False;
  ReleaseCapture;
  if Assigned (MyTimer) then
  begin
    MyTimer.Enabled := False;
    MyTimer.Free;
    MyTimer := nil;
  end;
end;

procedure TAutoButton2.TimerProc (Sender: TObject);
begin
  if Assigned (OnClick) then
    OnClick (self);
  EndCapture;
end;

procedure TAutoButton2.WmLBUttonDown (var Msg: TMessage);
begin
  if not Capture then
    inherited;
end;

procedure TAutoButton2.WmLButtonUp (var Msg: TMessage);
begin
  if not Capture then
    inherited;
end;

Как осуществить ввод текста в компоненте Label ?

Многие программисты задавая такой вопрос получают на него стандартный ответ "используй edit box." На самом же деле этот вопрос вполне решаем, хотя лейблы и не основаны на окне и, соответственно не могут получать фокус ввода и, соответственно не могут получать символы, вводимые с клавиатуры. Давайте рассмотрим шаги, которые были предприняты мной для разработки данного компонента.

Первый шаг, это кнопка, которая может отображать вводимый текст:

type
  TInputButton = class(TButton)
  private
    procedure WmChar (var Msg: TWMChar);
      message wm_Char;
  end;

procedure TInputButton.WmChar (var Msg: TWMChar);
var
  Temp: String;
begin
  if Char (Msg.CharCode) = #8 then
  begin
    Temp := Caption;
    Delete (Temp, Length (Temp), 1);
    Caption := Temp;
  end
  else
    Caption := Caption + Char (Msg.CharCode);
end;

С меткой (label) дела обстоят немного сложнее, так как прийдётся создать некоторые ухищрения, чтобы обойти её внутреннюю структуру. Впринципе, проблему можно решить созданием других скрытых компонент (кстати, тот же edit box). Итак, посмотрим на объявление класса:

type
  TInputLabel = class (TLabel)
  private
    MyEdit: TEdit;
    procedure WMLButtonDown (var Msg: TMessage);
      message wm_LButtonDown;
  protected
    procedure EditChange (Sender: TObject);
    procedure EditExit (Sender: TObject);
  public
    constructor Create (AOwner: TComponent); override;
  end;

Когда метка (label) создана, то она в свою очередь создаёт edit box и устанавливает несколько обработчиков событий для него. Фактически, если пользователь кликает по метке, то фокус перемещается на (невидимый) edit box, и мы используем его события для обновления метки. Обратите внимание на ту часть кода, которая подражает фокусу для метки (рисует прямоугольничек), основанная на API функции DrawFocusRect:

constructor TInputLabel.Create (AOwner: TComponent);
begin
  inherited Create (AOwner);

  MyEdit := TEdit.Create (AOwner);
  MyEdit.Parent := AOwner as TForm;
  MyEdit.Width := 0;
  MyEdit.Height := 0;
  MyEdit.TabStop := False;
  MyEdit.OnChange := EditChange;
  MyEdit.OnExit := EditExit;
end;

procedure TInputLabel.WMLButtonDown (var Msg: TMessage);
begin
  MyEdit.SetFocus;
  MyEdit.Text := Caption;
  (Owner as TForm).Canvas.DrawFocusRect (BoundsRect);
end;

procedure TInputLabel.EditChange (Sender: TObject);
begin
  Caption := MyEdit.Text;
  Invalidate;
  Update;
  (Owner as TForm).Canvas.DrawFocusRect (BoundsRect);
end;

procedure TInputLabel.EditExit (Sender: TObject);
begin
  (Owner as TForm).Invalidate;
end;

Кнопка со звуком

Когда Вы нажимаете на кнопку, то видите трёхмерный эффект нажатия. А как же насчёт четвёртого измерения, например звука ? Ну тогда нам понадобится звук для нажатия и звук для отпускания кнопки. Если есть желание, то можно добавить даже речевую подсказку, однако не будем сильно углубляться.

Компонент звуковой кнопки имеет два новых свойства:

type
  TDdhSoundButton = class(TButton)
  private
    FSoundUp, FSoundDown: string;
  protected
    procedure MouseDown(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
  published
    property SoundUp: string
      read FSoundUp write FSoundUp;
    property SoundDown: string
      read FSoundDown write FSoundDown;
  end;

Звуки будут проигрываться при нажатии и отпускании кнопки:

procedure TDdhSoundButton.MouseDown(
  Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  PlaySound (PChar (FSoundDown), 0, snd_Async);
end;

procedure TDdhSoundButton.MouseUp(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  PlaySound (PChar (FSoundUp), 0, snd_Async);
end;

Экранный вирус

Никогда не видели экранного вируса? Представьте, что Ваш экран заболел и покрылся красными пятнами :) А если эта болезнь нападёт на какое-нибудь окно ? Всё, что нам надо, это получить контекст устройства при помощи API функции GetWindowDC и рисовать, что душе угодно.

К исходному коду особых комментариев не требуется, скажу лишь только то, что основная часть кода находится в обработчике события OnTimer:

type
  TScreenVirus = class(TComponent)
  private
    FTimer: TTimer;
    FInterval: Cardinal;
    FColor: TColor;
    FRadius: Integer;
  protected
    procedure OnTimer (Sender: TObject);
    procedure SetInterval (Value: Cardinal);
  public
    constructor Create (AOwner: TComponent); override;
    procedure StartInfection;
  published
    property Interval: Cardinal
      read FInterval write SetInterval;
    property Color: TColor
      read FColor write FColor default clRed;
    property Radius: Integer
      read FRadius write FRadius default 10;
  end;

constructor TScreenVirus.Create (AOwner: TComponent);
begin
  inherited Create (AOwner);
  FTimer := TTimer.Create (Owner);
  FInterval := FTimer.Interval;
  FTimer.Enabled := False;
  FTimer.OnTimer := OnTimer;
  FColor := clRed;
  FRadius := 10;
end;

procedure TScreenVirus.StartInfection;
begin
  if Assigned (FTimer) then
    FTimer.Enabled := True;
end;

procedure TScreenVirus.SetInterval (Value: Cardinal);
begin
  if Value <> FInterval then
  begin
    FInterval := Value;
    FTimer.Interval := Interval;
  end;
end;

procedure TScreenVirus.OnTimer (Sender: TObject);
var
  hdcDesk: THandle;
  Brush: TBrush;
  X, Y: Integer;
begin
  hdcDesk := GetWindowDC (GetDesktopWindow);
  Brush := TBrush.Create;
  Brush.Color := FColor;
  SelectObject (hdcDesk, Brush.Handle);
  X := Random (Screen.Width);
  Y := Random (Screen.Height);
  Ellipse (hdcDesk, X - FRadius, Y - FRadius,
    X + FRadius, Y + FRadius);
  ReleaseDC (hdcDesk, GetDesktopWindow);
  Brush.Free;
end;

Шутки над пользователем

Некоторых пользователей врят ли можно будет испугать экранным вирусом, однако можно воспользоваться другими способами запугивания, например: прозрачные окошки, недоступные пункты меню с большим количеством подуровней, а так же сообщения об ошибках, которые нельзя убрать.

В приведённом ниже примере при помощи обычного диалогового окна пользователю показывается сообщение об ошибке, причём кнопка "close" накак не хочет нажиматься. У этого диалога есть зависимое окно, которое показывается, при нажатии кнопки "details".

Поддельная форма с сообщением об ошибке имеет кнопку "details", которая открывает вторую часть формы. Это достигается путём добавления компонента за пределы самой формы:

object Form2: TForm2
  AutoScroll = False
  Caption = 'Error'
  ClientHeight = 93
  ClientWidth = 320
  OnShow = FormShow
  object Label1: TLabel
    Left = 56
    Top = 16
    Width = 172
    Height = 65
    AutoSize = False
    Caption =
      'Программа выполнила недопустимую ' +
      'операцию. Если проблема повторится, ' +
      'то обратитесь к разработчику программного обеспечения.'
    WordWrap = True
  end
  object Image1: TImage
    Left = 8
    Top = 16
    Width = 41
    Height = 41
    Picture.Data = {...}
  end
  object Button1: TButton
    Left = 240
    Top = 16
    Width = 75
    Height = 25
    Caption = 'Close'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 240
    Top = 56
    Width = 75
    Height = 25
    Caption = 'Details >>'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Memo1: TMemo // за пределами формы!
    Left = 24
    Top = 104
    Width = 265
    Height = 89
    Color = clBtnFace
    Lines.Strings = (
      'AX:BX    73A5:495B'
      'SX:PK    676F:FFFF'
      'OH:OH   7645:2347'
      'Crash    3485:9874'
      ''
      'What'#39's going on here?')
    TabOrder = 2
  end
end

Когда пользователь нажимает кнопку "details", то программа просто изменяет размер формы:

procedure TForm2.Button2Click(Sender: TObject);
begin
  Height := 231;
end;

Вторая форма, которая наследуется от первой имеет перемещающуюся кнопку "close":

procedure TForm3.Button1Click(Sender: TObject);
begin
  Button1.Left := Random (ClientWidth - Button1.Width);
  Button1.Top := Random (ClientHeight - Button1.Height);
end;

В заключении, можно сделать дырку в окне, используя API функцию SetWindowRgn:

procedure TForm1.Button4Click(Sender: TObject);
var
  HRegion1, Hreg2, Hreg3: THandle;
  Col: TColor;
begin
  ShowMessage ('Ready for a real crash?');
  Col := Color;
  Color := clRed;
  PlaySound ('boom.wav', 0, snd_sync);
  HRegion1 := CreatePolygonRgn (Pts,
    sizeof (Pts) div 8,
    alternate);
  SetWindowRgn (
    Handle, HRegion1, True);
  ShowMessage ('Now, what have you done?');
  Color := Col;
  ShowMessage ('Вам лучше купить новый монитор');
end;


менение стандартной формы

Именение стандартной формы

Вас наверное часто удивляла форма окна, которая появляется при загрузке Norton Utilites и других подобных программ. Она имела не прямоугольный размер и ВЫ задавались вопросом : как получить такую форму? / Хотя я подозреваю, что это обычный Bitmap/ Оказывается сделать это довольно просто. При этом Ваша форма может иметь самые замысловатые очертания т.к. все это задается с помощью полигона.
Все делается с помощью одной единственной процедуры :

SetWindowRgn(Handle, R, True);

Handle - указатель на форму, вид которой хотим поменять
R - указатель на регион
Третий параметр - флаг, при значении TRUE сразу после установки перерисовка

Для установки R смотрите функцию CreatePolygonRgn .
В примере я задал в качестве региона простой треугольник, но при большей изобретательности можно создавать очень интересные варианты. Например форму-круг или эллипс.

Прозрачная форма

Приведу простой пример, как можно использовать данную форму. Допустим Вам надо сделать программу- напоминалку. Висит эта форма и на ней постоянно отображаются Ваши встречи, дела, праздники или другая полезная информация. Получится этакий Activ Desctop :) Но будет он жрать ресурсов на порядки меньше.Реализуется все это очень просто.
Переписываем конструктор:

constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
HorzScrollBar.Visible:= False; // убираем сколлбары, чтобы не мешались
VertScrollBar.Visible:= False; // при изменении размеров формы
RebuildWindowRgn; // строим новый регион
end;

А вот процедура "перестройки" региона формы:

procedure TForm1.RebuildWindowRgn;
var
FullRgn, Rgn: THandle;
ClientX, ClientY, I: Integer;
begin
// определяем относительные координаты клиентской части
ClientX:= (Width - ClientWidth) div 2;
ClientY:= Height - ClientHeight - ClientX;
FullRgn:= CreateRectRgn(0, 0, Width, Height); // создаем регион для всей формы
// создаем регион для клиентской части формы и вычитаем его из FullRgn
Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
// теперь добавляем к FullRgn регионы каждого контрольного элемента
for I:= 0 to ControlCount -1 do
with Controls[I] do begin
Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX + Left +Width,
    ClientY + Top + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
end;
SetWindowRgn(Handle, FullRgn, True); // устанавливаем новый регион окна
end;

И самый последний штрих. Если Ваша форма, будет с изменяемыми размерами, то Вам надо добавить:

procedure TForm1.Resize;
begin
inherited;
RebuildWindowRgn; // строим новый регион
end;

Перемещение формы

Еще один штрих - произвольное перемещение формы, а не за Title Bar. Так сделано в программе WinAmp. Пишем всего одну процедуру:

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; // вызов унаследованного обработчика
if M.Result = htClient then // Мышь сидит на окне? Если да
M.Result := htCaption; // - то пусть Windows думает, что мышь на caption bar
end;


Использование мыши при работе с файлами (Drag & Drop)

По материалам сервера http://www.delphi.agava.ru/

Большинство программ, преднозначенных для работы с текстом, предоставляют пользователю возможность перетаскивать имена файлов из "Проводника" (или других программ) в Memo или другой компонент, содержащийся в приложении. о умолчанию Delphi не позволяет перемещать файлы с помощью мыши, но, приложив небольшие усилия, такую возможность можно реализовать.

Первое, что вы должны сделать, - сообщить системе Windows о том, что ваша программа готова обрабатывать файлы, перемещенные из другого приложения с помощью мыши. Для этого достаточно включить в обработчик события OnCreate формы следующее выражение:

DragAcceptFiles(Handle,True);

Кроме того вы должны указать модель ShellAPI в директиве uses.

Для любого окна, в котором была вызвана процедура DragAcceptFiles, справедливо следующее. Когда вы перетаскиваете имя файла на ваше приложение и отпускаете кнопку мыши, Windows посылает этому окну сообщение wm_DropFiles. Сооьщение сопровождается именем файла. Обработчик этого сообщения нужно включитьв защищенный раздел класса формы. например, в объявлении класса формы между ключвыми словами private и public добавьте следующие строки:

protected
   procedure WMDropFiles (var Msg: TMessage);
   message wm_DropFiles;

И наконец-то пример самой процедуры, при помощи которой будет происходить обработка файла:

protected
   procedure WMDropFiles (var Msg: TMessage);
   message wm_DropFiles;
И наконец-то пример самой процедуры, при помощи которой будет происходить обработка файла:
procedure TForm1.WMDropFiles(var Msg: TMessage);
Var
    Filename: array[0..256] of char;
begin

   DragQueryFile(THandle(Msg.WParam),0,Filename,SizeOf(Filename));
   // Теперь в переменной Filename будет находиться путь
   // к перетаскиваемому файлу. Далее вы можете выполнять с этим файлом, зная
   // его путь, все что угодно.

   //Например: Загрузить его в Memo
   Memo1.lines.loadfromfile(Filename);

   //Сообщаем об окончании претаскивания
   DragFinish(THandle(Msg.WParam));
end;


ак запустить другое приложение?

Как запустить другое приложение?

Запуск приложения осуществляется процедурой WinExec :
WinExec('путь_и_имя_приложения',SW_SHOWNORMAL);
Параметр SW_SHOWNORMAL заставляет окно программы показаться в нормальном виде. О других параметрах можно прочитать в справке. (Переместив курсор на слово WinExec и нажав F1).


Как отключить монитор программным путем

Монитор отключенный программным путем, включить можно только программным. Делается все это при помощи сообщений.

SendMessage(wnd,WM_SYSCOMMAND,SC_MONITORPOWER,1); //перевести монитор в режим LowPower
SendMessage(wnd,WM_SYSCOMMAND,SC_MONITORPOWER,2); //перевести монитор в режим PowerOff
SendMessage(wnd,WM_SYSCOMMAND,SC_MONITORPOWER,-1); //включить монитор


Ответы на вопросы — <Win32API в Delphi>

Как перетаскивать окна за любое место

Нужно в оконную функцию соответствующего окна добавить обработчик сообщения WM_LBUTTONDOWN:
WM_LBUTTONDOWN : begin
    result :=  DefWindowProc(wnd, msg, wParam, lParam);
    PostMessage(wnd, WM_SYSCOMMAND, $f012, 0);
end;


Как программно выключить монитор?

Программно можно включить или выключить лишь монитор, совместимый со стандартом EnergyStar. Делается это путем отсылки сообщений:
SendMessage(Application.Handle,wm_SysCommand,Sc_Monitor Power,1);
{Включить монитор}
и
SendMessage(Application.Handle,wm_SysCommand,Sc_Monitor Power,0);
{Выключить монитор}


Как программно закрыть другое приложение?

Закрытие приложения осуществляется функцией PostMessage :
PostMessage(FindWindow(Nil,'Заголовок окна'),WM_QUIT,0,0);


Как программно перезагрузить Windows?

Программная перезагрузка вызывается процедурой
ExitWindowsEx(EWX_REBOOT,0);
Кроме EWX_REBOOT, есть еще некоторые параметры, основной - EWX_SHUTDOWN - выключить компьтер:
ExitWindowsEx(EWX_SHUTDOWN,0);


Как сделать окно, которое перетаскивается не за заголовок
(caption), а за все поле

Нужно обрабатывать сообщение WM_NCHITTEST:
TForm1 = class(TForm)
...
private
...
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
...
end;
...
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; { вызов унаследованного обработчика }
if M.Result = htClient then { Мышь сидит на окне? }
M.Result := htCaption; { Если да - то пусть Windows думает, что }
{ мышь на caption bar }
end;
...
Окно можно сделать вообще без caption.


Как сделать, чтобы перед закрытием программа спрашивала "Закрыть?"?

procedure TForm1.FormCloseQuery (Sender:TObject;var CanClose:Boolean);
begin
if MessageDlg('Закрыть?',mtConfirmation,[mbYes,mbNo],0)=mrNo then CanClose:=false;
end;

MessageDlg вызывает диалоговое окно с кнопками "Да" и "Нет" - если пользователь нажал на кнопку "Нет", переменной CanClose присваиваем false, то есть программа закрыться не может.


Как сделать, чтобы программу нельзя было закрыть каким-либо способом?

procedure TForm1.FormClose (Sender:TObject;var Action:TCloseAction);
begin
action:=caNone;
end;

Параметр Action указывает на то, какое действие следует совершить, когда программа получила сообщение закрыться. CaNone - форма ничего не должна делать, CaFree - форма закрывается и освобождает выделенную ей память, CaHide - форма просто прячется, CaMinimize - форма минимизируеся, но не закрывается и остается видимой.


Ответы на вопросы — <Win32API в Delphi>

Как создать глобальную горячую клавишу

Для этого используется механизм сообщений и функция RegisterHotKey.

function RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL;
hWnd
Описатель окна, которое будет получать сообщение WM_HOTKEY о нажатии «горячей клавиши»
id
Идентификатор "горячей клавиши" - целое число, по которому Ваша программа будет узнавать, какая именно клавиша была нажата. Для приложения это число должно быть из интервала от $0000 до $BFFF. Для библиотек (DLL) от $C000 до $FFFF
fsModifiers
Определяет, какие клавиши регистра должны быть нажаты в момент нажатия клавиши, оределенной в vk, чтобы было послано сообщение wm_hotkey. Это должна быть одна из следующих констант или их комбинация:
  • MOD_ALT
  • MOD_CONTROL
  • MOD_SHIFT
  • MOD_WIN
vk
Константа, определяющая "горячую клавишу". Это должна быть одна из VK_XXX констант. Список некоторых VK_XXX констант здесь

Вот пример программы, которая ловит нажатие на Win+N.
program main;

uses windows, messages;

const
    HOTKEY1 = 1001;//константа для идентификации горячей клавиши
var
    wc : TWndClassEx;
 MainWnd : THandle;
    Mesg : TMsg;

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
var nCode, ctrlID : word;
begin
case msg of
    WM_HOTKEY : begin
        //обработчик события нажатия на зарегистрированную горячую клавишу
        if wParam=HOTKEY1 then MessageBox(wnd, 'Вы нажали на WIN+N', '', MB_OK);
    end;

    WM_DESTROY : begin
        UnregisterHotKey(mainwnd, HOTKEY1);//уничтожение созданной ранее горячей клавиши
        postquitmessage(0);
        Result:=0;
    end;

    else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;

end;//of WindowProc

begin

wc.cbSize:=sizeof(wc);
wc.style:=CS_HREDRAW OR CS_VREDRAW;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=DLGWINDOWEXTRA;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:='HotKeyCatcher_class';

RegisterClassEx(wc);

MainWnd:= CreateWindow('HotKeyCatcher_class', '',
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
0, 0,hInstance,nil);

//$4E – шестнадцатеричный код клавиши с символом N
if not RegisterHotKey(MainWnd,HOTKEY1,MOD_WIN, $4E) then
    MessageBox(mainwnd, 'Не удалось зарегистрировать горячую клавишу', '', MB_OK);

ShowWindow(MainWnd,SW_SHOW);

While GetMessage(Mesg,0,0,0) do begin
    if mainWnd<>0 then
        if IsDialogMessage(mainWnd,Mesg) then continue;
    TranslateMessage(Mesg);
    DispatchMessage(Mesg);
end;
end.


Как создать мигающий заголовок окна?

var Flash:bool;
procedure TForm1.Timer1Timer (Sender:TObject);
begin
FlashWindow(Form1.Handle,Flash); {1}
FlashWindow(Application.Handle,Flash); {2}
Flash:= not Flash;
end;
procedure TForm1.FormCreate (Sender:TObject);
begin
Flash:=False;
end;
Строка 1 заставляет мигать заголовок окна формы, а 2 - кнопку на панели задач. На форме должен присутствовать компонент TTimer.


Как спрятать и показать кнопку "Пуск"?

procedure TForm1.Button1Click (Sender:TObject);
var Rgn:hRgn;
begin
{Спрятать кнопку "Пуск"}
Rgn:=CreateRectRgn(0,0,0,0);
SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil),Rgn,true);
end;

procedure TForm1.Button2Click (Sender:TObject);
begin
{Показать кнопку "Пуск"}
SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil),0,true);
end;
Функция SetWindowRgn устанавливает регион вывода окна, а FindWindow узнает handle окна по его заголовку. Функция не работает с Windows Me/2000.


Как спрятать Панель Задач?

procedure TForm1.Button1Click (Sender:TObject);
var hTaskBar:THandle;
begin
hTaskBar:=FindWindow('Shell_TrayWnd',Nil);
ShowWindow(hTaskBar,SW_SHOWNORMAL); {Показать TaskBar}
ShowWindow(hTaskBar,SW_HIDE); {Спрятать TaskBar}
end;
Процедура ShowWindow показывает и прячет окна.


Ответы на вопросы — <Win32API в Delphi>

Как убрать значки на рабочем столе

Это осуществляется так:
var prog : HWND;
Begin
prog:=FindWindow('Progman',nil);
ShowWindow(prog,sw_hide);//Спрятать
ShowWindow(prog,sw_show);//Показать
End;


Консольные приложения в Delphi

Статья представляет собой изучение создания консольного приложения в Delphi. Прежде чем начать вникать в подробности, необходимо уточнить, что консольные приложения это особый вид Windows приложений - с одной стороны он имеет полный доступ к функциям Win API, с другой - не имеет графического интерфейса и выполняется в текстовом режиме.

Простая консольная программа

На момент написания статьи (1997г.), в Delphi не было возможности автоматически создавать консольные приложения (возможно на сегодняшний день этот недостаток устранён), поэтому мы создадим пустой файл и поместим в него следующий код:

  program ConPrg;
  {$APPTYPE CONSOLE}
  begin
  end.

Затем сохраним этот файл с расширением .dpr - в данном случае conprg.dpr. Далее, его можно загрузить в Delphi (File|Open) и приступить к добавлению кода.
Обратите внимание: Если Вы запустите вышеприведённую программу, то она немедленно завершится, так как в ней нет никакого рабочего кода.

Для начала, в неё можно добавить строчку readln:

  program ConPrg;
  {$APPTYPE CONSOLE}
  begin
   readln
  end.

Вы увидите пустое текстовое окошко, которое закроется, если нажать клавишу Enter.

Идём дальше

Как упоминалось раньше, Вы можете использовать почти любую функцию Win32 API из консольного приложения. Такое приложение очень удобно ещё и тем, что о пользовательском интерфейсе можно вообще не думать, а для вывода информации использовать только пару функций Write/Writeln. Примеров применения консольных приложений великое множество: это и различного вида утилиты, и тестовые программы для проверки работы функций API и т.д. Мы не будет погружаться в примеры того как использовать определённые API, а поговорим только о Консольных API (Console API).

Консольные API (Console API)

Microsoft предоставляет определённый набор функций, которые очень даже полезны при создании консольных приложений. Для начала скажу, что существует по крайней мере два дескриптора (handles), которые связаны с консольным окном. Один для ввода, второй для вывода. Ниже приводятся две небольшие функции, которые показывают, как получить эти дескрипторы.

//-----------------------------------------
// Получение дескриптора для консольного ввода
//-----------------------------------------
function GetConInputHandle : THandle;
begin
Result := GetStdHandle(STD_INPUT_HANDLE)
end;
//-----------------------------------------
// Получение дескриптора для консольного вывода
//-----------------------------------------
function GetConOutputHandle : THandle;
begin
Result := GetStdHandle(STD_OUTPUT_HANDLE)
end;

Так же, лучше сразу создать свои функции для таких простых операций как позиционирование курсора, очистки экрана и отображение/скрытие курсора (так как в консольных API они немножко громозки и запутаны). Вот как они выглядят:

//-----------------------------------------
//
      Установка курсора в координаты X,
      Y
//-----------------------------------------
procedure GotoXY(X, Y
      : Word);
begin
Coord.X := X; Coord.Y :=
      Y;
SetConsoleCursorPosition(ConHandle,
      Coord);
end;
//-----------------------------------------
//
      Очистка экрана - заполнение его
      пробелами
//-----------------------------------------
procedure
      Cls;
begin
Coord.X := 0; Coord.Y :=
      0;
FillConsoleOutputCharacter(ConHandle, ' ', MaxX*MaxY, Coord,
      NOAW);
GotoXY(0,
      0);
end;
//--------------------------------------
//
      Показываем/Скрываем
      курсор
//--------------------------------------
procedure
      ShowCursor(Show : Bool);
begin
CCI.bVisible :=
      Show;
SetConsoleCursorInfo(ConHandle, CCI);
end;

Как Вы успели заметить, мы воспользовались четырьмя функциями консольного API: GetStdHandle, SetConsoleCursorPosition, FillConsoleOutputCharacter, SetConsoleCursorInfo. Иногда может возникнуть задача определения размера консольного окна по вертикали и по горизонтали. Для этого мы создадим две переменные: MaxX и MaxY, типа WORD:

//--------------------------------------
// Инициализация глобальных переменных
//--------------------------------------
procedure Init;
begin
// Получаем дескриптор вывода (output)
ConHandle := GetConOutputHandle;
// Получаем максимальные размеры окна
Coord := GetLargestConsoleWindowSize(ConHandle);
MaxX := Coord.X;
MaxY := Coord.Y;
end;

Мы даже можем сделать "цикл обработки сообщений" (message loop) - для тех, кто только начинает программировать в Delphi - цикл обработки сообщений необходимо делать, если приложение создаётся в чистом API - при этом необходимы как минимум три составляющие: WinMain, message loop и window proc.

Ниже приведён код "цикла обработки сообщений":

SetConsoleCtrlHandler(@ConProc, False);
Cls;
//
// "Цикл обработки сообщений"
//
Continue := True;
While Continue do
Begin
ReadConsoleInput(GetConInputHandle, IBuff, 1, IEvent);
Case IBuff.EventType of
KEY_EVENT : Begin
// Проверяем клавишу ESC и завершаем программу
If ((IBuff.KeyEvent.bKeyDown = True) AND
(IBuff.KeyEvent.wVirtualKeyCode = VK_ESCAPE)) Then
Continue := False;
End;
_MOUSE_EVENT : Begin
With IBuff.MouseEvent.dwMousePosition do
StatusLine(Format('%d, %d', [X, Y]));
End;
end;
End {While}

Так же можно добавить "обработчик событий" и перехватывать такие комбинации клавиш как Ctrl+C и Ctrl+Break:

//-----------------------------------------------------
// Обработчик консольных событий
//-----------------------------------------------------
function ConProc(CtrlType : DWord) : Bool; stdcall; far;
var
S : String;
begin
case CtrlType of
CTRL_C_EVENT : S := 'CTRL_C_EVENT';
CTRL_BREAK_EVENT : S := 'CTRL_BREAK_EVENT';
CTRL_CLOSE_EVENT : S := 'CTRL_CLOSE_EVENT';
CTRL_LOGOFF_EVENT : S := 'CTRL_LOGOFF_EVENT';
CTRL_SHUTDOWN_EVENT : S := 'CTRL_SHUTDOWN_EVENT';
else
S := 'UNKNOWN_EVENT';
end;
MessageBox(0, PChar(S + ' detected'), 'Win32 Console', MB_OK);
Result := True;
end;

Чтобы посмотреть всё это в действии, я сделал небольшую демонстрационную программу, которая содержит подпрограммы, приведённые выше, а так же некоторые другие возможности. Далее приведён полный исходный код этого приложения. Наслаждайтесь!

{
[]-----------------------------------------------------------------------[]
      CON001 - Show various Console API functions. Checked with Win95

                             version 1.01

                  by Alex G. Fedorov, May-July, 1997
                      alexfedorov@geocities.com

   09-Jul-97   some minor corrections (shown in comments)
[]-----------------------------------------------------------------------[]
}
program Con001;
{$APPTYPE CONSOLE}
uses Windows, SysUtils;

const
// Некоторые стандартные цвета
 YellowOnBlue = FOREGROUND_GREEN OR FOREGROUND_RED OR
                FOREGROUND_INTENSITY OR BACKGROUND_BLUE;
 WhiteOnBlue  = FOREGROUND_BLUE OR FOREGROUND_GREEN OR
                FOREGROUND_RED OR FOREGROUND_INTENSITY OR
                BACKGROUND_BLUE;
 RedOnWhite   = FOREGROUND_RED OR FOREGROUND_INTENSITY OR
                BACKGROUND_RED OR BACKGROUND_GREEN OR BACKGROUND_BLUE
                OR BACKGROUND_INTENSITY;
 WhiteOnRed   = BACKGROUND_RED OR BACKGROUND_INTENSITY OR
                FOREGROUND_RED OR FOREGROUND_GREEN OR FOREGROUND_BLUE
                OR FOREGROUND_INTENSITY;

var
 ConHandle  : THandle; // Дескриптор консольного окна
 Coord      : TCoord;  // Для хранения/установки позиции экрана
 MaxX, MaxY : Word;    // Для хранения максимальных размеров окна
 CCI        : TConsoleCursorInfo;
 NOAW       : LongInt; // Для хранения результатов некоторых функций

//-----------------------------------------
//      Получение дескриптора для консольного ввода
//-----------------------------------------
function GetConInputHandle : THandle;
begin
 Result := GetStdHandle(STD_INPUT_HANDLE)
end;
//-----------------------------------------
//      Получение дескриптора для консольного вывода
//-----------------------------------------
function GetConOutputHandle : THandle;
begin
 Result := GetStdHandle(STD_OUTPUT_HANDLE)
end;
//-----------------------------------------
//        Установка курсора в координаты X, Y
//-----------------------------------------
procedure GotoXY(X, Y : Word);
begin
 Coord.X := X; Coord.Y := Y;
 SetConsoleCursorPosition(ConHandle, Coord);
end;
//-----------------------------------------
//   Очистка экрана - заполнение его пробелами
//-----------------------------------------
procedure Cls;
begin
 Coord.X := 0; Coord.Y := 0;
 FillConsoleOutputCharacter(ConHandle, ' ', MaxX*MaxY,  Coord, NOAW);
 GotoXY(0, 0);
end;
//--------------------------------------
//           Показываем/Скрываем курсор
//--------------------------------------
procedure ShowCursor(Show : Bool);
begin
 CCI.bVisible := Show;
 SetConsoleCursorInfo(ConHandle, CCI);
end;
//--------------------------------------
//     Инициализация глобальных переменных
//--------------------------------------
procedure Init;
begin
// Получаем дескриптор вывода (output)
 ConHandle := GetConOutputHandle;
// Получаем максимальные размеры окна
 Coord := GetLargestConsoleWindowSize(ConHandle);
 MaxX := Coord.X;
 MaxY := Coord.Y;
end;
//---------------------------------------
//          рисуем строку статуса ("status line")
//---------------------------------------
procedure StatusLine(S : String);
begin
 Coord.X := 0; Coord.Y := 0;
 WriteConsoleOutputCharacter(ConHandle, PChar(S),   Length(S)+1, Coord, NOAW);
 FillConsoleOutputAttribute (ConHandle, WhiteOnRed, Length(S),   Coord, NOAW);
end;

//-----------------------------------------------------
//               Консольный обработчик событий
//-----------------------------------------------------
function ConProc(CtrlType : DWord) : Bool; stdcall; far;
var
 S : String;
begin
 case CtrlType of
   CTRL_C_EVENT        : S := 'CTRL_C_EVENT';
   CTRL_BREAK_EVENT    : S := 'CTRL_BREAK_EVENT';
   CTRL_CLOSE_EVENT    : S := 'CTRL_CLOSE_EVENT';
   CTRL_LOGOFF_EVENT   : S := 'CTRL_LOGOFF_EVENT';
   CTRL_SHUTDOWN_EVENT : S := 'CTRL_SHUTDOWN_EVENT';
  else
   S := 'UNKNOWN_EVENT';
 end;
 MessageBox(0, PChar(S + ' detected'), 'Win32 Console', MB_OK);
 Result := True;
end;
{
[]---------------------------------------------------------------[]
  Основная программа - показывает использование некоторых подпрограмм
  а так же некоторых функций консольного API
[]---------------------------------------------------------------[]
}
var
 R        : TSmallRect;
 Color    : Word;
 OSVer    : TOSVersionInfo;
 IBuff    : TInputRecord;
 IEvent   : DWord;
 Continue : Bool;

begin
// Инициализация глобальных переменных
 Init;
// Расположение окна на экране
 With R do
{!! 1.01 !!}
  begin
   Left  := 10;  Top    := 10; Right := 40;  Bottom := 40;
  end
{!! 1.01 !!}
 SetConsoleWindowInfo(ConHandle, False, R);
// Устанавливаем обработчик событий
 SetConsoleCtrlHandler(@ConProc, True);
// Проверяем обработчик событий
 GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
// Изменяем заголовок окна
 SetConsoleTitle('Console Demo');
// Прячем курсор
 ShowCursor(False);
 Coord.X := 0; Coord.Y := 0;
// Устанавливаем белый текст на синем фоне
 Color := WhiteOnBlue;
 FillConsoleOutputAttribute(ConHandle, Color, MaxX*MaxY, Coord, NOAW);
// Console Code Page API is not supported under Win95 - only GetConsoleCP
 Writeln('Console Code Page = ', GetConsoleCP);
 Writeln('Max X=', MaxX,' Max Y=', MaxY);
 Readln;            // ожидаем ввода пользователя
 Cls;               // очищаем экран
 ShowCursor(True);  // показываем курсор
//
// Use some Win32API stuff
//
 OSVer.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
 GetVersionEx(OSVer);
 With OSVer do
  Begin
   Writeln('dwMajorVersion = ', dwMajorVersion);
   Writeln('dwMinorVersion = ', dwMinorVersion);
   Writeln('dwBuildNumber  = ', dwBuildNumber);
   Writeln('dwPlatformID   = ', dwPlatformID);
  End;

//
 Readln;           // ожидаем ввода пользователя
// Удаляем обработчик событий
 SetConsoleCtrlHandler(@ConProc, False);
 Cls;
//
// "Цикл обработки сообщений"
//
 Continue := True;
 While Continue do
 Begin
  ReadConsoleInput(GetConInputHandle, IBuff, 1, IEvent);
  Case IBuff.EventType of
   KEY_EVENT   : Begin
// Проверяем клавишу ESC и завершаем программу
                   If ((IBuff.KeyEvent.bKeyDown = True) AND
                       (IBuff.KeyEvent.wVirtualKeyCode = VK_ESCAPE)) Then
                       Continue := False;
                  End;
   _MOUSE_EVENT : Begin
                   With IBuff.MouseEvent.dwMousePosition do
                    StatusLine(Format('%d, %d', [X, Y]));
                  End;
  end;
 End {While}
end.


Если вам надоели обычные монотонные формы, то эта статья - спасенье для вас!!! Всё, что вам нужно сделать для того, чтобы ваше

Если вам надоели обычные монотонные формы, то эта статья - спасенье для вас!!! Всё, что вам нужно сделать для того, чтобы ваше окно выглядело так же эффектно, как и показанное на рисунке , это только написать несколько строк кода на событие OnPaint (на прорисовку) для вашего подопытного окна:

procedure TForm1.FormPaint(Sender: TObject);
var
i,j:Integer;
begin
with Form1.Canvas do begin
for j:=0 to Form1.Height do begin
for i:=0 to Form1.Width do begin
Pixels[i,j]:=Trunc(Random($00000095));
end;
end;
end;
end;

Как это сделано?

С помощью двух циклов мы обошли поверхность окна (канву) и каждому пикселю задали случайный оттенок нужного цвета. (Для тех, кто не знает, ПИКСЕЛЬ - это мельчайшая точка). Цвет задаём 16-ричным кодом, например я указал:

$00000095

Получилось весьма неплохо :-))

Вы можете изменить цвет.

Удачи.


ОКНО В ВИДЕ КОЛЬЦА

Умея создавать окно эллипсовидной формы, для вас не составит большого труда слепить что-нибудь наподобие того, что показано на рисунке. Всё, что вам нужно сделать - это создать не один, а два региона и объединить их, используя функцию CombineRgn, т.е. теперь по созданию окна можно написать что-то вроде этого:

procedure TForm1.FormCreate(Sender: TObject);
var
hsWindowRegion, hsWindowRegion2:Integer;
begin
hsWindowRegion:=CreateEllipticRgn(50,50,350,200);
hsWindowRegion2:=CreateEllipticRgn(80,80,200,150);
CombineRgn(hsWindowRegion,hsWindowRegion,hsWindowRegion2,RGN_DIFF);
SetWindowRgn(Handle,hsWindowRegion,true);
end;

Как это сделано?

Мы уже знаем какую функцию нужно использовать для объединения регионов, но как же она действует и что же ей нужно указывать? Вводятся следующие параметры:

1) Дескриптор региона назначения,

2) Дескриптор первого региона источника,

3) Дескриптор второго региона источника,

4) Режим взаимодействия регионов источников.

В качестве режима мы указали константу RGN_DIFF, а использовать можем:

RGN_AND - Создает пересечение из двух смешанных областей,
RGN_COPY - Создает копию области, идентифицированной дескриптором первой области источника,
RGN_DIFF - Выводит части первой области источника, которые не пересекаются со второй,

RGN_OR - Создает объединение двух смешанных областей,
RGN_XOR - Создает объединение двух смешанных областей за исключением зоны перекрытия.


Пример обработки событий при наведении мыши.

В данном примере есть один обработчик, который исполняентся когда над кнопкой Button1 появляется мышка. В объектном инспекторе на закладке событий два раза кликните (быстро) в строке с MouseMove. Среда Delphi сама заготовит шаблон процедуры обработчика, вам же останется только вписать текст из листинга.
Листинг
unit button;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
//Заготовка для этой процедуры генерится автоматически, вам
//остается только написать обработчик.
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var i:integer;
begin
i:=random(4); //Случайным образом выберем направления побега
Case i of //Будем изменять свойства кнопки.
0:Button1.Left:=Button1.left+Button1.Width;
1:Button1.Left:=Button1.Left-Button1.Width;
2:Button1.Top:=Button1.Top+Button1.Height;
3:Button1.Top:=Button1.Top-Button1.Height;
end;
end;
end.


ПРОЗРАЧНОЕ ОКНО

Для создания прозрачного окна Вам понадобится:

Форма - 1 штука,
Время - 5 минут,
Желание - неимоверное.

Если всё это у Вас в наличии имеется, то можете смело приступать к выполнению следующих действий:

Первым делом в защищённых объявлениях (после слова protected) объявим две процедуры. Изначально это слово отсутствует, поэтому Вам придётся самим вписать его (можно до слова public):

protected
procedure RebuildWindowRgn;
procedure Resize; override;

Затем в публичных объявлениях (теперь уже в public)размещаем объявление конструктора. Нам его нужно переопределить, поэтому добавляем ключевое слово override:

constructor Create(AOwner:TComponent);override;

В области реализации (после слова implementation) описываем конструктор так:

implementation
{$R *.DFM}
constructor TForm1.Create(AOwner:TComponent);
begin
inherited;
HorzScrollbar.Visible:=false;
VertScrollbar.Visible:=false;
RebuildWindowRgn;
end;

Ресурс формы {$R *.DFM} оставляем без изменений. Слово inherited свидетельствует о том, что используется стандартный обработчик этой процедуры. Мы лишь убрали полосы прокрутки

HorzScrollbar.Visible:=false;
VertScrollbar.Visible:=false;

(скролбары), чтобы они не мешались. И построили регион с помощью процедуры RebuildWindowRgn.
Тело переобъявленной процедуры Resize выглядит так:

procedure TForm1.Resize;
begin
inherited;
RebuildWindowRgn;
end;

Здесь мы всего лишь перестраиваем регион, когда пользователь изменяет размер окна.

И, наконец, описываем процедуру RebuildWindowRgn:

procedure TForm1.RebuildWindowRgn;
var
FullRgn,Rgn:THandle;
ClientX,ClientY,i:integer;
begin
ClientX:=(Width-ClientWidth) div 2;
ClientY:=Height-ClientHeight-ClientX;
FullRgn:=CreateRectRgn(0,0,Width,Height);
Rgn:=CreateRectRgn(ClientX,ClientY,ClientX+ClientWidth,ClientY+ClientHeight);
CombineRgn(FullRgn,FullRgn,Rgn,RGN_DIFF);
for i:=0 to ControlCount-1 do
with Controls[i] do begin
Rgn:=CreateRectRgn(ClientX+Left,ClientY+Top,ClientX+Left+Width,ClientY+Top+Height);
CombineRgn(FullRgn,FullRgn,Rgn,RGN_OR);
end;
SetWindowRgn(Handle,FullRgn,true);
end;

Как это сделано?

В переменные ClientX и ClientY мы помещаем относительные координаты клиентской части. Создаём регион для всей формы:

FullRgn:=CreateRectRgn(0,0,Width,Height);

Создаём регион для клиентской части формы и вычитаем его из FullRgn

Rgn:=CreateRectRgn(ClientX,ClientY,ClientX+ClientWidth,ClientY+ClientHeight);
CombineRgn(FullRgn,FullRgn,Rgn,RGN_DIFF);

Добавляем в цикле к FullRgn регионы каждого контрольного элемента.

for i:=0 to ControlCount-1 do
with Controls[i] do begin
Rgn:=CreateRectRgn(ClientX+Left,ClientY+Top,ClientX+Left+Width,ClientY+Top+Height);
CombineRgn(FullRgn,FullRgn,Rgn,RGN_OR);
end;

Устанавливаем новый регион окна

SetWindowRgn(Handle,FullRgn,true);


Сайт внутри EXE файла.

В этой статье мы рассмотрим как хранить HTML страницы и входящие в него картинки в вашем проекте. В конечном итоге мы получим один исполнимый файл содержащий HTML страницу.

Шаг первый - создание HTML страницы.

Для начала мы создадим две простеньких HTML страницы. Для их создания вы можете воспользоваться вашим любимым HTML редактором. Создайте одну страницу с одним рисунком и ссылкой на другую страницу. Я назову свои delphiandprogramming.html и page2.html. Когда вы добавите картинку в страницу, то редактор напишет что-то вроде:

<img ... src="pics/delphiandprogramming.jpg">

Но нам нужно поменять в коде HTML значение параметра SRC так чтобы он был равен имени ресурса:

<img src="/JPEG/dpgjpeg" width="67" heught="61">

Вот код моей странички delphiandprogramming.html:

<HTML><HEAD><TITLE>Delhi And Programming Test Resources 3</HTML></HEAD></TITLE>
<a href="/HTML/page2">Look at second page</a><br>
Welcome to<a href="http:/delfaq.wallst.ru"> <img src="/JPEG/dogjpeg" width="67" height="61">!</a>
</BODY></HTML>

И page2.html:

<HTML><HEAD><TITLE>Delhi And Programming Test Resources Page2</HTML></HEAD></TITLE>
AND HERE WE GOES THRU EXE!
</BODY></HTML>

Создание файла ресурсов

Напомню, что для создания файла скрипта вам необходимо:

1. Создать пустой текстовый файл в директории с проектом
2. Переименовать его в TestRes3.rc
3. Написать в нем следующий код:

dpg HTML "delphiandprogramming.html"
page2 HTML "page2.html"
dpgjpeg JPEG "delphiandprogramming.jpg"

Тип ресурса - RT_HTML определенный как ресурс под номером "23", это ресурсный тип по умолчанию для HTML страниц.

Итак, мы создали файл скрипта ресурсов, страницу и связанную с ней картинку. Следующий шаг - откомпилировать скрипт. Для его компиляции, как это было описано во второй части этой серии мы выполним в командной строке следующую команду:

BRCC32 TestRes3.RC

Теперь подключим полученный файл ресурсов в наш проект следующей строчкой:

{$R TestRes3.RES}

Показ страницы в браузере

Когда мы откомпилировали наше приложение, (я его назвал testres3.exe) мы можем просмотреть нашу страничку в браузере, для этого в адресной строке браузера наберите следующий адрес:

res://C:\Delphi5\Projects\TestRes3\testres3.exe/HTML/dpg

Конечно путь " C:\Delphi5\Projects\TestRes3\testres3.exe" у вас может отличаться.

Показ страницы в своем приложении

А теперь мы покажем страницу в самом приложении! Разместите на форме компонент TWebBrowser (находится в Delphi 5 на закладке "Internet"). И на создание формы напишите следующий код:

Self.WebBrowser1.Navigate('res://C:\Delphi5\Projects\TestRes3\testres3.exe/HTML/dpg');

И все! Теперь вы можете отправлять свой сайт не заботясь о том что пользователь не сможет набрать эту хитрую строчку: 'res://C:\Delphi5\Projects\TestRes3\testres3.exe/HTML/dpg'.

А вот что получилось у меня: testres3.zip

Документ скачен с сайта http://www.diagnostic.ru/delphi


Создание заставок для ваших программ

Наверно, каждый программист на Дельфи хоть раз хотел создать к какой-нибудь своей программе заставку. В этой статье мы рассмотрим создание заставок в Дельфи. Тому кто умеет работать более чем с одной формой в приложении, будет очень легко это понять. Чтобы не вдаваться в теорию, начнем сразу с практики.

Откройте какое-нибудь свое приложение, к которому вы хотите добавить заставку, или создайте новое (на чистом проще разбираться). Теперь необходимо добавить в наш проект еще одну форму, которая будет заставкой. Для этого нажмите File->New Form и Дельфи создаст вам новую форму. Измените ее размеры как вам хочется. Потом установите свойство Border Style вашей формы в bsNone (у формы не будет заголовка и системных кнопок), установите свойство Visible в false. Свойтсво Position должно быть poScreenCenter - это значит, что форма появится по центру экрана. И чтобы не перепутать эту форму ни с какой другой задайте ей имя Logo.

Настройка формы заставки произведена, теперь необходимо сделать, чтобы по щелчку мышкой по этой форме или после нажатия клавиши или по истечении 5 секунд форма-заставка закрывалась. Для этого установите на форму Timer, его свойству Interval задайте значение 5000 (форма будет закрываться через 5 секунд). В обработчик события OnTimer напишите всего одно слово: Close;

В обработчик события OnClick для формы-заставки напишите тоже самое. Установите свойство формы KeyPreview в true (это делается для того, чтобы при нажатии любой клавиши вначале реагировала форма, а затем тот элемент, который был в фокусе в момент нажатия). А в обработчик события OnKeyPress (для формы-заставки конечно же) опять-таки напишите close;

Форма-заставка готова полностью и теперь необходимо, чтобы она запускалась перед главной формой. Для этого сделайте активной вашу главную форму, перейдите на вкладку Events в Object Inspector'e и выберите событие OnShow. В обработчике этого события надо написать следующее:

logo.showmodal;

Меня иногда спрашивают, чем отличаются процедуры show и showmodal. У них только одно принципиальное различие: если форма открылась методом Showmodal, то пока она не закроется пользователь не сможет взаимодействовать с остальными формами приложения. А если форма была открыта методом Show, то пользователь легко может перейти к любой форме приложения.

Итак, форма-заставка готова. Теперь мы слегка ее усовершенствуем. Добавим такую же штуку, как в формах-заставках Microsoft Office, а именно на форме будет показываться имя пользователя и организация. Для этого разместите на форме-заставке две метки (Label). Первую назовите UserName, а вторую - Organization. Чтобы это сделать мы воспользуемся реестром (тас вообще очень много интересного можно найти). Теперь откройте обработчик события OnCreate для формы-заставки и объявите там переменную R типа TRegistry, а в раздел Uses всей программы добавьте Registry. Теперь нам нужно создать объект R :

R:=TRegistry.Create;
R.RootKey:=HKEY_LOCAL_MACHINE;
R.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False); //именно
        здесь эта информация хранится

Теперь необходимо прочитать нужные строки из этого раздела реестра и присвоить их соответствующим меткам:

UserName.Caption:=r.readstring('RegisteredOwner');
Organization.Caption:=r.readstring('RegisteredOrganization');
r.Free; //надо уничтожить этот объект, так как он нам больше не нужен

Таким образом весь этот обработчик должен иметь примерно такой вид:

procedure
        TLogo.FormCreate(Sender: TObject);
var R:Tregistry;
begin
R:=TRegistry.Create;
R.RootKey:=HKEY_LOCAL_MACHINE;
R.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False);
UserName.Caption:=r.readstring('RegisteredOwner');
Organization.Caption:=r.readstring('RegisteredOrganization');
r.Free;
end;

Ну вот собственно и все что я хотел вам рассказать о заставках. Теперь ваши программы будут выг

лядеть более солидно. Но помните, что при создании небольших, вспомогательных программ, объем которых не превышает килобайт 100-150 заставки лучше не использовать.

Удачи в программировании..


Спpавочник по сообщениям Windows

Каждый из pазделов этой главы описывает, что делает сообщение, какие значения используются для каждого поля сообщения и какие возвpащаемые значения ожидаются или задаются Windows. В конце каждого описания пpиводятся дополнительные комментаpии. wParam и lParam являются обязательными паpаметpами сообщений Windows.

bm_GetCheck

Опpеделяет, является ли селективная кнопка или блок пpовеpки помеченным.

Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если селективная кнопка или блок пpовеpки помечен, возвpащается ненулевое значение. В пpотивном случае, возвpащается нуль. Для текстовой кнопки всегда возвpащается нуль.

bm_GetState

Опpеделяет состояние оpгана упpавления кнопки пpи нажатии кнопки мыши или клавиши пpобела.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если кнопка является подсвеченной текстовой кнопкой, на кнопке сфокусиpован ввод и нажата кнопка мыши или клавиша пpобела, или нажата кнопка мыши, когда куpсоp находится в кнопке, возвpащается ненулевое значение. В пpотивном случае, возвpащается нуль.

bm_SetCheck

Помечает или удаляет отметку из селективной кнопки или блока пpовеpки.
Паpаметpы:
wParam: Для кнопок с двумя состояниями и блоков пpовеpки пpи нулевом значении wParam отметка блока (если имеется) удаляется, в пpотивном случае - добавляется. Для кнопок с тpемя состояниями пpи нулевом значении wParam отметка блока (если имеется) и затенение (если есть) удаляются. Если wParam=1, то добавляется отметка. Если wParam=2, то кнопка затеняется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

bm_SetState

Изменяет состояние кнопки или блока пpовеpки.
Паpаметpы:
wParam: Если wParam = 0, кнопка или блок пpовеpки pисуются ноpмальным обpазом. В случае ненулевого значения кнопка подсвечивается.
lParam: Не используется.
Возвpащаемое значение: Не используется.

bm_SetStyle

Изменяет стиль кнопки.
Паpаметpы:
wParam: Опpеделяет новый стиль кнопки. См. pаздел "Стили кнопок (bs_)" в главе 1 "Стили и константы Windows".
lParam: В случае нулевого значения кнопка не будет пеpеpисовываться сpазу же. Если значение отлично от нуля и новый стиль кнопки отличается от текущего стиля, то кнопка будет пеpеpисована.
Возвpащаемое значение: Не используется.

cb_AddString

Добавляет стpоку к блоку списка комбиниpованного блока.
Паpаметpы:
wParam: Не используется.
lParam: lParam является указателем на добавляемую стpоку, заканчивающуюся пустым символом.
Возвpащаемое значение: В случае успешного завеpшения возвpащается индекс, с котоpым была добавлена стpока; в пpотивном случае, если не хватает памяти для записи стpоки, возвpащается cb_ErrSpace, а если пpоизошла ошибка, возвpащается cb_Err.
Комментаpии: Если блок списка комбиниpованного блока не отсоpтиpован, стpока помещается в конец списка. Если комбиниpованный блок имеет стиль cbs_OwnerDrawFixed или cbs_OwnerDrawVariable и не имеет стиля cbs_HasString, lParam является 32-битовым значением, котоpое запоминается вместо стpоки, и каждый добавляемый элемент сpавнивается с дpугими элементами один или несколько pаз чеpез сообщение wm_CompareItem, посылаемое владельцу комбиниpованного блока.

cb_DeleteString

Удаляет стpоку из блока списка комбиниpованного блока.
Паpаметpы:
wParam: Является индексом удаляемого элемента блока списка.
lParam: Не используется.
Возвpащаемое значение: Если wParam является пpавильным индексом, возвpащается количество оставшихся в списке элементов, в пpотивном случае, возвpащается cb_Err.
Комментаpии: Если комбиниpованный блок имеет стиль cbs_OwnerDrawFixed или cbs_OwnerDrawVariable и не имеет стиля lbs_HasString, то соответствующее 32-битовое значение удаляется и владельцу комбиниpованного блока посылается сообщение wm_DeleteItem.

cb_Dir

Добавляет к блоку списка комбиниpованного блока каждое имя файла из текущего спpавочника, соответствующее спицификациям файла и атpибутам файлов DOS.
Паpаметpы:
wParam: Является атpибутом файлов DOS.
lParam: Указатель на стpоку спецификации файла, заканчивающуюся пустым символом.
Возвpащаемое значение: В случае успеха возвpащается индекс последнего элемента в pезультиpующем списке; в пpотивном случае, если не хватает памяти для сохpанения элементов, возвpащается cb_ErrSpace, или, в случае ошибки, возвpащается cb_Err.

cb_FindString

Находит пеpвый элемент блока списка комбиниpованного блока, соответствующий пpефиксной стpоке.
Паpаметpы:
wParam: Является индексом, с котоpого должен начинаться поиск. Пеpвым пpосматpиваемым элементом является элемент, следующий после элемента с индексом wParam. Если достигается конец списка, то поиск пpодолжается с нулевого элемента до тех поp, пока индекс не достигнет значения wParam. Если wParam=-1, то пpосматpивается весь список, начиная с нулевого элемента.
lParam: Указатель на пpефиксную стpоку, заканчивающуюся пустым символом.
Возвpащаемое значение: В случае успеха возвpащается индекс пеpвого совпадающего элемента, в пpотивном случае, возвpащается cb_Err.
Комментаpии: Если комбиниpованный блок имеет стиль cbs_OwnerDrawFixed или cbs_OwnerDrawVariable и не имеет стиля cbs_HasString, то lParam является 32-битовым значением, котоpое сpавнивается с каждым соответствующим 32-битовым значением в списке.

cb_GetCount

Возвpащает число элементов в блоке списка комбиниpованного блока.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Число элементов в блоке списка.

cb_GetCurSel

Возвpащает индекс текущего выбpанного элемента в блоке списка комбиниpованного блока.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если выбpанного элемента нет, возвpащается cb_Err; в пpотивном случае, возвpащается индекс текущего выбpанного элемента.

cb_GetEditSel

Возвpащает начальный и конечный индексы выбpанного текста в оpгане упpавления pедактиpованием комбиниpованного блока.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если комбиниpованный блок не имеет оpгана упpавления pедактиpованием, возвpащается cb_Err; в пpотивном случае, младшее слово возвpащаемого значения пpедставляет собой индекс начала, а стаpшее слово - индекс конца.

cb_GetItemData

Возвpащает 32-битовое значение, связанное с элементом в блоке списка комбиниpованного блока.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Не используется.
Возвpащаемое значение: В случае успешного завеpшения возвpащается соответствующее 32-битовое значение; в пpотивном случае, возвpащается cb_Err.

cb_GetLBText

Копиpует элемент из блока списка комбиниpованного блока в имеющийся буфеp.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Является указателем на буфеp. Буфеp должен быть достаточно большим для того, чтобы вмещать стpоку и заканчивающий ее пустой символ.
Возвpащаемое значение: Не используется.
Комментаpии: Если комбиниpованный блок имеет стиль cbs_OwnerDrawFixed или cbs_OwnerDrawVariable и не имеет стиля cbs_HasString, то 32-битовое значение, котоpое связано с элементом списка, копиpуется в буфеp.

cb_GetLBTextLen

Возвpащает длину в байтах элемента в блоке списка комбиниpованного блока.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Не используется.
Возвpащаемое значение: Если wParam веpный индекс, то возвpащается длина элемента с этим индексом; в пpотивном случае, возвpащается cb_Err.

cb_InsertString

Вставляет стpоку в блок списка комбиниpованного блока без соpтиpовки.
Паpаметpы:
wParam: Если wParam=-1, то стpока добавляется в конец списка. В пpотивном случае, wParam используется как индекс вставки стpоки.
lParam: Указывает на вставляемую стpоку, заканчивающуюся пpобелом.
Возвpащаемое значение: В случае успешного завеpшения возвpащается индекс, по котоpому была вставлена стpока; в пpотивном случае, если не хватает памяти для сохpанения стpоки, возвpащается cb_ErrSpace, или, в случае ошибки, возвpащается cb_Err.

cb_LimitText

Устанавливает пpедельное число символов, котоpое может быть введено в блок списка комбиниpованного блока.
Паpаметpы:
wParam: Опpеделяет новое максимальное число символов. В случае нулевого значения пpедел отсутствует.
lParam: Не используется.
Возвpащаемое значение: В случае успешного завеpшения возвpащается ненулевое значение, в пpотивном случае, возвpащается нуль. Если в комбиниpованном блоке нет оpгана упpавления pедактиpованием, возвpащается cb_Err.

cb_ResetContent

Удаляет все элементы из блока списка комбиниpованного блока.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Комментаpии: Если комбиниpованный блок имеет стиль cbs_OwnerDrawFixed или cbs_OwnerDrawVariable и не имеет стиля cbs_HasString, то владельцу комбиниpованного блока для каждого элемента посылается сообщение wm_DeleteItem.

cb_SelectString

Выбиpает пеpвый элемент блока списка комбиниpованного блока, соответствующий пpефиксной стpоке, и обновляет оpган упpавления pедактиpованием комбиниpованного блока или оpган упpавления статическим текстом для отpажения выбоpа.
Паpаметpы:
wParam: Является индексом, с котоpого должен начинаться поиск. Пеpвым пpосматpиваемым элементом является элемент, следующий после элемента с индексом wParam. Если достигается конец списка, то поиск пpодолжается с нулевого элемента до тех поp, пока индекс не достигнет значения wParam. Если wParam=-1, то пpосматpивается весь список, начиная с нулевого элемента.
lParam: Пpефиксная стpока, заканчивающаяся пустым символом.
Возвpащаемое значение: В случае успешного завеpшения возвpащается индекс пеpвого совпадающего элемента, в пpотивном случае, возвpащается cb_Err и текущий выбоp не изменяется.
Комментаpии: Если комбиниpованный блок имеет стиль cbs_OwnerDrawFixed или cbs_OwnerDrawVariable и не имеет стиля cbs_HasString, то lParam является 32-битовым значением, котоpое сpавнивается с каждым соответствующим 32-битовым значением в списке.

cb_SetCurSel

Выбиpает элемент блока списка комбиниpованного блока, соответствующий пpефиксной стpоке, и обновляет оpган упpавления pедактиpованием комбиниpованного блока или оpган упpавления статическим текстом для отpажения выбоpа.
Паpаметpы:
wParam: Является индексом элемента. Если wParam=-1, то выбpанного элемента нет.
lParam: Не используется.
Возвpащаемое значение: Если wParam=-1 или является невеpным индексом, возвpащается cb_Err; в пpотивном случае, возвpащается индекс выбpанного элемента.

cb_SetEditSel

Устанавливает выбpанный текст в оpгане упpавления pедактиpованием комбиниpованного блока.
Паpаметpы:
wParam: Не используется.
lParamLo: Опpеделяет индекс начального символа.
lParamHi: Опpеделяет индекс конечного символа.
Возвpащаемое значение: В случае успешного завеpшения возвpащается ненулевое значение: в пpотивном случае - нуль. Если комбиниpованный блок не имеет оpгана упpавления pедактиpованием, возвpащается cb_Err.

cb_SetItemData

Устанавливает 32-битовое значение, связанное с элементом в блоке списка комбиниpованного блока.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Новое 32-битовое значение, котоpое будет связано с элементом.
Возвpащаемое значение: В случае ошибки возвpащается cb_Err.

cb_ShowDropDown

Делает видимым или невидимым выпадающий блок списка комбиниpованного блока.
Паpаметpы:
wParam: Если wParam pавен нулю, то выпадающий блок списка является невидимым, в пpотивном случае, он является видимым.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение пpименимо только к комбиниpованным блокам, созданным со стилями cbs_DropDown или cbs_DropDownList.

dm_GetDefID

Возвpащает стандаpтный идентификатоp оpгана упpавления текстовой кнопки диалога.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если стандаpтного идентификатоpа оpгана упpавления текстовой кнопки диалога нет, стаpшее слово возвpащаемого значения pавно нулю; в пpотивном случае, стаpшее слово возвpащаемого значения pавно dc_HasDefID, а младшее слово - стандаpтному идентификатоpу текстовой кнопки.

dm_SetDefID

Устанавливает стандаpтный идентификатоp оpгана упpавления текстовой кнопки диалога.
Паpаметpы:
wParam: пpедставляет новый стандаpтный идентификатоp текстовой кнопки.
lParam: Не используется.
Возвpащаемое значение: Не используется.

em_CanUndo

Опpеделяет, может ли оpган упpавления pедактиpованием ответить на сообщение em_Undo.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если оpган упpавления pедактиpованием может ответить на сообщение em_Undo, возвpащается ненулевое значение; в пpотивном случае, возвpащается нуль.

em_EmptyUndoBuffer

Делает пустым буфеp отмены оpгана упpавления pедактиpованием, котоpый запpещает возможность отмены последнего pедактиpования.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Посылка оpгану упpавления pедактиpованием сообщения wm_SetText или em_SetHandle вызывает автоматическое обнуление буфеpа отмены оpгана упpавления pедактиpованием.

em_FmtLines

Указывает оpгану упpавления pедактиpованием, добавлять или нет специальную последовательность символа конца стpоки к стpокам текста, в котоpых имел место пеpенос слов.
Паpаметpы:
wParam: Если wParam отличен от нуля, то стpоки текста с пеpеносом слов заканчиваются последовательностью "возвpат каpетки, возвpат каpетки, смена стpоки"; в пpотивном случае, любая последовательность "возвpат каpетки, возвpат каpетки, смена стpоки" удаляется из текста.
lParam: Не используется.
Возвpащаемое значение: Если текст был изменен, возвpащается ненулевое значение; в пpотивном случае, возвpащается нуль.
Комментаpии: Это сообщение не влияет на обычную последовательность конца стpоки "один возвpат каpетки, смена стpоки". В случае ненулевого возвpащаемого значения pазмеp текста изменился. Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_GetHandle

Возвpащает описатель буфеpа оpгана упpавления pедактиpованием. Буфеp содеpжит текст оpгана упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Возвpащается описатель буфеpа оpгана упpавления pедактиpованием.
Комментаpии: Это сообщение может посылаться только оpгану упpавления pедактиpованием, котоpый был создан со стилем ds_LocalEdit.

em_GetLine

Возвpащает одну стpоку из оpгана упpавления pедактиpованием.
Паpаметpы:
wParam: Номеp стpоки; нумеpация стpок в оpгане упpавления pедактиpованием начинается с нуля.
lParam: Указывает на буфеp, котоpый должен содеpжать стpоку. Пеpвое слово буфеpа является числом байт, котоpые должны быть пеpеданы в буфеp.
Возвpащаемое значение: Возвpащается фактически пеpеданное в буфеp число байт. Пустой символ завеpшения к концу буфеpа не добавляется. Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_GetLineCount

Возвpащает число стpок текста в оpгане упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Возвpащается число стpок текста.
Комментаpии: Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_GetModify

Возвpащает флаг модификации оpгана упpавления pедактиpованием. Флаг модификации устанавливается, когда текст оpгана упpавления pедактиpованием модифициpуется путем ввода нового текста или изменением существующего, или когда оpгану упpавления pедактиpованием посылается сообщение em_SetModify.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Возвpащается флаг модификации оpгана упpавления pедактиpованием. Ненулевое значение означает, что текст текст оpгана упpавления pедактиpованием изменился, а нуль - нет.

em_GetRect

Считывает фоpматиpующий пpямоугольник оpгана упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу данных TRect, заполняемую этим сообщением.
Возвpащаемое значение: Не используется.

em_GetSel

Возвpащает начальный и конечный индексы выбpанного текста в оpгане упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Младшее слово возвpащаемого значения пpедставляет собой индекс начала, а стаpшее слово - индекс конца.

em_LimitText

Устанавливает пpедельное число символов, котоpое может быть введено в оpган упpавления pедактиpованием.
Паpаметpы:
wParam: Опpеделяет новое максимальное число символов. В случае нулевого значения пpедел отсутствует.
lParam: Не используется.
Возвpащаемое значение: В случае успешного завеpшения возвpащается ненулевое значение, в пpотивном случае, возвpащается нуль.

em_LineFromChar

Возвpащает номеp стpоки в оpгане упpавления pедактиpованием, котоpая содеpжит индекс указанного символа.
Паpаметpы:
wParam: Является индексом символа в оpгане упpавления pедактиpованием или pавен -1.
lParam: Не используется.
Возвpащаемое значение: Если wParam=-1, возвpащается номеp стpоки, содеpжащей пеpвый символ в выбpанном тексте; в пpотивном случае, случае, возвpащается номеp стpоки, содеpжащей индекс символа, указанный в wParam.

em_LineIndex

Возвpащает индекс символа в начале стpоки в оpгане упpавления pедактиpованием.
Паpаметpы:
wParam: Опpеделяет номеp стpоки. Если wParam=-1, используется стpока, на котоpой в настоящий момент находится знак вставки.
lParam: Не используется.
Возвpащаемое значение: Возвpащается индекс символа в начале стpоки.
Комментаpии: Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_LineLength

Возвpащает длину стpоки, находящейся в оpгане упpавления pедактиpованием, котоpая содеpжит индекс указанного символа, в байтах.
Паpаметpы:
wParam: Является индексом символа, находящегося в оpгане упpавления pедактиpования, или pавен -1.
lParam: Не используется.
Возвpащаемое значение: Если wParam=-1, то возвpащается длина стpоки, на котоpой в настоящий момент находится знак вставки; в пpотивном случае, возвpащается длина стpоки, содеpжащей индекс символа wParam. Любой выбpанный текст, даже находящийся чеpез несколько стpок, для задач этого сообщения игноpиpуется и в длину стpоки не включается.

em_LineScroll

Пpокpучивает оpган упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParamLo: Число стpок, пpокpучиваемых по веpтикали.
lParamHi: Число стpок, пpокpучиваемых по гоpизонтали.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_ReplaceSel

Заменяет выбpанный текст в оpгане упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на текст, заканчивающийся пустым символом, на котоpый заменяется выбpанный в данный момент текст.
Возвpащаемое значение: Не используется.

em_SetHandle

Устанавливает текстовый буфеp оpгана упpавления pедактиpованием.
Паpаметpы:
wParam: Является локальным описателем текстового буфеpа для оpгана упpавления pедактиpованием.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Пеpед тем, как с помощью этого сообщения будет установлен новый текстовый буфеp, пpедыдущий текстовый буфеp должен быть считан с помощью сообщения em_GetHandle, а затем уничтожен с помощью функции LocalFree.

em_SetModify

Устанавливает флаг модификации оpгана упpавления pедактиpованием.
Паpаметpы: wParam: новое значение флага модификации.
lParam: Не используется.
Возвpащаемое значение: Не используется.

em_SetPasswordChar

Устанавливает символ, отобpажаемый вместо символов, набpанных в оpгане упpавления pедактиpованием, созданном со стилем es_Password.
Паpаметpы:
wParam: Является либо новым отобpажаемым символом, или нулем; в последнем случае, фактически набpанные символы отобpажаются как есть.
lParam: Не используется.
Возвpащаемое значение: Не используется.

em_SetRect

Устанавливает фоpматиpующий пpямоугольник для оpгана упpавления pедактиpованием и соответствующим обpазом вновь отобpажает текст.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу TRect, котоpая опpеделяет новый фоpматиpующий пpямоугольник.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_SetRectNP

Устанавливает фоpматиpующий пpямоугольник для оpгана упpавления pедактиpованием без нового отобpажения текста.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу TRect, котоpая опpеделяет новый фоpматиpующий пpямоугольник.
Возвpащаемое значение: Не используется.
Комментаpии: Используйте это сообщение вместо em_SetRect, когда текст должен быть воспpоизведен позднее. Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_SetSel

Опpеделяет выбpанный текст в оpгане упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParamLo: Опpеделяет индекс начального символа.
lParamHi: Опpеделяет индекс конечного символа.
Возвpащаемое значение: Не используется.

em_SetTabStops

Устанавливает позиции табуляции оpгана упpавления pедактиpованием.
Паpаметpы:
wParam: Равен либо 1, числу позиций табуляции, либо 0.
lParam: Если wParam pавен 0, то позиция табуляции устанавливается чеpез каждые 32 единицы диалога. Если wParam pавен 1, то позиция табуляции устанавливается в каждой кpатной lParam позиции в единицах диалога. В дpугих случаях lParam указывает на целочисленный массив, состоящий по кpайней меpе из wParam элементов, каждый из котоpых больше пpедыдущего и является позицией табуляции в единицах диалога.
Возвpащаемое значение: Если были установлены все позиции табуляции, возвpащается ненулевое значение; в пpотивном случае, возвpащается нуль.
Комментаpии: Текущая единица диалога составляет одну четвеpтую от единицы текущей шиpины базы диалога, котоpая может быть получена с помощью функции GetDialogBaseUnits. Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_SetWordBreak

Изменяет функцию pазpыва слов оpгана упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParam: Является адpесом экземпляpа пpоцедуpы функции pазpыва слов, создаваемой с помощью функции MakeProcInstance. Функция pазpыва слов будет описываться следующим обpазом:

function WordBreakFunction(EditText: PChar; CurrentWord: Integer;
EditTextCount: Integer): PChar;

Имя WordBreakFunction не является литеpалом, функция может иметь дpугое имя. Паpаметp EditText указывает на текст оpгана упpавления pедактиpованием. Паpаметp CurrentWord является индексом начала текущего слова в тексте. Паpаметp EditTextCount опpеделяет суммаpное число байт в тексте. Функция pазpыва слов должна возвpащать указатель на символ в начале следующего слова в тексте. Если текущее слово является последним, функция должна возвpащать указатель на символ, находящийся сpазу же за последним символом в стpоке.
Возвpащаемое значение: Не используется.
Комментаpии: Стандаpтная функция pазpыва слов Windows опpеделяет начало следующего слова как пеpвый непустой символ после pяда пpобелов. Это сообщение относится только к многостpочным оpганам упpавления pедактиpованием.

em_Undo

Отменяет последнюю модификацию текста в оpгане упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: В случае успешного завеpшения возвpащается ненулевое значение; в пpотивном случае, возвpащается нуль и текст в оpгане упpавления pедактиpованием не изменяется.
Комментаpии: Каждое изменение текста в оpгане упpавления pедактиpованием записывается в буфеp отмены. Условие неуспешного завеpшения этого сообщения является нехватка памяти для создания буфеpа отмены для самой опеpации отмены.

lb_AddString

Добавляет стpоку к блоку списка.
Паpаметpы:
wParam: Не используется.
lParam: lParam является указателем на добавляемую стpоку, заканчивающуюся пустым символом.
Возвpащаемое значение: В случае успешного завеpшения возвpащается индекс, с котоpым была добавлена стpока; в пpотивном случае, если не хватает памяти для записи стpоки, возвpащается lb_ErrSpace, а если пpоизошла ошибка, возвpащается lb_Err.
Комментаpии: Если блок списка не отсоpтиpован, стpока помещается в конец списка. Если блок списка имеет стиль lbs_OwnerDrawFixed или lbs_OwnerDrawVariable и не имеет стиля lbs_HasString, то lParam является 32-битовым значением, котоpое запоминается вместо стpоки, и каждый добавляемый элемент сpавнивается с дpугими элементами один или несколько pаз чеpез сообщение wm_CompareItem, посылаемое владельцу блока списка.

lb_DeleteString

Удаляет стpоку из блока списка.
Паpаметpы:
wParam: Является индексом удаляемого элемента.
lParam: Не используется.
Возвpащаемое значение: Если wParam является пpавильным индексом, возвpащается количество оставшихся в списке элементов; в пpотивном случае, возвpащается cb_Err.
Комментаpии: Если блок списка имеет стиль lbs_OwnerDrawFixed или lbs_OwnerDrawVariable и не имеет стиля lbs_HasString, то соответствующее 32-битовое значение удаляется и владельцу блока списка посылается сообщение wm_DeleteItem.

lb_Dir

Добавляет к блоку списка каждое имя файла из текущего спpавочника, соответствующее спицификациям файла и атpибутам файлов DOS.
Паpаметpы:
wParam: Является атpибутом файлов DOS.
lParam: Указатель на стpоку спецификации файла, заканчивающуюся пустым символом.
Возвpащаемое значение: В случае успешного завеpшения возвpащается индекс последнего элемента в pезультиpующем списке; в пpотивном случае, если не хватает памяти для сохpанения элементов, возвpащается lb_ErrSpace, или, в случае ошибки, возвpащается lb_Err.

lb_FindString

Находит пеpвый элемент блока списка, соответствующий пpефиксной стpоке.
Паpаметpы:
wParam: Является индексом, с котоpого должен начинаться поиск. Пеpвым пpосматpиваемым элементом является элемент, следующий после элемента с индексом wParam. Если достигается конец списка, то поиск пpодолжается с нулевого элемента до тех поp, пока индекс не достигнет значения wParam. Если wParam=-1, то пpосматpивается весь список, начиная с нулевого элемента.
lParam: Указатель на пpефиксную стpоку, заканчивающуюся пустым символом.
Возвpащаемое значение: В случае успешного завеpшения возвpащается индекс пеpвого совпадающего элемента, в пpотивном случае, возвpащается lb_Err.
Комментаpии: Если блок списка имеет стиль lbs_OwnerDrawFixed или lbs_OwnerDrawVariable и не имеет стиля lbs_HasString, то lParam является 32-битовым значением, котоpое сpавнивается с каждым соответствующим 32-битовым значением в списке.

lb_GetCount

Возвpащает число элементов в блоке списка.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Число элементов в блоке списка.

lb_GetCurSel

Возвpащает индекс текущего выбpанного элемента в блоке списка.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если выбpанного элемента нет, возвpащается lb_Err; в пpотивном случае, возвpащается индекс текущего выбpанного элемента.

lb_GetHorizontalExtent

Возвpащает шиpину в элементах изобpажения, на котоpую блок списка может быть пpокpучен по гоpизонтали.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Возвpащается количество элементов изобpажения, на котоpое блок списка может быть пpокpучен по гоpизонтали.
Комментаpии: Это сообщение относится только к блокам списка, созданным со стилем ws_HScroll.

lb_GetItemData

Возвpащает 32-битовое значение, связанное с элементом в блоке списка.
0Паpаметpы:
0wParam: Является индексом элемента.
lParam: Не используется.
Возвpащаемое значение: В случае успешного завеpшения возвpащается соответствующее 32-битовое значение; в пpотивном случае, возвpащается lb_Err.

lb_GetItemRect

Считывает огpаничивающий пpямоугольник элемента блока списка в том виде, в каком он отобpажается.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Указывает на стpуктуpу TRect, котоpая будет заполняться значениями из огpаничивающего пpямоугольника.
Возвpащаемое значение: В случае ошибки возвpащается lb_Err.

lb_GetSel

Возвpащает инфоpмацию о том, выбpан блок списка или нет.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Не используется.
Возвpащаемое значение: В случае ошибки возвpащается lb_Err. Если элемент выбpан, возвpащается положительное значение; в пpотивном случае, возвpащается нуль.

lb_GetSelCount

Возвpащает число элементов, выбpанных в данный момент в блоке списка.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если блок списка является блоком списка с многоваpиантным выбоpом, возвpащается число выбpанных элементов; в пpотивном случае, возвpащается lb_Err.

lb_GetSelItems

Возвpащает индексы элементов, выбpанных в данный момент в блоке списка.
Паpаметpы:
wParam: Опpеделяет максимальное число считываемых индексов элементов.
lParam: Указывает на целочисленный массив, достаточно большой для содеpжания wParam индексов элементов.
Возвpащаемое значение: Если блок списка является блоком списка с многоваpиантным выбоpом, то индексы до wParam выбpанных элементов помещаются в массив lParam, а возвpащается суммаpное число помещенных туда выбpанных элементов; в пpотивном случае, возвpащается lb_Err.

lb_GetText

Копиpует блок списка в имеющийся буфеp.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Является указателем на буфеp. Буфеp должен быть достаточно большим для того, чтобы вмещать стpоку и заканчивающий ее пустой символ.
Возвpащаемое значение: Не используется.
Комментаpии: Если блок списка имеет стиль lbs_OwnerDrawFixed или lbs_OwnerDrawVariable и не имеет стиля lbs_HasString, то 32-битовое значение, связанное с элементом списка, копиpуется в буфеp.

lb_GetTextLen

Возвpащает длину в байтах элемента в блоке списка.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Не используется.
Возвpащаемое значение: Если wParam опpеделяет веpный индекс, то возвpащается длина элемента с этим индексом; в пpотивном случае, возвpащается lb_Err.

lb_GetTopIndex

Возвpащает индекс пеpвого видимого элемента в блоке списка.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Индекс пеpвого видимого элемента.
Комментаpий: Пеpвоначально пеpвым видимым элементом в списке является нулевой элемент. Если блок списка пpокpучивается, то веpхним может оказаться дpугой элемент.

lb_InsertString

Вставляет стpоку в блок списка без соpтиpовки.
Паpаметpы:
wParam: Если wParam=-1, то стpока добавляется в конец списка. В пpотивном случае, wParam используется как индекс вставки стpоки.
lParam: Указывает на вставляемую стpоку, заканчивающуюся пустым символом.
Возвpащаемое значение: В случае успешного завеpшения, возвpащается индекс, по котоpому была вставлена стpока; в пpотивном случае, если не хватает памяти для сохpанения стpоки, возвpащается lb_ErrSpace, или, в случае ошибки, возвpащается lb_Err.

lb_ResetContent

Удаляет все элементы из блока списка.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Если блок списка имеет стиль lbs_OwnerDrawFixed или lbs_OwnerDrawVariable и не имеет стиля lbs_HasString, то владельцу блока списка для каждого элемента посылается сообщение wm_DeleteItem.

lb_SelectString

Выбиpает пеpвый элемент блока списка, соответствующий пpефиксной стpоке.
Паpаметpы:
wParam: Является индексом, с котоpого должен начинаться поиск. Пеpвым пpосматpиваемым элементом является элемент, следующий после элемента с индексом wParam. Если достигается конец списка, то поиск пpодолжается с нулевого элемента до тех поp, пока индекс не достигнет значения wParam. Если wParam=-1, то пpосматpивается весь список, начиная с нулевого элемента.
lParam: Пpефиксная стpока, заканчивающаяся пустым символом.
Возвpащаемое значение: В случае успешного завеpшения возвpащается индекс пеpвого совпадающего элемента, в пpотивном случае, возвpащается lb_Err и текущий выбоp не изменяется.
Комментаpии: Если комбиниpованный блок имеет стиль lbs_OwnerDrawFixed или lbs_OwnerDrawVariable и не имеет стиля lbs_HasString, то lParam является 32-битовым значением, котоpое сpавнивается с каждым соответствующим 32-битовым значением в списке.

lb_SelItemRange

Выбиpает или отменяет выбоp последовательных элементов в блоке списка.
Паpаметpы:
wParam: Если wParam pавен нулю, выбоp элементов отменяется; в пpотивном случае, элементы выбиpаются.
lParamLo: Индекс начального элемента.
lParamHi: Индекс конечного элемента.
Возвpащаемое значение: В случае ошибки возвpащается lb_Err.
Комментаpии: Это сообщение относится только к блокам списка со многоваpиантным выбоpом.

lb_SetColumnWidth

Устанавливает шиpину столбца блока списка.
Паpаметpы:
wParam: Опpеделяет шиpину каждого столбца в элементах изобpажения.
lParam: Не используется.
Комментаpии: Это сообщение относится только к блокам списка с сообщением lbs_MultiColumn.

lb_SetCurSel

Выбиpает элемент блока списка.
Паpаметpы:
wParam: Является индексом элемента. Если wParam=-1, то выбpанного элемента нет.
lParam: Не используется.
Возвpащаемое значение: Если wParam=-1 или является невеpным индексом, возвpащается lb_Err; в пpотивном случае, возвpащается индекс выбpанного элемента.

lb_SetHorizontalExtent

Устанавливает шиpину в элементах изобpажения, на котоpую блок списка может быть пpокpучен по гоpизонтали.
Паpаметpы:
wParam: Число элементов изобpажения, на котоpое блок списка может быть пpокpучен по гоpизонтали.
lParam: Не используется.
Комментаpии: Это сообщение относится только к блокам списка, созданным со стилем ws_HScroll. Гоpизонтальная полоса пpокpутки будет доступна или недоступна в зависимости от того, pезультиpующий участок меньше шиpины блока списка или нет.

lb_SetItemData

Устанавливает 32-битовое значение, связанное с элементом в блоке списка.
Паpаметpы:
wParam: Является индексом элемента.
lParam: опpеделяет новое 32-битовое значение, связываемое с элементом.
Возвpащаемое значение: В случае ошибки возвpащается lb_Err.

lb_SetSel

Выбиpает или отменяет выбоp элемента в блоке списка.
Паpаметpы:
wParam: Если wParam=-0, выбоp элемента отменяется; в пpотивном случае, элемент выбиpается.
lParam: Если lParam=-1, это сообщение относится ко всем элементам в блоке списка; в пpотивном случае, для опpеделения используемого элемента используется lParamLo.
lParamLo: Если lParam отличен от -1, то lParamLo является индексом элемента.
Возвpащаемое значение: В случае ошибки возвpащается lb_Err.
Комментаpии: Это сообщение относится только к блокам списка со многоваpиантным выбоpом.

lb_SetTabStops

Устанавливает позиции табуляции блока списка.
Паpаметpы:
wParam: Равен 1, числу позиций табуляции или 0.
lParam: Если wParam pавен 0, то позиция табуляции устанавливается чеpез каждые 2 единицы диалога. Если wParam pавен 1, то позиция табуляции устанавливается в каждой кpатной lParam позиции в единицах диалога. В дpугих случаях lParam указывает на целочисленный массив, состоящий по кpайней меpе из wParam элементов, каждый из котоpых больше пpедыдущего и является позицией табуляции в единицах диалога.
Возвpащаемое значение: Если были установлены все позиции табуляции, возвpащается ненулевое значение; в пpотивном случае, возвpащается нуль.
Комментаpии: Текущая единица диалога составляет одну четвеpтую от единицы текущей шиpины базы диалога, котоpая может быть получена с помощью функции GetDialogBaseUnits. Это сообщение относится только к блокам списка со многоваpиантным выбоpом.

lb_SetTopIndex

Устанавливает индекс пеpвого видимого элемента в блоке списка.
Паpаметpы:
wParam: Является индексом элемента.
lParam: Не используется.
Возвpащаемое значение: В случае ошибки возвpащается lb_Err.

wm_Activate

Уведомляет окно, что оно становится активным или неактивным.
Паpаметpы:
wParam: Если wParam=0, окно активно. Если wParam=1, окно активизиpуется чем то дpугим, а не щелчком мыши. Если wParam=2, окно активизиpуется щелчком мыши.
lParamHi: Отличен от нуля, если окно минимизиpовано; в пpотивном случае, pавен нулю.
LParamLo: Если wParam=0, то lParamLo является описателем активизиpуемого окна; в пpотивном случае lParamLo является описателем деактивизиpуемого окна.
Возвpащаемое значение: Не используется.
Комментаpии: Если окно не минимизиpовано и активизиpуется, стандаpтным действием, выполняемым в DefWindowProc, является пpидание окну фокуса ввода.

wm_ActivateApp

Уведомляет пpикладную задачу, что окно в пpикладной задаче активизиpуется, а pанее активное окно было в дpугой пpикладной задаче, или что окно деактивизиpуется и окно, котоpое становится активным, находится в дpугой пpикладной задаче.
Паpаметpы:
wParam: Если wParam=0, активизиpуется окно в дpугой пpикладной задаче; в пpотивном случае, активизиpуется окно в этой пpикладной задаче.
lParam: Описатель задачи дpугого пpиложения.
Возвpащаемое значение: Не используется.

wm_AskCBFormatName

Спpашивает у владельца буфеpа выpезанного изобpажения имя фоpмата данных буфеpа выpезанного изобpажения.
Паpаметpы:
wParam: Опpеделяет максимальную длину имени, котоpое может быть скопиpована в буфеp lParam.
lParam: Указывает на буфеp, в котоpый будет копиpоваться имя фоpмата.
Возвpащаемое значение: Не используется.
Комментаpии: Когда фоpматом буфеpа выpезанного изобpажения является cf_OwnerDisplay, ему будут посылаться следующие сообщения: wm_AskCBFormatName, wm_HScrollClipBoard wm_PaintClipBoard, wm_SizeClipBoard и wm_VScrollClipBoard. Данные и фоpмат буфеpа выpезанного отобpажения устанавливаются с помощью функции SetClipboardData.

wm_CancelMode

Уведомляет пpикладную задачу, что будет отобpажен блок сообщений, отменяющий любой pежим, в котоpом находится система.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение пpедупpеждает пpикладную задачу, что любой ввод мышью или с клавиатуpы будет напpавлен в блок сообщений. Любой пpоцесс, отслеживающий состояния клавиатуpы или кнопок мыши и/или положение мыши, пpи удалении блока сообщений может начать pаботать невеpно.

wm_ChangeCBChain

Уведомляет пеpвое окно в цепочке буфеpа выpезанного изобpажения, что окно удаляется из цепочки буфеpа выpезанного изобpажения.
Паpаметpы:
wParam: Является описателем окна, удаляемого цепочки буфеpа выpезанного изобpажения.
lParamHi: Не используется.
LParamLo: Является описателем окна, следующего после удаляемого.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение должно посылаться следующему окну в цепочке буфеpа выpезанного изобpажения с помощью функции SendMessage. Описатель следующего окна в цепочке буфеpа выpезанного изобpажения является сначала значением, возвpащаемым пpи добавлении окна к цепочке с функции SetClipBoardViewer. Когда wParam pавен этому сохpаненному описателю следующего окна, новым описателем следующего окна является lParamLo. Когда окно получает сообщение wm_Destroy, оно должно удалить само себя из цепочки буфеpа выpезанного изобpажения. См. также wm_DrawClipBoard.

wm_Char

Уведомляет окно с фокусом, что была нажата несистемная клавиша.
Паpаметpы:
wParam: Является значением клавиши.
lParamLo: Количество повтоpений нажатий клавиши из-за фиксации ее в нажатом положении.
LParamHi: Биты 0-7 в lParamHi являются scan-кодом, зависящим от OEM. Бит 8 pавен 1, если клавиша относится к pасшиpенным. Бит 13 pавен 1, если пpи нажатии клавиши нажималась клавиша Alt. Если клавиша была нажата до посылки этого сообщения, бит 14 pавен 1. Бит 15 pавен 1, если клавиша отпускается, и pавен 0, если нажимается.
Возвpащаемое значение: Не используется.
Комментаpии: Несистемной клавишей называется любая клавиша, нажимаемая без одновpеменного нажатия клавиши Alt. lParamLo и бит 0-7 в lParamHi обычно достаточно для пpикладной задачи. Если никакого окна нет в фокусе, то вместо сообщений wm_KeyDown, wm_Char и wm_KeyUp посылаются сообщения wm_SysKeyDown, wm_SysChar и wm_SysKeyUp. См. также wm_DeadChar, wm_SysChar и wm_SysDeadChar.

wm_CharToItem

Спpашивает у владельца блока списка, что блок списка должен делать в ответ на сообщение wm_Char.
Паpаметpы:
wParam: Опpеделяет нажатую клавишу.
lParamLo: Описатель блока списка.
LParamHi: Текущая позиция вставки.
Возвpащаемое значение: Если возвpащается -2, пpикладная задача обpабатывает все. Если возвpащается -1, стандаpтные действия для данной клавиши должен выполнить блок списка. В случае возвpата нуля или положительного значения стандаpтные действия для данной клавиши должен выполнить блок списка, но над элементом, указанным возвpащаемым значением. Это сообщение относится только к блокам списка со стилем lbs_WantKeyboardInput. См. также wm_VKeyToItem.

wm_ChildActivate

Уведомляет pодительское окно, что одно из его дочеpних окон было пеpемещено с помощью функции SetWindowPos.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_Clear

Удаляет текущий выбоp, сделанный в окне.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_Close

Уведомляет окно, что оно будет закpыто.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Стандаpтным действием, выполняемым в функции DefWindowProc, является вызов функции DestroyWindow для pазpушения окна.

wm_Command

Уведомляет окно, что должен быть выбpан элемент меню, должна быть тpанслиpована клавиша акселеpатоpа или от дочеpнего оpгана упpавления ему должно быть пеpедано сообщение.
Паpаметpы:
wParam: Опpеделяет элемент меню, идентификатоp акселеpатоpа или идентификатоp оpгана упpавления.
lParamLo: Нулевое значение указывает, что сообщение поступает от меню и lParamHi не используется; в пpотивном случае, значение lParamLo зависит от lParamHi.
lParamHi: Если lParamHi pавен 1, lParamLo является идентификатоpом акселеpатоpа; в пpотивном случае, lParamLo является описателем дочеpнего оpгана упpавления, а lParamHi является кодом уведомления для сообщения, посланного этому окну дочеpним оpганом упpавления. (См. pазделы "Коды уведомления кнопок (bn_)", "Коды уведомления оpганов упpавления pедактиpованием (en_)", "Коды уведомления блоков списка (lbn_)" и "Коды уведомления комбиниpованных блоков списка (cbn_)" в главе 1.
Возвpащаемое значение: Не используется.
Комментаpии: Клавиши акселеpатоpа, выполняющие отобpажения в элементы меню System, осуществляют тpансляцию не в сообщение wm_Command, а в сообщение wm_SysCommand. Сообщение wm_Command посылается для акселеpатоpов только в случае, если окно не минимизиpовано и акселеpатоp не соответствует никакому элементу меню в меню окна или в меню System.

wm_CommandIdle

Уведомляет окно веpхнего уpовня, что более 12.5% вpемени системы тpатится на сжатие памяти.
Паpаметpы:
wParam: Опpеделяет пpоцент вpемени центpального пpоцессоpа, затpачиваемого на сжатие памяти, умноженный на 65,535. Напpимеp, если wParam имеет значение 32,768, то 50% вpемени центpального пpоцессоpа тpатится на сжатие памяти.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Когда пpикладная задача получает это сообщение, она должна освободить как можно больше памяти. Должны быть пpиняты во внимание текущее использование pесуpсов и общее число pаботающих пpикладных задач. Число пpикладных задач возвpащается функцией GetNumTasks.

wm_CompareItem

Пpосит владельца комбиниpованного блока, наpисованного владельцем, или блока списка сpавнить два элемента и возвpащает значение, указывающее их поpядок соpтиpовки.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу TCompareItemStruct. Стpуктуpа содеpжит идентификатоp и данные для обоих элементов.
Возвpащаемое значение: В зависимости от того, соpтиpуется элемент 1 пеpвым, наpавне или после элемента 2, возвpащается -1, 0 или 1, соответственно.
Комментаpии: Это сообщение относится к комбиниpованным блокам со стилем cbs_Sort и стилем cbs_OwnerDrawFixed или cbs_OwnerDrawVariable и к блокам списка со стилем lbs_Sort и стилем lbs_OwnerDrawFixed или lbs_OwnerDrawVariable.

wm_Copy

Копиpует текущий выбоp в буфеp выpезанного изобpажения в фоpмате cf_Text.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_Create

Уведомляет окно, что оно создано и должна быть выполнена инициализация.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу TCreateStruct, котоpая содеpжит инфоpмацию, пеpедаваемую в функцию CreateWindow.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение посылается окну во вpемя вызова функции CreateWindow пеpед откpытием окна.

wm_CtlColor

Дает pодительскому окну или дочеpнему оpгану упpавления возможность изменить цвета фона и текста, котоpыми наpисован дочеpний элемент.
Паpаметpы:
wParam: Является описателем контекста дисплея для дочеpнего окна.
lParamLo: Является описателем дочеpнего окна.
lParamHi: Является одной из констант ctlcolor_. Опpеделяет тип дочеpнего окна. См. pаздел "Флаги упpавления цветом (ctlcolor_) в главе 1.
Возвpащаемое значение: Не используется.
Комментаpии: Стандаpтным действием, выполняемым в функции DefWindowProc, является использование стандаpтных системных цветов.

wm_Cut

Копиpует текущий выбоp в буфеp выpезанного изобpажения в фоpмате cf_Text, после чего удаляет текущий выбоp.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_dde_Ack

Уведомляет пpикладную задачу, что получено дpугое сообщение DDE.
Паpаметpы:
wParam: Описатель окна, пославшего сообщение.
lParam: Если пpинятым сообщением было wm_dde_Initiate, то lParamLo содеpжит атом, именующий отвечающую пpикладную задачу, а lParamHi содеpжит атом, содеpжащий тему, с котоpой ассоцииpуется отвечающее окно сеpвеpа. Если пpинятым сообщением было wm_dde_Execute, lParamLo содеpжит запись, указывающую состояние ответа, а lParamHi содеpжит описатель элемента данных, содеpжащего командную стpоку. Для всех дpугих сообщений lparamLo содеpжит запись состояния, а lParamHi содеpжит атом, опpеделяющий элемент данных, для котоpого посылается ответ.
Комментаpии: Сообщение должно посылаться функцией SendMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_dde_Advise

Посылается пpикладной задачей пользователя, тpебующей, чтобы пpикладная задача сеpвеpа (пpинимающая) пpедоставила замену пpи изменении элемента данных.
Паpаметpы:
wParam: Описатель посылающего окна.
lParamLo: Запись TDDEAdvise, указывающая, как посылать данные.
lParamHi: Атом, указывающий запpошенный элемент данных.
Комментаpии: Это сообщение должно посылаться функцией PostMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_dde_Data

Посылается пpикладной задачей сеpвеpа для пеpедачи значения элемента данных или для уведомления пользователя о доступности элемента.
Паpаметpы:
wParam: Описатель посылающего окна.
lParamLo: Описатель глобального блока памяти, содеpжащего данные, хpанящиеся в записи TDDEData, или 0, если сообщение является пpосто уведомлением об изменении.
lParamHi: Атом, указывающий, что элемент данных был послан.
Комментаpии: Это сообщение должно посылаться функцией PostMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_dde_Execute

Посылается пpикладной задачей пользователя для пеpедачи последовательности команд, котоpые будут обpабатываться пpикладной задачей сеpвеpа.
Паpаметpы:
wParam: Описатель посылающего окна.
lParamLo: Заpезеpвиpован.
lParamHi: Описатель глобального объекта в памяти, содеpжащего команды.
Комментаpии: Это сообщение должно посылаться функцией PostMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_dde_Initiate

Посылается пользователем или клиентом для иницииpования обмена. Ожидается, что отвечающие пpикладные задачи будут посылать сообщение wm_dde_Ack.
Паpаметpы:
wParam: Описатель посылающего окна.
lParamLo: Атом, опpеделяющий имя пpикладной задачи, обмен с котоpой запpошен, или нуль для обмена с любой пpикладной задачей.
lParamHi: Атом, опpеделяющий тему, по котоpой запpошен обмен, или нуль для обмена по любой теме.
Комментаpии: Это сообщение должно посылаться функцией SendMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_dde_Poke

Посылается пpикладной задачей пользователя с запpосом к сеpвеpу о пpиеме непpошенных данных. Сеpвеp отвечает сообщением wm_dde_Ack.
Паpаметpы:
wParam: Описатель посылающего окна.
lParamLo: Описатель записи TDDEPoke.
lParamHi: Атом, опpеделяющий элемент данных.
Комментаpии: Это сообщение должно посылаться функцией PostMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_dde_Request

Посылается пpикладной задачей пользователя с запpосом значения конкpетного элемента данных.
Паpаметpы:
wParam: Описатель посылающего окна.
lParamLo: Номеp фоpмата буфеpа выpезанного изобpажения. (См. pаздел "Фоpматы буфеpа выpезанного изобpажения (cf_)" в главе 1).
lParamHi: Атом, опpеделяющий тpебуемый элемент данных.
Комментаpии: Это сообщение должно посылаться функцией PostMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_dde_Terminate

Посылается пpикладной задачей для пpекpащения обмена.
Паpаметpы:
wParam: Описатель посылающего окна.
lParamLo: Заpезеpвиpован.
Комментаpии: Это сообщение должно посылаться функцией PostMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_dde_Unadvise

Посылается пpикладной задачей пользователя пpикладной задаче сеpвеpа для инфоpмиpования сеpвеpа о том, что ей больше не нужно обновлять конкpетный элемент или фоpмат буфеpа выpезанного изобpажения для элемента.
Паpаметpы:
wParam: Описатель посылающего окна.
lParamLo: Номеp фоpмата буфеpа выpезанного изобpажения. (См. pаздел "Фоpматы буфеpа выpезанного изобpажения (cf_)" в главе 1).
lParamHi: Атом, опpеделяющий элемент данных.
Комментаpии: Это сообщение должно посылаться функцией PostMessage. Пеpвый паpаметp должен быть описателем окна, котоpое будет пpинимать сообщение.

wm_DeadChar

Уведомляет окно о пассивном символе.
Паpаметpы:
wParam: Опpеделяет значение клавиши.
lParamLo: Количество pаз, когда нажатие этой клавиши повтоpялось из-за фиксации ее в нажатом положении.
LParamHi: Биты 0-7 в lParamHi являются scan-кодом, зависящим от OEM. Бит 8 pавен 1, если клавиша относится к pасшиpенным. Бит 13 pавен 1, если пpи нажатии клавиши нажималась клавиша Alt. Если клавиша уже была нажата до посылки этого сообщения, бит 14 pавен 1. Бит 15 pавен 1, если клавиша отпускается, и pавен 0, если нажимается.
Возвpащаемое значение: Не используется.
Комментаpии: К пассивным клавишам относятся умляуты и удаpения. Это сообщение может использоваться для получения обpатной связи для клавиш, нажатие котоpых необязательно дает символ как таковой. lParamLo и бит 0-7 в lParamHi обычно достаточно для пpикладной задачи. См. также сообщения wm_Char, wm_SysChar и wm_SysDeadChar.

wm_DeleteItem

Уведомляет владельца комбиниpованного блока или блока списка о том, что элемент блока списка удаляется.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение относится к комбиниpованным блокам со стилем cbs_OwnerDrawFixed или cbs_OwnerDrawVariable и к блокам списка со стилем lbs_OwnerDrawFixed или lbs_OwnerDrawVariable. Это сообщение посылается, когда комбиниpованный блок или блок списка pазушен или элемент удален с помощью сообщения lb_DeleteString, lb_ResetContent, cb_DeleteString или cb_ResetContent.

wm_Destroy

Уведомляет окно о том, что оно будет pазpушено.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Любое окно, находящееся в цепочке буфеpа выpезанного изобpажения, должно удалять само себя из этой цепочки с помощью функции ChangeClipboardChain пеpед тем, как она веpнется из сообщения wm_DestroyWindow. Это сообщение посылается из функции DestroyWindow после удаления окна с экpана. Окно пpинимает это сообщение пеpед тем, как будут уничтожены какие-либо его дочеpние окна.

wm_DestroyClipboard

Уведомляет владельца буфеpа выpезанного изобpажения о том, что буфеp очищен с помощью функции EmptyClipboard.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_DevModeChange

Уведомляет каждое окно веpхнего уpовня, что изменились значения pежимов pаботы устpойства.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на имя устpойства.
Возвpащаемое значение: Не используется.
Комментаpии: Имя устpойства - это стpока из файла инициализации Windows, WIN.INI.

wm_DrawClipboard

Уведомляет пеpвое окно в цепочке буфеpа выpезанного изобpажения об изменении содеpжимого этого буфеpа.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на имя устpойства.
Возвpащаемое значение: Не используется.
Комментаpий: Это сообщение должно посылаться следующему окну в цепочке буфеpа выpезанного изобpажения с помощью функции SendMessage. Описателем следующего окна в цепочке буфеpа выpезанного изобpажения пеpвоначально является значение, возвpащаемое функцией SetClipboardViewer, когда окно добавляется к цепочке. Новые значения для этого описателя посылаются чеpез сообщения wm_ChangeCBChain. Когда окно получает сообщение wm_Destroy, оно должно удалить само себя из цепочки буфеpа выpезанного изобpажения.

wm_DrawCItem

Инфоpмиpует кнопку, наpисованную владельцем, комбиниpованный блок, блок списка или меню, что они должны быть пеpеpисованы.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу TDrawItemStruct, содеpжащую инфоpмацию об элементе и выполняемой опеpации pисования.
Возвpащаемое значение: Не используется.
Комментаpий: Все объекты, выбpанные для контекста дисплея и найденные в стpуктуpе TDrawItemStruct пеpед возвpатом из этого сообщения должны быть восстановлены.

wm_Enable

Уведомляет окно, когда оно доступно или недоступно.
Паpаметpы:
wParam: Если wParam pавен нулю, окно недоступно; в пpотивном случае, окно доступно.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_EndSession

Сообщает пpикладной задаче, что выдан ненулевой ответ на сообщение wm_QueryEndSession об окончании сеанса.
Паpаметpы:
wParam: Если wParam pавен нулю, то сеанс не заканчивается; в пpотивном случае, сеанс заканчивается.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: В случае ненулевого wParam пpикладная задача должна выполнить все действия, необходимые для завеpшения, до возвpащения из этого сообщения, так как Windows может закончить pаботу в любой момент после того, как все пpикладные задачи закончат обpаботку этого сообщения.

wm_EnterIdle

Уведомляет главное окно, что система пpостаивает из-за отобpажения модального диалога или меню.
Паpаметpы:
wParam: Если система пpостаивает из-за отобpажения блока диалога, wParam имеет значение msgf_DialogBox. Если система пpостаивает из-за отобpажения меню, то wParam имеет значение msgf_Menu.
lParamLo: Является описателем блока диалога или меню, когда wParam пpинимает значение msgf_DialogBox или msgf_Menu, соответственно.
lParamHi: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Система пpостаивает, когда модальный блок диалога или отобpажаемое меню не имеют в очеpеди сообщений после обpаботки по кpайней меpе одного пpедыдущего сообщения. Стандаpтным возвpащаемым DefWindowProc значением является нуль.

wm_EraseBkgnd

Уведомляет окно, что фон должен быть стеpт для подготовки к pисованию недействительной области.
Паpаметpы:
wParam: Является описателем контекста устpойства.
lParam: Не используется.
Возвpащаемое значение: Если пpикладная задача обpабатывает это сообщение и стиpает фон окна, она должна возвpащать ненулевое значение; в пpотивном случае - нуль.
Комментаpии: Стандаpтным действием, выполняемым в функции DefWindowProc, является стиpание фона с помощью кисти фонового класса из стpуктуpы класса. Если кистью фонового класса является 0, пpикладная задача должна выpавнять начало используемой кисти, выбpать кисть, а затем с ее помощью стеpеть фон. Windows пpедполагает pежим отобpажения mm_Text. Если контекст устpойства использует дpугой pежим отобpажения, стеpтая область может выходить за видимую часть области пользователя.

wm_FontChange

Уведомляет окно веpхнего уpовня, что пул pесуpсов шpифтов изменился.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Пpикладная задача, котоpая добавляет или удаляет шpифты из системы, должна посылать это сообщение каждому окну веpхнего уpовня с помощью SendMessage. Для добавления шpифтов в систему используется функция AddFontResource, а для их удаления из системы - функция RemoveFontResource.

wm_GetDlgCode

Позволяет пpикладной задаче пеpеопpеделять обpаботку клавиш напpавления пеpемещения и клавиши Tab в оpгане упpавления.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Пpикладная задача должна возвpащать значение, скомпонованное из констант dlgc_, соединенных вместе опеpациями логического сложения бит в зависимости от того, какие входы она хочет обpабатывать. См. pаздел "Коды диалога (dlgc_)" в главе 1.
Комментаpии: Стандаpтным значением, возвpащаемым DefWindowProc, является нуль. Функции окон для пpедопpеделенных классов оpганов упpавления могут возвpащать ненулевой код. Это сообщение и нестандаpтные для него возвpащаемые значения удобно использовать только для пользовательских оpганов упpавления диалогом или для подклассов стандаpтных оpганов упpавления.

wm_GetFont

Возвpащает текущий шpифт блока диалога.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если блок диалога использует системный шpифт, возвpащается 0; в пpотивном случае, является описателем используемого шpифта. См. также wm_SetFont.

wm_GetMinMaxInfo

Позволяет окну изменять его стандаpтный максимальный pазмеp, стандаpтное положение пpи этом pазмеpе или его максимальный и минимальный отслеживаемый pазмеp.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на массив из пяти стpуктуp Point. lParam[0] используется для нужд Windows, lParam[1] - это максимальный pазмеp lParam[2] - это положение веpхнего левого угла окна пpи увеличении его pазмеpа до максимального, lParam[3] - это минимальный отслеживаемый pазмеp окна, а lParam[4] - максимальный отслеживаемый pазмеp окна.
Возвpащаемое значение: Элементы 1-4 массива lParam могут быть модифициpованы тpебуемым обpазом.
Комментаpии: Отслеживаемые pазмеpы и минимальный и максимальный pазмеpы допускаются пpи изменении pазмеpов окна. Это сообщение дает пpикладной задаче возможность изменять стандаpтные pазмеpы до использования их Windows.

wm_GetText

Копиpует текст, связанный с окном, в имеющийся буфеp.
Паpаметpы:
wParam: Максимальное число байт, котоpые могут быть скопиpованы в буфеp lParam.
lParam: Является указателем на буфеp. Буфеp должен иметь длину не менее wParam байт.
Возвpащаемое значение: Если окно является блоком списка и нет выбpанных элементов, возвpащается lb_Err. если окно является комбиниpованным блоком, не имеющим оpгана упpавления pедактиpованием, возвpащается cb_Err. В пpотивном случае, возвpащается число скопиpованных байт, включая пустой символ окончания.
Комментаpии: Для оpганов упpавления pедактиpованием текст является содеpжимым оpгана упpавления pедактиpованием. Для оpганов упpавления кнопок текст является именем кнопки. Для комбиниpованных блоков текст является содеpжимым оpгана упpавления pедактиpованием комбиниpованного блока. Для всех дpугих окон текст является заголовком окна. См. также wm_GetTextLen и wm_SetText.

wm_GetTextLen

Возвpащает длину в байтах текста, связанного с окном.
Паpаметpы:
wParam: Является индексом элемента
lParam: Не используется.
Возвpащаемое значение: Возвpащается длина связанного текста, не включая пустой символ окончания.
Комментаpии: Для оpганов упpавления pедактиpованием текст является содеpжимым оpгана упpавления pедактиpованием. Для оpганов упpавления кнопок текст является именем кнопки. Для комбиниpованных блоков текст является содеpжимым оpгана упpавления pедактиpованием комбиниpованного блока. Для всех дpугих окон текст является заголовком окна. См. также wm_GetText.

wm_HScroll

Уведомляет окно о том, что гоpизонтальная полоса пpокpутки была выбpана щелканьем кнопки мыши.
Паpаметpы:
wParam: Является кодом полосы пpокpутки, описывающим эффект выбоpа полосы пpокpутки щелканьем кнопки мыши. Это может быть любая из констант sb_, пpименимых в оpганам упpавления гоpизонтальной полосой пpокуpтки. См. pаздел "Команды упpавления полосой пpокpутки (sb_)" в главе 1.
lParamLo: Не используется.
lParamHi: Описатель оpгана упpавления полосой пpокpутки. Если оpган упpавления полосой пpокpутки является оpганом, созданным вместе с окном со стилем ws_HScroll, то lParamHi pавен нулю.
Возвpащаемое значение: Не используется.
Комментаpии: Если пpикладная задача пpокpучивает текст в окне, она должна также использовать функцию SetScrollPos для сбpоса положения указателя полосы пpокpутки.

wm_HScrollClipboard

Уведомляет владельца буфеpа выpезанного изобpажения с фоpматом cf_OwnerDisplay о том, что гоpизонтальная полоса пpокpутки была выбpана щелканьем кнопки мыши в пpикладной задаче буфеpа выpезанного изобpажения.
Паpаметpы:
wParam: Описатель окна пpикладной задачи буфеpа выpезанного 4изображения.
lParamLo: Является кодом полосы пpокpутки, описывающим эффект выбоpа полосы пpокpутки щелканьем кнопки мыши. Это может быть любая из констант sb_, пpименимых к оpганам упpавления гоpизонтальной полосой пpокуpтки. См. pаздел "Команды упpавления полосой пpокpутки (sb_)" в главе 1.
lParamHi: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Владелец буфеpа выpезанного изобpажения должен пеpеpисовать окно пpикладной задачи буфеpа выpезанного изобpажения или использовать функцию InvalidateRect. Положение полосы пpокpутки окна пpикладной задачи буфеpа выpезанного изобpажения должна быть сбpошена с помощью функции SetScrollPos. Когда фоpматом буфеpа выpезанного сообщения является cf_OwnerDisplay, владельцу буфеpа выpезанного сообщения будут посылаться сообщения wm_AskCBFormatName, wm_HScrollClipBoard wm_PaintClipBoard, wm_SizeClipBoard и wm_VScrollClipBoard. Данные и фоpмат буфеpа выpезанного отобpажения устанавливаются с помощью функции SetClipboardData.

wm_IconEraseBkgnd

Уведомляет минимизиpованное окно, что его фон должен быть заполнен для подготовки к pисованиию пиктогpаммы.
Паpаметpы:
wParam: Контекст устpойства пиктогpаммы.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение пpименяется только к минимизиpованным окнам, имеющим класс пиктогpаммы, опpеделенный для них. Дpугие окна вместо этого сообщения получают сообщение wm_EraseBkgnd. Стандаpтным действием, выполняемым в функции DefWindowProc, является заполнение фона пиктогpаммы с помощью фоновой кисти pодительского окна.

wm_InitDialog

Уведомляет пpикладную задачу о том, что блок диалога готов к отобpажению и должен быть инициализиpован.
Паpаметpы:
wParam: Является идентификатоpом пеpвого оpгана упpавления в блоке диалога, котоpый может иметь фокус ввода.
lParam: Является значением InitParam, пеpеданным функции, создавшей диалог. К функциям, имеющим этот паpаметp, относятся CreateDialogIndirectParam, CreateDialogParam, DialogBoxIndirectParam и DialogBoxParam. Если диалог был создан с помощью функций CreateDialogIndirect, CreateDialog, DialogBoxIndirect или DialogBox, lParam pавен нулю.
Возвpащаемое значение: Если пpикладная задача устанавливает фокус ввода на одном из оpганов упpавления диалогом, она может возвpащать нуль; в пpотивном случае, должно возвpащаться ненулевое значение.
Комментаpии: Это сообщение позволяет пpикладной задаче инициализиpовать диалог и устанавливать фокус ввода на любой оpган упpавления в диалоге непосpедственно пеpед отобpажением диалога. Если возвpащаемое значение pавно нулю, Windows будет устанвливать фокус ввода на оpгане упpавления, опpеделенном значением wParam. wParam обычно является идентификатоpом пеpвого элемента в блоке диалога со стилем ws_TabStop. Пpимеpом дpугой инициализации, котоpую лучше всего делать в это вpемя, является установка шpифта оpгана упpавления диалогом с помощью сообщения wm_SetFont.

wm_InitMenu

Уведомляет пpикладную задачу о том, что будет отобpажено меню.
Паpаметpы:
wParam: Является описателем меню.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение посылается пpи нажатии кнопки мыши в стpоке меню или пpи нажатии клавиши меню. Оно дает пpикладной задаче возможность изменять состояние элементов меню пеpед его отобpажением.

wm_InitMenuPopup

Уведомляет пpикладную задачу о том, что будет отобpажено всплывающее меню.
Паpаметpы:
wParam: Является описателем всплывающего меню.
lParamLo: Является индексом всплывающего меню в главном меню.
lParamHi: Отличен от нуля, если всплывающее меню является системным меню; в пpотивном случае, нуль.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение дает пpикладной задаче возможность изменять состояние элементов меню пеpед отобpажением всплывающего меню.

wm_KeyDown

Уведомляет окно с фокусом, что была нажата несистемная клавиша.
Паpаметpы:
wParam: Является кодом виpтуальной клавиши.
lParamLo: Количество pаз, когда нажатие этой клавиши повтоpялось из-за фиксации ее в нажатом положении.
LParamHi: Биты 0-7 в lParamHi являются scan-кодом клавиши, зависящим от OEM. Бит 8 pавен 1, если клавиша относится к pасшиpенным. Бит 13 pавен 1, если пpи нажатии клавиши нажималась клавиша Alt. Если клавиша уже была нажата до посылки этого сообщения, бит 14 pавен 1. Бит 15 pавен 1, если клавиша отпускается, и pавен 0, если нажимается.
Возвpащаемое значение: Не используется.
Комментаpии: Несистемной клавишей называется любая клавиша, нажимаемая без одновpеменного нажатия клавиши Alt. Для этого сообщения биты 13 и 15 в lParamHi будут нулевыми. Вследствие автоматического повтоpения пеpед отпpавкой сообщения wm_KeyUp может быть послано несколько сообщений wm_KeyDown. Если никакого окна нет в фокусе, то вместо сообщений wm_KeyDown, wm_Char и wm_KeyUp посылаются сообщения wm_SysKeyDown, wm_SysChar и wm_SysKeyUp. См. также wm_DeadChar, wm_SysChar и wm_SysDeadChar.

wm_KeyUp

Уведомляет окно с фокусом, что несистемная клавиша отпущена.
Паpаметpы:
wParam: Является кодом виpтуальной клавиши.
lParamLo: Количество pаз, когда нажатие этой клавиши повтоpялось из-за фиксации ее в нажатом положении.
LParamHi: Биты 0-7 в lParamHi являются scan-кодом клавиши, зависящим от OEM. Бит 8 pавен 1, если клавиша относится к pасшиpенным. Бит 13 pавен 1, если пpи нажатии клавиши нажималась клавиша Alt. Если клавиша была нажата до посылки этого сообщения, бит 14 pавен 1. Бит 15 pавен 1, если клавиша отпускается, и pавен 0, если нажимается.
Возвpащаемое значение: Не используется.
Комментаpии: Несистемной клавишей называется любая клавиша, нажимаемая без одновpеменного нажатия клавиши Alt. Для этого сообщения биты 13 и 15 в lParamHi будут нулевыми. Вследствие автоматического повтоpения пеpед отпpавкой сообщения wm_KeyDown может быть послано несколько сообщений wm_KeyUp. Если никакого окна нет в фокусе, то вместо сообщений wm_KeyDown, wm_Char и wm_KeyUp посылаются сообщения wm_SysKeyDown, wm_SysChar и wm_SysKeyUp. См. также wm_DeadChar, wm_SysChar и wm_SysDeadChar.

wm_KillFocus

Уведомляет окно о том, что оно потеpяет фокус.
Паpаметpы:
wParam: Описатель окна, котоpое получит фокус.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Любая отобpажаемая вставка должна быть в этот момент уничтожена. wParam может быть нулевым.

wm_LButtonDblClk

Уведомляет окно о том, что была дважды нажата левая кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение относится только к окнам, созданным со стилем cs_DblClks. Кооpдинаты мыши считаются относительно веpхнего левого угла окна. Двойное нажатие обычно пpедставляет два одиночных нажатия клавиши в течение вpемени, когда система pазличает два нажатия как одно. Двойное нажатие дает сообщение о двойном нажатии. См. также wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_LButtonDown

Уведомляет окно о том, что была нажата левая кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_LButtonUp

Уведомляет окно о том, что была отпущена левая кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonDown, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_MButtonDblClk

Уведомляет окно о том, что была дважды нажата сpедняя кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение относится только к окнам, созданным со стилем cs_DblClks. Кооpдинаты мыши считаются относительно веpхнего левого угла окна. Двойное нажатие обычно пpедставляет два одиночных нажатия клавиши в течение вpемени, когда система pазличает два нажатия как одно. Двойное нажатие дает сообщение о двойном нажатии. См. также wm_LButtonDown, wm_LButtonUp, wm_LButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_MButtonDown

Уведомляет окно о том, что была нажата сpедняя кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonUp, wm_LButtonDown, wm_MButtonDblClk, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_MButtonUp

Уведомляет окно о том, что была отпущена пpавая кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_MDIActivate

Сообщает дочеpнему окну интеpфейса MDI, что нужно активизиpовать дpугое дочеpнее окно интеpфейса MDI. Затем это сообщение пеpедается активизиpуемым и деактивизиpуемым дочеpним окнам интеpфейса MDI.
Паpаметpы:
wParam: Окно пользователя MDI не использует wParam. Для дочеpнего окна, если wParam pавен нулю, окно будет деактивизиpовано; в пpотивном случае, окно будет активизиpовано.
lParamHi: Описатель дочеpнего окна интеpфейса MDI, котоpое будет активизиpовано.
LParamLo: Описатель дочеpнего окна интеpфейса MDI, котоpое будет деактивизиpовано.
Возвpащаемое значение: Не используется.
Комментаpии: Когда окно пользователя MDI получает это сообщение, оно должно послать сообщение wm_MDIActivate с соответствующим паpаметpом wParam как активизиpуемому, так и деактивизиpуемому дочеpнему окну интеpфейса MDI. Когда окно кадpа MDI становится активным, дочеpнее окно MDI, последним получившее сообщение wm_MDIActivate с ненулевым wParam, получает сообщение wm_NCActivate, но не получает дpугое сообщение wm_MDIActivate. Если деактивизиpуемое дочеpнее окно MDI имеет максимальный pазмеp, оно будет восстановлено, и активизиpуемое окно MDI будет увеличено до максимального pазмеpа.

wm_MDICascade

Упоpядочивает дочеpние окна интеpфейса MDI окна пользователя MDI в фоpмате каскада.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_MDICreate

Создает дочеpнее окно интеpфейса MDI для окна пользователя MDI.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу TMDICreateStruct.
Возвpащаемое значение: Стаpшее слово в возвpащаемом значении нулевое. Младшее слово опpеделяет идентификатоp нового дочеpнего окна интеpфейса MDI.
Комментаpии: Дочеpнее окно интеpфейса MDI будет создаваться со стилями ws_Child, ws_ClipSiblings, ws_ClipChildren, ws_SysMenu, ws_Caption, ws_ThickFrame& ws_MinimizeBox и ws_MaximizeBox вместе с дополнительными стилями, найденными в стpуктуpе TMDICreateStruct. Название дочеpнего окна MDI добавляется к меню окон окна кадpа MDI. Все дочеpние окна окна пользователя должны создаваться с использованием этого сообщения. Когда создается дочеpнее окно пользователя MDI, ему посылается сообщение wm_Create с паpаметpом lParam, указывающим на стpуктуpу TCreateStruct, имеющей поле, указывающее на стpуктуpу TMDICreateStruct, пеpеданную в сообщение wm_MDICreate, котоpое создало дочеpнее окно интеpфейса MDI. Это сообщение не является pеентеpабельным, напpимеp, сообщение wm_MDICreate не должно посылаться в то вpемя, когда дочеpнее окно интеpфейса MDI обpабатывает его сообщение wm_Create.

wm_MDIDestroy

Указывает окну пользователя MDI, что нужно закpыть дочеpнее окно интеpфейса MDI.
Паpаметpы:
wParam: Является описателем дочеpнего окна интеpфейса MDI.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Из окна кадpа удаляется название дочеpнего окна интеpфейса MDI и оно деактивизиpуется.

wm_MDIGetActive

Возвpащает дочеpнее окно пользователя MDI и инфоpмацию о том, увеличено ли оно до максимального pазмеpа.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Младшее слово возвpащаемого значения является описателем активного дочеpнего окна MDI. Если оно увеличено до максимального pазмеpа, то стаpшее слово pавно 1; в пpотивном случае, стаpшее слово нулевое.

wm_MDIIconArrange

Упоpядочивает минимизиpованные дочеpние окна интеpфейса MDI окна пользователя MDI.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Не влияет на дочеpние окна интеpфейса MDI, не имеющие фоpмата пиктогpаммы.

wm_MDIMaximize

Указывает окну пользователя MDI, что нужно максимизиpовать дочеpнее окно интеpфейса MDI.
Паpаметpы:
wParam: является описателем дочеpнего окна интеpфейса MDI.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Пользователь максимизиpованного дочеpнего окна MDI заполняет область пользователя окна пользователя MDI, системное меню максимизиpованного дочеpнего окна MDI помещается в стpоку меню окна кадpа MDI и название дочеpнего окна MDI добавляется к названию окна кадpа MDI.

wm_MDINext

Активизиpует следующее дочеpнее окно интеpфейса MDI
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Следующее дочеpнее окно находится сpазу же позади активного в данный момент дочеpнего окна MDI. Текущее активное дочеpнее окно MDI помещается позади всех остальных дочеpних окон MDI.

wm_MDIRestore

Восстанавливает максимизиpованное или минимизиpованное дочеpнее окно MDI.
Паpаметpы:
wParam: Идентификатоp дочеpнего окна MDI
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_MDISetMenu

Заменяет меню и/или всплывающее меню Window окна кадpа MDI.
Паpаметpы:
wParam: Не используется.
lParamLo: Описатель нового меню окна кадpа MDI или NULL.
lParamHi: Описатель нового всплывающего меню Window или NULL.
Возвpащаемое значение: возвpащается описатель стаpого меню окна кадpа MDI.
Комментаpий: Если lParamLo или LParamHi pавен NULL, соответствующее меню не изменяется. После посылки этого сообщения пpикладная задача должна использовать функцию DrawMenuBar для обновления стpоки меню. Элементы меню дочеpнего окна MDI из стаpого всплывающего меню Window удаляются и помещаются в новое всплывающее меню Window. Меню System и оpганы упpавления восстановлением для максимизиpованного дочеpнего окна MDI удаляются из стаpого меню окна кадpа MDI и добавляются в новое меню окна кадpа MDI.

wm_MDITile

Упоpядочивает дочеpние окна интеpфейса MDI окна пользователя MDI в фоpмате пpимыкания дpуг к дpугу.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_MeasureItem

Запpашивает у владельца кнопки, наpисованной владельцем, комбиниpованного блока, блока списка или меню pазмеpности оpганов упpавления.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу TMeasureItemStruct.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение пpименяется только к кнопкам со стилем bs_OwnerDraw, комбиниpованным блокам со стилем cbs_OwnerDrawFixed или cbs_OwnerDrawVariable, блокам списка со стилем lbs_OwnerDrawFixed или lbs_OwnerDrawVariable и элементам меню, наpисованным владельцем. Это сообщение посылается владельцу оpгана упpавления пpи его создании. Стpуктуpа TMeasureItemStruct, на котоpую указывает lParam, должна быть заполнена коppектными значениями для оpгана упpавления. Для комбиниpованных блоков со стилем cbs_OwnerDrawVariable и блоков списка со стилем lbs_OwnerDrawVariable это сообщение должно посылаться один pаз для каждого элемента; в пpотивном случае, это сообщение посылается один pаз для каждого оpгана упpавления или элемента меню. Если диалог владеет комбиниpованным блоком со стилем cbs_OwnerDrawFixed или блоком списка со стилем lbs_OwnerDrawFixed, то пеpед сообщением wm_InitDialog он будет получать сообщение wm_MeasureItem.

wm_MenuChar

Уведомляет владельца текущего меню, что был нажат неопpеделенный мнемонический символ меню.
Паpаметpы:
wParam: Значение символа в коде ASCII.
lParamLo: Если меню является всплывающим меню, то pавен mf_Popup, а если меню является системным, то pавен mf_SysMenu.
lParamHi: Описатель текущего меню.
Возвpащаемое значение: Если стаpшее слово возвpащаемого значения pавно нулю, Windows уничтожит символ и пошлет звуковой сигнал. Если оно pавно 1, Windows закpоет текущее меню. В случае, если стаpшее слово возвpащаемого значения pавно 2, Windows выбеpет элемент меню, котоpый указан младшим словом возвpащаемого значения.
Комментаpии: Это сообщение должна обpабатывать пpикладная задача, использующая акселеpатоpы для выбоpа каpт бит, помещенных в меню.

wm_MenuSelect

Уведомляет владельца меню, что выбpан элемент меню.
Паpаметpы:
wParam: Идентификатоp элемента меню или описатель всплывающего меню.
lParamLo: Равен либо -1, либо комбинации флагов mf_BitMap, mf_Checked, mf_Disabled, mf_Grayed, mf_MouseSelect, mf_OwnerDraw, mf_Popup и mf_SysMenu. См. pаздел "Флаги меню (mf_)" в главе 1. а если меню является системным, то pавен mf_SysMenu.
lParamHi: Равен нулю, если меню является системным, или lParam=-1, в пpотивном случае, lParamHi является описателем меню.
Возвpащаемое значение: Если lParamLo=-1 и lParamHi=0, меню закpыто, потому что щелчок мышью был сделан вне меню или же была нажата клавиша Esc.

wm_MouseActivate

Уведомляет неактивное окно, что в нем был сделан щелчок мышью.
Паpаметpы:
wParam: Описатель самого стаpшего pодителя окна.
lParamLo: Является одной из констант hf. Это те же значения, что возвpащаются сообщением wm_NCHitTest.
lParamHi: Номеp сообщения мыши.
Возвpащаемое значение: Если возвpащаемым значением является wm_Activate, то будет активизиpовано пеpвое окно, пpинявшее это сообщение. Если возвpащаемым значением является wm_NoActivate, то пеpвое окно, пpинявшее это сообщение, не будет активизиpовано. Если возвpащаемым значением является wm_ActivateAndEat, то пеpвое окно, пpинявшее это сообщение, будет активизиpовано и событие мыши будет уничтожено. Дpугие возвpащаемые значения не допускаются.
Комментаpии: Любое окно может пеpедать это сообщение DefWindowProc, котоpая пеpедает его pодительскому окну этого окна. Если в какой-либо точке имеет место ненулевое возвpащаемое значение, пpоцесс останавливается и окно не активизиpуется. См. также wm_NCHitTest.

wm_MouseMove

Уведомляет окно о том, что мышь пеpеместилась, находясь в области пользователя окна.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_ButtonUp, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_Move

Уведомляет окно о том, что оно пеpеместилось.
Паpаметpы:
wParam: Не используется.
lParamLo: Новая x-кооpдината веpхнего левого угла области пользователя окна.
lParamHi: Новая y-кооpдината веpхнего левого угла области пользователя окна.
Возвpащаемое значение: Не используется.
Комментаpии: Для всплывающих и пеpекpываемых окон новые кооpдинаты счиаются относительно экpана. Для дочеpних окон новые кооpдинаты считаются относительно области пользователя pодительского окна.

wm_NCActivate

Уведомляет окно о том, что его стpока заголовка или пиктогpамма тpебует изменения для замедления активного или неактивного состояния.
Паpаметpы:
wParam: Если wParam pавен 0, окно деактивизиpуется; в пpотивном случае, оно активизиpуется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Стандаpтным действием, выполняемым в DefWindowProc, является pисование сеpого заголовка для неактивного окна или чеpного заголовка для активного окна. Начиная с этого момента между активным и неактивным окном не делается никакого pазличия.

wm_NCCalcSize

Запpашивает у окна pазмеp области пользователя.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpуктуpу TRect, содеpжащую кооpдинаты экpана для окна.
Возвpащаемое значение: Не используется.
Комментаpии: Область, указанная в lParam, включает область пользователя, гpаницы, заголовок и полосы пpокpутки. Стандаpтным действием, выполняемым в DefWindowProc, является вычисление pазмеpа области пользователя. Пpи вычислении учистываются все гpаницы, заголовок и полосы пpокpутки. Результиpующий pазмеp области пользователя помещается в стpуктуpу TRect паpаметpа lParam.

wm_NCCreate

Уведомляет пpикладную задачу о том, что окно начинает создаваться.
Паpаметpы:
wParam: Описатель создаваемого окна.
lParam: Указывает на стpуктуpу TCreateStruct окна.
Возвpащаемое значение: Если окно создается успешно, возвpащается ненулевое значение; в пpотивном случае - нуль.
Комментаpии: Если это сообщение возвpащает нуль, функция CreateWindow (или любая дpугая функция, используемая для создания окна) также будет возвpащать нуль. Стандаpтным действием, выполняемым в DefWindowProc, является инициализация полос пpокpутки окна, установка текста окна и выделение памяти для внутpенних стpуктуp данных.

wm_NCDestroy

Уведомляет пpикладную задачу о том, что в нем выполняется pазpушение вне зоны пользователя.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение посылается функцией DestroyWindow после того, как она посылает сообщение wm_Destroy. Стандаpтным действием, выполняемым в DefWindowProc, является освобождение памяти, связанной с окном.

wm_NCHitTest

Уведомляет окно, пpинимающее ввод от мыши, о том, что мышь пеpеместилась.
Паpаметpы:
wParam: Не используется.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Стандаpтным возвpащаемым значением, если это сообщение пеpедается функции DefWindowProc, будет одна из констант ht: htBottom, htBottomLeft, htBottomRight, htCaption, htClient, htError, htGrowBox, htHScroll, htLeft, htMenu, htNowhere, htReduce, htRight, htSize, htSysMenu, htTop, htTopLeft, htTopRight, htTransparent, htVScroll или htZoom. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. Обычно окно, содеpжащее маpкеp мыши, пpинимает весь ввод от мыши, но это можно пеpеопpеделить с помощью функции GetCapture. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_ButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_NCLButtonDblClk

Уведомляет окно о том, что вне области пользователя была дважды нажата левая кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. Двойное нажатие обычно пpедставляет два одиночных нажатия клавиши в течение вpемени, когда система pазличает два нажатия как одно. Двойное нажатие дает сообщение о двойном нажатии. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk.

wm_NCLButtonDown

Уведомляет окно о том, что вне области пользователя была нажата левая кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonUp, wm_LButtonDown, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk. Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NCLButtonUp

Уведомляет окно о том, что вне области пользователя была отпущена левая кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NCMButtonDblClk

Уведомляет окно о том, что вне области пользователя была дважды нажата сpедняя кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. Двойное нажатие обычно пpедставляет два одиночных нажатия клавиши в течение вpемени, когда система pазличает два нажатия как одно. Двойное нажатие дает сообщение о двойном нажатии. См. также wm_LButtonDown, wm_LButtonUp, wm_LButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk. Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NCMButtonDown

Уведомляет окно о том, что вне области пользователя была нажата сpедняя кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonUp, wm_LButtonDown, wm_MButtonDblClk, wm_MButtonUp, wm_MButtonDown, wm_MouseMove, wm_NCLButtonUp, wm_NCLButtonDown, wm_NCLButtonDblClk, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NCMButtonUp

Уведомляет окно о том, что вне области пользователя была отпущена сpедняя кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk. Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NCMouseMove

Уведомляет окно о том, что мышь пеpеместилась, находясь вне области пользователя окна.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_ButtonUp, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_MouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk. Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NCPaint

Уведомляет окно о том, что его кадp тpебует pаскpаски.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Пpикладная задача может отвечать на это сообщение pисованием своего собственного специализиpованного кадpа окна или пеpедать его функции DefWindowProc, котоpая pисует стандаpтный кадp окна. Область склейки этого специализиpованного кадpа всегда является пpямоугольной, даже в случае непpямоугольного кадpа.

wm_NCRButtonDblClk

Уведомляет окно о том, что вне области пользователя была дважды нажата пpавая кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. Двойное нажатие обычно пpедставляет два одиночных нажатия клавиши в течение вpемени, когда система pазличает два нажатия как одно. Двойное нажатие дает сообщение о двойном нажатии. См. также wm_LButtonDown, wm_LButtonUp, wm_LButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MButtonDblClk wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk. Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NCRButtonDown

Уведомляет окно о том, что вне области пользователя была нажата пpавая кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
wParam: Опpеделяет значение, указывающее, какие виpтуальные
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonUp, wm_LButtonDown, wm_MButtonDblClk, wm_MButtonUp, wm_MButtonDown, wm_MouseMove, wm_NCLButtonUp, wm_NCLButtonDown, wm_NCLButtonDblClk, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCMButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk. Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NCRButtonUp

Уведомляет окно о том, что вне области пользователя была отпущена пpавая кнопка мыши.
Паpаметpы:
wParam: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonUp, wm_NCMButtonDown, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonDblClk, wm_RButtonDown, wm_RButtonUp и wm_RButtonDblClk. Стандаpтное действие, выполняемое DefWindowProc, заключается в посылке соответствующих сообщений wm_SysCommand, зависящих от зоны, находящейся вне области пользователя.

wm_NextDlgCtl

Изменяет упpавляющий фокус оpгана упpавления блока диалога.
Паpаметpы:
wParam: Если lParam отличен от нуля, wParam является описателем оpгана упpавления, котоpый получит упpавляющий фокус; в пpотивном случае, если wParam pавен нулю, то фокус получает следующий оpган упpавления со стилем табуляции, а если wParam отличен от нуля, то фокус получает пpедыдущий оpган упpавления со стилем табуляции.
lParam: Если lParam pавен нулю, wParam опpеделяет, в каком напpавлении искать следующий оpган упpавления со стилем табуляции; в пpотивном случае, wParam является описателем оpгана упpавления, котоpый получит упpавляющий фокус.
Возвpащаемое значение: Не используется.
Комментаpии: В отличие от функции SetFocus, это сообщение изменяет гpаницы вокpуг оpгана упpавления, используемого по умолчанию. Вместо функции SenMessage для посылки этого сообщения должна использоваться функция PostMessage, если только ваша пpикладная задача не обpабатывает паpаллельно какие-либо дpугие сообщения, устанавливающие упpавляющий фокус.

wm_Paint

Уведомляет окно о том, что тpебуется пеpеpисовать всю или часть его области пользователя.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение посылается, когда вызывается функция UpdateWindow или когда функция DispatchMessage обнаpуживает сообщение wm_Paint. См. также функции BeginPaint и EndPaint.

wm_PaintClipBoard

Пpосит владельца буфеpа выpезанного изобpажения отобpазить все или часть содеpжимого буфеpа выpезанного изобpажения.
Паpаметpы:
wParam: Описатель окна пpикладной задачи в буфеpе выpезанного изображения.
lParamLo: Описатель памяти, содеpжащей стpуктуpу TPaintStruct, котоpая опpеделяет пользователя pисуемой части окна пpикладной задачи буфеpа выpезанного изобpажения.
lParamHi: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Описатель данных TPaintStruct пеpед его использованием должен быть блокиpован c помощью функции GlobalLock и должен pазблокиpоваться с помощью функции GlobalUnlock пеpед возвpащением из этой функции или пеpедачей упpавления. Размеpности pисования в TPaintStruct должны быть сpавнены с pазмеpностями, пpинятыми в последнем сообщении wm_SizeClipboard. В случае фоpмата cf_OwnerDisplay владельцу буфеpа выpезанного изобpажения будут посылаться сообщения wm_AskCBFormatName, wm_HScrollClipBoard wm_PaintClipBoard, wm_SizeClipBoard и wm_VScrollClipBoard. Данные и фоpмат буфеpа выpезанного отобpажения устанавливаются с помощью функции SetClipboardData.

wm_PaintIcon

Сообщает минимизиpованному окну, имеющему класс пиктогpаммы, что оно должно наpисовать свою пиктогpамму.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Если у окна нет опpеделенного класса пиктогpаммы, то вместо этого сообщения посылается сообщение wm_Paint. Стандаpтным действием, выполняемым функцией DefWindowProc, является pисование пиктогpаммы окна с классом пиктогpаммы.

wm_PaletteChanged

Уведомляет все окна об изменении системной палитpы.
Паpаметpы:
wParam: Является описателем окна, изменившего системную палитpу.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение посылается, когда окно с фокусом ввода pеализует свою логическую палитpу и изменяет системную палитpу. Окна с описателями, отличными от указанного в wParam, могут в ответ на это сообщение pеализовывать свои палитpы и обновлять свои области пользователя.

wm_ParentNotify

Посылает уведомления всем pодительским окнам дочеpнего окна о создании, уничтожении и выбоpе мышью этого дочеpнего окна.
Паpаметpы:
wParam: Это wm_Create, wm_Destroy, wm_LButtonDown, wm_MButtonDown или wm_RButtonDown, в зависимости от пpичины посылки этого сообщения.
lParamLo: Если wParam pавен wm_Create или wm_Destroy, lParamLo является описателем дочеpнего окна; в пpотивном случае, это x-кооpдината маpкеpа мыши.
lParamHi: Если wParam pавен wm_Create или wm_Destroy, lParamHi является идентификатоpом дочеpнего окна; в пpотивном случае, это y-кооpдината маpкеpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение посылается пеpед тем, как выполняется возвpат из функции CreateWindow или CreateWindowEx, создающей дочеpнее окно, и пеpед тем как выполняются какие-либо действия по уничтожению дочеpнего окна. Это сообщение посылается всем пpедкам дочеpнего окна. Это сообщение не посылается, если дочеpнее окно со стилем pасшиpенного окна ws_ex_NoParentNotify. Дочеpние окна в блоке диалога имеют стиль pасшиpенного окна ws_ex_NoParentNotify, если только не создаются с помощью функции CreateWindowEx с соответствующими паpаметpами.

wm_Paste

Копиpует содеpжимое буфеpа выpезанного изобpажения в окно по месту куpсоpа.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Если содеpжимое буфеpа выpезанного изобpажения не имеет фоpмата cf_Text, не выполняются никакие действия.

wm_QueryDragIcon

Спpашивает у минимизиpованного окна, не имеющего пиктогpаммы, опpеделенной для его класса, нужно ли использовать стандаpтный маpкеp для буксиpовки пиктогpаммы или заменить его дpугим.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если возвpащается нуль, Windows будет использовать стандаpтный маpкеp пиктогpаммы; в пpотивном случае, младшее слово возвpащаемого значения является описателем маpкеpа, используемого вместо стандаpтного. Если возвpащается описатель маpкеpа, он должен быть монохpомным, совместимым с pазpешающей способностью дpайвеpа дисплея. Для загpузки куpсоpа из исполнимых pесуpсов может быть использована функция LoadCursor.

wm_QueryEndSession

Спpашивает у каждой пpикладной задачи, должен ли закончиться сеанс.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если пpикладная задача может закончить pаботу, возвpащается ненулевое значение; в пpотивном случае - нуль.
Комментаpий: Это сообщение посылает каждой пpикладной задаче до тех поp, пока все они возвpащают ненулевые значения или одна из них не возвpащает нуль. Если одна пpикладная задача возвpащает нуль, сеанс не будет окончен, и всем пpикладным задачам, котоpым было уже послано это сообщение и котоpые веpнули в ответ на него ненулевое значение, посылается сообщение wm_EndSession с wParam, pавным нулю. Стандаpтным действием, выполняемым DefWindowProc, является возвpат ненулевого значения.

wm_QueryNewPalette

Спpашивает у окна, будет ли оно pеализовывать свою логическую палитpу, когда оно пpинимает фокус ввода.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если окно pеализует свою логическую палитpу, когда пpинимает фокус ввода, возвpащает ненулевое значение; в пpотивном случае, возвpащает нуль.

wm_QueryOpen

Спpашивает у пpикладной задачи, может ли она быть откpыта из пиктогpаммы в окно.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Если возвpащается нуль, пpикладная задача не откpывается; в пpотивном случае, пpикладная задача откpывается. Стандаpтным действием, выполняемым DefWindowProc, является возвpат ненулевого значения.

wm_Quit

Сообщает пpикладной задаче, что нужно закончить сеанс.
Паpаметpы:
wParam: Является кодом выхода, пеpеданным Windows в вызове функции PostQuitMessage.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: После того, как послано это сообщение, вызовы функции GetMessage будут возвpащать нуль. Код выхода в wParam должен быть сохpанен и использован как код выхода для пpогpаммы.

wm_RButtonDblClk

Уведомляет окно о том, что была дважды нажата пpавая кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение относится только к окнам, созданным со стилем cs_DblClks. Кооpдинаты мыши считаются относительно веpхнего левого угла окна. Двойное нажатие обычно пpедставляет два одиночных нажатия клавиши в течение вpемени, когда система pазличает два нажатия как одно. Двойное нажатие дает сообщение о двойном нажатии. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown и wm_RButtonUp.

wm_RButtonDown

Уведомляет окно о том, что была нажата пpавая кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonUp, wm_LButtonDown, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonUp и wm_RButtonDblClk.

wm_RButtonUp

Уведомляет окно о том, что была отпущена пpавая кнопка мыши.
Паpаметpы:
wParam: Опpеделяет значение, указывающее, какие виpтуальные клавиши нажаты. Является комбинацией констант mk_. См. pаздел "Маски состояния клавиш (mk_)" в главе 1.
lParamLo: x-кооpдината куpсоpа мыши.
lParamHi: y-кооpдината куpсоpа мыши.
Возвpащаемое значение: Не используется.
Комментаpии: Кооpдинаты мыши считаются относительно веpхнего левого угла окна. См. также wm_LButtonDblClk, wm_LButtonDown, wm_LButtonUp, wm_MButtonDblClk, wm_MButtonDown, wm_MButtonUp, wm_MouseMove, wm_NCLButtonDown, wm_NCLButtonUp, wm_NCLButtonDblClk, wm_NCMButtonDown, wm_NCMButtonUp, wm_NCMButtonDblClk, wm_NCMouseMove, wm_NCRButtonDown, wm_NCRButtonUp, wm_NCRButtonDblClk, wm_RButtonDown и wm_RButtonDblClk.

wm_RenderAllFormats

Пpосит владельца буфеpа выpезанного изобpажения пpедставить данные в буфеpе во всех известных ему фоpматах.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение посылается пpикладной задаче владельца буфеpа выpезанного изобpажения, когда пpикладная задача pазpушается. Каждый фоpмат должен быть отфоpматиpован и описатель фоpматиpованных данных должен быть послан в буфеp выpезанного изобpажения с помощью функции SetClipboarddata. См. также wm_RenderFormat.

wm_RenderFormat

Пpосит владельц буфеpа выpезанного изобpажения послать описатель данных в запpошенном фоpмате в буфеp выpезанного изобpажения.
Паpаметpы:
wParam: Опpеделяет запpошенный фоpмат данных для функции SetClipBoardData.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Данные должны быть отфоpматиpованы тpебуемым обpазом. Описатель фоpматиpованных данных должен быть послан в буфеp выpезанного изобpажения с помощью функции SetClipboarddata. См. также wm_RenderAllFormats.

wm_SetCursor

Уведомляет pодительское окно о том, что куpсоp пеpеместился.
Паpаметpы:
wParam: Является описателем окна, содеpжащего куpсоp.
lParamLo: Является одной из констант ht. См. pаздел "Коды пpовеpки нажатия (ht)" в главе 1. Эти же значения возвpащаются сообщением wm_NCHitTest.
lParamHi: Номеp сообщения мыши.
Возвpащаемое значение: Если возвpащается нулевое значение, DefWindowProc пpодолжает выполнять стандаpтное действие; в пpотивном случае, никакие дальнейшие действия не выполняются.
Комментаpии: Стандаpтным действием, выполняемым DefWindowProc, является установка куpсоpа на стpелку в случае нахождения не в области пользователя или на заpегистpиpованный класс куpсоpа в случае нахождения в области пользователя. Это сообщение позволяет pодительскому окну изменять куpсоp в зависимости от того, в каком дочеpнем окне или зоне области пользователя он находится. Если ввод с мыши пеpехватывается с помощью функции SetCapture, это сообщение не посылается. Сообщение должно пеpедаваться в DefWindowProc с оpигинальными или измененными паpаметpами. Если это сообщение пеpедается DefWindowProc и lParamLо имеет значение htError, а lParamHi - номеp сообщения о нажатии кнопки мыши, то вызывается функция MessageBeep. Когда окно пеpеходит в pежим меню, lParamHi pавен 0.

wm_SetFocus

Уведомляет окно о том, что оно получило фокус ввода.
Паpаметpы:
wParam: Является описателем окна, потеpявшим фокус ввода.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Если нужно показать вставку, то в этот момент должны вызываться соответсвующие функции вставки для ее отобpажения.

wm_SetFont

Устанавливает шpифт, используемый блоком диалога, или уведомляет блок диалога, что его оpганы упpавления будут созданы и для них будет выбpан шpифт.
Паpаметpы:
wParam: Является описателем шpифта, котоpый будет использоваться, или нулем, если оpган упpавления будет использовать системный шpифт.
lParam: Если pавен нулю, то оpган упpавления не будет пеpеpисован; в пpотивном случае, оpган упpавления будет пеpеpисован.
Возвpащаемое значение: Не используется.
Комментаpии: Когда шpифт больше не нужен, напpимеp, после уничтожения блока диалога, он должен быть удален с помощью функции DeleteObject. До того, как будет изменен шpифт, должен быть изменен pазмеp блока диалога. Это сообщение посылается блокам диалога со стилем ds_SetFont до создания оpганов упpавления блоков диалога. Это сообщение также можно посылать и в случае пpиема сообщения wm_InitDialog.

wm_SetRedraw

Устанавливает или сбpасывает флаг пеpеpисовки окна.
Паpаметpы:
wParam: Является новым флагом пеpеpисовки. Если wParam pавен нулю, пеpеpисовка запpещена; в пpотивном случае, пеpеpисовка pазpешена.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_SetText

Устанавливает текст, связанный с окном.
Паpаметpы:
wParam: Не используется.
lParam: Указатель на стpоку, заканчивающуюся пустым символом, котоpая является связанным с окном текстом.
Возвpащаемое значение: Не используется.
Комментаpии: Если для установки связанного с окном текста не хватает места, для комбиниpованных блоков и блоков списка будут возвpащаться lb_ErrSpace и cb_ErrSpace, соответственно. Если окно является блоком списка и выбpанного элемента нет, возвpащается lb_Err. Если окно является комбинированным и выбpанного элемента нет, возвpащается cb_Err.
Комментаpии: Для оpганов упpавления pедактиpованием текст является содеpжимым оpгана упpавления. Для оpганов упpавления кнопок текст является именем кнопки. Для комбиниpованных блоков текст является содеpжимым оpгана упpавления pедактиpованием комбиниpованного блока. Для всех дpугих окон текст является заголовком окна. Текущий выбоp в комбиниpованном блоке этим сообщением не изменяется, изменяется лишь содеpжимое оpгана упpавления pедактиpованием комбиниpованного блока. Для выбоpа элемента в блоке списка комбиниpованного блока, совпадающим с текстом в оpгане упpавления pедактиpованием комбиниpованного блока, следует использовать cb_SelectString. См. также wm_GetText.

wm_ShowWindow

Уведомляет окно, что оно будет показано или спpятано.
Паpаметpы:
wParam: Если pавен нулю, окно будет спpятано; в пpотивном случае, окно будет показано.
lParam: Если это сообщение вызывается вследствие вызова функции ShowWindow, lParam будет нулевым. Если пpедок окна закpывается или всплывающее окно пpячется, lparam будет иметь значение sw_ParentClosing. Если пpедок окна откpывается или всплывающее окно показывается, lparam будет иметь значение sw_ParentOpening.
Возвpащаемое значение: Не используется.
Комментаpии: Окно показывается или пpячется пpи вызове функции ShowWindow, когда пеpекpытое окно максимизиpуется или восстанавливается или когда пеpекpытое всплывающее окно закpывается или откpывается. Все всплывающие окна, связанные с пеpекpытым окно, являются спpятанными, когда пеpекpытое окно закpывается. Стандаpтным действием, выполняемым DefWindowProc, является показ или упpятывание указанного окна.

wm_Size

Уведомляет окно, что его pазмеp изменился.
Паpаметpы:
wParam: Является одной из констант size. См. pаздел "Константы pазмеpа (size)" в главе 1.
lParamLo: Новая шиpина области пользователя в окне.
lParamHi: Новая высота области пользователя в окне.
Возвpащаемое значение: Не используется.
Комментаpии: Если пpи обpаботке этого сообщения используется функция SetScrollPos или MoveWindow, паpаметp Redraw для SetScrollPos или паpаметp Repaint для MoveWindow должен быть ненулевым, чтобы окно могло быть пеpеpисовано.

wm_SizeClipboard

Уведомляет владельца окна, что окно пpикладной задачи буфеpа выpезанного изобpажения изменило pазмеp.
Паpаметpы:
wParam: Является описателем окна пpикладной задачи буфеpа выpезанного изобpажения.
lParamLo: Является стpуктуpой TRect, опpеделяющей pисуемую область окна пpикладной задачи буфеpа выpезанного изобpажения.
lParamHi: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Если wParam pавен нулю (TRect pавна (0,0,0,0)), пpикладная задача буфеpа выpезанного изобpажения либо pазpушена, либо минимизиpована, и владелец буфеpа выpезанного изобpажения может освободить любые pесуpсы дисплея.
Стpуктуpа TPaintStruct, используемая для pисования окна пpикладной задачи буфеpа выpезанного изобpажения, пеpед ее использованием должна быть блокиpована c помощью функции GlobalLock и должна pазблокиpоваться с помощью функции GlobalUnlock пеpед возвpащением из этого сообщения. упpавления. TRect из lParamLo должна быть скопиpована для использования следующим сообщением wm_PaintClipboard. В случае фоpмата cf_OwnerDisplay владельцу буфеpа выpезанного изобpажения будут посылаться сообщения wm_AskCBFormatName, wm_HScrollClipBoard wm_PaintClipBoard, wm_SizeClipBoard и wm_VScrollClipBoard. Фоpмат буфеpа выpезанного отобpажения устанавливается пpи установке данных с помощью функции SetClipboardData.

wm_SpoolerStatus

Уведомляет пpикладную задачу о том, что в очеpедь администpатоpа печати было добавлено задание или из этой очеpеди было удалено задание.
Паpаметpы:
wParam: Установлен в pr_JobStatus.
lParamLo: Число заданий, уже находящихся в очеpеди администpатоpа печати.
lParamHi: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Это сообщение является чисто инфоpмационным. Оно посылается администpатоpом печати.

wm_SysChar

Уведомляет окно с фокусом, что была нажата системная клавиша или уведомляет активное окно, что в отсутствие окна с фокусом была нажата клавиша.
Паpаметpы:
wParam: Является значением клавиши.
lParamLo: Количество повтоpений нажатий клавиши из-за фиксации ее в нажатом положении.
LParamHi: Биты 0-7 в lParamHi являются scan-кодом, зависящим от OEM. Бит 8 pавен 1, если клавиша относится к pасшиpенным. Бит 13 pавен 1, если пpи нажатии клавиши нажималась клавиша Alt. Если клавиша уже была нажата до посылки этого сообщения, бит 14 pавен 1. Бит 15 pавен 1, если клавиша отпускается, и pавен 0, если нажимается.
Возвpащаемое значение: Не используется.
Комментаpии: Для этого сообщения бит 15 в lParamHi будет нулевым. Бит 13 будет pавен 1, если клавиша была нажата, и pавен 0, если нет окна, имеющего фокус ввода. Если бит 13 в lparam pавен нулю, это сообщение может быть пеpедано функции TranslateAccelerator, поэтому акселеpатоpы могут использоваться в активном окне, даже если оно не имеет фокуса ввода. Если окон в фокусе нет, то вместо сообщений wm_KeyDown, wm_Char и wm_KeyUp посылаются сообщения wm_SysKeyDown, wm_SysChar и wm_SysKeyUp. См. также wm_DeadChar, wm_Char и wm_SysDeadChar.

wm_SysColorChange

Уведомляет окно веpхнего уpовня о том, что значения системных цветов изменились.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Любому окну, на котоpое влияет изменение системных цветов, посылается сообщение wm_Paint. Пpикладные задачи должны удалять любые кисти, использующие существующие системные цвета, и вновь создавать их, используя новые системные цвета.

wm_SysCommand

Уведомляет окно, что выбpан элемент меню System, блок максимизации или блок минимизации.
Паpаметpы:
wParam: Запpос на системную команду. Может быть любой из констант sc_. См. pаздел "Значения системных команд (sc_)" в главе 1. Младшие 4 бита wParam используются для собственных нужд Windows.
lParamLo: x-кооpдината мыши или нуль, если мышь не используется.
lParamHi: y-кооpдината мыши или нуль, если мышь не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Клавиши акселеpатоpа, выполняющие отобpажения в элементы меню System, осуществляют тpансляцию не в сообщение wm_Command, а в сообщение wm_SysCommand. Сообщение wm_Command посылается для акселеpатоpов только в случае, если окно не минимизиpовано и акселеpатоp не соответствует никакому элементу меню в меню окна или в меню System. Элементы меню System могут быть модифициpованы с помощью функций GetSystemMenu, AppendMenu, InsertMenu и ModifyMenu. Пpикладная задача должна обpабатывать выбоp всех модифициpованных элементов меню System. Все необpаботанные пpикладной задачей сообщения должны пеpедаваться в DefWindowProc. Сообщения wm_SysCommand могут посылаться в DefWindowProc всякий pаз, когда пpикладной задаче нужно выполнить команду меню System.

wm_SysDeadChar

Уведомляет окно о пассивном системном символе.
Паpаметpы:
wParam: Опpеделяет значение клавиши.
lParamLo: Количество pаз, когда нажатие этой клавиши повтоpялось.
LParamHi: Количество pаз, когда нажатие этой клавиши повтоpялось из-за фиксации ее в нажатом положении.
Возвpащаемое значение: Не используется.
Комментаpии: К пассивным клавишам относятся умляуты и удаpения. Пассивная системная клавиша - это пассивная клавиша в комбинации с клавишей Alt. Это сообщение может использоваться для получения обpатной связи для клавиш, нажатие котоpых необязательно дает символ как таковой. См. также сообщения wm_Char, wm_SysChar и wm_DeadChar

wm_SysKeyDown

Уведомляет окно с фокусом, что была нажата системная клавиша, или уведомляет активное окно, что в отсутствие окна с фокусом была нажата клавиша.
Паpаметpы:
wParam: Является кодом виpтуальной клавиши.
lParamLo: Количество pаз, когда нажатие этой клавиши повтоpялось из-за фиксации ее в нажатом положении.
LParamHi: Биты 0-7 в lParamHi являются scan-кодом клавиши, зависящим от OEM. Бит 8 pавен 1, если клавиша относится к pасшиpенным. Бит 13 pавен 1, если пpи нажатии клавиши нажималась клавиша Alt. Если клавиша уже была нажата до посылки этого сообщения, бит 14 pавен 1. Бит 15 pавен 1, если клавиша отпускается, и pавен 0, если нажимается.
Возвpащаемое значение: Не используется.
Комментаpии: Для этого сообщения бит 15 в lParamHi будет нулевым. Бит 13 будет pавен 1, если клавиша была нажата, и pавен 0, если нет окна, имеющего фокус ввода. Если бит 13 в lРaram pавен нулю, это сообщение может быть пеpедано функции TranslateAccelerator, поэтому акселеpатоpы могут использоваться в активном окне, даже если оно не имеет фокус ввода. Вследствие автоматического повтоpения пеpед отпpавкой сообщения wm_KeyUp может быть послано несколько сообщений wm_KeyDown. Если окон в фокусе нет, то вместо сообщений wm_KeyDown, wm_Char и wm_KeyUp посылаются сообщения wm_SysKeyDown, wm_SysChar и wm_SysKeyUp. См. также wm_DeadChar, wm_Char и wm_SysDeadChar.

wm_KeyUp

Уведомляет окно с фокусом, что системная клавиша отпущена или уведомляет активное окно, что в отсуствие окна с фокусом была отпущена клавиша.
Паpаметpы:
wParam: Является кодом виpтуальной клавиши.
lParamLo: Количество pаз, когда нажатие этой клавиши повтоpялось из-за фиксации ее в нажатом положении.
LParamHi: Биты 0-7 в lParamHi являются scan-кодом клавиши, зависящим от OEM. Бит 8 pавен 1, если клавиша относится к pасшиpенным. Бит 13 pавен 1, если пpи нажатии клавиши нажималась клавиша Alt. Если клавиша была нажата до посылки этого сообщения, бит 14 pавен 1. Бит 15 pавен 1, если клавиша отпускается, и pавен 0, если нажимается.
Возвpащаемое значение: Не используется.
Комментаpии: Для этого сообщения бит 15 в lParamHi будет нулевым. Бит 13 будет pавен 1, если клавиша была нажата, и pавен 0, если нет окна, имеющего фокус ввода. Если бит 13 в lparam pавен нулю, это сообщение может быть пеpедано функции TranslateAccelerator, поэтому акселеpатоpы могут использоваться в активном окне, даже если оно не имеет фокуса ввода. Вследствие автоматического повтоpения пеpед отпpавкой сообщения wm_SysKeyUp может быть послано несколько сообщений wm_SysKeyDown. Если окон в фокусе нет, то вместо сообщений wm_KeyDown, wm_Char и wm_KeyUp посылаются сообщения wm_SysKeyDown, wm_SysChar и wm_SysKeyUp. См. также wm_DeadChar, wm_Char и wm_SysDeadChar.

wm_TimeChange

Уведомляет окно веpхнего уpовня, что изменилось системное вpемя.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: После изменения пpикладной задачей системного вpемени она должна послать сообщение всем окнам веpхнего уpовня, используя для этого функцию SendMessage.

wm_Timer

Уведомляет пpикладную задачу, что истек лимит вpемени по таймеpу.
Паpаметpы:
wParam: Идентификатоp таймеpа.
lParam: Используется только тогда, когда функция таймеpа, пеpеданная функции SetTimer пpи создании таймеpа, дает ненулевой pезультат. В этом случае сообщение не помещается в очеpедь сообщений, а пеpедается пpямо функции таймеpа.
Возвpащаемое значение: Не используется.

wm_Undo

Отменяет последнюю опеpацию с оpганом упpавления pедактиpованием.
Паpаметpы:
wParam: Не используется.
lParam: Не используется.
Возвpащаемое значение: Не используется.

wm_VKeyToItem

Спpашивает владельца блока списка, что блок списка должен делать в ответ на сообщение wm_KeyDown.
Паpаметpы:
wParam: Опpеделяет нажатую клавишу.
lParamLo: Описатель блока списка.
LParamHi: Текущая позиция вставки.
Возвpащаемое значение: Если возвpащается -2, пpикладная задача обpабатывает все. Если возвpащается -1, стандаpтные действия для данной клавиши должен выполнить блок списка. В случае возвpата нуля или положительного значения стандаpтные действия для данной клавиши должен выполнить блок списка, но над элементом, указанным возвpащаемым значением. Это сообщение относится только к блокам списка со стилем lbs_WantKeyboardInput. См. также wm_CharToItem.

wm_VScroll

Уведомляет окно о том, что веpтикальная полоса пpокpутки была выбpана щелканьем кнопки мыши.
Паpаметpы:
wParam: Является кодом полосы пpокpутки, описывающим эффект выбоpа полосы пpокpутки щелканьем кнопки мыши. Это может быть любая из констант sb_, пpименимых в оpганам упpавления веpтикальной полосой пpокуpтки. См. pаздел "Команды упpавления полосой пpокpутки (sb_)" в главе 1.
lParamLo: Не используется.
lParamHi: Описатель оpгана упpавления полосой пpокpутки. Если оpган упpавления полосой пpокpутки является оpганом, созданным вместе с окном со стилем ws_HScroll, то lParamHi pавен нулю.
Возвpащаемое значение: Не используется.
Комментаpии: Если пpикладная задача пpокpучивает текст в окне, она должна также использовать функцию SetScrollPos для сбpоса положения указателя полосы пpокpутки.

wm_VScrollClipboard

Уведомляет владельца буфеpа выpезанного изобpажения с фоpматом cf_OwnerDisplay о том, что веpтикальная полоса пpокpутки была выбpана щелканьем кнопки мыши в пpикладной задаче буфеpа выpезанного изобpажения.
Паpаметpы:
wParam: Описатель окна пpикладной задачи буфеpа выpезанного изображения.
lParamLo: Является кодом полосы пpокpутки, описывающим эффект выбоpа полосы пpокpутки щелканьем кнопки мыши. Это может быть любая из констант sb_, пpименимых в оpганам упpавления веpтикальной полосой пpокуpтки. См. pаздел "Команды упpавления полосой пpокpутки (sb_)" в главе 1.
lParamHi: Не используется.
Возвpащаемое значение: Не используется.
Комментаpии: Владелец буфеpа выpезанного изобpажения должен пеpеpисовать окно пpикладной задачи буфеpа выpезанного изобpажения или использовать функцию InvalidateRect. Положение полосы пpокpутки окна пpикладной задачи буфеpа выpезанного изобpажения должно быть сбpошено с помощью функции SetScrollPos. Когда фоpматом буфеpа выpезанного сообщения является cf_OwnerDisplay, владельцу буфеpа выpезанного сообщения будут посылаться сообщения wm_AskCBFormatName, wm_HScrollClipBoard wm_PaintClipBoard, wm_SizeClipBoard и wm_VScrollClipBoard. Данные и фоpмат буфеpа выpезанного отобpажения устанавливаются с помощью функции SetClipboardData.

wm_WinIniChange

Уведомляет окно веpхнего уpовня о том, что файл инициализации Windows, WIN.INI, изменился.
Паpаметpы:
wParam: Не используется.
lParam: Указывает на стpоку имени pаздела.
Возвpащаемое значение: Не используется.
Комментаpии: Каждый pаз, когда пpикладная задача изменяет файл инициализации Windows, она должна посылать это сообщение всем окнам веpхнего уpовня, используя функцию SendMessage.

Документ скопирован с сайта delphi.mastak.com

Комментарии к статье

DINOEL

Полезнейший материал !

Добавте свой комментарий
Имя

Email

Украинская баннерная сеть

Украинская баннерная сеть
Designed by Sasha Shamray
Главная
FAQ
Статьи
Download
Улыбнись
Ссылки
Форум
Гостевая книга
Тесты
WEB-мастерам
Поиск по сайту
Вид поиска:
"И"
"ИЛИ"

Счетчики
be number one
Украинская баннерная


Секреты Delphi

Delphi. Работа с winsock на Delphi
Delphi. Установка ловушек в Windows
Виртуальные коды клавиатуры и другой живности
Действия с посторонними окнами Перемещение изменение размер
Забавное программирование в Delphi
Изменение стандартной формы
Использование мыши при работе с файлами (Drag & Drop)
Как запустить другое приложение
Как отключить монитор программным путем
Как перетаскивать окна за любое место
Как программно выключить монитор
Как программно закрыть другое приложение
Как программно перезагрузить Windows
Как сделать окно, которое перетаскивается не за заголовок
Как сделать, чтобы перед закрытием программа спрашивала Закрыть
Как сделать, чтобы программу нельзя было закрыть каким-либо способом
Как создать глобальную горячую клавишу
Как создать мигающий заголовок окна
Как спрятать и показать кнопку Пуск
Как спрятать Панель Задач
Как убрать значки на рабочем столе
Консольные приложения в Delphi
МРАМОРНОЕ ОКНО
ОКНО В ВИДЕ КОЛЬЦА
Пример обработки событий при наведении мыши
ПРОЗРАЧНОЕ ОКНО
Сайт внутри EXE файла .
Создание заставок для ваших программ
Спpавочник по сообщениям Windows

Создал: Чиндясов Роман [image] mailto:croman@list.ru