Drawing Simple Lines and Shapes (Delphi 6.0)

Take the following steps to add code that lets you draw a line, rectangle and ellipse on the bitmap.

1.

Start with the project that you created in Loading and Displaying an Image.

2.

On the Project pull-down menu, use the Import Type library… and select the LEAD 3D DrawEffect Object Library (14.5). Press OK.

3.

Select LEAD Raster FXD, from the ActiveX tab and add it to your form.

4.

Add the following variables to the Main Form’s private declarations section:

   DrawObject: Integer; //the object we are drawing
   StartX: Single ;//Starting X position
   StartY: Single ;//Starting Y position
   EndX: Single ;//Ending X position
   EndY: Single ;//Ending Y position

5.

Handle the LEADRasterView1 control's OnMouseDown2 event, and code LEADRasterView1MouseDown2 as follows:

procedure TForm1.LEADRasterView1MouseDown2 (Sender: TObject; Button,
  Shift: Smallint; x, y: Integer);
begin
   //Use the same scale mode as the mouse. 
   LEADRasterView1.ScaleMode := 1; 
   //Save the starting position. 
   StartX := X; 
   StartY := Y; 
   EndX := X; 
   EndY := Y; 
   //Cycle through the types of drawing objects. 
   Case DrawObject of

        0: DrawObject := 1 ;//Line
        1: DrawObject := 2 ;//Rectangle
        2: DrawObject := 0 ;//Ellipse
        else
         DrawObject := 0; 
   end; 
   LEADRasterFxd1.DstLeft := 0; 
   LEADRasterFxd1.DstTop := 0; 
   LEADRasterFxd1.DstRight := Trunc (LEADRasterView1.Raster.BitmapWidth); 
   LEADRasterFxd1.DstBottom := Trunc (LEADRasterView1.Raster.BitmapHeight); 
   LEADRasterFxd1.SrcLeft := 0; 
   LEADRasterFxd1.SrcTop := 0; 
   LEADRasterFxd1.SrcRight := Trunc (LEADRasterView1.Raster.BitmapWidth); 
   LEADRasterFxd1.SrcBottom := Trunc (LEADRasterView1.Raster.BitmapHeight); 
   LEADRasterFxd1.ScaleMode := 3; 
end; 

6.

Handle the LEADRasterView1 control's OnMouseMove2 event, and code LEADRasterView1MouseMove2 as follows. This code uses DRAWMODE_INVERT for the DrawMode, which means that pixel colors are inverted. Thus, the drawing methods can erase the previous object and draw a new one.

procedure TForm1.LEADRasterView1MouseMove2 (Sender: TObject; Button,
  Shift: Smallint; x, y: Integer);
var
   //Declare local variables. 
   OldEndX, OldEndY: Single; 
   OldDrawX, OldDrawY, OldWidth, OldHeight: Single; 
   DrawX, DrawY, NewWidth, NewHeight: Single; 
   h_DC: HDC; 
begin
   if Button = 1 then
   begin
        //Set the drawing styles. 
        LEADRasterFxd1.DrawPenStyle := DRAWPENSTYLE_SOLID; 
        LEADRasterFxd1.DrawMode := DRAWMODE_INVERT; 
        LEADRasterFxd1.DrawFillStyle := DRAWFILLSTYLE_TRANSPARENT; 
        LEADRasterFxd1.DrawPersistence := False; // On the window, not the bitmap
        //Save the previous ending mouse position. 
        OldEndX := EndX; 
        OldEndY := EndY; 
        //Get the current mouse position. 
        EndX := x; 
        EndY := y; 
        //Calculate the origin of the current object. 
        if (EndX > StartX) then
         DrawX := StartX
        else
         DrawX := EndX; 

        if EndY > StartY Then
         DrawY := StartY
        else
         DrawY := EndY; 

        //Calculate the origin of the previous object. 
        if OldEndX > StartX Then
         OldDrawX := StartX
        else
         OldDrawX := OldEndX; 

        if OldEndY > StartY Then
         OldDrawY := StartY
        else
         OldDrawY := OldEndY; 

        //Calculate the height and width of the current object. 
        NewHeight := Abs(StartY - EndY); 
        NewWidth := Abs(StartX - EndX); 
        //Calculate the height and width of the previous object. 
        OldHeight := Abs(StartY - OldEndY); 
        OldWidth := Abs(StartX - OldEndX); 
        //Erase the old object and draw the new one. 
        h_DC := LEADRasterView1.GetClientDC ();
        Case DrawObject of
        0: //Ellipse
         begin
             LEADRasterFxd1.DrawEllipse(Nil, h_DC, OldDrawX, OldDrawY, OldWidth, OldHeight); 
             LEADRasterFxd1.DrawEllipse (Nil, h_DC, DrawX, DrawY, NewWidth, NewHeight); 
         end; 
           1:  //Line
         begin
             LEADRasterFxd1.DrawLine(Nil, h_DC, StartX, StartY, OldEndX, OldEndY); 
             LEADRasterFxd1.DrawLine (Nil, h_DC, StartX, StartY, EndX, EndY); 
         end; 
           2: //Rectangle
         begin
             LEADRasterFxd1.DrawRectangle(Nil, h_DC, OldDrawX, OldDrawY, OldWidth, OldHeight); 
             LEADRasterFxd1.DrawRectangle (Nil, h_DC, DrawX, DrawY, NewWidth, NewHeight); 
         end; 
           else
           end; 
      LEADRasterView1.ReleaseClientDC ();
   end; 
end; 

7.

Handle the LEADRasterView1 control's OnMouseUp2 event, and code LEADRasterView1MouseUp2 as follows: This code sets the drawing style and draws the object on the bitmap.

procedure TForm1.LEADRasterView1MouseUp2 (Sender: TObject; Button,
  Shift: Smallint; x, y: Integer);
var
   //Declare local variables. 
   DrawX, DrawY, NewWidth, NewHeight: Single; 
begin

   //Set the drawing style. 
   LEADRasterFxd1.DrawPenStyle := DRAWPENSTYLE_SOLID; 
   LEADRasterFxd1.DrawPenWidth := 2; 
   LEADRasterFxd1.DrawPenColor := RGB(255, 0, 0) ;//Red
   LEADRasterFxd1.DrawMode := DRAWMODE_COPY_PEN; 
   LEADRasterFxd1.DrawFillColor := RGB(0, 255, 0); //Green; 
   LEADRasterFxd1.DrawFillStyle := DRAWFILLSTYLE_HORIZONTAL_LINE; 
   LEADRasterFxd1.DrawPersistence := True ;//On the bitmap
   //Get the current mouse position
   EndX := x; 
   EndY := y; 
   //Determine the origin of the object. 
   if (EndX > StartX) then
        DrawX := StartX
   else
        DrawX := EndX; 

   if (EndY > StartY) then
        DrawY := StartY
   else
        DrawY := EndY; 

   //Determine the height and width of the object. 
   NewHeight := Abs(StartY - EndY); 
   NewWidth := Abs(StartX - EndX); 
   //Draw the object
   Case DrawObject of
      0: //Ellipse
           LEADRasterFxd1.DrawEllipse (LEADRasterView1.Raster, 0, DrawX, DrawY, NewWidth, NewHeight); 
      1: //Line
           LEADRasterFxd1.DrawLine (LEADRasterView1.Raster, 0, StartX, StartY, EndX, EndY); 
      2: //Rectangle
           LEADRasterFxd1.DrawRectangle (LEADRasterView1.Raster, 0, DrawX, DrawY, NewWidth, NewHeight); 
   end; 
   LEADRasterView1.ForceRepaint ();
end; 

8.

Run your program to test it.