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

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

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

Листинг 1.22.

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ пСрСмСщСния ΠΈ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

procedure MakeMovable(Handle: HWND);

var

style: LongInt;

flags: UINT;

begin

//Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ элСмСнта управлСния

style := GetWindowLong(Handle, GWL_STYLE);

style := style or WS_OVERLAPPED or WS_THICKFRAME or WS_CAPTION;

SetWindowLong(Handle, GWL_STYLE, style);

style := GetWindowLong(Handle, GWL_EXSTYLE);

style := style or WS_EX_TOOLWINDOW;

SetWindowLong(Handle, GWL_EXSTYLE, style);

//ΠŸΠ΅Ρ€Π΅Ρ€ΠΈΡΡƒΠ΅ΠΌ Π² Π½ΠΎΠ²ΠΎΠΌ состоянии

flags := SWP_NOMOVE or SWP_NOSIZE or SWP_DRAWFRAME or

SWP_NOZORDER;

SetWindowPos(Handle, 0, 0, 0, 0, 0, flags);

end;

Как ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π·Π°Π΄Π°Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ² происходит Π² Π΄Π²Π° этапа. Π‘Π½Π°Ρ‡Π°Π»Π° считываСтся староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ стиля ΠΎΠΊΠ½Π°. ΠŸΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π˜Π›Π˜ ΡΡ‚ΠΈΠ»ΡŒ (Π° это цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) дополняСтся Π½ΠΎΠ²Ρ‹ΠΌΠΈ Ρ„Π»Π°Π³Π°ΠΌΠΈ. Π­Ρ‚ΠΎ дСлаСтся для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΏΠ°Π»ΠΈ Ρ€Π°Π½Π΅Π΅ установлСнныС значСния стиля ΠΎΠΊΠ½Π°.

Π’ΠΎΠΎΠ±Ρ‰Π΅, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° MakeMovable измСняСт Π΄Π²Π° стиля ΠΎΠΊΠ½Π°: ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ. Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ ΠΎΠΊΠ½Π° измСняСтся лишь для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ строка Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ ΠΎΠΊΠ½Π° Π·Π°Π½ΠΈΠΌΠ°Π»Π° мСньшС мСста (ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов). ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… стилСй ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 2.

Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ MakeMovable, Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½ элСмСнтов управлСния (листинг 1.23).

...

Листинг 1.23.

Π—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΈΠ΅ пСрСмСщСния ΠΈ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

procedure MakeUnmovable(Handle: HWND);

var

style: LongInt;

flags: UINT;

begin

//Π—Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ элСмСнта управлСния

style := GetWindowLong(Handle, GWL_STYLE);

style := style and not WS_OVERLAPPED and not WS_THICKFRAME

and not WS_CAPTION;

SetWindowLong(Handle, GWL_STYLE, style);

style := GetWindowLong(Handle, GWL_EXSTYLE);

style := style and not WS_EX_TOOLWINDOW;

SetWindowLong(Handle, GWL_EXSTYLE, style);

//ΠŸΠ΅Ρ€Π΅Ρ€ΠΈΡΡƒΠ΅ΠΌ Π² Π½ΠΎΠ²ΠΎΠΌ состоянии

flags := SWP_NOMOVE or SWP_NOSIZE or SWP_DRAWFRAME or

SWP_NOZORDER;

SetWindowPos(Handle, 0, 0, 0, 0, 0, flags);

end;

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ MakeMovable ΠΈ MakeUnmovable Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° измСнСния состояния Ρ„Π»Π°ΠΆΠΊΠ° Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ (листинг 1.24).

...

Листинг 1.24.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΡΡ‚ΡŒΡŽ элСмСнтов управлСния

procedure TfrmMovingControls.chkSetMovableClick(Sender: TObject);

begin

if chkSetMovable.Checked then

begin

//Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ элСмСнтов управлСния

MakeMovable(Memo1.Handle);

MakeMovable(ListBox1.Handle);

MakeMovable(Button1.Handle);

end

else

begin

//Π—Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ элСмСнтов управлСния

MakeUnmovable(Memo1.Handle);

MakeUnmovable(ListBox1.Handle);

MakeUnmovable(Button1.Handle);

end;

end;

1.6. ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΊΠΎΠ½ (Ρ„ΠΎΡ€ΠΌ) являСтся интСрСсным ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π»ΠΎΠΆΠ΅Π½ Π² Π΄ΠΈΠ·Π°ΠΉΠ½ прилоТСния.

ΠŸΡ€ΠΈ этом имССтся Π² Π²ΠΈΠ΄Ρƒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎΠΌ смыслС этого слова: ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° элСмСнтов управлСния Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡˆΡ€ΠΈΡ„Ρ‚Π°.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Delphi ΠΊΡ€Π°ΠΉΠ½Π΅ просто, вСдь Π² класс TWinControl, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ классы Ρ„ΠΎΡ€ΠΌ, встроСны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

β€’ ScaleControls – ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° элСмСнтов управлСния Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅;

β€’ ChangeScale – ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° элСмСнтов управлСния с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ выводится тСкст Π² Π½ΠΈΡ….

Оба ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Π²Π° цСлочислСнных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Π·Π½Π°ΠΌΠ΅Π½Π°Ρ‚Π΅Π»ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° Ρ„ΠΎΡ€ΠΌΡ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ задания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ приводится Π² листингС 1.25.

...

Листинг 1.25.

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚Π°

procedure TfrmScaleBy.cmbSmallerClick(Sender: TObject);

begin

ChangeScale(80, 100); //УмСньшСниС Π½Π° 20 % (Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π± – 80 %)

end;

procedure TfrmScaleBy.cmbBiggerClick(Sender: TObject);

begin

ChangeScale(120, 100); //Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° 20 % (Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π± – 120 %)

end;

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ устанавливался, для элСмСнтов управлСния Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ сСмСйства TrueType (Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это ΡˆΡ€ΠΈΡ„Ρ‚ Times New Roman).

На рис. 1.16 приводится внСшний Π²ΠΈΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹ Π΄ΠΎ измСнСния ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°.

Рис. 1.16. Π€ΠΎΡ€ΠΌΠ° Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹ послС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° Π² 1,25 Ρ€Π°Π·Π° (Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π± составляСт 80 % ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ) дСмонстрируСтся Π½Π° рис. 1.17.

Рис. 1.17. Π€ΠΎΡ€ΠΌΠ° Π² ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅ 80 %

Π’ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π΅ измСняСт своСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, установив, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, свойство AutoSize Π² True ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Object Inspector).

Если ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ использованиС свойства AutoSize вас Π½Π΅ устраиваСт, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„ΠΎΡ€ΠΌΡ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Волько ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ всСго ΠΎΠΊΠ½Π°, Π° Π΅Π³ΠΎ клиСнтской области, вСдь строка Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ остаСтся Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. РасчСт Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ клиСнтской области ΠΎΠΊΠ½Π° (GetClientRect).

2. ΠŸΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ клиСнтской области.

3. Π Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ²ΠΎΠΉ ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ, Π½ΠΎΠ²ΠΎΠΉ ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ высотой клиСнтской области; ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ значСния с ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ самой Ρ„ΠΎΡ€ΠΌΡ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ расчСта приводится Π½ΠΈΠΆΠ΅ (для увСличСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° клиСнтской области Π² 1,2 Ρ€Π°Π·Π°):...

GetClientRect(Handle, rc);

newWidth := (rc.Right – rc.Left) * 120 div 100;

newHeight := (rc.Bottom – rc.Top) * 120 div 100;

Width := Width + newWidth – (rc.Right – rc.Left);

Height := Height + newHeight – (rc.Bottom – rc.Top);

...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ послС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ увСличСния ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² точности ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠ°ΡΡˆΡ‚Π°Π±Ρƒ (ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ), Π½ΡƒΠΆΠ½ΠΎ для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ увСличСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ коэффициСнты, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½ΠΎ 1. НапримСр, ΠΏΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° Π½Π° 20 % (Π² 0,8 Ρ€Π°Π·Π°) Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° 25 % (Π² 1/0,8 = 1,25 Ρ€Π°Π·Π°).

1.7. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Π° Π² систСмноС мСню ΠΎΠΊΠ½Π°

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

Для получСния дСскриптора (HMENU) систСмного мСню ΠΎΠΊΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetSystemMenu, Π° для добавлСния ΠΏΡƒΠ½ΠΊΡ‚Π° Π² мСню – Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ AppentMenu. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ Π² систСмноС мСню, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 1.26.

...

Листинг 1.26.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² Π² систСмноС мСню ΠΎΠΊΠ½Π°

procedure TForm1.FormCreate(Sender: TObject);

var hSysMenu: HMENU;

begin

hSysMenu := GetSystemMenu(Handle, False);

AppendMenu(hSysMenu, MF_SEPARATOR, 0, \'\');

AppendMenu(hSysMenu, MF_STRING, 10001, \'Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° 20%\');

AppendMenu(hSysMenu, MF_STRING, 10002, \'Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π° 20%\');

end;

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ систСмноС мСню Ρ„ΠΎΡ€ΠΌΡ‹ Forml станСт ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° мСню, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π° рис. 1.18.

Рис. 1.18. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ Π² систСмном мСню

Однако ΠΌΠ°Π»ΠΎ просто ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡ… Π²Ρ‹Π±ΠΎΡ€Π°. Π­Ρ‚ΠΎ дСлаСтся Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ сообщСния WM_SYSCOMMAND (листинг 1.27).

...

Листинг 1.27.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² Π² систСмном мСню

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);

begin

if Message.CmdType = 10001 then

//Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°

ChangeScale(120, 100)

else if Message.CmdType = 10002 then

//УмСньшСниС ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°

ChangeScale(80, 100)

else

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

DefWindowProc(Handle, Message.Msg, Message.CmdType,

65536 * Message.YPos + Message.XPos);

end;

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ числовыС значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ AppendMenu, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡƒΠ½ΠΊΡ‚ мСню Π²Ρ‹Π±Ρ€Π°Π½. Π§Ρ‚ΠΎΠ±Ρ‹ мСню Π²Π΅Π»ΠΎ сСбя ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для всСх ΠΊΠΎΠΌΠ°Π½Π΄, рСакция Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π°Π»ΠΎΠΆΠ΅Π½Π° Π² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π½Π°ΠΌΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅, вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (функция DefWindowProc).

1.8. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΊΠΎΠ½

Иногда Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ отобраТСния Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎΠ²Π΅Ρ€Ρ… всСх ΠΎΠΊΠΎΠ½. Π—Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π΄Π°Π»Π΅ΠΊΠΎ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ: посмотритС Π½Π° ΠΎΠΊΠ½ΠΎ ДиспСтчСра Π·Π°Π΄Π°Ρ‡ Windows. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вспомнитС, Ρ‚Π΅Ρ€ΡΠ»ΠΎΡΡŒ Π»ΠΈ Ρ…ΠΎΡ‚ΡŒ Ρ€Π°Π· ΠΎΠΊΠ½ΠΎ Бвойства: Π­ΠΊΡ€Π°Π½ срСди Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΎΠΊΠΎΠ½. Π­Ρ‚ΠΎ происходит ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ пСрСкрываСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°Ρ‡ΠΊΠ° Π½Π° ПанСли Π·Π°Π΄Π°Ρ‡ (ΠΏΡ€Π°Π²Π΄Π°, это ΠΎΠΊΠ½ΠΎ всС ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ДиспСтчСра Π·Π°Π΄Π°Ρ‡).

Из сказанного Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² Π΄Π²ΡƒΡ… случаях ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ: для Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΎΠΊΠΎΠ½ прилоТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΊΠ½ΠΎ Π²Π²ΠΎΠ΄Π° пароля) ΠΈ/ΠΈΠ»ΠΈ Π² случаС, Ссли Π·Π½Π°Ρ‡ΠΎΠΊ прилоТСния Π½Π΅ выводится Π½Π° ПанСли Π·Π°Π΄Π°Ρ‡ (ΠΊΠ°ΠΊ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ, Π±Ρ‹Π»ΠΎ рассказано Π²Ρ‹ΡˆΠ΅).

ПослС нСбольшого отступлСния рассмотрим способы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π΅Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ прост Β«Π΄ΠΎ бСзобразия»: достаточно Π·Π°Π΄Π°Ρ‚ΡŒ свойству FormStyle Π² ΠΎΠΊΠ½Π΅ Object Inspector Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ f sStayOnTo. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого дСйствия ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 1.19 (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ПанСль Π·Π°Π΄Π°Ρ‡, которая ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚Π°ΠΊΠΆΠ΅ отобраТаСтся ΠΏΠΎΠ²Π΅Ρ€Ρ… всСх ΠΎΠΊΠΎΠ½).

Рис. 1.19. Π€ΠΎΡ€ΠΌΠ°, отобраТаСмая ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΊΠΎΠ½