unit mMalprogramm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Buttons, StdCtrls, Printers;
type
TForm1 =
class(TForm)
Image1: TImage;
Panel1: TPanel;
NewButton: TSpeedButton;
OpenButton: TSpeedButton;
SaveButton: TSpeedButton;
PenButton: TSpeedButton;
LineButton: TSpeedButton;
RectButton: TSpeedButton;
CircleButton: TSpeedButton;
EllipseButton: TSpeedButton;
PenColorButton: TSpeedButton;
BrushColorButton: TSpeedButton;
ExitButton: TSpeedButton;
PrinterInfoButton: TSpeedButton;
PrintButton: TSpeedButton;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ColorDialog1: TColorDialog;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
PrintDialog1: TPrintDialog;
procedure ExitButtonClick(Sender: TObject);
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 PrintButtonClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var Grafikart : Integer;
Stiftart : TPenStyle;
Pinselart : TBrushStyle;
Zeichnen : Boolean;
Stiftfarbe,Pinselfarbe : TColor;
x0,y0,x1,y1 : Integer;
procedure TForm1.ExitButtonClick(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Grafikart:=1;
Stiftfarbe:=clBlack;
Pinselfarbe:=clBlack;
Stiftart:=psSolid;
Pinselart:=bsClear;
Image1.Canvas.Pen.Color:=Stiftfarbe;
ComboBox1.ItemIndex:=0;
Pinselart:=bsClear;
ComboBox2.itemIndex:=1;
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);
var r,a,b : LongInt;
begin
if Zeichnen
then
with Image1.Canvas
do
begin
Case Grafikart
of
1 : Lineto(x,y);
2 :
begin
MoveTo(x0,y0);
LineTo(x1,y1);
MoveTo(x0,y0);
LineTo(x,y);
end;
3 :
begin
Rectangle(x0,y0,x1,y1);
Rectangle(x0,y0,x,y);
end;
4 :
begin
r:=Round(Sqrt(Sqr(x1-x0)+Sqr(y1-y0)));
Ellipse(x0-r,y0-r,x0+r,y0+r);
r:=Round(Sqrt(Sqr(x-x0)+Sqr(y-y0)));
Ellipse(x0-r,y0-r,x0+r,y0+r);
end;
5 :
begin
a:=Round(Sqrt(2)*(x1-x0));
b:=Round(Sqrt(2)*(y1-y0));
Ellipse(x0-a,y0-b,x0+a,y0+b);
a:=Round(Sqrt(2)*(x-x0));
b:=Round(Sqrt(2)*(y-y0));
Ellipse(x0-a,y0-b,x0+a,y0+b);
end;
end;
x1:=x;
y1:=y;
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var r,a,b : LongInt;
begin
Zeichnen:=False;
with Image1.Canvas
do
begin
Pen.Mode:=pmCopy;
Case Grafikart
of
2:
begin
MoveTo(x0,y0);
LineTo(x,y);
end;
3: Rectangle(x0,y0,x1,y1);
4:
begin
r:=Round(Sqrt(Sqr(x1-x0)+Sqr(y1-y0)));
Ellipse(x0-r,y0-r,x0+r,y0+r);
end;
5:
begin
a:=Round(Sqrt(2)*(x-x0));
b:=Round(Sqrt(2)*(y-y0));
Ellipse(x0-a,y0-b,x0+a,y0+b);
end;
end;
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Case ComboBox1.ItemIndex
of
0 : Stiftart:=psSolid;
1 : Stiftart:=psDash;
2 : Stiftart:=psDot;
3 : Stiftart:=psDashDot;
4 : Stiftart:=psDashDotDot;
end;
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
Pinselart:=TBrushStyle(ComboBox2.ItemIndex);
end;
procedure TForm1.PenColorButtonClick(Sender: TObject);
begin
if ColorDialog1.Execute
then
Stiftfarbe:=ColorDialog1.Color;
end;
procedure TForm1.BrushColorButtonClick(Sender: TObject);
begin
if ColorDialog1.Execute
then
Pinselfarbe:=ColorDialog1.Color;
end;
procedure TForm1.OpenButtonClick(Sender: TObject);
begin
if OpenDialog1.Execute
then
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm1.SaveButtonClick(Sender: TObject);
begin
if SaveDialog1.Execute
then
Image1.Picture.SaveToFile(SaveDialog1.FileName);
end;
procedure TForm1.NewButtonClick(Sender: TObject);
begin
with image1.Canvas
do
begin
Pen.Color:=clWhite;
Pen.Style:=psSolid;
Brush.Color:=clWhite;
Brush.Style:=bsSolid;
Rectangle(0,0,Image1.Width, Image1.height);
end;
end;
procedure TForm1.ComboBox1DrawItem(Control: TWinControl;
Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with ComboBox1.Canvas
do
begin
Pen.Color:=clBlack;
Pen.Style:=TPenStyle(
Index);
Brush.Color:=clWhite;
FillRect(Rect);
MoveTo(Rect.Left+5,Rect.Top+ComboBox1.ItemHeight
div 2);
LineTo(Rect.Right-5,Rect.Top+ComboBox1.ItemHeight
div 2);
end;
end;
procedure TForm1.ComboBox2DrawItem(Control: TWinControl;
Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with ComboBox2.Canvas
do
begin
Pen.Color:=clBlack;
Pen.Style:=psSolid;
Brush.Color:=clBlack;
Brush.Style:=TBrushStyle(
Index);
Rectangle(Rect.Left+1,Rect.Top+1,Rect.Right-1,Rect.Bottom-1)
end;
end;
procedure TForm1.PrintButtonClick(Sender: TObject);
begin
printer.begindoc;
printer.canvas.draw(1, 1, Image1.Picture.Graphic );
printer.enddoc;
end;
end.