![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Я наверно на форуме достала уже со своей программой, но помощь мне нужна очень. Суть программы состоит в том, что рисуем две линии в разных областях Image1, и вторая линия должна передвинутся к первой(т.е. соединяуются только началом), и затем рисуется третья линия. И как мне сделать так, чтобы линии которые показывают передвижение убирались с экрана, но при этом было видно, что линиия двигается? Вот выкладываю архив программы! Помогите кто чем может
![]() |
|
#2
|
||||
|
||||
|
Вот тут реализовано движение линии по TImage со стиранием.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormShow(Sender: TObject);
private
A, B: TPoint;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
const
Dist = 5;
begin
with Image1.Canvas do
begin
Pen.Color := clWhite;
MoveTo(A.X, A.Y);
LineTo(B.X, B.Y);
case Key of
VK_UP:
begin
A.Y := A.Y - Dist;
B.Y := B.Y - Dist;
end;
VK_DOWN:
begin
A.Y := A.Y + Dist;
B.Y := B.Y + Dist;
end;
VK_LEFT:
begin
A.X := A.X - Dist;
B.X := B.X - Dist;
end;
VK_RIGHT:
begin
A.X := A.X + Dist;
B.X := B.X + Dist;
end;
end;
Pen.Color := clBlack;
MoveTo(A.X, A.Y);
LineTo(B.X, B.Y);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
A.X := 30;
A.Y := 30;
B.X := 50;
B.Y := 50;
end;
end. |
|
#3
|
|||
|
|||
|
А как это можно вставить в мою работу?
|
|
#4
|
|||
|
|||
|
maddamo4ka в архиве есть некоторое решение твоей задачи, можно сказать новогодний подарок. Реализовано движение линии. Я основывался на твою форму, т.е. исходником была твоя форма. Я туда еще добавил еще один Button, который очищает канву. Чесно говоря, алгоритм у тебя никакой, извини если обидел, я на нажатие кнопки Button1 изменил алгоритм. Все намного проще чем ты думаешь. Надо было по другому подойти к поставленной цели. Кое какое описание есть в исходнике. Ну а если что спрашивай. Держи архив. Единственый косяк это то что при начинании движения линии конечные точки двигаемой линии остаются, но я думаю ты с этим справишься
Последний раз редактировалось Ama, 25.12.2008 в 11:30. |
|
#5
|
|||
|
|||
|
Спасибо за такой новогодний подарок!Ты просто спас мою надежду на получение автомата по экзамену
А то что код никакой спасибо преподавателю..это он мне помог так Единственная проблема не могу сообразить как после передвижения нарисвать третию линию которая соединяла бы концы этих двух линий я пробовала сделать следующим образом:Код:
with Form1.Image1.Canvas do begin Pen.Color:=clBlack; MoveTo(PTop1.X, PTop1.Y); LineTo(PTop2.X, PTop2.Y); end; ![]() И еще вопрос почему закомментированно вот это: Код:
begin
if (not Moving) or (iArr >= Delta) then exit;
DrawShape(Point(Round(OldPTop.X + iArr * dx), Round(OldPTop.Y + iArr * dy)),
Point(Round(OldPBottom.X + iArr * dx), Round(OldPBottom.Y + iArr * dy)),
pmNotXor, clBlack);
Inc(iArr);
{ OldPTop.X:= Round(OldPTop.X + iArr * dx);
OldPBottom.X:= Round(OldPBottom.X + iArr * dx);
OldPTop.Y:= Round(OldPTop.Y + iArr * dy);
OldPBottom.Y:= Round(OldPBottom.Y + iArr * dy);} |
|
#6
|
|||
|
|||
|
Во первых тебе нужно переделать процедуру Timer1Timer вот код:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (not Moving) then exit
else
begin
DrawShape(Point(Round(OldPTop.X + iArr * dx), Round(OldPTop.Y + iArr * dy)),
Point(Round(OldPBottom.X + iArr * dx), Round(OldPBottom.Y + iArr * dy)),
pmNotXor, clBlack);
Inc(iArr);
DrawShape(Point(Round(OldPTop.X + iArr * dx), Round(OldPTop.Y + iArr * dy)),
Point(Round(OldPBottom.X + iArr * dx), Round(OldPBottom.Y + iArr * dy)),
pmNotXor, clBlack);
if iArr >= Delta then
begin
Moving:= false;
with StringGrid1 do
begin
DrawShape(Point(Round(OldPBottom.X + Delta * dx), Round(OldPBottom.Y + Delta * dy)),
Point(StrToInt(Cells[1, 1]), StrToInt(Cells[2, 1])),
pmNotXor, clBlack);
DrawShape(Point(Round(OldPTop.X + Delta * dx), Round(OldPTop.Y + Delta * dy)),
Point(StrToInt(Cells[3, 1]), StrToInt(Cells[4, 1])),
pmNotXor, clBlack);
end;
Timer1.Enabled:= false;
end;
end;А во вторых указанный коментарий можешь убрать, это следы моей работы |