|
|
Регистрация | << Правила форума >> | 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; А во вторых указанный коментарий можешь убрать, это следы моей работы |