From: Andr? S. <asn...@us...> - 2004-02-22 14:56:22
|
Update of /cvsroot/jvcl/dev/JVCL3/qrun In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7228/JVCL3/qrun Modified Files: JvQWallpaperEditForm.pas JvQWallpaperEditForm.xfm Added Files: JvQCaptionPanel.pas JvQChart.pas JvQCoolBar.pas JvQFormAnimation.pas JvQHints.pas JvQMail.pas JvQParserForm.pas JvQParserForm.xfm JvQQtKeyEditorForm.pas JvQQtlKeySelectionFrame.xfm JvQScreenSaver.pas Log Message: VisualCLX units Note: generated files but some are modified : 'uses' All Jv*Reg.pas Currently not in CVS because of codefreeze --- NEW FILE: JvQCoolBar.pas --- {**************************************************************************************************} { WARNING: JEDI preprocessor generated unit. Manual modifications will be lost on next release. } {**************************************************************************************************} {----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (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/MPL-1.1.html Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: JvCoolBar.PAS, released on 2001-02-28. The Initial Developer of the Original Code is Sébastien Buysse [sb...@bu...] Portions created by Sébastien Buysse are Copyright (C) 2001 Sébastien Buysse. All Rights Reserved. Contributor(s): Michael Beck [mb...@bi...]. Last Modified: 2000-02-28 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net Known Issues: -----------------------------------------------------------------------------} {$I jvcl.inc} {$I windowsonly.inc} // (ahuser) VisualCLX has no CoolBar unit JvQCoolBar; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ComCtrls, JvQExComCtrls; type TJvCoolBar = class(TJvExCoolBar) private FHintColor: TColor; FSaved: TColor; FOver: Boolean; FOnParentColorChanged: TNotifyEvent; protected procedure MouseEnter(AControl: TControl); override; procedure MouseLeave(AControl: TControl); override; procedure ParentColorChanged; override; public constructor Create(AOwner: TComponent); override; published property HintColor: TColor read FHintColor write FHintColor default clInfoBk; property OnMouseEnter; property OnMouseLeave; property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; end; implementation constructor TJvCoolBar.Create(AOwner: TComponent); begin // (rom) inherited moved up inherited Create(AOwner); FHintColor := clInfoBk; FOver := False; ControlStyle := ControlStyle + [csAcceptsControls]; end; procedure TJvCoolBar.MouseEnter(AControl: TControl); begin if csDesigning in ComponentState then Exit; if not FOver then begin FSaved := Application.HintColor; Application.HintColor := FHintColor; FOver := True; inherited MouseEnter(AControl); end; end; procedure TJvCoolBar.MouseLeave(AControl: TControl); begin if FOver then begin FOver := False; Application.HintColor := FSaved; inherited MouseLeave(AControl); end; end; procedure TJvCoolBar.ParentColorChanged; begin inherited ParentColorChanged; if Assigned(FOnParentColorChanged) then FOnParentColorChanged(Self); end; end. --- NEW FILE: JvQQtKeyEditorForm.pas --- {**************************************************************************************************} { WARNING: JEDI preprocessor generated unit. Manual modifications will be lost on next release. } {**************************************************************************************************} {----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (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/MPL-1.1.html Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: JvAppletEditor.PAS, released on 2002-05-26. The Initial Developer of the Original Code is Peter Thörnqvist [pe...@pe...] Portions created by Peter Thörnqvist are Copyright (C) 2002 Peter Thörnqvist. All Rights Reserved. Contributor(s): Last Modified: 2002-05-26 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net Known Issues: -----------------------------------------------------------------------------} {$I jvcl.inc} unit JvQQtKeyEditorForm; interface uses SysUtils, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls, QButtons, JvQQtKeySelectionFrame, JvQComponent, QQControls, QQStdCtrls, QQButtons ; type TfrmJvQtKeyEditor = class(TJvForm) bbtOk: TBitBtn; bbtCancel: TBitBtn; private FEditingFrame: TJvVirtualKeySelectionFrame; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property EditingFrame: TJvVirtualKeySelectionFrame read FEditingFrame; end; implementation {$R *.xfm} constructor TfrmJvQtKeyEditor.Create(AOwner: TComponent); begin inherited Create(AOwner); FEditingFrame := TJvVirtualKeySelectionFrame.Create(Self); with FEditingFrame do begin Left := 4; Top := 8; Parent := Self; Visible := True; end; end; destructor TfrmJvQtKeyEditor.Destroy; begin FEditingFrame.Free; inherited Destroy; end; end. --- NEW FILE: JvQQtlKeySelectionFrame.xfm --- object JvVirtualKeySelectionFrame: TJvVirtualKeySelectionFrame Left = 0 Top = 0 Width = 213 Height = 50 TabOrder = 0 object lblVirtualKey: TLabel Left = 0 Top = 4 Width = 69 Height = 13 Alignment = taRightJustify AutoSize = False Caption = 'Virtual key' end object lblModifiers: TLabel Left = 0 Top = 32 Width = 69 Height = 13 Alignment = taRightJustify AutoSize = False Caption = 'Modifiers' end object cmbVirtualKey: TComboBox Left = 80 Top = 0 Width = 133 Height = 21 ItemHeight = 13 Sorted = True TabOrder = 0 end object chkShift: TCheckBox Left = 88 Top = 32 Width = 57 Height = 17 Caption = 'Shift' TabOrder = 1 end object chkCtrl: TCheckBox Left = 156 Top = 32 Width = 57 Height = 17 Caption = 'Ctrl' TabOrder = 2 end end --- NEW FILE: JvQParserForm.xfm --- object FormParsers: TFormParsers Left = 437 Top = 279 Width = 423 Height = 247 HorzScrollBar.Range = 415 VertScrollBar.Range = 241 ActiveControl = OkBtn BorderIcons = [biSystemMenu] Caption = 'Parser - Edit ' Color = clButton Font.Color = clText Font.Height = 13 Font.Name = 'adobe-helvetica' Font.Pitch = fpVariable Font.Style = [] Font.Weight = 0 Icon.Data = { 0000010001001010100001001000280100001600000028000000100000002000 00000100040000000000C0000000000000000000000000000000000000000000 0000000080000080000000808000800000008000800080800000C0C0C0008080 80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 00000000000000000BBBB0000000000BB000BB000000000BB0000B000000000B BB000BB00000000BBB000BB00000000000000BB00000000000000BB000000000 00000BB00000000000000BB00000000000000BB00000000000000BB000000000 00000BB0000000000000BBBB00000000000BBBBBB0000000000000000000FFFF 0000F87F0000E73F0000E7BF0000E39F0000E39F0000FF9F0000FF9F0000FF9F 0000FF9F0000FF9F0000FF9F0000FF9F0000FF0F0000FE070000FFFF0000} ParentFont = False Position = poScreenCenter Scaled = False ShowHint = True PixelsPerInch = 113 object ListBox1: TListBox Left = 8 Top = 120 Width = 321 Height = 117 ItemHeight = 15 TabOrder = 4 OnClick = ListBox1Click end object GroupBox1: TGroupBox Left = 8 Top = 7 Width = 407 Height = 107 Caption = 'Properties' ParentShowHint = False ShowHint = True TabOrder = 5 object Label1: TLabel Left = 14 Top = 23 Width = 49 Height = 15 Caption = 'Keyword' end object Label2: TLabel Left = 12 Top = 48 Width = 50 Height = 15 Caption = 'Start Tag' end object Label3: TLabel Left = 204 Top = 23 Width = 47 Height = 15 Caption = 'End Tag' end object Label4: TLabel Left = 204 Top = 48 Width = 49 Height = 15 Hint = 'Where the start text must be' Caption = 'Must be ' end object Label5: TLabel Left = 12 Top = 75 Width = 50 Height = 15 Caption = 'Take text' end object Edit1: TEdit Left = 66 Top = 19 Width = 115 Height = 23 Hint = 'Put here the keyword'#13#10'you want the component to send'#13#10'when he ha' + 's found this item' TabOrder = 0 OnChange = Edit1Change end object Edit2: TEdit Left = 66 Top = 44 Width = 115 Height = 23 Hint = 'Put here the string that'#13#10'is just before the part'#13#10'you want' TabOrder = 1 OnChange = Edit2Change end object Edit3: TEdit Left = 256 Top = 19 Width = 115 Height = 23 Hint = 'Put here the tag you want to find '#13#10'to end the tag' TabOrder = 2 OnChange = Edit3Change end object ComboBox1: TComboBox Left = 66 Top = 71 Width = 305 Height = 23 Hint = 'Tell the component'#13#10'which part you want of the string' ItemHeight = 17 Items.Strings = ( 'Between limits' 'All before start tag' 'All after start tag' 'The whole line if respecting the condition') TabOrder = 4 Text = 'Between limits' OnChange = ComboBox1Change end object Edit4: TEdit Left = 256 Top = 43 Width = 115 Height = 23 Hint = 'Put here the position of the start tag'#13#10#13#10'1 if you don'#39't care, '#13 + #10'0 if it can'#39't be in the string, '#13#10'1 if you want it in the first' + ' position'#13#10'2 if you want it in the second position'#13#10'....' TabOrder = 3 Text = '-1' OnChange = Edit4Change end end object AddBtn: TButton Left = 339 Top = 120 Width = 75 Height = 25 Hint = 'Add an item to the list' Caption = '&Add' TabOrder = 3 OnClick = Button1Click end object RemoveBtn: TButton Left = 339 Top = 152 Width = 75 Height = 25 Hint = 'Delete the selected item '#13#10'from the list' Caption = '&Remove' TabOrder = 2 OnClick = Button2Click end object OkBtn: TButton Left = 339 Top = 184 Width = 75 Height = 25 Hint = 'Apply changes' Caption = '&OK' Default = True TabOrder = 0 OnClick = OkBtnClick end object CancelBtn: TButton Left = 339 Top = 216 Width = 75 Height = 25 Hint = 'Cancel Changes' Cancel = True Caption = '&Cancel' TabOrder = 1 OnClick = CancelBtnClick end end --- NEW FILE: JvQHints.pas --- {**************************************************************************************************} { WARNING: JEDI preprocessor generated unit. Manual modifications will be lost on next release. } {**************************************************************************************************} {----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (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/MPL-1.1.html Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: JvHints.PAS, released on 2002-07-04. The Initial Developers of the Original Code are: Fedor Koshevnikov, Igor Pavluk and Serge Korolev Copyright (c) 1997, 1998 Fedor Koshevnikov, Igor Pavluk and Serge Korolev Copyright (c) 2001,2002 SGB Software All Rights Reserved. Last Modified: 2002-07-04 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net Known Issues: -----------------------------------------------------------------------------} {$I jvcl.inc} unit JvQHints; interface uses QGraphics, QControls, QForms, Types, QWindows, Classes; type THintStyle = (hsRectangle, hsRoundRect, hsEllipse); THintPos = (hpTopRight, hpTopLeft, hpBottomRight, hpBottomLeft); THintShadowSize = 0..15; TJvHintWindow = class(THintWindow) private FSrcImage: TBitmap; FImage: TBitmap; FPos: THintPos; FRect: TRect; FTextRect: TRect; FTileSize: TPoint; FRoundFactor: Integer; function CreateRegion(Shade: Boolean): HRGN; procedure FillRegion(Rgn: HRGN; Shade: Boolean); protected // procedure CreateParams(var Params: TCreateParams); override; procedure Paint; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure ActivateHint(Rect: TRect; const AHint: widestring); override; procedure ActivateHintData(Rect: TRect; const AHint: widestring; AData: Pointer); override; function CalcHintRect(MaxWidth: Integer; const AHint: widestring; AData: Pointer): TRect;override; end; procedure SetHintStyle(Style: THintStyle; ShadowSize: THintShadowSize; Tail: Boolean; Alignment: TAlignment); procedure SetStandardHints; procedure RegisterHintWindow(AClass: THintWindowClass); function GetHintControl: TControl; implementation uses SysUtils, Math, JvQJCLUtils; var HintStyle: THintStyle = hsRectangle; HintShadowSize: Integer = 0; HintTail: Boolean = False; HintAlignment: TAlignment = taLeftJustify; procedure RegisterHintWindow(AClass: THintWindowClass); begin HintWindowClass := AClass; with Application do if ShowHint then begin ShowHint := False; ShowHint := True; end; end; procedure SetStandardHints; begin RegisterHintWindow(THintWindow); end; procedure SetHintStyle(Style: THintStyle; ShadowSize: THintShadowSize; Tail: Boolean; Alignment: TAlignment); begin HintStyle := Style; HintShadowSize := ShadowSize; HintTail := Tail; HintAlignment := Alignment; RegisterHintWindow(TJvHintWindow); end; function GetHintControl: TControl; var CursorPos: TPoint; begin GetCursorPos(CursorPos); Result := FindDragTarget(CursorPos, True); while (Result <> nil) and not Result.ShowHint do Result := Result.Parent; if (Result <> nil) and (csDesigning in Result.ComponentState) then Result := nil; end; procedure StandardHintFont(AFont: TFont); begin AFont.Name := 'Helvetica'; AFont.Height := 13; AFont.Color := clInfoText; end; constructor TJvHintWindow.Create(AOwner: TComponent); begin inherited Create(AOwner); StandardHintFont(Canvas.Font); FImage := TBitmap.Create; FSrcImage := TBitmap.Create; end; destructor TJvHintWindow.Destroy; begin FSrcImage.Free; FImage.Free; inherited Destroy; end; function TJvHintWindow.CreateRegion(Shade: Boolean): HRGN; var R: TRect; W, TileOffs: Integer; Tail, Dest: HRGN; P: TPoint; function CreatePolyRgn(const Points: array of TPoint): HRGN; begin Result := CreatePolygonRgn(Points[0], High(Points) + 1, WINDING); end; begin R := FRect; Result := 0; if Shade then OffsetRect(R, HintShadowSize, HintShadowSize); case HintStyle of hsRoundRect: Result := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, FRoundFactor, FRoundFactor); hsEllipse: Result := CreateEllipticRgnIndirect(R); hsRectangle: Result := CreateRectRgnIndirect(R); end; if HintTail then begin R := FTextRect; GetCursorPos(P); TileOffs := 0; if FPos in [hpTopLeft, hpBottomLeft] then TileOffs := Width; if Shade then begin OffsetRect(R, HintShadowSize, HintShadowSize); Inc(TileOffs, HintShadowSize); end; W := Min(Max(8, Min(RectWidth(R), RectHeight(R)) div 4), RectWidth(R) div 2); case FPos of hpTopRight: Tail := CreatePolyRgn([Point(TileOffs, Height - HintShadowSize), Point(R.Left + W div 4, R.Bottom), Point(R.Left + 2 * W, R.Bottom)]); hpTopLeft: Tail := CreatePolyRgn([Point(TileOffs, Height - HintShadowSize), Point(R.Right - W div 4, R.Bottom), Point(R.Right - 2 * W, R.Bottom)]); hpBottomRight: Tail := CreatePolyRgn([Point(TileOffs, 0), Point(R.Left + W div 4, R.Top), Point(R.Left + 2 * W, R.Top)]); else Tail := CreatePolyRgn([Point(TileOffs, 0), Point(R.Right - W div 4, R.Top), Point(R.Right - 2 * W, R.Top)]); end; try Dest := Result; Result := CreateRectRgnIndirect(R); try CombineRgn(Result, Dest, Tail, RGN_OR); finally if Dest <> 0 then DeleteObject(Dest); end; finally DeleteObject(Tail); end; end; end; procedure TJvHintWindow.FillRegion(Rgn: HRGN; Shade: Boolean); begin if Shade then begin FImage.Canvas.Brush.Bitmap := AllocPatternBitmap(clBtnFace, clWindowText); FImage.Canvas.Pen.Style := psClear; end else begin FImage.Canvas.Pen.Style := psSolid; FImage.Canvas.Brush.Color := Color; end; try PaintRgn(FImage.Canvas.Handle, Rgn); if not Shade then begin FImage.Canvas.Brush.Color := Font.Color; if (HintStyle = hsRectangle) and not HintTail then DrawEdge(FImage.Canvas.Handle, FRect, BDR_RAISEDOUTER, BF_RECT) else FrameRgn(FImage.Canvas.Handle, Rgn, FImage.Canvas.Brush.Handle, 1, 1); end; finally if Shade then begin FImage.Canvas.Brush.Bitmap := nil; FImage.Canvas.Pen.Style := psSolid; end; FImage.Canvas.Brush.Color := Color; end; end; procedure TJvHintWindow.Paint; var R: TRect; FShadeRgn, FRgn: HRGN; procedure PaintText(R: TRect); const Flag: array [TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER); begin DrawText(FImage.Canvas.Handle, PChar(Caption), -1, R, DT_NOPREFIX or DT_WORDBREAK or Flag[HintAlignment] or DrawTextBiDiModeFlagsReadingOnly); end; begin R := ClientRect; FImage.Handle := CreateCompatibleBitmap(Canvas.Handle, RectWidth(ClientRect), RectHeight(ClientRect)); FImage.Canvas.Font := Self.Canvas.Font; if (HintStyle <> hsRectangle) or (HintShadowSize > 0) or HintTail then FImage.Canvas.Draw(0, 0, FSrcImage); FRgn := CreateRegion(False); FShadeRgn := CreateRegion(True); try FillRegion(FShadeRgn, True); FillRegion(FRgn, False); finally DeleteObject(FShadeRgn); DeleteObject(FRgn); end; R := FTextRect; if HintAlignment = taLeftJustify then Inc(R.Left, 2); PaintText(R); Canvas.Draw(0, 0, FImage); end; procedure TJvHintWindow.ActivateHint(Rect: TRect; const AHint: widestring); var R: TRect; ScreenDC: HDC; P: TPoint; begin Caption := AHint; GetCursorPos(P); FPos := hpBottomRight; R := CalcHintRect(Screen.Width, AHint, nil); OffsetRect(R, Rect.Left - R.Left, Rect.Top - R.Top); Rect := R; BoundsRect := Rect; if HintTail then begin Rect.Top := P.Y - Height - 3; if Rect.Top < 0 then Rect.Top := BoundsRect.Top else Rect.Bottom := Rect.Top + RectHeight(BoundsRect); Rect.Left := P.X + 1; if Rect.Left < 0 then Rect.Left := BoundsRect.Left else Rect.Right := Rect.Left + RectWidth(BoundsRect); end; if Rect.Top + Height > Screen.Height then begin Rect.Top := Screen.Height - Height; if Rect.Top <= P.Y then Rect.Top := P.Y - Height - 3; end; if Rect.Left + Width > Screen.Width then begin Rect.Left := Screen.Width - Width; if Rect.Left <= P.X then Rect.Left := P.X - Width - 3; end; if Rect.Left < 0 then begin Rect.Left := 0; if Rect.Left + Width >= P.X then Rect.Left := P.X - Width - 1; end; if Rect.Top < 0 then begin Rect.Top := 0; if Rect.Top + Height >= P.Y then Rect.Top := P.Y - Height - 1; end; if (HintStyle <> hsRectangle) or (HintShadowSize > 0) or HintTail then begin FPos := hpBottomRight; if Rect.Top + Height < P.Y then FPos := hpTopRight; if Rect.Left + Width < P.X then begin if FPos = hpBottomRight then FPos := hpBottomLeft else FPos := hpTopLeft; end; if HintTail then begin if FPos in [hpBottomRight, hpBottomLeft] then begin OffsetRect(FRect, 0, FTileSize.Y); OffsetRect(FTextRect, 0, FTileSize.Y); end; if FPos in [hpBottomRight, hpTopRight] then begin OffsetRect(FRect, FTileSize.X, 0); OffsetRect(FTextRect, FTileSize.X, 0); end; end; if HandleAllocated then begin SetWindowPos(Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_HIDEWINDOW or SWP_NOACTIVATE or SWP_NOSIZE or SWP_NOMOVE); if Screen.ActiveForm <> nil then UpdateWindow(Screen.ActiveForm.Handle); end; ScreenDC := GetDC(0); try with FSrcImage do begin Width := RectWidth(BoundsRect); Height := RectHeight(BoundsRect); BitBlt(Canvas.Handle, 0, 0, Width, Height, ScreenDC, Rect.Left, Rect.Top, SRCCOPY); end; finally ReleaseDC(0, ScreenDC); end; end; SetWindowPos(Handle, HWND_TOPMOST, Rect.Left, Rect.Top, 0, 0, SWP_SHOWWINDOW or SWP_NOACTIVATE or SWP_NOSIZE); end; function TJvHintWindow.CalcHintRect(MaxWidth: Integer; const AHint: widestring; AData: Pointer): TRect; const Flag: array [TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER); var A: Integer; X, Y, Factor: Double; begin Result := Rect(0, 0, MaxWidth, 0); DrawText(Canvas.Handle, PChar(AHint), -1, Result, DT_CALCRECT or DT_WORDBREAK or DT_NOPREFIX or Flag[HintAlignment] or DrawTextBiDiModeFlagsReadingOnly); Inc(Result.Right, 8); Inc(Result.Bottom, 4); FRect := Result; FTextRect := Result; InflateRect(FTextRect, -1, -1); case HintAlignment of taCenter: OffsetRect(FTextRect, -1, 0); taRightJustify: OffsetRect(FTextRect, -4, 0); end; FRoundFactor := Max(6, Min(RectWidth(Result), RectHeight(Result)) div 4); if HintStyle = hsRoundRect then InflateRect(FRect, FRoundFactor div 4, FRoundFactor div 4) else if HintStyle = hsEllipse then begin X := RectWidth(FRect) / 2; Y := RectHeight(FRect) / 2; if (X <> 0) and (Y <> 0) then begin Factor := Round(Y / 3); A := Round(Sqrt((Sqr(X) * Sqr(Y + Factor)) / (Sqr(Y + Factor) - Sqr(Y)))); InflateRect(FRect, A - Round(X), Round(Factor)); end; end; Result := FRect; OffsetRect(FRect, -Result.Left, -Result.Top); OffsetRect(FTextRect, -Result.Left, -Result.Top); Inc(Result.Right, HintShadowSize); Inc(Result.Bottom, HintShadowSize); if HintTail then begin FTileSize.Y := Max(14, Min(RectWidth(FTextRect), RectHeight(FTextRect)) div 2); FTileSize.X := FTileSize.Y - 8; Inc(Result.Right, FTileSize.X); Inc(Result.Bottom, FTileSize.Y); end; end; procedure TJvHintWindow.ActivateHintData(Rect: TRect; const AHint: widestring; AData: Pointer); begin ActivateHint(Rect, AHint); end; end. --- NEW FILE: JvQScreenSaver.pas --- {**************************************************************************************************} { WARNING: JEDI preprocessor generated unit. Manual modifications will be lost on next release. } {**************************************************************************************************} {----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (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/MPL-1.1.html Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: JvScreenSaver.PAS, released on 2001-02-28. The Initial Developer of the Original Code is Sébastien Buysse [sb...@bu...] Portions created by Sébastien Buysse are Copyright (C) 2001 Sébastien Buysse. All Rights Reserved. Contributor(s): Michael Beck [mb...@bi...]. Last Modified: 2000-02-28 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net Known Issues: -----------------------------------------------------------------------------} {$I jvcl.inc} {$I windowsonly.inc} unit JvQScreenSaver; interface uses Windows, SysUtils, Classes, JvQTypes, JvQComponent; type TJvScreenSaver = class(TJvComponent) private FOnStart: TNotifyEvent; FOnConfigure: TNotifyEvent; FOnPreview: TJvParentEvent; FOnPasswordChange: TJvParentEvent; public procedure Loaded; override; published property OnConfigure: TNotifyEvent read FOnConfigure write FOnConfigure; property OnPreview: TJvParentEvent read FOnPreview write FOnPreview; property OnStart: TNotifyEvent read FOnStart write FOnStart; property OnPasswordChange: TJvParentEvent read FOnPasswordChange write FOnPasswordChange; end; implementation // (rom) moved from Create to Loaded. None of the events can be assigned otherwise. procedure TJvScreenSaver.Loaded; var S: string; Style: Integer; H: THandle; begin inherited Loaded; Style := 0; if ParamCount <> 0 then begin S := UpperCase(ParamStr(1)); if S = 'C' then Style := 0 else if S = 'A' then Style := 1 else if S = 'P' then Style := 2 else Style := 3; end; if Style in [1, 2] then H := StrToInt(ParamStr(2)) else H := 0; case Style of 0: if Assigned(FOnConfigure) then FOnConfigure(Self); 1: if Assigned(FOnPasswordChange) then FOnPasswordChange(Self, H); 2: if Assigned(FOnPreview) then FOnPreview(Self, H); 3: if Assigned(FOnStart) then FOnStart(Self); end; end; end. --- NEW FILE: JvQCaptionPanel.pas --- {**************************************************************************************************} { WARNING: JEDI preprocessor generated unit. Manual modifications will be lost on next release. } {**************************************************************************************************} {----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (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/MPL-1.1.html Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: JvCaptionPanel.PAS, released on 2002-05-26. The Initial Developer of the Original Code is Peter Thörnqvist [pe...@pe...] Portions created by Peter Thörnqvist are Copyright © 1997-2002 Peter Thörnqvist. All Rights Reserved. Contributor(s): Michael Beck [mb...@bi...] Last Modified: 2002-05-26 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net Known Issues: -----------------------------------------------------------------------------} {$I jvcl.inc} { @abstract(TJvCaptionPanel is a panel that looks like a form, with a Caption area, system buttons but is derived from a normal panel.) } unit JvQCaptionPanel; interface // Define JVCAPTIONPANEL_STD_BEHAVE to not use the previous undocumented WM_SYSCOMMAND with SC_DRAGMOVE but instead handle // the dragging "manually" within the control. Defining this means that you actually get the Mouse events // and the OnEndAutoDrag event. Additionally, the form displays scrollbars as expected when the component is dragged // The downside is that the control "flashes" more when it's dragged uses {$IFDEF MSWINDOWS} Windows, Messages, {$ENDIF MSWINDOWS} SysUtils, Classes, Types, Qt, QWindows, QGraphics, QControls, QForms, QDialogs, QExtCtrls, JvQComponent, JvQThemes, JvQExControls; type TJvCapBtnStyle = (capClose, capMax, capMin, capRestore, capHelp); TJvCapBtnStyles = set of TJvCapBtnStyle; TJvDrawPosition = (dpLeft, dpTop, dpRight, dpBottom); TJvCapBtnEvent = procedure(Sender: TObject; Button: TJvCapBtnStyle) of object; TJvAutoDragStartEvent = procedure(Sender: TObject; var AllowDrag: Boolean) of object; { internal class } TJvCapBtn = class(TJvGraphicControl) private FOwner: TComponent; FStyle: TJvCapBtnStyle; FMouseDown: Boolean; FDown: Boolean; FFlat: Boolean; FOver: Boolean; procedure SetFlat(Value: Boolean); procedure SetStyle(Value: TJvCapBtnStyle); procedure BtnClick; protected procedure Click; override; procedure Paint; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseEnter(Control: TControl); override; procedure MouseLeave(Control: TControl); override; public constructor Create(AOwner: TComponent); override; property Style: TJvCapBtnStyle read FStyle write SetStyle default capClose; property Flat: Boolean read FFlat write SetFlat default False; property Visible default False; end; TJvCaptionPanel = class(TJvCustomPanel, IJvDenySubClassing) private FButtonArray: array[TJvCapBtnStyle] of TJvCapBtn; FButtonClick: TJvCapBtnEvent; FDrawPosition: TJvDrawPosition; FCaptionWidth: Integer; FOffset: Integer; FButtons: TJvCapBtnStyles; FAutoDrag: Boolean; FMouseDown: Boolean; FCaptionRect: TRect; FCaption: string; FCaptionColor: TColor; FFlat: Boolean; FBevel: Integer; FDragging: Boolean; FEndDrag: TNotifyEvent; FCaptionFont: TFont; FOnStartAutoDrag: TJvAutoDragStartEvent; FOutlookLook: Boolean; FCaptionOffsetSmall: Integer; FCaptionOffsetLarge: Integer; FAnchorPos: TPoint; procedure SetCaptionFont(Value: TFont); procedure SetCaptionColor(Value: TColor); procedure SetFlat(Value: Boolean); procedure SetButtons(Value: TJvCapBtnStyles); procedure SetCaption(Value: string); procedure SetJvDrawPosition(Value: TJvDrawPosition); procedure DrawRotatedText(Rotation: Integer); procedure DrawButtons; procedure SetOutlookLook(const Value: Boolean); procedure DoCaptionFontChange(Semder:TObject); protected procedure Paint; override; procedure Resize; override; procedure AlignControls(AControl: TControl; var Rect: TRect); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure ClickButton(Button: TJvCapBtnStyle); virtual; function CanStartDrag: Boolean; virtual; procedure DoLeaveDrag; virtual; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property Align; property AutoDrag: Boolean read FAutoDrag write FAutoDrag default True; property Buttons: TJvCapBtnStyles read FButtons write SetButtons; property BorderStyle default bsSingle; property Caption: string read FCaption write SetCaption; property CaptionColor: TColor read FCaptionColor write SetCaptionColor default clActiveCaption; property CaptionPosition: TJvDrawPosition read FDrawPosition write SeTJvDrawPosition default dpLeft; property CaptionFont: TFont read FCaptionFont write SetCaptionFont; property Color; property Cursor; property DragMode; property Enabled; property FlatButtons: Boolean read FFlat write SetFlat default False; property Font; property Hint; property OutlookLook: Boolean read FOutlookLook write SetOutlookLook; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property ShowHint; property TabOrder; property TabStop; property Visible; property OnButtonClick: TJvCapBtnEvent read FButtonClick write FButtonClick; property OnClick; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDrag; property OnStartAutoDrag: TJvAutoDragStartEvent read FOnStartAutoDrag write FOnStartAutoDrag; property OnEndAutoDrag: TNotifyEvent read FEndDrag write FEndDrag; property OnEnter; property OnExit; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnResize; end; implementation //=== TJvCapBtn ============================================================== constructor TJvCapBtn.Create(AOwner: TComponent); begin inherited Create(AOwner); FOwner := AOwner; Width := GetSystemMetrics(SM_CYCAPTION) - 3; Height := Width - 2; FStyle := capClose; Visible := False; FFlat := False; end; procedure TJvCapBtn.BtnClick; begin if FOwner is TJvCaptionPanel then TJvCaptionPanel(FOwner).ClickButton(Style); end; procedure TJvCapBtn.SetFlat(Value: Boolean); begin if FFlat <> Value then begin FFlat := Value; Invalidate; end; end; procedure TJvCapBtn.SetStyle(Value: TJvCapBtnStyle); begin if FStyle <> Value then begin FStyle := Value; Invalidate; end; end; procedure TJvCapBtn.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not Enabled then Exit; inherited MouseDown(Button, Shift, X, Y); if not FMouseDown then begin FMouseDown := True; FDown := True; Repaint; end; end; procedure TJvCapBtn.Click; begin inherited Click; BtnClick; end; procedure TJvCapBtn.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not Enabled then Exit; inherited MouseUp(Button, Shift, X, Y); if FMouseDown then begin FMouseDown := False; FDown := False; Repaint; end; end; procedure TJvCapBtn.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited MouseMove(Shift, X, Y); if FMouseDown then begin FOver := PtInRect(ClientRect, Point(X, Y)); if not FOver then begin if FDown then { mouse has slid off, so release } begin FDown := False; Repaint; end; end else begin if not FDown then { mouse has slid back on, so push } begin FDown := True; Repaint; end; end; end; end; procedure TJvCapBtn.MouseEnter(Control: TControl); var R: TRect; begin if csDesigning in ComponentState then Exit; if not FOver then begin FOver := True; if FFlat then begin R := ClientRect; if FDown then Frame3D(Canvas, R, clBtnShadow, clBtnHighLight, 1) else Frame3D(Canvas, R, clBtnHighLight, clBtnShadow, 1); end; inherited MouseEnter(Control); end; end; procedure TJvCapBtn.MouseLeave(Control: TControl); var R: TRect; begin if FOver then begin FOver := False; if FFlat then begin R := ClientRect; Frame3D(Canvas, R, clBtnFace, clBtnFace, 1); end; inherited MouseLeave(Control); end; end; procedure TJvCapBtn.Paint; var Flags: Integer; R: TRect; begin if not Visible then Exit; Flags := 0; case FStyle of capClose: Flags := DFCS_CAPTIONCLOSE; capMax: Flags := DFCS_CAPTIONMAX; capMin: Flags := DFCS_CAPTIONMIN; capRestore: Flags := DFCS_CAPTIONRESTORE; capHelp: Flags := DFCS_CAPTIONHELP; end; if not Enabled then Flags := Flags or DFCS_INACTIVE else if FDown and FMouseDown and Enabled then Flags := Flags or DFCS_PUSHED; if FFlat then Flags := Flags or DFCS_FLAT; Canvas.Brush.Color := Color; Canvas.Start; try SetBkMode(Canvas.Handle, TRANSPARENT); DrawFrameControl(Canvas.Handle, ClientRect, DFC_CAPTION, Flags); if FFlat then begin R := ClientRect; if FDown and FMouseDown then Frame3D(Canvas, R, clBtnShadow, clBtnHighLight, 1) else if FOver then Frame3D(Canvas, R, clBtnHighLight, clBtnShadow, 1) else Frame3D(Canvas, R, clBtnFace, clBtnFace, 1); end; finally Canvas.Stop; end; end; //=== TJvCaptionPanel ======================================================== constructor TJvCaptionPanel.Create(AOwner: TComponent); var I: TJvCapBtnStyle; begin inherited Create(AOwner); FCaptionFont := TFont.Create; // (rom) Warning! This seems no standard Windows font FCaptionFont.Name := 'MS Shell Dlg 2'; FCaptionFont.Size := 10; FCaptionFont.Style := [fsBold]; FCaptionFont.Color := clWhite; FCaptionFont.OnChange := DoCaptionFontChange; FDrawPosition := dpLeft; FCaptionWidth := GetSystemMetrics(SM_CYCAPTION); FOffset := 8; FAutoDrag := True; FCaptionColor := clActiveHighlight; FFlat := False; for I := Low(FButtonArray) to High(FButtonArray) do //Iterate begin FButtonArray[I] := TJvCapBtn.Create(Self); FButtonArray[I].Parent := Self; FButtonArray[I].Style := I; FButtonArray[I].Flat := FFlat; end; FButtons := []; BorderStyle := bsSingle; FCaptionOffsetSmall := 2; FCaptionOffsetLarge := 3; FOutlookLook := False; end; destructor TJvCaptionPanel.Destroy; begin FCaptionFont.Free; inherited Destroy; end; procedure TJvCaptionPanel.SetCaptionFont(Value: TFont); begin FCaptionFont.Assign(Value); Invalidate; end; procedure TJvCaptionPanel.SetCaption(Value: string); begin FCaption := Value; inherited Caption := ''; Invalidate; end; procedure TJvCaptionPanel.SetCaptionColor(Value: TColor); begin if FCaptionColor <> Value then begin FCaptionColor := Value; Invalidate; end; end; procedure TJvCaptionPanel.SetFlat(Value: Boolean); var I: TJvCapBtnStyle; begin if FFlat <> Value then begin FFlat := Value; for I := Low(FbuttonArray) to High(FButtonArray) do FButtonArray[I].Flat := FFlat; end; end; procedure TJvCaptionPanel.SetButtons(Value: TJvCapBtnStyles); var I: TJvCapBtnStyle; begin if FButtons <> Value then begin FButtons := Value; for I := Low(FButtonArray) to High(FButtonArray) do FButtonArray[I].Visible := (I in FButtons); Invalidate; end; end; procedure TJvCaptionPanel.SetJvDrawPosition(Value: TJvDrawPosition); begin if FDrawPosition <> Value then begin FDrawPosition := Value; RecreateWidget; end; end; procedure TJvCaptionPanel.AlignControls(AControl: TControl; var Rect: TRect); begin case FDrawPosition of dpLeft: Rect := Classes.Rect(FCaptionWidth + FCaptionOffsetSmall, 0, ClientWidth, ClientHeight); dpTop: Rect := Classes.Rect(0, FCaptionWidth + FCaptionOffsetSmall, ClientWidth, ClientHeight); dpRight: Rect := Classes.Rect(0, 0, ClientWidth - FCaptionWidth - FCaptionOffsetSmall, ClientHeight); dpBottom: Rect := Classes.Rect(0, 0, ClientWidth, ClientHeight - FCaptionWidth - FCaptionOffsetSmall); end; inherited AlignControls(AControl, Rect); end; procedure TJvCaptionPanel.Paint; var Rotation: Integer; R: TRect; FlatOffset: Integer; begin R := ClientRect; Canvas.Start; try R := ClientRect; InflateRect(R, -2, -2); QPainter_save(Canvas.Handle); ExcludeClipRect(Canvas.Handle, R); inherited Paint; QPainter_restore(Canvas.Handle); finally Canvas.Stop; end; with Canvas do begin Brush.Color := Color; FillRect(R); Brush.Color := FCaptionColor; end; FBevel := FCaptionOffsetSmall; Rotation := 0; FlatOffset := Ord(FlatButtons); if FOutlookLook then begin if CaptionPosition = dpLeft then FCaptionWidth := GetSystemMetrics(SM_CYCAPTION) - 3 + FlatOffset else if CaptionPosition = dpRight then FCaptionWidth := GetSystemMetrics(SM_CYCAPTION) - 4 + FlatOffset else FCaptionWidth := GetSystemMetrics(SM_CYCAPTION) - 5 + FlatOffset end else FCaptionWidth := GetSystemMetrics(SM_CYCAPTION); case FDrawPosition of dpLeft: begin FCaptionRect := Rect(FBevel, FBevel, FCaptionWidth + FBevel, ClientHeight - FBevel); Rotation := 90; end; dpTop: FCaptionRect := Rect(FBevel, FBevel, ClientWidth - FBevel, FCaptionWidth + FBevel); dpRight: begin FCaptionRect := Rect(ClientWidth - FCaptionWidth - FBevel, FBevel, ClientWidth - FBevel, ClientHeight - FBevel); Rotation := -90; end; dpBottom: FCaptionRect := Rect(FBevel, ClientHeight - FCaptionWidth - FBevel, ClientWidth - FBevel, ClientHeight - FBevel); end; //case Canvas.FillRect(FCaptionRect); DrawRotatedText(Rotation); DrawButtons; end; procedure TJvCaptionPanel.DrawRotatedText(Rotation: Integer); var R: TRect; tH, tW: Integer; begin if FCaption = '' then Exit; Canvas.Start; try QPainter_save(Canvas.Handle); SetBkMode(Canvas.Handle, TRANSPARENT); with Canvas do begin R := FCaptionRect; tH := Canvas.TextHeight(FCaption); tW := Canvas.TextHeight(FCaption); if FOutlookLook then begin Dec(th); Dec(tw); end; case FDrawPosition of dpLeft: begin with FCaptionRect do R := Rect(Left, Bottom, Right, Top); OffsetRect(R, tW, -FOffset); end; dpTop: OffsetRect(R, FOffset, tH); dpRight: begin with FCaptionRect do R := Rect(Right, Top, Left, Bottom); OffsetRect(R, -tW, FOffset); end; dpBottom: OffsetRect(R, FOffset, tH); end; Canvas.Font.Assign(CaptionFont); IntersectClipRect(Canvas.Handle, R); TextOutAngle(Canvas, Rotation, R.Left, R.Top, Caption); end; finally QPainter_restore(Canvas.Handle); Canvas.Stop; end; end; procedure TJvCaptionPanel.DrawButtons; var R: TRect; FWidth, FHeight: Integer; begin if FButtons = [] then Exit; FWidth := FButtonArray[capClose].Width; FHeight := FButtonArray[capClose].Height; if FFlat then begin Inc(FWidth); Inc(FHeight); end; case FDrawPosition of dpLeft: R := Rect(FCaptionRect.Left + FCaptionOffsetSmall, FCaptionRect.Top + FCaptionOffsetSmall, 0, 0); dpTop: R := Rect(FCaptionRect.Right - FWidth - FCaptionOffsetSmall, FCaptionRect.Top + FCaptionOffsetLarge, 0, 0); dpRight: R := Rect(FCaptionRect.Left + FCaptionOffsetSmall, FCaptionRect.Bottom - FHeight - FCaptionOffsetSmall, 0, 0); dpBottom: R := Rect(FCaptionRect.Right - FWidth - FCaptionOffsetSmall, FCaptionRect.Top + FCaptionOffsetLarge, 0, 0); end; if capClose in FButtons then begin FButtonArray[capClose].Top := R.Top; FButtonArray[capClose].Left := R.Left; FButtonArray[capClose].Visible := True; case FDrawPosition of dpLeft: OffsetRect(R, 0, FHeight + FCaptionOffsetSmall); dpTop: OffsetRect(R, -FWidth - FCaptionOffsetSmall, 0); dpRight: OffsetRect(R, 0, -FHeight - FCaptionOffsetSmall); dpBottom: OffsetRect(R, -FWidth - FCaptionOffsetSmall, 0); end; end else FButtonArray[capClose].Visible := False; if (capMax in FButtons) then begin FButtonArray[capMax].Top := R.Top; FButtonArray[capMax].Left := R.Left; FButtonArray[capMax].Visible := True; case FDrawPosition of dpLeft: OffsetRect(R, 0, FHeight); dpTop: OffsetRect(R, -FWidth, 0); dpRight: OffsetRect(R, 0, -FHeight); dpBottom: OffsetRect(R, -FWidth, 0); end; end else FButtonArray[capMax].Visible := False; if capRestore in FButtons then begin FButtonArray[capRestore].Top := R.Top; FButtonArray[capRestore].Left := R.Left; FButtonArray[capRestore].Visible := True; case FDrawPosition of dpLeft: OffsetRect(R, 0, FHeight); dpTop: OffsetRect(R, -FWidth, 0); dpRight: OffsetRect(R, 0, -FHeight); dpBottom: OffsetRect(R, -FWidth, 0); end; end else FButtonArray[capRestore].Visible := False; if capMin in FButtons then begin FButtonArray[capMin].Top := R.Top; FButtonArray[capMin].Left := R.Left; FButtonArray[capMin].Visible := True; case FDrawPosition of dpLeft: OffsetRect(R, 0, FHeight); dpTop: OffsetRect(R, -FWidth, 0); dpRight: OffsetRect(R, 0, -FHeight); dpBottom: OffsetRect(R, -FWidth, 0); end; end else FButtonArray[capMin].Visible := False; if capHelp in FButtons then begin FButtonArray[capHelp].Top := R.Top; FButtonArray[capHelp].Left := R.Left; FButtonArray[capHelp].Visible := True; end else FButtonArray[capHelp].Visible := False; end; { this method is called only by the caption buttons } procedure TJvCaptionPanel.ClickButton(Button: TJvCapBtnStyle); begin if Assigned(FButtonClick) then FButtonClick(Self, Button); end; procedure TJvCaptionPanel.DoLeaveDrag; begin if Assigned(FEndDrag) then FEndDrag(Self); end; procedure TJvCaptionPanel.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseUp(Button, Shift, X, Y); if FDragging then DoLeaveDrag; FDragging := False; end; procedure TJvCaptionPanel.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited MouseMove(Shift, X, Y); if FDragging then begin Left := Left + X - FAnchorPos.X; Top := Top + Y - FAnchorPos.Y; end; end; procedure TJvCaptionPanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); const SC_DRAGMOVE = $F012; begin inherited MouseDown(Button, Shift, X, Y); FMouseDown := True; if not PtInRect(FCaptionRect, Point(X, Y)) then Exit; if FAutoDrag and CanStartDrag then begin SetZOrder(True); FDragging := True; ReleaseCapture; SetMouseGrabControl(Self); FAnchorPos := Point(X, Y); end; end; procedure TJvCaptionPanel.Resize; begin inherited Resize; Repaint; end; function TJvCaptionPanel.CanStartDrag: Boolean; begin Result := True; if Assigned(FOnStartAutoDrag) then FOnStartAutoDrag(Self, Result); end; procedure TJvCaptionPanel.SetOutlookLook(const Value: Boolean); begin FOutlookLook := Value; if FOutlookLook then begin FCaptionOffsetSmall := 0; FCaptionOffsetLarge := 0; end else begin FCaptionOffsetSmall := 2; FCaptionOffsetLarge := 3; end; Invalidate; end; procedure TJvCaptionPanel.DoCaptionFontChange(Semder: TObject); begin Invalidate; end; end. --- NEW FILE: JvQFormAnimation.pas --- {**************************************************************************************************} { WARNING: JEDI preprocessor generated unit. Manual modifications will be lost on next release. } {**************************************************************************************************} {----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (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/MPL-1.1.html Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: JvFormAnimation.PAS, released on 2001-02-28. The Initial Developer of the Original Code is Sébastien Buysse [sb...@bu...] Portions created by Sébastien Buysse are Copyright (C) 2001 Sébastien Buysse. All Rights Reserved. Contributor(s): Michael Beck [mb...@bi...]. Last Modified: 2000-02-28 You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net Known Issues: -----------------------------------------------------------------------------} {$I jvcl.inc} unit JvQFormAnimation; interface uses SysUtils, Classes, QWindows, QControls, QForms, JvQComponent; type TJvFormAnimation = class(TJvComponent) private FForm: TCustomForm; FRegions: array of HRGN; // (rom) simplified procedure AnimateDisappear(N: Integer); procedure AnimateAppear(N: Integer); procedure DeleteRegions; public constructor Create(AOwner: TComponent); override; published procedure DisappearEllipse; procedure DisappearRectangle; procedure DisappearRoundedRectangle(EllipseX, EllipseY: Integer); procedure DisappearHorizontally; procedure DisappearVertically; procedure DisappearTelevision; procedure DisappearToBottom; procedure DisappearToTop; procedure AppearEllipse; procedure AppearRectangle; procedure AppearRoundedRectangle(EllipseX, EllipseY: Integer); procedure AppearHorizontally; procedure AppearVertically; procedure AppearTelevision; procedure AppearToTop; procedure AppearToBottom; end; implementation uses Math; constructor TJvFormAnimation.Create(AOwner: TComponent); begin inherited Create(AOwner); FForm := GetParentForm(TControl(AOwner)); end; procedure TJvFormAnimation.AnimateDisappear(N: Integer); var I: Integer; begin FForm.Visible := True; for I := 0 to N do begin SetWindowRgn(FForm.Handle, FRegions[I], True); FForm.Repaint; Sleep(10); end; FForm.Visible := False; SetWindowRgn(FForm.Handle, nil, True); DeleteRegions; end; procedure TJvFormAnimation.AnimateAppear(N: Integer); var I: Integer; Rgn: HRGN; begin FForm.Visible := False; Rgn := CreateRectRgn(0, 0, 0, 0); SetWindowRgn(FForm.Handle, Rgn, True); FForm.Visible := True; for I := N downto 0 do begin SetWindowRgn(FForm.Handle, FRegions[I], True); FForm.Repaint; Sleep(10); end; SetWindowRgn(FForm.Handle, nil, True); DeleteObject(Rgn); DeleteRegions; end; procedure TJvFormAnimation.DeleteRegions; var I: Integer; begin for I := Low(FRegions) to High(FRegions) do DeleteObject(FRegions[I]); SetLength(FRegions, 0); end; procedure TJvFormAnimation.DisappearEllipse; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if I < (FForm.Width div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateEllipticRgn(I, J, FForm.Width - I, FForm.Height - J); I := I + 2; end else begin L := K; Break; end; end; AnimateDisappear(L); end; procedure TJvFormAnimation.DisappearRectangle; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if I < (FForm.Width div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); I := I + 2; end else begin L := K; Break; end; end; AnimateDisappear(L); end; procedure TJvFormAnimation.DisappearRoundedRectangle(EllipseX, EllipseY: Integer); var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if I < (FForm.Width div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRoundRectRgn(I, J, FForm.Width - I, FForm.Height - J, EllipseX, EllipseY); I := I + 2; end else begin L := K; Break; end; end; AnimateDisappear(L); end; procedure TJvFormAnimation.DisappearHorizontally; var I, J, K, L: Integer; begin J := 0; L := 0; I := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if I < (FForm.Width div 2) then begin if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); I := I + 2; end else begin L := K; Break; end; end; AnimateDisappear(L); end; procedure TJvFormAnimation.DisappearVertically; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if J < (FForm.Height div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); end else begin L := K; Break; end; end; AnimateDisappear(L); end; procedure TJvFormAnimation.DisappearTelevision; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if J + 2 < (FForm.Height div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); end else if I + 6 < (FForm.Width div 2) then begin I := I + 8; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); end else begin L := K; Break; end; end; AnimateDisappear(L); end; procedure TJvFormAnimation.DisappearToBottom; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if J < FForm.Height then begin J := J + 2; FRegions[K] := CreateRectRgn(I, J, FForm.Width, FForm.Height); end else begin L := K; Break; end; end; AnimateDisappear(L); end; procedure TJvFormAnimation.DisappearToTop; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if J < FForm.Height then begin J := J + 2; FRegions[K] := CreateRectRgn(I, 0, FForm.Width, FForm.Height - J); end else begin L := K; Break; end; end; AnimateDisappear(L); end; procedure TJvFormAnimation.AppearEllipse; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if I < (FForm.Width div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateEllipticRgn(I, J, FForm.Width - I, FForm.Height - J); I := I + 2; end else begin L := K; Break; end; end; AnimateAppear(L); end; procedure TJvFormAnimation.AppearRectangle; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if I < (FForm.Width div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); I := I + 2; end else begin L := K; Break; end; end; AnimateAppear(L); end; procedure TJvFormAnimation.AppearRoundedRectangle(EllipseX, EllipseY: Integer); var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if I < (FForm.Width div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRoundRectRgn(I, J, FForm.Width - I, FForm.Height - J, EllipseX, EllipseY); I := I + 2; end else begin L := K; Break; end; end; AnimateAppear(L); end; procedure TJvFormAnimation.AppearHorizontally; var I, J, K, L: Integer; begin J := 0; L := 0; I := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if I < (FForm.Width div 2) then begin if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); I := I + 2; end else begin L := K; Break; end; end; AnimateAppear(L); end; procedure TJvFormAnimation.AppearVertically; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if J < (FForm.Height div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); end else begin L := K; Break; end; end; AnimateAppear(L); end; procedure TJvFormAnimation.AppearTelevision; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if J + 2 < (FForm.Height div 2) then begin J := J + 2; if J > (FForm.Height div 2) then I := FForm.Width; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); end else if I + 6 < (FForm.Width div 2) then begin I := I + 8; FRegions[K] := CreateRectRgn(I, J, FForm.Width - I, FForm.Height - J); end else begin L := K; Break; end; end; AnimateAppear(L); end; procedure TJvFormAnimation.AppearToBottom; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if J < FForm.Height then begin J := J + 2; FRegions[K] := CreateRectRgn(I, J, FForm.Width, FForm.Height); end else begin L := K; Break; end; end; AnimateAppear(L); end; procedure TJvFormAnimation.AppearToTop; var I, J, K, L: Integer; begin J := 0; I := 0; L := 0; SetLength(FRegions, Max(FForm.Width, FForm.Height)); for K := 0 to High(FRegions) do begin if J < FForm.Height then begin J := J + 2; FRegions[K] := CreateRectRgn(I, 0, FForm.Width, FForm.Height - J); end else begin L := K; Break; end; end; AnimateAppear(L); end; end. --- NEW FILE: JvQParserForm.pas --- {**************************************************************************************************} { WARNING: JEDI preprocessor generated unit. Manual modifications will be lost on next release. } {**************************************************************************************************} {----------------------------------------------------------------------------- The contents of this file are su... [truncated message content] |