if Failed (hRet) then ErrorOut(hRet, 'SetHWnd FAILED');
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ
hRet := FDDSPrimary.SetClipper(FDDClipper);
if Failed (hRet) then ErrorOut(hRet, 'SetClipper FAILED^);
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΡ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΄Π°Π»ΠΈΡΡ Π² ΠΊΠΎΠ΄Π΅ ΡΡΡΠΎΠΊΡ Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ offsetRect, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π·Π° Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ. ΠΠ°ΡΡΠΈΠ½ΠΊΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΡΠΊΠ°ΠΆΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΡΡΠΈΡ Π²ΠΈΠ΄ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π°.
ΠΠ΄Π½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ DirectX SDK ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ, Ρ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ ΡΡΠΎ Π² ΠΌΠΎΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ. ΠΠ΅Π³ΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ: ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΎΡ nil, Π° Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π»ΡΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π·Π°Π½ΡΡΡΡ ΠΈΠΌ. Π’Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ nil ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ.
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ BitFast.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 27, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ΅ΠΌΡ ΠΎΠΊΠΎΠ½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ½ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΊΡΡΡΠΎΡΠΎΠΌ (ΡΠΈΡ. 3.13).
ΠΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, Π΄Π»Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π°:
procedure TfrmDD.FormResize(Sender: TObject);
var
hRet : HRESULT;
ddsd : TDDSurfaceDesc2;
begin
if Assigned(FDDSBack) then FDDSBack := nil;
ZeroMemory(@ddsd, SizeOf(ddsd));
with ddsd do begin
dwSize := SizeOf(ddsd);
dwFlags := DDSD_CAPS or DDSDJiEIGHT or DDSD_WIDTH;
ddsCaps.dwCaps := DDSCAPS_OFFSCREENPLAIN;
dwWidth := ClientWidth; // Π Π°Π·ΠΌΠ΅ΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ
dwHeight := ClientHeight; // ΠΎΠΊΠ½Π°
end;
hRet := FDD.CreateSurface(ddsd, FDDSBack, nil);
if Failed(hRet) then ErrorOut(hRet, 'Create Back Surface');
FormPaint (nil);
end;
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΊΡΡΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π½Π° Π»ΡΠ±ΡΡ ΡΠΎΡΠΊΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠΊΠ½Π°. ΠΠ»Ρ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ°Π·Π° (Π΅Π΅ ΡΠ°Π·ΠΌΠ΅Ρ 32x32 ΠΏΠΈΠΊΡΠ΅Π»Π°) ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ rcMouse ΡΠΈΠΏΠ° TRECT. ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° Π²Π±Π»ΠΈΠ·ΠΈ Π³ΡΠ°Π½ΠΈΡΡ ΠΎΠΊΠ½Π° ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ°Π·Π°:
procedure TfrmDD.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
wrkl, wrkJ : Integer;
begin
mouseX := X;
if X < ClientWidth - 32
then wrkl := 32 // ΠΠΎ Π₯ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π²Π΅ΡΡ ΡΠ°ΡΡΡ
else wrkl := ClientWidth - X; // ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ°Π·Π°
mouseY := Y;
if Y < ClientHeight - 32
then wrkJ := 32 // ΠΠΎ Y ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π²Π΅ΡΡ ΡΠ°ΡΡΡ
else wrkJ := ClientHeight - Y; // ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ°Π·Π°
SetRect (rcMouse, 0, 0, wrkl, wrkJ); // ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΎΠ±ΡΠ°Π·Π°
FormPaint (nil); // ΠΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ
end;
ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π° ΠΌΠ΅ΡΠΎΠ΄ BitFast ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΡΡΡΠΎΡΠ°:
procedure TfrmDD.FormPaint(Sender: TObject);
var
rcDest, wrkRect : TRECT;
p : TPOINT;
begin
p.X := 0;
p.Y := 0;
Windows.ClientToScreen(Handle, p);
Windows.GetClientRect(Handle, rcDest);
OffsetRect(rcDest, p.X, p.Y);
SetRect (wrkRect, 0, 0, ClientWidth, ClientHeight);
//ΠΠ° Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ½Π°
if Failed (FDDSBack.Blt (SwrkRect, FDDSBackGround, nil,
DDBLT^WAIT, nil}) then if Failed (RestoreAll) then Exit;
// ΠΠΎΠ²Π΅ΡΡ ΡΠΎΠ½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ°
if Failed (FDDSBack.BltFast (mouseX, mouseY, FDDSImage, @rcMouse,
DDBLTFAST_WAIT or DDBLTFAST_SRCCOLORKEY))
then if Failed (RestoreAll) then Exit;
// ΠΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ Π½Π° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ
if Failed (FDDSPrimary.Blt (@rcDest, FDDSBack, nil, DDBLT__WAIT, nil))
then if Failed (RestoreAll) then Exit;
end;
ΠΠ»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΡΡΡΠΎΡΠ° Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠ±Π΅Π³Π½Π΅ΠΌ ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠΌΡ ΡΠΏΠΎΡΠΎΠ±Ρ: Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ showcursor. Π Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π±ΠΎΡΡ Π²ΡΠ·ΠΎΠ²Π΅ΠΌ Π΅Π΅ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ False. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΊΡΡΡΠΎΡΠΎΠΌ ΠΎΡΡΠ°Π»Π°ΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠ°Ρ ΠΏΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΠ°ΠΌΠΊΠΈ ΠΎΠΊΠ½Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΡΡΡΠΎΡ ΠΌΡ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΠΎΡΠΊΠ»ΡΡΠ΅Π½. ΠΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄ΠΎΡΡΠΈΡΡ Π½Π΅Π»Π΅Π³ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΊΡΡΡΠΎΡ Π² Π»ΠΎΠ²ΡΡΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_NCMOUSEMOVE, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΎΠΊΠ½Π°, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ Π½Π΅ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΌ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ° Π² ΠΎΠΊΠ½ΠΎ.
Π‘Π°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΊΡΡΡΠΎΡΠ° Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ OnMouseMove, Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° Π²Π±Π»ΠΈΠ·ΠΈ Π³ΡΠ°Π½ΠΈΡ ΠΎΠΊΠ½Π°. ΠΠΎ Π΄Π»Ρ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π°Π΄ΠΎ Π»ΠΈΠ±ΠΎ Π±Π΅ΡΠΏΡΠ΅ΡΡΠ²Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ ΠΎΠΊΠ½ΠΎ, Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΡΡΡΡ.
ΠΡΠΊΠΎΠ»ΡΠ·Ρ Ρ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ», ΡΡΠΎ Π΄Π»Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Π°. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 28, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠ΄Π΅ΡΡ Π²Π²Π΅Π΄Π΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Pixel Format ΡΠΈΠΏΠ° TDDPixelFormat; ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ Π·Π°Π½ΠΎΡΠΈΠΌ Π΅Π΅ ΡΠΎΡΠΌΠ°Ρ Π² Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ:
ZeroMemory(@PixelFormat, SizeOf(PixelFormat));
PixelFormat.dwSize := SizeOf(PixelFormat);
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Π°
hRet := FDDSPrimary.GetPixelFormat(PixelFormat);
if Failed (hRet) then ErrorOut(hRet, 'GetPixelFormat');
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΡΠ²Π½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π΅Π΅ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Π°:
ZeroMemory(@ddsd, SizeOf(ddsd));
with ddsd do begin
dwSize := SizeOf(ddsd);
// ΠΠΎΠ±Π°Π²ΠΈΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π°Π³
dwFlags := DDSD_CAPS or DDSD_HEIGHT or DDSD_WIDTH or DDSD_PIXELFORMAT;
ddsCaps.dwCaps := DDSCAPS_OFFSCREENPLAIN;
ddpfPixelFormat := PixelFormat; // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ
dwWidth := ClientWidth;
dwHeight := ClientHeight;
end;
ΠΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ, Ρ ΡΠ°Π½ΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ°, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ²Π½ΠΎ, Π΄Π»Ρ Π½Π΅Π΅ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΡΠΌΠ°Ρ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠΉ Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ, ΡΠ°ΡΡΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° TBitmap ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΡΠΈΠ΅ΠΌ ΠΌΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ Π³Π»Π°Π²Π΅.
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠΊΠΎΠ½Π½ΡΠΌ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΌ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ ΠΏΠΎ Ρ ΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π² ΠΎΠΊΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ. ΠΠ±Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π°ΠΌΠΈ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΠ°Π½Π΅Π΅, ΠΈ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π½ΠΎΠ²ΠΎ, ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ. Π’Π°ΠΊΠΆΠ΅ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π½Π°Π΄ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π΅Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π° Ρ DirectDraw.
ΠΠΎΡ ΠΈ Π²ΡΠ΅ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ - ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΡ 29. ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠΈΠΌ ΠΏΠ΅ΡΠ΅Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° Delphi ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° DirectX 7.0 SDK. Π Π°Π±ΠΎΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ: ΠΏΠΎ ΡΠΊΡΠ°Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉ ΠΊΡΡΠΆΠΎΠΊ, ΠΎΡΡΠΊΠ°ΠΊΠΈΠ²Π°ΡΡΠΈΠΉ ΠΎΡ Π³ΡΠ°Π½ΠΈΡ ΠΎΠΊΠ½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π±ΠΈΠ»ΡΡΡΠ΄Π½ΠΎΠΌΡ ΡΠ°ΡΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½ΠΎ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π² Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ, Π½Π°ΠΆΠ°Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ <Alt>+<Enter>, ΠΎ ΡΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΠ°ΡΡΡ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ³Π»Ρ ΡΠΊΡΠ°Π½Π° (ΡΠΈΡ. 3.14).
ΠΠ»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΡΡΠΆΠΎΡΠΊΠ° ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ 640x480 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² ΠΈ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ²:
procedure TfrmDD.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
Resize := False; // ΠΠ°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ Π»ΡΠ±ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π°
end;
ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π»ΡΡΡΠ΅ Π·Π°Π΄Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΊΡΠ°Π½Π° Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ, ΡΠ΅ΠΌ ΠΏΡΠΈΠ½ΡΡΡΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ²ΠΎΠ΄ΠΈΠΌΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ ΠΊΡΡΠ³Π° Π½Π° ΡΠΊΡΠ°Π½Π΅, Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΡΠ²ΠΎΠ΄Π°:
// ΠΡΡΠ³ ΡΠΈΡΡΠ΅ΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ GDI, Π²ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ
xl : Integer =0; // ΠΠ΅Π²ΡΠΉ Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ³ΠΎΠ» ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°
yl : Integer = 0;
Ρ 2 : Integer =40; // ΠΡΠ°Π²ΡΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡΠ³ΠΎΠ» ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°
Ρ2 : Integer = 40;
xDir : Integer =4; // Π’Π΅ΠΊΡΡΠ΅Π΅ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ X
yDir : Integer =4; // Π’Π΅ΠΊΡΡΠ΅Π΅ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Y
rcScreen : TRECT; // ΠΠΎΠ·ΠΈΡΠΈΡ ΠΎΠΊΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°
rcViewport : TRECT; // ΠΠ±Π»Π°ΡΡΡ Π²ΡΠ²ΠΎΠ΄Π°, 640x480
rcWindow : TRECT; // Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΎΠΊΠ½Π° Π½Π° ΡΠΊΡΠ°Π½Π΅
flgWindowed : BOOL = False; // Π’Π΅ΠΊΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠΎΠ΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΆΠΈΠΌΠ°:
procedure TfrmDD.FormCreate(Sender: TObject);
var
hRet : HRESULT;
begin
// ΠΠ±Π½ΡΠ»ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ DirectDraw
FDDClipper := nil; // ΠΠ±ΡΠ΅ΠΊΡ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»ΡΡΡΡΡ Π΄Π²Π°ΠΆΠ΄Ρ,
FDDSBack := nil; // ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΠ³ΠΎ ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ, Π½ΠΎ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ
FDDSPrimary := nil; // ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° FormCreate Π»ΡΡΡΠ΅ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΠ΄Π΅Π»Π°ΡΡ
FDD := nil;
//Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΆΠΈΠΌΠ° Π·Π°Π΄Π°Π΅ΠΌ ΡΡΠΈΠ»Ρ ΡΠ°ΠΌΠΊΠΈ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΠΊΡΡΡΠΎΡΠ°
if flgWindowed then begin
BorderStyle := bsSizeable; // ΠΠ±ΡΡΠ½ΡΠΉ ΡΡΠΈΠ»Ρ, Ρ ΠΎΠ±Π»Π°ΡΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°
ShowCursor(True);
end
else begin
BorderStyle := bsNone; // ΠΠ΅Π· ΡΠ°ΠΌΠΊΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°
ShowCursor(False);
end;
// Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ DirectDraw
hRet := DirectDrawCreateEx (nil, FDD, IDirectDraw7, nil);
if Failed(hRet) then ErrorOut(hRet, 'DirectDrawCreateEx');
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ΅ΠΉ
if Failed (InitSurfaces(Handle)) then Close;
FActive := True;
end;
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π² ΡΠ΅Π±Π΅ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°, ΠΈΠ·ΡΡΠ΅Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠΎΠ²: