Вот тебе первая, только без TSpinEdit, т.к. у их нет в Дельфи 7(за место них я юзал TLabeledEdit). LabeledEdit1KeyPress и LabeledEdit1KeyUp расставь во все LabeledEdit - ы.
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) PaintBox1: TPaintBox; LabeledEdit1: TLabeledEdit; LabeledEdit2: TLabeledEdit; LabeledEdit3: TLabeledEdit; LabeledEdit4: TLabeledEdit; procedure PaintBox1Paint(Sender: TObject); procedure LabeledEdit1KeyPress(Sender: TObject; var Key: Char); procedure LabeledEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private Fa, Fb, Fk, Fm: Cardinal; protected function IsCorrectGridParams: Boolean; function IsRowColInit: Boolean; procedure DrawGridRect; procedure DrawGrid; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DrawGridRect; begin if IsCorrectGridParams then begin Fa:= StrToInt(LabeledEdit1.Text); Fb:= StrToInt(LabeledEdit2.Text); PaintBox1.Canvas.Rectangle(0, 0, Fa, Fb); end; end;
function TForm1.IsCorrectGridParams: Boolean; begin Result:= False; if (Length(LabeledEdit1.Text) > 0) and (Length(LabeledEdit2.Text) > 0) then Result:= (StrToInt(LabeledEdit1.Text) <> 0) and (StrToInt(LabeledEdit2.Text) <> 0); end;
procedure TForm1.PaintBox1Paint(Sender: TObject); begin DrawGridRect; DrawGrid; end;
procedure TForm1.LabeledEdit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', Chr(VK_BACK), Chr(VK_LEFT), Chr(VK_RIGHT)]) then begin Key:= #0; Exit; end; end;
procedure TForm1.LabeledEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin PaintBox1.Repaint; end;
procedure TForm1.DrawGrid; var i, Row, Col: integer; begin if IsRowColInit then begin Fk:= StrToInt(LabeledEdit3.Text); Fm:= StrToInt(LabeledEdit4.Text); Row:= Fb div (Fk + 1); for i:= 1 to Fk do begin PaintBox1.Canvas.MoveTo(0, i * Row); PaintBox1.Canvas.LineTo(Fa, i * Row); end;
Col:= Fa div (Fm + 1); for i:= 1 to Fm do begin PaintBox1.Canvas.MoveTo(i * Col, 0); PaintBox1.Canvas.LineTo(i * Col, Fb); end; end; end;
function TForm1.IsRowColInit: Boolean; begin Result:= (Length(LabeledEdit3.Text) > 0) and (Length(LabeledEdit4.Text) > 0); end;
end. | |