Mega Code Archive

 
Categories / Delphi / Graphic
 

How to Create and draw TShape at runtime

Title: How to Create and draw TShape at runtime unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Panel1: TPanel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var forma: array of TShape; //Array to create formaUtil: Integer; // Kind of shape Numforma: Integer; //Number of shapes Izq, Arr, Ancho, alto, x1, x2, y1, y2: Integer; //Position and size of shape activar: Boolean; //Tells when you are creating and sizing the shape procedure TForm1.Button1Click(Sender: TObject); begin formaUtil := 1; //rectangle end; procedure TForm1.Button2Click(Sender: TObject); begin formaUtil := 2; //circle end; procedure TForm1.FormCreate(Sender: TObject); begin formaUtil := 0; Numforma := 0; activar := False; end; procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if formaUtil 1 then Exit; activar := True; //starting draw the shape x1 := x; y1 := y; numforma := numforma + 1; setlength(forma, numforma); forma[numforma - 1] := TShape.Create(Panel1); if formaUtil = 1 then forma[numforma - 1].Shape := stRectangle else forma[numforma - 1].Shape := stCircle; forma[numforma - 1].Left := x1; forma[numforma - 1].Top := y1; forma[numforma - 1].Parent := Panel1; end; procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin x2 := x; y2 := y; forma[numforma - 1].Width := x2 - x1; forma[numforma - 1].Height := y2 - y1; formaUtil := 0; activar := False; end; procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (formaUtil = 0) then Exit; if (numforma = 0) then Exit; if not activar then Exit; x2 := x; y2 := y; forma[numforma - 1].Width := x2 - x1; forma[numforma - 1].Height := y2 - y1; end; end.