Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Приложение 1. 1) Первоначально я разместил на форме два компонента Shapeдля отображения основного и вспомогательного цветов





 

Рис. 1. Главная форма

 

1) Первоначально я разместил на форме два компонента Shape для отображения основного и вспомогательного цветов, компонент Image для отображения палитры десяти цветов и еще один компонент Image в качестве холста для картинок.

2) Разместил на форме компонент MainMenu, и сделал вкладки, ещё разместил диалоги: OpenPictureDialog, SavePictureDialog и ColorDialog.

3) В качестве основного и вспомогательных цветов (по умолчанию) установил соответственно синий и белый. Компонент Image1 (палитра цветов) поделил на 20 равных частей и каждую из них окрасил различными цветами. Для этого обработал событие OnCreate формы следующим образом:

Var i,t:Integer;

Begin

{присваивание цвета по умолчанию}

Shape1.Brush.Color:=clWhite;

Shape2.Brush.Color:=clBlue;

Image2.Canvas.Brush.Color:=clWhite;

{Деление Image1 на 10 равных частей}

t:=Image1.Width div 20;

{смена ширины палитры}

Image1.Width:=20*t;

{рисование 10 равных прямоугольников}

For i:=0 to 19 do

Begin

Case i of

{выбор цвета ячейки по номеру}

0: Image1.Canvas.Brush.Color:=clBlack;

1: Image1.Canvas.Brush.Color:=clAqua;

2: Image1.Canvas.Brush.Color:=clBlue;

3: Image1.Canvas.Brush.Color:=clFuchsia;

4: Image1.Canvas.Brush.Color:=clGreen;

5: Image1.Canvas.Brush.Color:=clLime;

6: Image1.Canvas.Brush.Color:=clMaroon;

7: Image1.Canvas.Brush.Color:=clRed;

8: Image1.Canvas.Brush.Color:=clYellow;

9: Image1.Canvas.Brush.Color:=clWhite;

10: Image1.Canvas.Brush.Color:=clOlive;

11: Image1.Canvas.Brush.Color:=clNavy;

12: Image1.Canvas.Brush.Color:=clTeal;

13: Image1.Canvas.Brush.Color:=clGray;

14: Image1.Canvas.Brush.Color:=clSilver;

15: Image1.Canvas.Brush.Color:=clMoneyGreen;

16: Image1.Canvas.Brush.Color:=clSkyBlue;

17: Image1.Canvas.Brush.Color:=clCream;

18: Image1.Canvas.Brush.Color:=clPurple;

19: Image1.Canvas.Brush.Color:=clMedGray;

end;

{рисование прямоугольника}

Image1.Canvas.Rectangle(t*i,0,t*i+t,Image1.Height);

end;

4) Обработал события OnClick для пунктов меню:

Файл – Открыть: открыть графический файл и загрузить его в Image2

If OpenPictureDialog1.Execute then

Image2.Picture.LoadFromFile(OpenPictureDialog1.FileName);

Палитра – Перо: отобразить изменение основного цвета в Shape1

If ColorDialog1.Execute then

Shape1.Brush.Color:=ColorDialog1.Color;

Палитра – Фон: отобразить изменение вспомогательного цвета в Shape2

If ColorDialog1.Execute then

Shape2.Brush.Color:=ColorDialog1.Color;

5) Обработал событие OnMouseDown компонентов Image1 (палитра) и Image2 (холст).

if Sender=Image1 then

if Button=mbLeft then

Shape1.Brush.Color:=(Sender as TImage).Canvas.Pixels[x,y]

else

Shape2.Brush.Color:=(Sender as TImage).Canvas.Pixels[x,y]

else

if (Sender=Image2) then

with Image2.Canvas do

If sSpeedButton1.Down then

begin

if Button=mbLeft then Brush.Color:=Shape1.Brush.Color

else Brush.Color:=Shape2.Brush.Color;

FloodFill (x,y,Pixels[x,y],fsSurface);

End;

6) Добавил на форму четыре компонента SpeedButton. Для всех установил свойство GroupIndex=1, а свойство AllowAllUp в состояние true (тогда кнопка будет фиксироваться в нажатом состоянии).

7) Разместил кнопки вдоль холста для рисования слева и для каждой из кнопок установил свойство Glyph следующим образом:

Для SpeedButton1 (кисть):

C:\Program Files\Borland\Delphi6\Demos\Doc\Graphex\brush.bmp

Для SpeedButton2 (карандаш):

C:\Program Files\Borland\Delphi6\Demos\Doc\Graphex\pen.bmp

Для SpeedButton3 (закрашенный прямоугольник):

C:\Program Files\Borland\Delphi6\Demos\Doc\Graphex\fsolid.bmp

Для SpeedButton4 (линия):

C:\Program Files\Borland\Delphi6\Demos\Doc\Graphex\line.bmp

8) // если кнопка (карандаш) нажата, то можно рисовать

else

If sSpeedButton2.Down then

begin

Pen.Color:=Shape1.Brush.Color;

Moveto(x,y);

end

//рисование линии

else

If sSpeedButton4.Down then

begin

//запоминаем положение курсора

x0:=x;

y0:=y;

x1:=x;

y1:=y;

//устанавливаем цвет пера

Pen.Color:=Shape1.Brush.Color;

//устанавливаем режим пера - при движении мыши стирать изображение линии}

Pen.Mode:=pmNotXor;

end

Else If sSpeedButton3.Down Then

Begin

Pen.Color:=Shape1.Brush.Color;

x01:=x;

y01:=y;

x02:=x;

y02:=y;

Pen.Mode:=PMNotXor;

end;

end;

procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

//после движения мыши остается след

If sSpeedButton2.Down then

If Shift=[ssleft] then

Image2.Canvas.LineTo(x,y);

If sSpeedButton4.Down then

If Shift=[ssLeft] Then

with Image2.Canvas do

Begin

{стирание прежней линии}

MoveTo (x0,y0);

LineTo (x1,y1);

{рисование новой линии}

MoveTo (x0,y0);

LineTo (x,y);

x1:=x;

y1:=y;

end;

If sSpeedButton3.Down Then

If Shift=[ssLeft] Then

With Image2.Canvas Do

Begin {рисуем прямоугольник}

Rectangle(x01,y01,x02,y02);

x02:=x;

y02:=y;

Rectangle(x01,y01,x,y);

End;

end;

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

Shift: TShiftState; X, Y: Integer);

begin

If sSpeedButton4.Down Then

Begin

Image2.Canvas.Pen.Mode:=PMCopy;

Image2.Canvas.MoveTo(x0,y0);

Image2.Canvas.LineTo(x,y);

end;

If sSpeedButton3.Down Then

Begin

Image2.Canvas.Brush.Color:=Shape2.Brush.Color;

Image2.Canvas.Pen.Mode:=PMCopy;

Image2.Canvas.Rectangle(x01,y01,x,y);

end;

end;

end.

Date: 2015-07-25; view: 431; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию