ΠΡΠ°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_COMMAND, ΡΠΎ ΠΈΠ· Π΄Π²ΡΡ ΠΏΡΠΈΠ»Π°Π³Π°ΡΡΠΈΡ ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (lParam ΠΈ wParam) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ:
β’ ΡΡΠ°ΡΡΠΈΠ΅ 16 Π±ΠΈΡ wParam ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ;
β’ ΠΌΠ»Π°Π΄ΡΠΈΠ΅ 16 Π±ΠΈΡ wParam ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ (ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΌΠ΅Π½Ρ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ);
β’ lParam ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ (HWND) ΠΎΠΊΠ½Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ.
ΠΠ»Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ°ΡΡΠΈΡ 16 Π±ΠΈΡ ΠΈΠ· 32-Π±ΠΈΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ HiWord. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ»Π°Π΄ΡΠΈΡ 16 Π±ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ LoWord. ΠΠ±Π΅ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Windows.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ:
β’ BN_CLICKED β Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ°;
β’ EN_CHANGE β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΡΠ΅ΠΊΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅;
β’ LBN_SELCHANGE β ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΡΠΏΠΈΡΠΊΠ΅;
β’ CBN_SELCHANGE β ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠ΅ΠΌΡΡ ΡΠΏΠΈΡΠΊΠ΅.
ΠΡΠΈ ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Messages.
...ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
ΠΠΎΠ΄Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ Π² ΡΡΠΎΠΉ Π³ Π»Π°Π²Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 3.
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π½Π° ΡΠΎΡΠΌΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΡΠΎΠ΅ΠΊΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ControlsDemo.
ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ Π·Π°ΠΎΡΡΡΡΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.4. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² Π½Π΅ΠΌ (Π»ΠΈΡΡΠΈΠ½Π³ 2.21).
...ΠΠΈΡΡΠΈΠ½Π³ 2.21.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ)
program ControlsDemo;
uses
Windows, Messages,
Controls in \'Controls.pas\
{$R *.res}
var
hMainWnd: HWND;
hInst: Cardinal;
mess: MSG;
//Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
β¦
//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΈ ΡΠΈΠΊΠ»Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
begin
hInst := GetModuleHandle(nil);
//Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
if not RegisterWindow() then Exit;
hMainWnd := CreateWindow(
\'MyWindowClass\', //ΠΠΌΡ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΊΠ½Π°
\'ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ\', //ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, //ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° X ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
CW_USEDEFAULT, //ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Y ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
CW_USEDEFAULT, //Π¨ΠΈΡΠΈΠ½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
CW_USEDEFAULT, //ΠΡΡΠΎΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
HWND(nil), //ΠΠ΅Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
HMENU(nil), //ΠΠ΅Ρ ΠΌΠ΅Π½Ρ
hInst,
nil);
if (hMainWnd = HWND(nil)) then Exit;
//ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ Controls Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ
Controls.hParentWnd := hMainWnd;
Controls.hAppInst := hInst;
//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
CreateFrame(10, 80, 170, 70, β1, \'ΠΠ½ΠΎΠΏΠΊΠΈ\');
CreateButton(20, 100, 70, 30, 1001, \'ΠΠ½ΠΎΠΏΠΊΠ° 1\');
CreateButton(100, 100, 70, 30, 1002,\'ΠΠ½ΠΎΠΏΠΊΠ° 2\');
CreateFrame(200, 10, 200, 180, β1, \'Π€Π»Π°ΠΆΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ\');
CreateCheck(210, 30, 180, 20, 2001, \'Π€Π»Π°ΠΆΠΎΠΊ 1\');
CreateCheck(210, 60, 180, 20, 2002, \'Π€Π»Π°ΠΆΠΎΠΊ 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);
CreateFrame(420, 10, 300, 180, β1, \'Π‘ΠΏΠΈΡΠΊΠΈ ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅
Π½Π°Π΄ΠΏΠΈΡΠΈ\');
CreateLabel(430, 30, 70, 20, -1, \'ΠΠ°Π΄ΠΏΠΈΡΡ\');
CreateCombo(510, 30, 200, 100, 4001);
CreateList(430, 60, 280, 120, 5001);
CreateFrame(200, 200, 200, 240, β1, \'Π’Π΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠ»Ρ\');
CreateEdit(210, 220, 180, 20, 6001, \'Π’Π΅ΠΊΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅\');
CreateMemo(210, 250, 180, 180, 6002, \'Π’Π΅ΠΊΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΠΎΠΌ\'
+ #13 + #10 + \'ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅\');
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π² ΡΠΏΠΈΡΠΊΠΈ
AddToCombo(4001, \'Π‘ΡΡΠΎΠΊΠ° 1\');
AddToCombo(4001, \'Π‘ΡΡΠΎΠΊΠ° 2\');
AddToCombo(4001, \'Π‘ΡΡΠΎΠΊΠ° 3\');
AddToList(5001, \'Π‘ΡΡΠΎΠΊΠ° 1\');
AddToList(5001, \'Π‘ΡΡΠΎΠΊΠ° 2\');
AddToList(5001, \'Π‘ΡΡΠΎΠΊΠ° 3\');
ShowWindow(hMainWnd, SW_NORMAL);
//ΠΠ°ΠΏΡΡΠΊ ΡΠΈΠΊΠ»Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
while (Longint(GetMessage(mess, 0, 0, 0)) <> 0)
do begin
TranslateMessage(mess);
DispatchMessage(mess);
end;
end.
ΠΠΈΡΡΠΈΠ½Π³ 2.21 Π·Π°ΠΎΠ΄Π½ΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 2.3.
Π ΠΈΡ. 2.3. ΠΠΊΠ½ΠΎ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.22.
...ΠΠΈΡΡΠΈΠ½Π³ 2.22.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
//Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
function WindowFunc(hWnd:HWND; msg:UINT; wParam:WPARAM;
lParam:LPARAM):LRESULT; stdcall;
var
ps: PAINTSTRUCT;
begin
case msg of
WM_PAINT:
begin
//ΠΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
BeginPaint(hWnd, ps);
TextOut(ps.hdc, 10, 10, \'Π’Π΅ΠΊΡΡ Π² ΠΎΠΊΠ½Π΅\', 12);
EndPaint(hWnd, ps);
end;
WM_CLOSE:
if (hWnd = hMainWnd) then
PostQuitMessage(0); //ΠΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
//Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
WM_COMMAND:
begin
case LOWORD(wParam) of
//Π½Π°ΠΆΠ°ΡΠ° Β«ΠΠ½ΠΎΠΏΠΊΠ° 1Β»
1001: if HIWORD(wParam) = BN_CLICKED then;
//Π½Π°ΠΆΠ°ΡΠ° Β«ΠΠ½ΠΎΠΏΠΊΠ° 2Β»
1002: if HIWORD(wParam) = BN_CLICKED then;
//ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Β«Π€Π»Π°ΠΆΠΎΠΊ 1Β»
2001: if HIWORD(wParam) = BN_CLICKED then;
//ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Β«Π€Π»Π°ΠΆΠΎΠΊ 2Β»
2002: if HIWORD(wParam) = BN_CLICKED then;
//ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Β«ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ 1Β»
3001: if HIWORD(wParam) = BN_CLICKED then;
//ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Β«ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ 2Β»
3002: if HIWORD(wParam) = BN_CLICKED then;
//ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Β«ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ 3Β»
3003: if HIWORD(wParam) = BN_CLICKED then;
//Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ComboBox
4001: if HIWORD(wParam) = CBN_SELCHANGE then;
//Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ListBox
5001: if HIWORD(wParam) = LBN_SELCHANGE then;
//ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΡΠ΅ΠΊΡΡ Π² Edit
6001: if HIWORD(wParam) = EN_CHANGE then;
//ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΡΠ΅ΠΊΡΡ Π² Memo
6002: if HIWORD(wParam) = EN_CHANGE then;
end;
end;
else
begin
//ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
WindowFunc := DefWindowProc(hWnd, msg, wParam, lParam);
Exit;
end;
end;
WindowFunc := S_OK; //Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ
end;
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.22 ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ½ΡΠ΄Ρ Π½Π΅ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΡΠ΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΡΡΠ°Π»ΠΎΠ½ΠΎΠΌ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ½ΠΎΠ³Π΄Π° Π±ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΡΠ°Π·Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡ ΠΏΡΠΈΡΠ»Π°Π»ΠΈ, Π° ΠΏΠΎ ΡΠΈΠΏΡ. Π ΡΠΎΠΌΡ ΠΆΠ΅ Π² ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΡΠ°Π·Ρ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π³ΡΡΠΏΠΏΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ 1 Par am ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_COMMAND.
ΠΡΡΠ°ΡΠΈ, ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ 19 ΠΠ±Π°ΠΉΡ.
2.4. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π° Windows
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Windows API Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π°. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ API-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΡΡΡΠΊΡΡΡΡ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Π΄Π»Ρ ΡΡΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ:
β’ CommDlg β Π΄Π»Ρ ΠΎΠΊΠΎΠ½ ΠΎΡΠΊΡΡΡΠΈΡ/ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°, Π²ΡΠ±ΠΎΡΠ° ΡΠ²Π΅ΡΠ° ΠΈ ΡΡΠΈΡΡΠ°, ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ΅ΠΊΡΡΠ°;
β’ ShlObj ΠΈ ActiveX β Π΄Π»Ρ ΠΎΠΊΠ½Π° Π²ΡΠ±ΠΎΡΠ° ΠΏΠ°ΠΏΠΊΠΈ (Π²ΡΠΎΡΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ Π΄ΠΎΡ ΡΡΠΏΠ° ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ IMalloc, Π·Π°ΡΠ΅ΠΌ β Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅);
β’ Windows β ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΡΡΠΊΡΡΡ ΠΈ API-ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° (ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ°);
β’ ShellAPI β Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
ΠΠ°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² ΠΏΠΎΠ΄ΡΠ°Π·Π΄. Β«ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Β».
...ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π΄Π°Π»Π΅Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π²ΡΠ·ΠΎΠ²Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ hApplnst ΠΈ hParentWnd. ΠΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π²Π½Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ . ΠΠ»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ I nit, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ hParentWnd ΠΈ hApplnst.
ΠΠΊΠ½ΠΎ ΠΎΡΠΊΡΡΡΠΈΡ/ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°
Π§ΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΠΎΠΊΠ½Π° ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π»ΠΈΡΡΠΈΠ½Π³ 2.23.
...ΠΠΈΡΡΠΈΠ½Π³ 2.23.
ΠΠΊΠ½ΠΎ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°
function ShowOpen(strFilter: string; nFilterIndex: Integer = 0;
strInitFileName: string = \'\
var
ofn: OPENFILENAME;
begin
ZeroMemory(Addr(ofn), SizeOf(ofn));
//Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠ° (260 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²)
SetLength(strInitFileName, MAX_PATH);
PrepareFilterString(strFilter);
//ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
ofn.lStructSize := SizeOf(ofn);
ofn.hWndOwner := hParentWnd;
ofn.hInstance := hAppInst;
ofn.lpstrFilter := PAnsiChar(strFilter);
ofn.nFilterIndex := nFilterIndex;
ofn.lpstrFile := PAnsiChar(strInitFileName);
ofn.nMaxFile := MAX_PATH;
ofn.lpstrTitle := pAnsiChar(strTitle);
ofn.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or
OFN_HIDEREADONLY;
//ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
if (GetOpenFileName(ofn) = True) then
ShowOpen := ofn.lpstrFile;
end;
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.23 ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ β ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΡΠ°ΠΉΠ»Π° Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΡΠ°Π» ΠΈΠ»ΠΈ Π²Π²Π΅Π» ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°. ΠΠ΄Π΅ΡΡ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΡΠ΄Π½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ OPENFILENAME. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΈ Π»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΠΈΠΌ ΡΠ»Π°Π³ΠΎΠ² (ΠΏΠΎΠ»Π΅ Flags):
β’ OFN_FILEMUSTEXIST β ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΏΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°;
β’ OFN_PATHMUSTEXI ST β Π½Π΅ Π΄Π°Π΅Ρ Π²Π²Π΅ΡΡΠΈ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π² Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ Ρ:\docs\mydocl.doc, Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠΈ docs Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅);
β’ OFNHIDEREADONLY β Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ»Π°ΠΆΠΎΠΊ Π’ΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, Π·Π°ΡΠ΅ΠΌ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ PrepareFilterString (Π»ΠΈΡΡΠΈΠ½Π³ 2.24).
...ΠΠΈΡΡΠΈΠ½Π³ 2.24.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠ»ΡΡΡΠ°
procedure PrepareFilterString(var strFilter: string);
var
i: Integer;
begin
for i := 1 to length(strFilter) do