ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ графичСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ ΠšΡƒΠΏΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Π£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’Π°ΠΊ ΠΆΠ΅ слСдуСт ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (x0, y0), Ссли лСвая ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π°. TShape = (sPen, sRect, sEllipse, sPoly, sFill); // пСрСчислСниС Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Π° Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΈ ΡΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ; Из Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ слСдуСт, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΌΠ° раскрыта ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, PaintBox Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ лишь нарисованный… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ графичСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ
    • 1. 1. Π’ΠΈΠΏΡ‹ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
    • 1. 2. Π¦Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ
  • 2. ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² Delphi
    • 2. 1. ΠšΠ»Π°ΡΡΡ‹ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² TGraphicsObject
      • 2. 1. 1. Класс TFont
      • 2. 1. 3. TBrush
    • 2. 2. Класс TCanvas
  • 3. Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ OpenGl ΠΈ DirectX
    • 3. 1. РисованиС Π² Delphi с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ OpenGl
      • 3. 1. 1. Delphi ΠΈ OpenGl
    • 3. 1. ОписаниС DirectX
      • 3. 1. 1. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ слой DirectX
      • 3. 1. 2. HAL ΠΈ HEL
      • 3. 1. 3. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ DirectX
  • 4. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ графичСского Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°
    • 4. 1. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹
    • 4. 2. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1 — Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, PaintBox Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ лишь нарисованный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

img, buffer: TBitmap;

x0,y0: integer;

Π”Π°Π»Π΅Π΅, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ dwn: boolean, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Π½Π°ΠΆΠ°Ρ‚Π° лСвая ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΈΠ»ΠΈ Π½Π΅Ρ‚ (Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅Ρ‚).

Для упрощСния Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ TShape = (sPen, sRect, sEllipse, sPoly, sFill), содСрТащий всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ рисования (ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, эллипс, ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈ Π·Π°Π»ΠΈΠ²ΠΊΠ°).

Π’Π°ΠΊ ΠΆΠ΅ трСбуСтся ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ nowdrawing: TShape. Π’ Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ хранится Ρ‚ΠΈΠΏ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, для рисования.

Π’ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ OnCreate Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π·Π°Π΄Π°Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния всСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. По-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ„ΠΎΡ€ΠΌΠ° рисования устанавливаСтся ΠΊΠ°ΠΊ ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ, ΠΊΠ½ΠΎΠΏΠΊΠ° dwn ΠΎΡ‚ΠΆΠ°Ρ‚Π°. Π’Π°ΠΊ ΠΆΠ΅ здСсь ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ img ΠΈ buffer ΠΈ Π·Π°Π΄Π°ΡŽΡ‚ся ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π² ΡΠΎΠΎΡ‚вСтствии с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ PaintBox.

Π’ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΈ OnMouseDown элСмСнта PaintBox Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ лСвая ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΈ, Ссли это Ρ‚Π°ΠΊ, трСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nowdrawing, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΡ‹ΡˆΠΈ.

НуТно Ρ‚Π°ΠΊ ΠΆΠ΅ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹Π±Ρ€Π°Π½ инструмСнт «Π—Π°Π»ΠΈΠ²ΠΊΠ°», Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΌΡ‹ΡˆΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π° Ρ‚рСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ„Π»Π°Π³ dwn Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π·Π°Π»ΠΈΠ²ΠΊΠΈ Π½Π°Π΄ΠΎ ΡΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ.

ΠŸΡ€ΠΈ рисовании Π»ΠΎΠΌΠ°Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° рСакция ΠΈ Π½Π° ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ: для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для рисования Π»ΠΎΠΌΠ°Π½Π½ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»Π΅Π²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ, ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ Π½Π° ΠΏΡ€Π°Π²ΡƒΡŽ для создания ΡƒΠ·Π»ΠΎΠ².

Π’Π°ΠΊ ΠΆΠ΅ слСдуСт ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (x0, y0), Ссли лСвая ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π°.

Π’ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΈ OnMouseMove (Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΈ) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° PaintBox Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ состояниС Ρ„Π»Π°Π³Π° dwn (ΠΌΡ‹ΡˆΡŒ Π½Π°ΠΆΠ°Ρ‚Π°). Если ΠΎΠ½ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ события.

Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ старый холст ΠΈ ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ рисуСмой Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π² nowdrawing, соотвСтствСнно, Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ линию, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, эллипс ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ (Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠΌΠ°Π½ΠΎΠΉ) Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ img. Π’ ΠΊΠΎΠ½Ρ†Π΅ рисования, Π½ΡƒΠΆΠ½ΠΎ пСрСнСсти Π΅Π³ΠΎ Π½Π° Ρ…олст ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° PaintBox.

Π’ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΈ OnMouseUp (отпускания клавиши ΠΌΡ‹ΡˆΠΈ) Π½ΡƒΠΆΠ½ΠΎ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ dwn, Ссли Π½Π°ΠΆΠ°Ρ‚Π° лСвая клавиша ΠΌΡ‹ΡˆΠΈ.

И, Π² Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π² ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΈ OnPaint ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° PaintBox Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ прорисовку ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°.

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Ρ…ΠΎΠ΄Π΅ Π½Π°ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ исслСдования;

— ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Π° Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΈ ΡΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ;

— ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π° информация;

— Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, поставлСнныС Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, ΠΈ, соотвСтствСнно, достигнуты Ρ†Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ прСдставлСны Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°.

Из Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ слСдуСт, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΌΠ° раскрыта ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°.

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

ΠšΠΎΠΌΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. ВикипСдия. Бвободная энциклопСдия. [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. URL:

http://ru.wikipedia.org/wiki/ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ_Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (Π΄Π°Ρ‚Π° обращСния: 18.

05.2014).

Π’ΡŽΠΊΠ°Ρ‡Π΅Π² Н., Π˜Π»Π»Π°Ρ€ΠΈΠΎΠ½ΠΎΠ² И., Π₯лСбостроСв Π’. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² Delphi. — Π‘Пб.: Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2008 Π³. — 784 с.

Π Π°Π±ΠΎΡ‚Π° с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ Π² Delphi (GDI). [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. URL:

http://codingrus.ru/readarticle.php?article_id=1829 (Π΄Π°Ρ‚Π° обращСния: 18.

05.2014).

Π‘Π΅ΠΉΠΊΠ΅Ρ€ П., Π₯Π΅Ρ€Π½ Π”. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ OpenGL. — Πœ.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «Π’ΠΈΠ»ΡŒΡΠΌΡ», 2005. — 1168 с.

ЕсСнин Π‘. DirectX ΠΈ Delphi. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° графичСских ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ — БПб: Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2006. — 512 с.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1 — Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unit main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Buttons, ExtCtrls, StdCtrls, Menus;

type

TShape = (sPen, sRect, sEllipse, sPoly, sFill); // пСрСчислСниС Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ

var

nowdrawing: TShape; // Ρ‚ΠΈΠΏ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, которая рисуСтся

img, buffer: TBitmap; // создаваСмый рисунок ΠΈ Π±ΡƒΡ„Π΅Ρ€

x0,y0: integer; // Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹

dwn: boolean; // для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ клавиша ΠΌΡ‹ΡˆΠΈ (для рисования)

type

TForm1 = class (TForm) // Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

Panel1: TPanel;

sbPen: TSpeedButton;

sbRectangle: TSpeedButton;

sbEllipse: TSpeedButton;

sbPoly: TSpeedButton;

sbFill: TSpeedButton;

cbColor: TColorBox;

cbFill: TColorBox;

Label1: TLabel;

Label2: TLabel;

ScrollBox1: TScrollBox;

PaintBox1: TPaintBox;

MainMenu1: TMainMenu;

N1: TMenuItem;

N4: TMenuItem;

procedure FormCreate (Sender: TObject);

procedure PaintBox1MouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure PaintBox1MouseMove (Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure PaintBox1MouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure N4Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1. FormCreate (Sender: TObject);

begin // инициализация ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Img:=TBitmap.Create; // созданиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для хранСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ

buffer:=TBitmap.Create; // ΠΈ Π±ΡƒΡ„Π΅Ρ€Π°

img.Width:=PaintBox1.ClientWidth; // Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ

buffer.Width:=PaintBox1.ClientWidth; // ΠΈ Π±ΡƒΡ„Π΅Ρ€Π°

img.Height:=PaintBox1.ClientHeight; // ΠΏΡ€ΠΈΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ

buffer.Height:=PaintBox1.ClientHeight; // ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ PaintBox

nowdrawing:=sPen; // Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ инструмСнт — ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ

dwn:=false; // ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π°

end;

procedure TForm1. PaintBox1MouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

// ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ PaintBox

if button=mbLeft then begin // Ссли Π½Π°ΠΆΠ°Ρ‚Π° лСвая клавиша ΠΌΡ‹ΡˆΠΈ

img.assign (buffer); // инициализация img. привязка Π΅Π³ΠΎ ΠΊ bufrer

x0:=X; y0:=Y; // установка Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

if sbPen. Down then begin // Ссли Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° рисования ΠΊΠ°Ρ€Π°Π½Π΄Π°ΡˆΠΎΠΌ

nowdrawing:=sPen; // устанавливаСм инструмСнт рисования ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ

img.canvas.MoveTo (x, y); // пСрСмСщаСмся x, y

end

else

if sbEllipse. Down then // Ссли Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° рисования эллипса

nowdrawing:=sEllipse

else

if sbRectangle. Down then // Ссли Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° рисования ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

nowdrawing:=sRect

else

if sbPoly. Down then // Ссли Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° рисования ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

nowdrawing:=sPoly

else

if sbFill. Down then // Ссли Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°Π»ΠΈΠ²ΠΊΠΈ

nowdrawing:=sFill;

dwn:=true; // устанавливаСм Ρ„Π»Π°Π³ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ

img.Canvas.Pen.Color:=cbColor.Selected; // устанавливаСм Ρ†Π²Π΅Ρ‚ ΠΊΠ°Ρ€Π°Π½Π΄Π°ΡˆΠ°

img.Canvas.Brush.Color:=cbFill.Selected; // устанавливаСм Ρ†Π²Π΅Ρ‚ кисти (Π·Π°Π»ΠΈΠ²ΠΊΠ°)

if nowdrawing = sFill then begin // Ссли Π²Ρ‹Π±Ρ€Π°Π½ инструмСнт Π·Π°Π»ΠΈΠ²ΠΊΠΈ

img.Canvas.FloodFill (x0,y0,img.Canvas.Pixels[x, y], fsSurface); // Π·Π°Π»ΠΈΠ²Π°Π΅ΠΌ

buffer.Assign (img); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π² Π±ΡƒΡ„Π΅Ρ€

dwn:=false; // отпускаСм ΠΊΠ½ΠΎΠΏΠΊΡƒ

end

end

else begin // Π²ΠΎ Π²ΡΠ΅Ρ… ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях

if (dwn)and (nowdrawing=sPoly) then begin // Ссли полигон

x0:=x; // Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ установлСны

y0:=y;

buffer.Assign (img); // ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· img Π² buffer

end;

end;

paintbox1.Canvas.CopyRect (bounds (0,0,img.Width, img. Height),

img.Canvas, bounds (0,0,img.Width, img. Height)); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ рисунок Π½Π° ΠΊΠ°Π½Π²Ρƒ

end;

procedure TForm1. PaintBox1MouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin // ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события пСрСмСщСния ΠΌΡ‹ΡˆΠΈ

if not dwn then

exit; // Ссли клавиша ΠΌΡ‹ΡˆΠΈ Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π° — Π²Ρ‹Ρ…ΠΎΠ΄

img.assign (buffer); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° Π² img

case nowdrawing of // провСряСм, ΠΊΠ°ΠΊΠΎΠΉ инструмСнт Π²Ρ‹Π±Ρ€Π°Π½

sPen:begin // ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ

img.Canvas.LineTo (x, y); // рисуСм линию

buffer.Assign (img); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π² Π±ΡƒΡ„Π΅Ρ€

end;

sRect:begin // Ссли ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

img.Canvas.Rectangle (x0,y0,x, y); // рисуСм ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

end;

sEllipse:begin

img.Canvas.Ellipse (x0,y0,x, y); // эллипс

end;

sPoly:begin // ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

img.Canvas.MoveTo (x0,y0); // ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ курсор

img.Canvas.LineTo (x, y); // рисуСм линию

end;

sFill:begin

//nothing. // Ссли Π·Π°Π»ΠΈΠ²ΠΊΠ° — Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ

end;

end;

paintbox1.Canvas.CopyRect (bounds (0,0,img.Width, img. Height),

img.Canvas, bounds (0,0,img.Width, img. Height)); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π½Π° ΠΊΠ°Π½Π²Ρƒ

end;

procedure TForm1. PaintBox1MouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin // ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события отпускания клавиши ΠΌΡ‹ΡˆΠΈ

if button=mbLeft then // Ссли клавиша лСвая

dwn:=false; // сбрасываСм Ρ„Π»Π°Π³ наТатия клавиши

buffer.Assign (img); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ

end;

procedure TForm1. N4Click (Sender: TObject);

begin

Close;

end;

end.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

  1. ΠšΠΎΠΌΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. ВикипСдия. Бвободная энциклопСдия. [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. URL: http://ru.wikipedia.org/wiki/ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ_Π³Ρ€Π°Ρ„ΠΈΠΊΠ° (Π΄Π°Ρ‚Π° обращСния: 18.05.2014).
  2. Н., Π˜Π»Π»Π°Ρ€ΠΈΠΎΠ½ΠΎΠ² И., Π₯лСбостроСв Π’. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π² Delphi. — Π‘Пб.: Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2008 Π³. — 784 с.
  3. Π Π°Π±ΠΎΡ‚Π° с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ Π² Delphi (GDI). [Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс]. URL: http://codingrus.ru/readarticle.php?article_id=1829 (Π΄Π°Ρ‚Π° обращСния: 18.05.2014).
  4. П., Π₯Π΅Ρ€Π½ Π”. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ OpenGL. — Πœ.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «Π’ΠΈΠ»ΡŒΡΠΌΡ», 2005. — 1168 с.
  5. ЕсСнин Π‘. DirectX ΠΈ Delphi. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° графичСских ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ — БПб: Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2006. — 512 с.
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ
ΠšΡƒΠΏΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ

Π˜Π›Π˜