Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.07;
Скачать: CL | DM;

Вниз

Компонент "Линия"   Найти похожие ветки 

 
AntonioBanderas   (2009-12-21 12:51) [0]

Добрый день. Хочу реализовать  компонент как в
Electronic WorkBeanch (cоединительная "резиновая" линия).
Помогите советом или статейкой если кто где видел. Ничего подходещего не на гуглил.


 
Б   (2009-12-21 14:28) [1]

По простому: Canvas.MoveTo, Canvas.LineTo, XOR - режим.


 
antonn ©   (2009-12-21 15:58) [2]

она там прокладывает путь среди компонентов, под прямыми углами


 
@!!ex ©   (2009-12-21 16:02) [3]

самый просто способ - бить рабочее поле на мелкие квадратики и волной искать путь, а потом по нему уже прокладывать линию... ну либо долгий перебор объектов...


 
Б   (2009-12-21 16:33) [4]


> она там прокладывает путь среди компонентов, под прямыми
> углами


А ну да.
Тогда сама отрисовка линии готова. ;)


 
Б   (2009-12-21 16:43) [5]

http://mirgames.ru/articles/base/pathfind.html


 
AntonioBanderas   (2009-12-21 17:34) [6]


> Б   (21.12.09 16:43) [5]


> @!!ex ©   (21.12.09 16:02) [3]

Волновым  мне не нужно (искать нечего),
сделаю изгибы массивом Нодов(X,Y).

а не укажите на ошибку:
при закарытии формы ошибка Access Violation
ругается видимо на это: FPaintField := Pointer(AOwner);

полный код:

unit Lines;

interface

uses Controls, ExtCtrls, Graphics;

type
 TPoint = packed record
   X: Integer;
   Y: Integer;
 end;

 TNodes = array[0..255] of TPoint;

 TStretchLine = class(TObject)
 private
   FPaintField: Pointer;
   FStart: TPoint;
   FFinish: TPoint;
   FNodes: TNodes;
   FNodeCount: Integer;
 public
   constructor Create(AOwner: TPaintBox);
   destructor Destroy; override;

   procedure Paint;

   property Start: TPoint read FStart write FStart;
   property Finish: TPoint read FFinish write FFinish;
   property Nodes: TNodes read FNodes write FNodes;
   property PaintField: Pointer read FPaintField write FPaintField;
 end;

implementation

constructor TStretchLine.Create(AOwner: TPaintBox);
begin
 inherited Create;
 FPaintField := Pointer(AOwner);
end;

destructor TStretchLine.Destroy;
begin
 inherited Destroy;
end;

procedure TStretchLine.Paint;
begin
 TPaintBox(FPaintField).Canvas......
end;

end.


 
Б   (2009-12-21 18:01) [7]

TPaintBox - это уже указатель.
Зачем нужен указатель на указатель?
Да и к тому же отлично известен тип Owner"а.
Поэтому FPaintField сделать TPaointBox"ом.


 
Б   (2009-12-21 18:04) [8]


> Волновым  мне не нужно (искать нечего),


Как нечего?
Имеется точка старта, финишная точка.
Найти мин. короткий путь, обходя... что там у Вас?
И по пути рисовать соед. линию. Всё.

P.S. Тип TPoint уже существует.


 
AntonioBanderas   (2009-12-21 18:17) [9]


> P.S. Тип TPoint уже существует.

зачем подключать целый модуль Windows

> TPaintBox - это уже указатель.

и явно тоже если указыть, та же ошибка, просто пробовал нетипизированный


 
DVM ©   (2009-12-21 18:39) [10]


> зачем подключать целый модуль Windows

можно подумать, что если ты его не подключишь он в твоей программе не будет подключен.



Страницы: 1 вся ветка

Текущий архив: 2010.03.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
15-1261517422
Юрий
2009-12-23 00:30
2010.03.07
С днем рождения ! 23 декабря 2009 среда


2-1262794714
antonn
2010-01-06 19:18
2010.03.07
запуск консольной утилиты с передачей ей параметра в OEM


2-1262083308
citizen
2009-12-29 13:41
2010.03.07
Непрерывная слежка за событием


2-1262463589
AntonioBanderas
2010-01-02 23:19
2010.03.07
Принадлежность точки отрезку


2-1262161972
pleasure
2009-12-30 11:32
2010.03.07
формы, права, доступ