お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"線のクラス"

この発言に対し以下のコメントが寄せられています
#00726 凛 さん RE:線のクラス

//イメージに選択可能な線を引くときに使います。 TLine=class private w,col,sx,sy,ex,ey:integer; public function isOnLine(x,y:integer):boolean; procedure draw(theCanvas:TCanvas;penmode:Tpenmode); constructor create(startX,startY,endX,EndY,width,color:integer); end; //イカはimplementationに function TLine.isOnLine(x,y:integer):boolean; var r,a,b,c,d,kx,ky,dx,dy:Extended; begin isOnLine:=false; dx:=ex-sx; dy:=ey-sy; if dx=0 then//垂直線 begin if abs(sx-x)<=1 then isOnLine:=True; end else begin if dy=0 then//水平線 begin if abs(sy-y)<=1 then isOnLine:=True; end else begin //線からの距離が幅の1/2にあるかどうかを見る //先にそれぞれの端から線幅以上離れていないかみる if ((sx+ex)-abs(dx)-w)/2 > x then exit; if ((sx+ex)+abs(dx)+w)/2 < x then exit; if ((sy+ey)-abs(dy)-w)/2 > y then exit; if ((sy+ey)+abs(dy)+w)/2 < y then exit; a:=dy/dx; b:=sy-a*sx; c:=-1/a; d:=y-c*x; kx:=(d-b)/(a-c); ky:=a*kx+b; r:=(x-kx)*(x-kx)+(y-ky)*(y-ky); if 4*r<= (w+1)*(w+1) then isOnLine:=True; end; end; end; procedure TLine.draw(theCanvas:TCanvas;penmode:Tpenmode); begin theCanvas.Pen.Color:=col; theCanvas.pen.Width:=w; theCanvas.pen.mode:=penmode; theCanvas.moveTo(sx,sy); theCanvas.LineTo(ex,ey); end; constructor TLine.create(startX,startY,endX,EndY,width,color:integer); begin sx:=startX; sy:=startY; ex:=endX; ey:=endY; w:=width; col:=color; end; 使うときは newLine:=TLine.create(Origin.X, Origin.Y, LastPoint.X, LastPoint.Y, LineWidth, LineColor); newLine.draw(image1.canvas,pmCopy); LineList.add(newLine);//前もってcreateしておいたTList というかんじ  クリックされたとき線が選択されたか線を反転させる場合 MouseDownイベント等で for i:=0 to LineList.count-1 do begin with TLine(LineLIst.Items[i]) do begin if isOnLine(x,y) then begin LineAtFocus:=i;//どの線が選択されたか知りたい場合 draw(image1.canvas,pmNot);//ここのモードは好みに応じて break; end; end; end; ☆☆☆  かわいいコードにゃ旅をさせよう いざサンプル蔵へ!! ☆☆☆ 97/12/13(土) 10:21 凛(MXB01744) Original document by 凛 氏 ID:(MXB01744)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum