Вот, посмотри пример (кидаешь на форму Timage и TRadioGroup с двуя Items'ами) :
Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Image1: TImage; RadioGroup1: TRadioGroup; procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; MDown:boolean; XBegin,YBegin, TempX,TempY :integer;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin {Определяем, что мыша нажата и запоминаем начальные координаты} MDown:=true; XBegin:=X; YBegin:=Y; TempX:=X; TempY:=Y; end;
procedure TForm1.FormCreate(Sender: TObject); begin MDown:=false; Image1.Canvas.Pen.Color:=clBlack; end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MDown:=false; end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if MDown // если мыша нажата then begin
if RadioGroup1.ItemIndex=1 // если выбрано линия из точек, then Image1.Canvas.Pen.Style:=psDot else Image1.Canvas.Pen.Style:=psSolid; // Сплошная линия
{очистка Image1, в том числе стираются и все страрые линии} {тебе их придётся заново рисовать, но это не сложно, т.к. они у тебя есть в StringGrid'е } Image1.Canvas.Rectangle(-1,-1, Image1.Width+1,Image1.Height +1); {Рисование линии} Image1.Canvas.MoveTo(XBegin,YBegin); Image1.Canvas.LineTo(X,Y); // Если тебя не устраивает, что стираются предыдущие линии, то // закоментирую предыдущие три строки и расскоментируй всё что ниже // Image1.Canvas.Pen.Color:=clWhite; // Image1.Canvas.MoveTo(XBegin,YBegin); // Image1.Canvas.LineTo(TempX,TempY); // // Image1.Canvas.Pen.Color:=clBlack; // Image1.Canvas.MoveTo(XBegin,YBegin); // Image1.Canvas.LineTo(X,Y); // TempX:=X; // TempY:=Y; end;
end;
end.
| |