1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Math;
type TForm1 = class(TForm) Image1: TImage; ColorDialog1: TColorDialog; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Panel1: TPanel; OpenButton: TSpeedButton; SaveButton: TSpeedButton; NewButton: TSpeedButton; ComboBox2: TComboBox; ComboBox1: TComboBox; PenButton: TSpeedButton; LineButton: TSpeedButton; RectButton: TSpeedButton; CircleButton: TSpeedButton; EllipseButton: TSpeedButton; PenColorButton: TSpeedButton; BrushColorButton: TSpeedButton; xButton: TSpeedButton; yButton: TSpeedButton; ExitButton: TSpeedButton; procedure FormCreate(Sender: TObject); procedure PenButtonClick(Sender: TObject); procedure LineButtonClick(Sender: TObject); procedure RectButtonClick(Sender: TObject); procedure CircleButtonClick(Sender: TObject); procedure EllipseButtonClick(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ComboBox1Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure PenColorButtonClick(Sender: TObject); procedure BrushColorButtonClick(Sender: TObject); procedure OpenButtonClick(Sender: TObject); procedure SaveButtonClick(Sender: TObject); procedure NewButtonClick(Sender: TObject); procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure ComboBox2DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure ExitButtonClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} var Grafikart: Integer; Stiftart: TPenStyle; Pinselart: TBrushStyle; Zeichnen: Boolean; Stiftfarbe, Pinselfarbe: TColor; x0,y0,x1,y1: LongInt; CircleDiameter: Integer;
procedure TForm1.FormCreate(Sender: TObject); begin Grafikart:=1; Stiftfarbe:=clBlack; Pinselfarbe:=clBlack; Stiftart:=psSolid; Pinselart:=bsClear; Image1.Canvas.Pen.Color:=Stiftfarbe; end;
procedure TForm1.PenButtonClick(Sender: TObject); begin Grafikart:=1; end;
procedure TForm1.LineButtonClick(Sender: TObject); begin Grafikart:=2; end;
procedure TForm1.RectButtonClick(Sender: TObject); begin Grafikart:=3; end;
procedure TForm1.CircleButtonClick(Sender: TObject); begin Grafikart:=4; end;
procedure TForm1.EllipseButtonClick(Sender: TObject); begin Grafikart:=5; end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Zeichnen:=True; x0:=X; y0:=Y; x1:=X; y1:=Y; with Image1.Canvas do begin Pen.Color:=Stiftfarbe; Pen.Style:=Stiftart; Brush.Color:=Pinselfarbe; Brush.Style:=Pinselart; MoveTo(X,Y); if Grafikart=1 then Pen.Mode:=pmCopy else Pen.Mode:=pmNotXor; end; end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Zeichnen then with Image1.Canvas do begin Case Grafikart of 1: Image1.Canvas.LineTo(x,y); 2: begin end; 3: Image1.Canvas.Rectangle(x,y,x,y); 4: Image1.Canvas.Ellipse(x,y,x,y); 5: Image1.Canvas.Ellipse(x,y,x,y); end; x1:=x; y1:=y; end; end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Zeichnen:=False; CircleDiameter := Min(x1 - x0, y1 - y0); with Image1.Canvas do begin Pen.Mode:=pmCopy; Case grafikart of 2: LineTo(x,y); 3: Rectangle(x0,y0,x1,y1); 4: Ellipse(x0, y0, x1 + CircleDiameter, y1 + CircleDiameter); 5: Ellipse(x0,y0,x1,y1); end; end; end; |