Размер шрифта
-
+

Delphi. Трюки и эффекты - стр. 39

CreateButton(230, 60, 220, 30, 1011, 'Подключение сетевого

ресурса');

CreateButton(230, 100, 220, 30, 1012, 'Отключение сетевого

ресурса');

CreateButton(230, 140, 220, 30, 1013, 'Системное окно "О про-

грамме"');

//Текстовое поле для результата

CreateMemo(20, 270, 430, 100, 2001);

ShowWindow(hMainWnd, SW_NORMAL);

//Запуск цикла обработки сообщений

while (Longint(GetMessage(mess, 0, 0, 0)) <> 0) do

begin

if (IsDialogMessage(hMainWnd, mess) = False) then

begin

TranslateMessage(mess);

DispatchMessage(mess);

end;

end;

end.

Код функции RegisterWindow опущен, так как он аналогичен приведенному в листинге 2.4. Функции работы с рассмотренными ранее диалоговыми окнами вынесены в модуль StdWindows (файл StdWindows. pas).

Особенностью цикла обработки сообщений в этом примере является использование API-функции IsDialogMessage, которая позволяет реагировать на некоторые действия пользователя так, как это делается в диалоговых окнах. Примером может быть перемещение фокуса между окнами при нажатии клавиши Tab.

Перед функцией RegisterWindow (на месте многоточия перед ее объявлением в листинге 2.33) находится функция обработки сообщений, имеющая следующий вид (листинг 2.34).

Листинг 2.34. Функция обработки сообщений

function WindowFunc(hWnd:HWND; msg:UINT; wParam:WPARAM;

lParam:LPARAM):LRESULT; stdcall;

var

hOldFont: HFONT;

strBuf: String;

hEditDC: HDC;

begin

case msg of

WM_CLOSE:

if (hWnd = hMainWnd) then PostQuitMessage(0);

WM_CTLCOLOREDIT: //Сообщения от Edit перед перерисовкой

begin

//Зададим тексту Edit выбранный цвет

hEditDC := HDC(wParam);

SetTextColor(hEditDC, curColor);

GetCurrentObject(hEditDC, OBJ_BRUSH);

end;

WM_COMMAND:

if (HIWORD(wParam) = BN_CLICKED) then

begin

//Определим, какая кнопка нажата

case LOWORD(wParam) of

1001: //Открытие файла

begin

SetText(2001, 'Открыт файл:' + #13 + #10 +

ShowOpen('Все файлы|*.*||'));

end;

1002: //Сохранение файла

begin

SetText(2001, 'Путь для сохранения:' + #13 + #10 +

ShowSave('Все файлы|*.*||'));

end;

1003: //Выбор цвета

begin

curColor := ShowChooseColor(curColor);

Str(curColor, strBuf);

SetText(2001, 'Выбранный цвет:' + #13 + #10 + strBuf);

end;

1004: //Выбор шрифта

begin

if (ShowChooseFont(font) = True) then

begin

//Замена шрифта в Edit

hOldFont := HFONT(

SendDlgItemMessage(hMainWnd,2001,WM_GETFONT, 0,0));

hCurFont := CreateFontIndirect(font);

SendDlgItemMessage(hMainWnd, 2001, WM_SETFONT,

Integer(hCurFont),

Integer(True));

SetText(2001, 'Текст, записанный выбранным

шрифтом');

if (hOldFont <> 0) then DeleteObject(hOldFont);

end;

end;

1010: //Выбор папки

begin

SetText(2001, 'Выбранная папка:' + #13 + #10 +

Страница 39