home *** CD-ROM | disk | FTP | other *** search
- {************************************************}
- { }
- { Turbo Pascal for Windows }
- { Tips & Techniques Demo Program }
- { Copyright (c) 1991 by Borland International }
- { }
- {************************************************}
-
- Program Rubberband;
-
- uses WinTypes, WinProcs, WObjects;
-
- type
- TApp = object (TApplication)
- procedure InitMainWindow; virtual;
- end;
-
- PRubberWin = ^TRubberWin;
- TRubberWin = object(TWindow)
- DC : HDC;
- PS : TPaintStruct;
- ABrush: hBrush;
- APen: hPen;
- OTrack, Track : boolean;
- NextX, NextY, OrgX, OrgY, PrevX, PrevY, X, Y, SX, SY : longint;
- procedure Destroy; virtual;
- procedure SetupWindow; virtual;
- procedure WMLButtonDown(var Message: TMessage);
- virtual wm_First + wm_LButtonDown;
- procedure WMLButtonUp(var Message: TMessage);
- virtual wm_First + wm_LButtonUp;
- procedure WMMouseMove(var Message: TMessage);
- virtual wm_First + wm_MouseMove;
- end;
-
- procedure TApp.InitMainWindow;
- begin
- MainWindow := New(PRubberWin, Init(Nil,'RUBBER BAND'));
- end;
-
- procedure TRubberWin.Destroy;
- begin
- TWindow.Destroy;
- DeleteObject(ABrush);
- DeleteObject(APen);
- end;
-
- procedure TRubberWin.SetupWindow;
- begin
- Track := False;
- OTrack := True;
- OrgX := 0;
- OrgY := 0;
- PrevX := 0;
- PrevY := 0;
- X := 0;
- Y := 0;
- SX := 0;
- SY := 0;
- ABrush := CreateSolidBrush(RGB(255, 0, 0));
- APen := CreatePen(ps_Solid, 1, RGB(0, 0, 255));
- end;
-
- procedure TRubberWin.WMLButtonDown(var Message: TMessage);
- begin
- Track := True;
- with Message do
- begin
- PrevX := lParamLo;
- PrevY := lParamHi;
- OrgX := PrevX;
- OrgY := PrevY;
-
- if OTrack then
- begin
- SX := lParamLo;
- SY := lParamHi;
- OTrack := False;
- end;
- SetCapture(HWindow);
- end;
- end;
-
- procedure TRubberWin.WMLButtonUp(var Message: TMessage);
- var
- OldPen: HPen;
- OldBrush: HBrush;
- begin
- Track := False;
- OTrack := True;
- ReleaseCapture;
- X := integer(Message.lParamLo);
- Y := integer(Message.lParamHi);
- DC := GetDC(HWindow);
- OldPen := SelectObject(DC, APen);
- OldBrush := SelectObject(DC, ABrush);
- if (OrgX <> X) or (OrgY <> Y) then
- Ellipse(DC, OrgX, OrgY, X, Y);
- SelectObject(DC, OldPen);
- SelectObject(DC, OldBrush);
- ReleaseDC(HWindow, DC);
- end;
-
- procedure TRubberWin.WMMouseMove(var Message: TMessage);
- begin
- if Track then
- begin
- NextX := integer(Message.lParamLo);
- NextY := integer(Message.lParamHi);
- if (NextX <> PrevX) or (NextY <> PrevY) then
- begin
- DC := GetDC(HWindow);
- SetROP2(DC, r2_NOT);
- SelectObject(DC, GetStockObject(null_Brush));
- Ellipse(DC, OrgX, OrgY, PrevX, PrevY);
- PrevX := NextX;
- PrevY := NextY;
- Ellipse(DC, SX, SY, PrevX, PrevY);
- ReleaseDC(HWindow, DC);
- end;
- end;
- end;
-
- var
- App: TApp;
-
- begin
- App.Init('Rubber Band');
- App.Run;
- App.Done;
- end.
-