{******************************************************************************} { } { Tulip - User Interface Library } { } { Copyright(c) 2012 Marcos Gomes. All rights Reserved. } { } { -------------------------------------------------------------------------- } { } { This product is based on Asphyre Sphinx (c) 2000 - 2012 Yuriy Kotsarenko. } { All rights reserved. Official web site: http://www.afterwarp.net } { } {******************************************************************************} { } { Important Notice: } { } { If you modify/use this code or one of its parts either in original or } { modified form, you must comply with Mozilla Public License Version 2.0, } { including section 3, "Responsibilities". Failure to do so will result in } { the license breach, which will be resolved in the court. Remember that } { violating author's rights either accidentally or intentionally is } { considered a serious crime in many countries. Thank you! } { } { !! Please *read* Mozilla Public License 2.0 document located at: } { http://www.mozilla.org/MPL/ } { } { -------------------------------------------------------------------------- } { } { The contents of this file are subject to the Mozilla Public License } { Version 2.0 (the "License"); you may not use this file except in } { compliance with the License. You may obtain a copy of the License at } { http://www.mozilla.org/MPL/ } { } { Software distributed under the License is distributed on an "AS IS" } { basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the } { License for the specific language governing rights and limitations } { under the License. } { } { The Original Code is Tulip.UI.PaintBoxes.pas. } { } { The Initial Developer of the Original Code is Marcos Gomes. } { Portions created by Marcos Gomes are Copyright (C) 2012, Marcos Gomes. } { All Rights Reserved. } { } {******************************************************************************} { } { Tulip.UI.PaintBoxes.pas Modified: 05-Out-2012 } { -------------------------------------------------------------------------- } { } { Base Implementations for PaintBox Controls } { } { Version 1.02 } { } {******************************************************************************} unit Tulip.UI.PaintBoxes; interface uses System.SysUtils, System.Classes, // Tulip UI Units Tulip.UI.Types, Tulip.UI.Controls, Tulip.UI.Forms; type {$REGION 'TCustomAPaintBox'} TCustomAPaintBox = class(TAControl) private FAntialiased: Boolean; FCanMoveHandle: Boolean; FOnPaint: TNotifyEvent; procedure SetAntialiased(Value: Boolean); procedure SetCanMoveHandle(Value: Boolean); protected procedure AssignTo(Dest: TPersistent); override; procedure Paint; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; property Antialiased: Boolean read FAntialiased write SetAntialiased; property CanMoveHandle: Boolean read FCanMoveHandle write SetCanMoveHandle; property OnPaint: TNotifyEvent read FOnPaint write FOnPaint; end; {$ENDREGION} implementation var XOffSet, YOffSet: Integer; {$REGION 'TCustomAPaintBox'} { TCustomAPaintBox } procedure TCustomAPaintBox.AssignTo(Dest: TPersistent); begin ControlState := ControlState + [csReadingState]; inherited AssignTo(Dest); if Dest is TCustomAPaintBox then with TCustomAPaintBox(Dest) do begin Antialiased := Self.Antialiased; CanMoveHandle := Self.CanMoveHandle; end; ControlState := ControlState - [csReadingState]; end; constructor TCustomAPaintBox.Create(AOwner: TComponent); var Num: Integer; begin ControlState := ControlState + [csCreating]; inherited Create(AOwner); if (AOwner <> nil) and (AOwner <> Self) and (AOwner is TWControl) then begin // Auto generate name Num := 1; begin while (TWControl(AOwner).Handle.FindChildControl('PaintBox' + IntToStr(Num), True) <> nil) do Inc(Num); Name := 'PaintBox' + IntToStr(Num); end; end; // Fields FAntialiased := True; FCanMoveHandle := False; // Properties Left := 0; Top := 0; Width := 120; Height := 80; Visible := True; ControlState := ControlState - [csCreating]; end; destructor TCustomAPaintBox.Destroy; begin inherited; end; procedure TCustomAPaintBox.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // Start move the form Handle if (FCanMoveHandle) and (Handle is TCustomAForm) then begin if (Button = mbLeft) and (TCustomAForm(Handle).CanMove) then begin XOffSet := X - TCustomAForm(Handle).Left; YOffSet := Y - TCustomAForm(Handle).Top; TCustomAForm(Handle).IsMoving := True; end; end; inherited MouseDown(Button, Shift, X, Y); end; procedure TCustomAPaintBox.MouseMove(Shift: TShiftState; X, Y: Integer); begin // Move the form Handle if (FCanMoveHandle) and (Handle is TCustomAForm) then begin if TCustomAForm(Handle).IsMoving = True then begin TCustomAForm(Handle).Left := X - XOffSet; TCustomAForm(Handle).Top := Y - YOffSet; end; end; inherited MouseMove(Shift, X, Y); end; procedure TCustomAPaintBox.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // Stop move the form Handle if (FCanMoveHandle) and (Handle is TCustomAForm) then begin if (Button = mbLeft) and (TCustomAForm(Handle).IsMoving) then TCustomAForm(Handle).IsMoving := False; end; inherited MouseUp(Button, Shift, X, Y); end; procedure TCustomAPaintBox.Paint; begin if Assigned(FOnPaint) then begin ControlManager.Canvas.Antialias := FAntialiased; FOnPaint(Self); end; end; procedure TCustomAPaintBox.SetAntialiased(Value: Boolean); begin FAntialiased := Value; end; procedure TCustomAPaintBox.SetCanMoveHandle(Value: Boolean); begin FCanMoveHandle := Value; end; {$ENDREGION} end.