Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > TPaintBox


Автор: w3 21.12.2003, 11:50
Совсем замучился с графикой. Уже неделю делаю, а толком ничего не получается. Помогите, пожалуйста, сделать. Есть три задачи:

Задача 1: Нарисовать сетку: a, b - размеры сетки(длина и ширина соответственно); k - число горизонтальных линий, m - число вертикальных линий. a, b, k, m вводятся при помощи SpinEdit'a. При изменении значений картинка перерисовывается.

Задача 2: Нарисовать счеты с желтыми и черными костяшками. Число костяшек вводится при помощи SpinEdit'a. При изменении значений картинка перерисовывается.

Задача 3: Анимация. Аналогична Задаче 2, но количество костяшек уже вводить не нужно. Костяшки появляются случайно.

Заданее благодарен за ответы.

Автор: <Spawn> 21.12.2003, 15:02
Вот тебе первая, только без 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.

Автор: w3 21.12.2003, 15:06
Цитата
Вот тебе первая, только без TSpinEdit, т.к. у их нет в Дельфи 7(за место них я юзал TLabeledEdit). LabeledEdit1KeyPress и LabeledEdit1KeyUp расставь во все LabeledEdit - ы.

Большое спасибо. SpinEdit в Delphi 7 есть, он на вкладке Samples

Автор: <Spawn> 21.12.2003, 15:40
Цитата(w3 @ 21.12.2003, 07:06)
Цитата
Вот тебе первая, только без TSpinEdit, т.к. у их нет в Дельфи 7(за место них я юзал TLabeledEdit). LabeledEdit1KeyPress и LabeledEdit1KeyUp расставь во все LabeledEdit - ы.

Большое спасибо. SpinEdit в Delphi 7 есть, он на вкладке Samples

У меня нету))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)