Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Delphi. Π’Ρ€ΡŽΠΊΠΈ ΠΈ эффСкты». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 12

Автор Π’Π°Π»Π΅Ρ€ΠΈΠΉ Борисок

PAnsiChar(strInfo),LoadIcon(0, IDI_ASTERISK));

end;

ΠŸΡ€Π°Π²Π΄Π°, Π² ΠΎΠΊΠ½Π΅ О ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Windows Π₯Π  Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ‚Π²Π΅Π΄Π΅Π½ΠΎ всСго Π΄Π²Π΅ строки (ΠΈ мСсто для Π·Π½Π°Ρ‡ΠΊΠ° слСва ΠΎΡ‚ ΠΎΠΊΠ½Π°). ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ мСсто Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ информация ΠΎ рСгистрации ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ фирмСнная эмблСма Microsoft Windows Π₯Π .

ДСмонстрационноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ нСбольшоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ описанныС Π²Ρ‹ΡˆΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ StandartWindows). Окно этого прилоТСния приводится Π½Π° рис. 2.8.

Рис. 2.8. Окно дСмонстрационного прилоТСния

Π Π°Π·ΠΌΠ΅Ρ€ Π•Π₯Π•-Ρ„Π°ΠΉΠ»Π° прилоТСния Ρ€Π°Π²Π΅Π½ 22 ΠšΠ±Π°ΠΉΡ‚. Π’ листингС 2.33 приводятся объявлСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ созданиС ΠΎΠΊΠ½Π° ΠΈ элСмСнтов управлСния Π² Π½Π΅ΠΌ, Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний (Ρ„Π°ΠΉΠ» StandartWindows. dpr). Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рассмотрСнными Π²Ρ‹ΡˆΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ вынСсСны Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ StdWindows (Ρ„Π°ΠΉΠ» StdWindows.pas). Π’ этом ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ листингС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π²Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· модуля Controls.

...

Листинг 2.33.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΠ΄ создания ΠΎΠΊΠ½Π° ΠΈ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний

program StandartWindows;

{$R *.res}

uses

Windows, Messages, CommDlg,

Controls in \'Controls.pas\',

StdWindows in \'StdWindows.pas\

var

hMainWnd: HWND;

hInst: Cardinal;

mess: MSG;

curColor: COLORREF;

font: LOGFONT;

hCurFont: HFONT;

…

function RegisterWindow():Boolean;

…

begin

hInst := GetModuleHandle(nil);

//РСгистрация ΠΈ созданиС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°

if not RegisterWindow() then Exit;

hMainWnd := CreateWindow(

\'MyWindowClass\', //Имя класса окна

\'Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΎΠΊΠ½Π° Windows\', //Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°

WS_CAPTION or WS_SYSMENU or WS_CLIPCHILDREN or WS_CLIPSIBLINGS,

CW_USEDEFAULT, //ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° X ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

CW_USEDEFAULT, //ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Y ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

470, 420,

HWND(nil), //НСт Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°

HMENU(nil), //НСт мСню

hInst,

nil);

if (hMainWnd = HWND(nil)) then Exit;

//Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ модуля Controls для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Π»Π°Π²Π½Ρ‹ΠΌ

//ΠΎΠΊΠ½ΠΎΠΌ прилоТСния

Controls.hParentWnd := hMainWnd;

Controls.hAppInst := hInst;

//Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ модуля StdWindows для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Π»Π°Π²Π½Ρ‹ΠΌ

//ΠΎΠΊΠ½ΠΎΠΌ прилоТСния

StdWindows.hParentWnd := hMainWnd;

StdWindows.hAppInst := hInst;

//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ для открытия Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½

CreateButton(20, 20, 200, 30, 1001, \'ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°\');

CreateButton(20, 60, 200, 30, 1002, \'Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°\');

CreateButton(20, 100, 200, 30, 1003, \'Π’Ρ‹Π±ΠΎΡ€ Ρ†Π²Π΅Ρ‚Π°\');

CreateButton(20, 140, 200, 30, 1004, \'Π’Ρ‹Π±ΠΎΡ€ ΡˆΡ€ΠΈΡ„Ρ‚Π°\');

CreateButton(20, 180, 200, 30, 1005, \'Окно поиска тСкста\');

CreateButton(20, 220, 200, 30, 1006, \'Окно поиска ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹\');

CreateButton(230, 20, 220, 30, 1010, \'Π’Ρ‹Π±ΠΎΡ€ ΠΏΠ°ΠΏΠΊΠΈ\');

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 +

ShowChooseFolder());

end;

1011: //ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сСтСвого рСсурса

begin

ShowConnection();

end;

1012: //ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сСтСвого рСсурса

begin

ShowDisconnect();

end;

1013: //Окно «О ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅Β»

begin

ShowAbout(\'Standart windows\',

\'ДСмонстрация использования стандартных \' +

\'ΠΎΠΊΠΎΠ½ Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΈΠ· чистого API-прилоТСния\');

end;

end;

end;

else

begin

//ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

WindowFunc := DefWindowProc(hWnd, msg, wParam, lParam);

Exit;

end;

end;

WindowFunc := S_OK; //Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ

end;

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сообщСний здСсь довольно проста, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ измСнСния ΡˆΡ€ΠΈΡ„Ρ‚Π° тСкстового поля. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Ρ€Ρ‹Π²ΠΎΠΊ листинга 2.34:

...

//Π—Π°ΠΌΠ΅Π½Π° ΡˆΡ€ΠΈΡ„Ρ‚Π° Π² Edit

hOldFont := HFONT(SendDlgItemMessage(hMainWnd,2001,WM_GETFONT, 0,0));

hCurFont := CreateFontIndirect(font);

SendDlgItemMessage(hMainWnd, 2001, WM_SETFONT,

Integer(hCurFont), Integer(True));

SetEditText(2001, \'ВСкст, записанный Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ\');

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

Π­Ρ‚ΠΎΡ‚ довольно ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° всСго лишь замСняСт ΡˆΡ€ΠΈΡ„Ρ‚ Π² тСкстовом ΠΏΠΎΠ»Π΅. ΠŸΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для задания ΡˆΡ€ΠΈΡ„Ρ‚Π° любого элСмСнта управлСния. Π’ частности, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² этой Π³Π»Π°Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… тСкст Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ…, надписях ΠΈ Ρ‚. Π΄. выглядит довольно Π½Π΅Π²Π·Ρ€Π°Ρ‡Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСмный ΡˆΡ€ΠΈΡ„Ρ‚, установлСнный ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Бпособ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚ всСх элСмСнтов управлСния ΠΎΠΊΠ½Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½ Π΄Π°Π»Π΅Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ сущСствСнный ΠΌΠΎΠΌΠ΅Π½Ρ‚: Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ GDI (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС – ΡˆΡ€ΠΈΡ„Ρ‚) послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ стали Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»Π°Π΄Π΅Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 65 000 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² GDI. И ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Β«ΡƒΡ‚Π΅Ρ‡ΠΊΠΈΒ» рСсурсов GDI ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚ (ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), ΠΊΠΎΠ³Π΄Π° Π²Π΄Ρ€ΡƒΠ³ ΠΎΠΊΠ½Π° прилоТСния Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ странно (Ссли Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ).

2.5. Установка ΡˆΡ€ΠΈΡ„Ρ‚Π° элСмСнтов управлСния

Π•ΡΡ‚ΡŒ мноТСство способов установки ΡˆΡ€ΠΈΡ„Ρ‚Π° тСкста, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Π² элСмСнтах управлСния. МоТно, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ создании ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта управлСния ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ Π΅ΠΌΡƒ сообщСниС WM_SETFONT, пСрСдавая дСскриптор (HFONT) созданного Ρ€Π°Π½Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡˆΡ€ΠΈΡ„Ρ‚Π°. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΊΠΎΠ΄ создания ΠΈ установки ΡˆΡ€ΠΈΡ„Ρ‚Π° элСмСнтов управлСния (с использованиСм рассмотрСнных Π² этой Π³Π»Π°Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ) ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π² листингС 2.35.

...

Листинг 2.35.

Установка ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ создания элСмСнтов управлСния

//Π¨Ρ€ΠΈΡ„Ρ‚ для элСмСнтов управлСния

font := CreateFont(16, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET,

OUT_CHARACTER_PRECIS, CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY, DEFAULT_PITCH, \'Courier new\');

//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ элСмСнтов управлСния

ctrl := CreateButton(20, 30, 70, 30, 1001, \'Кнопка 1\');

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl := CreateButton(100, 30, 70, 30, 1002,\'Кнопка 2\');

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl := CreateCheck(210, 30, 180, 20, 2001, \'Π€Π»Π°ΠΆΠΎΠΊ 1\');

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl := CreateCheck(210, 60, 180, 20, 2001, \'Π€Π»Π°ΠΆΠΎΠΊ 2\', True);

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl := CreateOption(210, 100, 180, 20, 3001, \'ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ 1\',

True);

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl := CreateOption(210,130,180,20,3002, \'ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ 2\',

False, True);

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl := CreateOption(210, 160, 180, 20, 3003, \'ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ 3\',

True);

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

//Запуск Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний

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

do begin

TranslateMessage(mess);

DispatchMessage(mess);

end;

//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π°

DeleteObject(font);

Выглядит ΠΎΠΊΠ½ΠΎ с элСмСнтами управлСния, ΡˆΡ€ΠΈΡ„Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… установлСн Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· рассмотрСнных способов, Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 2.9.

Рис. 2.9. Π¨Ρ€ΠΈΡ„Ρ‚ элСмСнтов управлСния, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ систСмного

Бпособ задания ΡˆΡ€ΠΈΡ„Ρ‚Π°, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² листингС 2.35, Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π•Π³ΠΎ сущСствСнным нСдостатком являСтся Π΄Π²ΡƒΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства строк ΠΊΠΎΠ΄Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… созданиС элСмСнтов управлСния. Для ΠΎΠΊΠΎΠ½, содСрТащих большоС количСство элСмСнтов управлСния, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ (листинг 2.36).

...

Листинг 2.36.

Установка ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ элСмСнтов управлСния

//Π¨Ρ€ΠΈΡ„Ρ‚ для элСмСнтов управлСния

font := CreateFont(16, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET,

OUT_CHARACTER_PRECIS, CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY, DEFAULT_PITCH, \'Courier new\');

//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ элСмСнтов управлСния

CreateButton(20, 30, 70, 30, 1001, \'Кнопка 1\');

CreateButton(100, 30, 70, 30, 1002,\'Кнопка 2\');

CreateCheck(210, 30, 180, 20, 2001, \'Π€Π»Π°ΠΆΠΎΠΊ 1\');

CreateCheck(210, 60, 180, 20, 2001, \'Π€Π»Π°ΠΆΠΎΠΊ 2\', True);

CreateOption(210, 100, 180, 20, 3001, \'ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ 1\', True);

CreateOption(210, 130, 180, 20, 3002, \'ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ 2\', False, True);

CreateOption(210, 160, 180, 20, 3003, \'ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ 3\', True);

//Установка ΡˆΡ€ΠΈΡ„Ρ‚Π° элСмСнтов управлСния