{ Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira }
unit MainFrm;
interface
uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TMainForm = class(TForm) imgCopyTo: TImage; imgCopyFrom: TImage; cbCopyMode: TComboBox; btnDrawImages: TButton; btnCopy: TButton; procedure FormShow(Sender: TObject); procedure btnCopyClick(Sender: TObject); procedure btnDrawImagesClick(Sender: TObject); private procedure DrawImages; procedure GetCanvasRect(AImage: TImage; var ARect: TRect); end;
var MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.GetCanvasRect(AImage: TImage; var ARect: TRect); var R: TRect; R2: TRect; begin R := AImage.Canvas.ClipRect; with AImage do begin ARect.TopLeft := Point(0, 0); ARect.BottomRight := Point(Width, Height); end; R2 := ARect; ARect := R2; end;
procedure TMainForm.DrawImages; var R: TRect; begin // Draw an ellipse in img1 with imgCopyTo.Canvas do begin Brush.Style := bsSolid; Brush.Color := clWhite; GetCanvasRect(imgCopyTo, R); FillRect(R); Brush.Color := clRed; Ellipse(10, 10, 100, 100); end;
// Draw an ellipse in img2 with imgCopyFrom.Canvas do begin Brush.Style := bsSolid; Brush.Color := clWhite; GetCanvasRect(imgCopyFrom, R); FillRect(R); Brush.Color := clBlue; Ellipse(30, 30, 120, 120); end;
end;
procedure TMainForm.FormShow(Sender: TObject); begin // Initialize the combobox to the first item cbCopyMode.ItemIndex := 0; DrawImages; end;
procedure TMainForm.btnCopyClick(Sender: TObject); var cm: Longint; CopyToRect, CopyFromRect: TRect; begin // Determine the copy mode based on the combo box selection case cbCopyMode.ItemIndex of 0: cm := cmBlackNess; 1: cm := cmDstInvert; 2: cm := cmMergeCopy; 3: cm := cmMergePaint; 4: cm := cmNotSrcCopy; 5: cm := cmNotSrcErase; 6: cm := cmPatCopy; 7: cm := cmPatInvert; 8: cm := cmPatPaint; 9: cm := cmSrcAnd; 10: cm := cmSrcCopy; 11: cm := cmSrcErase; 12: cm := cmSrcInvert; 13: cm := cmSrcPaint; 14: cm := cmWhiteness; else cm := cmSrcCopy; end;
// Assign the selected copymode to Image1's CopyMode property. imgCopyTo.Canvas.CopyMode := cm;
GetCanvasRect(imgCopyTo, CopyToRect); GetCanvasRect(imgCopyFrom, CopyFromRect);
// Now copy Image2 onto Image1 using Image1's CopyMode setting imgCopyTo.Canvas.CopyRect(CopyToRect, imgCopyFrom.Canvas, CopyFromRect); end;
procedure TMainForm.btnDrawImagesClick(Sender: TObject); begin DrawImages; end;
end. |