procedure TForm1.Button1Click(Sender: TObject); begin with form1.Canvas do begin MoveTo(20,30); Pen.Width := 5; Pen.Color := clRed; LineTo(100,100); end; end;
Ovenstående tegner en streg på formen mellem (20,30) og (100,100) når der trykkes på knappen. Så er det bare at ændre disse punkter
jo, det virker fint. Men det er jo ikke helt en pil... Bare rolig du skal nok få point for det alligevel :-) Har kigget på en pil-funktion, ved navn AddArrow. fundet dette i hjælpefilen:
Her er noget der tegner en pil (af 3 linjer) ud fra endepunkterne:
Function retning(x1,y1,x2,y2: integer): real; {returnerer vinkel i radianer} var dx,dy:integer; ret: real; begin dy:=y2-y1; dx:=x2-x1; Ret:= arctan(abs(dy)/abs(dx)); if dx >= 0 then begin if dy >= 0 then Ret := -Ret; end else begin if dy >= 0 then Ret := pi+ret else Ret :=pi-ret; end; result := ret; end;
procedure Pil(x1,y1,x2,y2: integer); {tegner en pil} const pilL=10; {pillængde} pilW=30; {pilvinkel} var vinkel, v: real; x,y: integer; begin with form1.Image1.Canvas do begin Pen.Width := 2; Pen.Color := clRed; MoveTo(x1,y1); LineTo(x2,y2); v := pilW*pi/360; vinkel := retning(x1,y1,x2,y2); x := x2+round(cos(pi+vinkel+v)*PilL); y := y2-round(sin(pi+vinkel+v)*PilL); Lineto(x,y); moveto(x2,y2); x := x2+round(cos(pi+vinkel-v)*PilL); y := y2-round(sin(pi+vinkel-v)*PilL); Lineto(x,y); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin pil(10,90,80,20); end;
hreiff, kan du lave proceduren om, da den melder fejl hvis x1 og x2 er det samme pga. at den ikke kan dividere med 0 i denne linie Ret:= arctan(abs(dy)/abs(dx)); hvis du kan lave en som virker selvom x1 = x2 så er der 50 point til dig
if abs(dx) < 1e-10 then Ret := Pi / 2 else Ret := arctan(abs(dy)/abs(dx));
Så ser hele retningsfunktionen således ud (selve tegnedelen er den samme):
Function retning(x1,y1,x2,y2: integer): real; {returnerer vinkel i radianer} var dx,dy:integer; ret: real; begin dy:=y2-y1; dx:=x2-x1; if abs(dx) < 1e-10 then Ret := Pi / 2 else Ret := arctan(abs(dy)/abs(dx)); if dx >= 0 then begin if dy >= 0 then Ret := -Ret; end else begin if dy >= 0 then Ret := pi+ret else Ret := pi-ret; end; retning := ret; end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.