Форум: "Прочее";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
ВнизКомпонент "Линия" Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c