Jeg vil se om det kan lade sig gøre at lave et program, der kan bestemme afstanden på fx en løberute.
Det skal fungere på den måde at man førtst tegner (punkt-punkt forbindelse) en kendt strækning, og angiver længden hvorefter den bestemme afstanden på en løberute man tegner på samme måde.
Hvordan kan jeg lave dette?!? har ikke før arbejdet med billeder i delphi.
Hvordan laver man en funktion der kan åbne et bmp billede?
Bestemmer koordinaterne for musen?
Tegner streger ved at klikke med musen? (finder koordinaterne for punkterne)
Du kan bruge et TImage det ligger et sted i 2 eller 3 fane ivertfald i D7.
På det kan du tegne streger og firkanter med farver og sådan.
Her er nogle koder du kan bruge:
Sætter mode: image1.Canvas.Pen.Mode := pmNotXor;
Sætter size tror jeg nok
: image1.Canvas.pen.color := clRed;
Sætter size tror jeg nok: image1.Canvas.Pen.zize := 2;
Sætter start punktet: image1.Canvas.MoveTo(0, 0);
Sætter slutpunktet: image1.Canvas.LineTo(10, 10);
Fx. her er noget kode til et nemt Elastik program som det bliver kaldt.:
unit ElastikM;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, ExtCtrls, Menus, ExtDlgs;
type
TElastikForm = class(TForm)
mmElastik: TMainMenu;
miFiler: TMenuItem;
miHent: TMenuItem;
miGem: TMenuItem;
imgElastik: TImage;
OpenPictureDialog: TOpenPictureDialog;
SavePictureDialog: TSavePictureDialog;
procedure imgElastikMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
procedure imgElastikMouseMove(Sender: TObject;
Shift: TShiftState;
X, Y: Integer);
procedure imgElastikMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
procedure miHentClick(Sender: TObject);
procedure miGemClick(Sender: TObject);
private
Start, FlyttePunkt: TPoint;
Drawing: Boolean;
end;
var
ElastikForm: TElastikForm;
implementation
{$R *.DFM}
procedure TElastikForm.imgElastikMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
Drawing := True;
imgElastik.Canvas.MoveTo(X, Y);
Start := Point(X, Y);
FlyttePunkt := Point(X, Y);
end;
procedure TElastikForm.imgElastikMouseMove(Sender: TObject;
Shift: TShiftState;
X, Y: Integer);
begin
if Drawing then
begin
imgElastik.Canvas.Pen.Mode := pmNotXor;
imgElastik.Canvas.MoveTo(Start.X, Start.Y);
imgElastik.Canvas.LineTo(FlyttePunkt.X, FlyttePunkt.Y);
FlyttePunkt := Point(X, Y);
imgElastik.Canvas.MoveTo(Start.X, Start.Y);
imgElastik.Canvas.LineTo(FlyttePunkt.X, FlyttePunkt.Y);
end;
imgElastik.Canvas.Pen.Mode := pmCopy;
end;
procedure TElastikForm.imgElastikMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
Drawing := False;
imgElastik.Canvas.MoveTo(Start.X, Start.Y);
imgElastik.Canvas.LineTo(X, Y);
end;
procedure TElastikForm.miHentClick(Sender: TObject);
begin
if OpenPictureDialog.Execute then
imgElastik.Picture.LoadFromFile(OpenPictureDialog.FileName);
end;
procedure TElastikForm.miGemClick(Sender: TObject);
begin
if SavePictureDialog.Execute then
imgElastik.Picture.SaveToFile(SavePictureDialog.FileName);
end;
end.
Resten af koderne med at regne det ud må su selv tænke dig til
det er nok noget med en masse strings og sådan noget.
Bare sig til vis du ikke kan få det til at virke.
------------------------------------------------------
Intet er umuligt før man har prøvet, og vis ikke det virker første gang så plejer det at virke anden gang.
Darkfighter