home *** CD-ROM | disk | FTP | other *** search
- {$L-,D-}
-
- unit Draggers;
-
- interface
-
- type
-
- DragState= ( Idle, Size, Move );
-
- Dragger = object
- x1, y1 : word; { original position }
- xl, yl : word; { last position }
- procedure StartDrag( x, y : word );
- procedure Drag( x, y : word );
- procedure EndDrag( x, y : word);
- procedure GetRange( var x1, y1, x2, y2 : word);
- end;
-
- BDragger = object(Dragger)
- xm1, ym1,
- xm2, ym2 : word; { points for Move mode }
- DS : DragState;
- procedure Initialize( ds : DragState; xm1, ym1, xm2, ym2 : word);
- procedure StartDrag( x, y : word); override;
- procedure Drag( x, y : word); override;
- procedure EndDrag( x, y : word); override;
- end;
-
- implementation
-
- uses MSGraph;
-
- procedure Dragger.StartDrag( x, y : word );
- begin
- self.x1 := x;
- self.y1 := y;
- self.xl := x;
- self.yl := y;
- end;
-
- procedure Dragger.Drag( x, y : word);
- begin
- _SetWriteMode( _GXOR );
- _SetLineStyle( $CCCC );
- with self do begin
- _MoveTo( x1, y1 );
- _LineTo( xl, yl);
- _MoveTo( x1, y1 );
- _LineTo( x, y);
- xl := x;
- yl := y;
- end;
- end;
-
- procedure Dragger.EndDrag( x, y : word);
- begin
- _SetWriteMode( _GXOR );
- _SetLineStyle( $CCCC );
- with self do begin
- _MoveTo( x1, y1 );
- _LineTo( xl, yl);
- xl := x;
- yl := y;
- end;
- end;
-
- procedure Dragger.GetRange( var x1, y1, x2, y2 : word);
- begin
- x1 := self.x1;
- y1 := self.y1;
- x2 := self.xl;
- y2 := self.yl;
- end;
-
- procedure DrawBox( x1, y1, x2, y2 : word);
- begin
- _SetWriteMode( _GXOR );
- _SetLineStyle( $CCCC );
- _Rectangle( _GBORDER, x1, y1, x2, y2);
- end;
-
- procedure BDragger.Initialize( ds : DragState; xm1, ym1, xm2, ym2 : word);
- begin
- self.DS := ds;
- self.xm1 := xm1;
- self.ym1 := ym1;
- self.xm2 := xm2;
- self.ym2 := ym2;
- end;
-
- procedure BDragger.StartDrag( x, y : word);
- begin
- with self do begin
- inherited StartDrag( x, y );
- { if DS=Move then DrawBox( xm1, ym1, xm2, ym2 ); }
- DrawBox( xm1, ym1, xm2, ym2 );
- end;
- end;
-
- procedure BDragger.Drag( x, y : word );
- var
- dx, dy : integer;
- begin
- with self do begin
- if (xl=x) and (yl=y) then exit;
- if DS=Move then begin
- dx := x-xl;
- dy := y-yl;
- DrawBox( xm1, ym1, xm2, ym2 );
- inc( xm1, dx);
- inc( ym1, dy);
- inc( xm2, dx);
- inc( ym2, dy);
- DrawBox( xm1, ym1, xm2, ym2 );
- end
- else if DS=Size then begin
- dx := x-xl;
- dy := y-yl;
- DrawBox( xm1, ym1, xm2, ym2 );
- inc( xm2, dx);
- inc( ym2, dy);
- DrawBox( xm1, ym1, xm2, ym2 );
- end;
- xl := x;
- yl := y;
- end;
- end;
-
- procedure BDragger.EndDrag( x, y : word);
- begin
- with self do begin
- { remove RB box }
- if DS=Move then
- DrawBox( xm1, ym1, xm2, ym2)
- else
- DrawBox( x1, y1, xl, yl);
- DS := Idle;
- end;
- end;
-
- begin
- end.
-
-
-
-