Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Приложение 1. 1) Первоначально я разместил на форме два компонента Shapeдля отображения основного и вспомогательного цветов⇐ ПредыдущаяСтр 15 из 15
Рис. 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.
|