home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 January / Pcwk0198.iso / Dcomplib / BARESIZE.LZH / BARSIZE.PAS < prev    next >
Pascal/Delphi Source File  |  1995-03-20  |  6KB  |  256 lines

  1. unit Barsize;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, Cus_Bas;
  8.  
  9. const
  10.   HAUTEUR_BARRE_RESIZE    = 5 ;
  11.  
  12. type
  13.   TSL_Mouvement = procedure(Sender: TObject) of Object ;
  14.   TSL_DuringSlide = procedure(Sender: TObject;X,Y:Integer) of Object ;
  15.  
  16.   TBarreResize = class(TCustomControl_Base)
  17.   private
  18.     FIsHorizontale          : Boolean ;
  19.     IsBuildMode             : Boolean ;
  20.     ValeurDecallage         : Integer ;
  21.     FOnSl_mouvement         : TSL_Mouvement ;
  22.     FOnDuringSlide          : TSL_DuringSlide ;
  23.  
  24.     procedure SetIsHorizontale(Value: Boolean);
  25.     procedure Dessiner ;
  26.   protected
  27.     constructor Create(AOwner: TComponent); override;
  28.     procedure   Paint; override;
  29.     procedure   CreateParams(var Params: TCreateParams); override;
  30.     procedure   MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); override;
  31.     procedure   MouseUp(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); override;
  32.     procedure   MouseMove(Shift: TShiftState; X, Y: Integer); override;
  33.   public
  34.   published
  35.     property IsHorizontal : Boolean read FIsHorizontale write SetIsHorizontale;
  36.     property OnNewPosition : TSL_Mouvement read FOnSl_mouvement write FOnSl_mouvement ;
  37.     property OnSliding : TSL_DuringSlide read FOnDuringSlide write FOnDuringSlide ;
  38.   end;
  39.  
  40. procedure Register;
  41.  
  42. implementation
  43.  
  44. procedure Register;
  45. begin
  46.   RegisterComponents('Staff And Line', [TBarreResize]);
  47. end;
  48.  
  49. {---------------------------------------------------------------------------}
  50.  
  51. constructor TBarreResize.Create(AOwner: TComponent);
  52. begin
  53.   inherited Create(AOwner);
  54.   Width:=100 ;
  55.   Height:=HAUTEUR_BARRE_RESIZE ;
  56.   FIsHorizontale:=TRUE ;
  57. end;
  58.  
  59. procedure TBarreResize.CreateParams(var Params: TCreateParams);
  60. var
  61.   Chaine    : PString ;
  62. begin
  63.   inherited CreateParams(Params);
  64.   IsBuildMode:=(Pos('.DCL',Application.ExeName)>0) ;
  65.  
  66.   if FISHorizontale then
  67.   begin
  68.     Height:=5 ;
  69.     Cursor:=crVSplit ;
  70.   end
  71.   else
  72.   begin
  73.     Width:=5 ;
  74.     Cursor:=crHSplit ;
  75.   end ;
  76. end;
  77.  
  78. procedure TBarreResize.Paint;
  79. begin
  80. {
  81.   if FISHorizontale then
  82.     Height:=5
  83.   else
  84.     Width:=5 ;
  85. }
  86.   with Canvas do
  87.   begin
  88.     Pen.Color:=RGB(0,0,0) ;
  89.     Brush.Color:=RGB(192,192,192) ; ;
  90.     if FIsHorizontale then
  91.     begin
  92.       Rectangle(0,0,Width,HAUTEUR_BARRE_RESIZE) ;
  93.       Pen.Color:=RGB(128,128,128) ;
  94.       MoveTo(1,1) ;
  95.       LineTo(Width-1,1) ;
  96.       Pen.Color:=RGB(255,255,255) ;
  97.       MoveTo(1,3) ;
  98.       LineTo(Width-1,3) ;
  99.     end
  100.     else
  101.     begin
  102.       Rectangle(0,0,HAUTEUR_BARRE_RESIZE,Height) ;
  103.       Pen.Color:=RGB(128,128,128) ;
  104.       MoveTo(1,1) ;
  105.       LineTo(1,Height-1) ;
  106.       Pen.Color:=RGB(255,255,255) ;
  107.       MoveTo(3,1) ;
  108.       LineTo(3,Height-1) ;
  109.     end ;
  110.   end ;
  111. end ;
  112.  
  113. procedure TBarreResize.SetIsHorizontale(Value: Boolean);
  114. begin
  115.   if (IsBuildMode) and (FIsHorizontale<>Value) then
  116.   begin
  117.     if Value then
  118.     begin
  119.       Width:=Height ;
  120.       Height:=HAUTEUR_BARRE_RESIZE ;
  121.     end
  122.     else
  123.     begin
  124.       Height:=Width ;
  125.       Width:=HAUTEUR_BARRE_RESIZE ;
  126.     end ;
  127.   end ;
  128.  
  129.   FIsHorizontale:=Value ;
  130.   if FISHorizontale then
  131.     Height:=5
  132.   else
  133.     Width:=5 ;
  134.   Redraw ;
  135. end ;
  136.  
  137. procedure TBarreResize.MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer);
  138. var
  139.   Mypoint       : TPoint ;
  140. begin
  141.   if Button = mbLeft then
  142.   begin
  143.     MyPoint.X:=X;
  144.     MyPoint.Y:=Y ;
  145.     MyPoint:=ClientToScreen(MyPoint) ;
  146.     MyPoint:=TForm(Parent).ScreenToClient(MyPoint) ;
  147.     if FIsHorizontale then
  148.       ValeurDecallage:=MyPoint.Y
  149.     else
  150.       ValeurDecallage:=MyPoint.X ;
  151.     Dessiner ;
  152.   end ;
  153.   inherited MouseDown(Button,Shift, X, Y);
  154. end ;
  155.  
  156. procedure TBarreResize.MouseUp(Button: TMouseButton; Shift: TShiftState;X, Y: Integer);
  157. var
  158.   IsMouvement       : Boolean ;
  159. begin
  160.   if Button = mbLeft then
  161.   begin
  162.     Dessiner ;
  163.     IsMouvement:=FALSE ;
  164.     if FIsHorizontale then
  165.     begin
  166.       if (ValeurDecallage<(TForm(Parent).ClientHeight-HAUTEUR_BARRE_RESIZE-2)) and
  167.          (ValeurDecallage>2) then
  168.       begin
  169.         IsMouvement:=(Top<>ValeurDecallage) ;
  170.         Top:=ValeurDecallage ;
  171.       end ;
  172.     end
  173.     else
  174.     begin
  175.       if (ValeurDecallage<(TForm(Parent).ClientWidth-HAUTEUR_BARRE_RESIZE-2)) and
  176.          (ValeurDecallage>2) then
  177.       begin
  178.         IsMouvement:=(Left<>ValeurDecallage) ;
  179.         Left:=ValeurDecallage ;
  180.       end ;
  181.     end ;
  182.     if (IsMouvement) and (Assigned(FOnSL_Mouvement)) then
  183.     begin
  184.       OnNewPosition(Self) ;
  185.     end ;
  186.   end ;
  187.   inherited MouseUp(Button,Shift, X, Y);
  188. end ;
  189.  
  190. procedure TBarreResize.MouseMove(Shift: TShiftState; X, Y: Integer);
  191. var
  192.   MyPoint       : TPoint ;
  193.   Temp          : Integer ;
  194.   Temp2         : Integer ;
  195. begin
  196.   if ssLeft in Shift then
  197.   begin
  198.     MyPoint.X:=X;
  199.     MyPoint.Y:=Y ;
  200.     MyPoint:=ClientToScreen(MyPoint) ;
  201.     MyPoint:=TForm(Parent).ScreenToClient(MyPoint) ;
  202.     if FIsHorizontale then
  203.     begin
  204.       Temp:=MyPoint.Y ;
  205.       Temp2:=TForm(Parent).ClientHeight ;
  206.     end
  207.     else
  208.     begin
  209.       Temp:=MyPoint.X ;
  210.       Temp2:=TForm(Parent).ClientWidth ;
  211.     end ;
  212.     if (Temp<=0) then
  213.       Temp:=1
  214.     else if (Temp>=Temp2-HAUTEUR_BARRE_RESIZE-1) then
  215.       Temp:=Temp2-HAUTEUR_BARRE_RESIZE-2 ;
  216.  
  217.     Dessiner ;
  218.     if (Assigned(FOnDuringSlide)) then
  219.     begin
  220.       if FIsHorizontale then
  221.         OnSliding(Self,Left,ValeurDecallage)
  222.       else
  223.         OnSliding(Self,ValeurDecallage,Top) ;
  224.     end ;
  225.     ValeurDecallage:=Temp ;
  226.     Dessiner ;
  227.   end ;
  228.   inherited MouseMove(Shift, X, Y);
  229. end ;
  230.  
  231. procedure TBarreResize.Dessiner ;
  232. var
  233.   MyRect       : TRect ;
  234.   MyDC         : HDC ;
  235.   MyPoint      : TPoint ;
  236. begin
  237.   MyDC:=GetDC(0) ;
  238.   if FIsHorizontale then
  239.   begin
  240.     MyPoint.X:=Left ;
  241.     MyPoint.Y:=ValeurDecallage ;
  242.     MyPoint:=TForm(Parent).ClientToScreen(MyPoint) ;
  243.     BitBlt(MyDC,MyPoint.X,MyPoint.Y,Width,Height,0,0,0,DSTINVERT) ;
  244.   end
  245.   else
  246.   begin
  247.     MyPoint.X:=ValeurDecallage ;
  248.     MyPoint.Y:=Top ;
  249.     MyPoint:=TForm(Parent).ClientToScreen(MyPoint) ;
  250.     BitBlt(MyDC,MyPoint.X,MyPoint.Y,Width,Height,0,0,0,DSTINVERT) ;
  251.   end ;
  252.   ReleaseDC(0,MyDC) ;
  253. end ;
  254.  
  255. end.
  256.