diff --git a/components/jvcllaz/design/JvAppFrm/images/images.txt b/components/jvcllaz/design/JvAppFrm/images/images.txt index f42e27267..46481f479 100644 --- a/components/jvcllaz/design/JvAppFrm/images/images.txt +++ b/components/jvcllaz/design/JvAppFrm/images/images.txt @@ -1,3 +1,4 @@ tjvappanimatedicon.bmp tjvformanimatedicon.bmp +tjvanimtitle.bmp tjvformwallpaper.bmp diff --git a/components/jvcllaz/design/JvAppFrm/images/tjvanimtitle.bmp b/components/jvcllaz/design/JvAppFrm/images/tjvanimtitle.bmp new file mode 100644 index 000000000..306f9af11 Binary files /dev/null and b/components/jvcllaz/design/JvAppFrm/images/tjvanimtitle.bmp differ diff --git a/components/jvcllaz/design/JvAppFrm/jvappfrmreg.pas b/components/jvcllaz/design/JvAppFrm/jvappfrmreg.pas index 3ff44ad1d..df533d49d 100644 --- a/components/jvcllaz/design/JvAppFrm/jvappfrmreg.pas +++ b/components/jvcllaz/design/JvAppFrm/jvappfrmreg.pas @@ -16,12 +16,12 @@ implementation uses Classes, //PropEdits, ComponentEditors, JvDsgnConsts, - JvAppAnimatedIcon, JvFormAnimatedIcon, JvFormWallPaper; + JvAppAnimatedIcon, JvFormAnimatedIcon, JvAnimTitle, JvFormWallPaper; procedure Register; begin RegisterComponents(RsPaletteJvcl, [ - TJvAppAnimatedIcon, TJvFormAnimatedIcon, TJvFormWallPaper + TJvAppAnimatedIcon, TJvFormAnimatedIcon, TJvAnimTitle, TJvFormWallPaper ]); end; diff --git a/components/jvcllaz/examples/JvFormAnimatedIcon/main.lfm b/components/jvcllaz/examples/JvFormAnimatedIcon/main.lfm index 34352e4f0..648df04bd 100644 --- a/components/jvcllaz/examples/JvFormAnimatedIcon/main.lfm +++ b/components/jvcllaz/examples/JvFormAnimatedIcon/main.lfm @@ -3,17 +3,24 @@ object Form1: TForm1 Height = 344 Top = 128 Width = 937 - Caption = 'Form1' + Caption = 'F' ClientHeight = 344 ClientWidth = 937 OnCreate = FormCreate LCLVersion = '2.1.0.0' object ListView1: TListView + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom Left = 8 Height = 305 Top = 31 Width = 921 - Align = alClient + Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 8 BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 @@ -27,12 +34,59 @@ object Form1: TForm1 Left = 8 Height = 15 Top = 8 - Width = 921 - Align = alTop + Width = 233 BorderSpacing.Around = 8 Caption = 'See animation in form and application icons' ParentColor = False end + object CheckBox1: TCheckBox + AnchorSideLeft.Control = Label1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrCenter + Left = 265 + Height = 19 + Top = 6 + Width = 93 + BorderSpacing.Left = 24 + Caption = 'animated title' + Checked = True + OnChange = CheckBox1Change + State = cbChecked + TabOrder = 1 + end + object CheckBox2: TCheckBox + AnchorSideLeft.Control = CheckBox1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrCenter + Left = 382 + Height = 19 + Top = 6 + Width = 127 + BorderSpacing.Left = 24 + Caption = 'Animated form icon' + Checked = True + OnChange = CheckBox2Change + State = cbChecked + TabOrder = 2 + end + object CheckBox3: TCheckBox + AnchorSideLeft.Control = CheckBox2 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrCenter + Left = 533 + Height = 19 + Top = 6 + Width = 217 + BorderSpacing.Left = 24 + Caption = 'Animated application icon in task bar' + Checked = True + OnChange = CheckBox3Change + State = cbChecked + TabOrder = 3 + end object JvFormAnimatedIcon1: TJvFormAnimatedIcon Icons = IconImages Delay = 50 @@ -4150,4 +4204,10 @@ object Form1: TForm1 left = 80 top = 129 end + object JvAnimTitle1: TJvAnimTitle + Title = 'Form1' + Delay = 100 + left = 80 + top = 192 + end end diff --git a/components/jvcllaz/examples/JvFormAnimatedIcon/main.pas b/components/jvcllaz/examples/JvFormAnimatedIcon/main.pas index f8774e0d2..7928e66a3 100644 --- a/components/jvcllaz/examples/JvFormAnimatedIcon/main.pas +++ b/components/jvcllaz/examples/JvFormAnimatedIcon/main.pas @@ -6,18 +6,25 @@ interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls, - JvFormAnimatedIcon, JvAppAnimatedIcon; + JvFormAnimatedIcon, JvAppAnimatedIcon, JvAnimTitle; type { TForm1 } TForm1 = class(TForm) + CheckBox1: TCheckBox; + CheckBox2: TCheckBox; + CheckBox3: TCheckBox; IconImages: TImageList; + JvAnimTitle1: TJvAnimTitle; JvAppAnimatedIcon1: TJvAppAnimatedIcon; JvFormAnimatedIcon1: TJvFormAnimatedIcon; Label1: TLabel; ListView1: TListView; + procedure CheckBox1Change(Sender: TObject); + procedure CheckBox2Change(Sender: TObject); + procedure CheckBox3Change(Sender: TObject); procedure FormCreate(Sender: TObject); private @@ -34,6 +41,9 @@ implementation { TForm1 } +const + FORM_CAPTION = 'JvFormAnimation Demo'; + procedure TForm1.FormCreate(Sender: TObject); procedure AddItem(AIndex: Integer); @@ -50,6 +60,25 @@ begin JvAppAnimatedIcon1.Active := true; for i:=0 to IconImages.Count-1 do AddItem(i); + + Checkbox1Change(nil); +end; + +procedure TForm1.CheckBox1Change(Sender: TObject); +begin + JvAnimTitle1.Enabled := Checkbox1.Checked; + JvAnimTitle1.Title := FORM_CAPTION; + if not JvAnimTitle1.Enabled then Caption := FORM_CAPTION; +end; + +procedure TForm1.CheckBox2Change(Sender: TObject); +begin + JvFormAnimatedIcon1.Active := Checkbox2.Checked; +end; + +procedure TForm1.CheckBox3Change(Sender: TObject); +begin + JvAppAnimatedIcon1.Active := Checkbox3.Checked; end; end. diff --git a/components/jvcllaz/packages/jvappfrmlazd.lpk b/components/jvcllaz/packages/jvappfrmlazd.lpk index dd36e1d11..5991ab170 100644 --- a/components/jvcllaz/packages/jvappfrmlazd.lpk +++ b/components/jvcllaz/packages/jvappfrmlazd.lpk @@ -14,7 +14,7 @@ diff --git a/components/jvcllaz/packages/jvappfrmlazr.lpk b/components/jvcllaz/packages/jvappfrmlazr.lpk index c70bbcdd0..c909731ea 100644 --- a/components/jvcllaz/packages/jvappfrmlazr.lpk +++ b/components/jvcllaz/packages/jvappfrmlazr.lpk @@ -13,11 +13,11 @@ - + @@ -30,6 +30,10 @@ + + + + diff --git a/components/jvcllaz/resource/jvappfrmreg.res b/components/jvcllaz/resource/jvappfrmreg.res index 89d2e938f..f61c2aeb6 100644 Binary files a/components/jvcllaz/resource/jvappfrmreg.res and b/components/jvcllaz/resource/jvappfrmreg.res differ diff --git a/components/jvcllaz/run/JvAppFrm/JvAnimTitle.pas b/components/jvcllaz/run/JvAppFrm/JvAnimTitle.pas new file mode 100644 index 000000000..04926bb16 --- /dev/null +++ b/components/jvcllaz/run/JvAppFrm/JvAnimTitle.pas @@ -0,0 +1,157 @@ +{----------------------------------------------------------------------------- +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: JvAnimTitle.PAS, released on 2001-02-28. + +The Initial Developer of the Original Code is Sébastien Buysse [sbuysse att buypin dott com] +Portions created by Sébastien Buysse are Copyright (C) 2001 Sébastien Buysse. +All Rights Reserved. + +Contributor(s): Michael Beck [mbeck att bigfoot dott com]. + +You may retrieve the latest version of this file at the Project JEDI's JVCL home page, +located at http://jvcl.delphi-jedi.org + +Known Issues: +-----------------------------------------------------------------------------} +// $Id$ + +unit JvAnimTitle; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, Controls, ExtCtrls, Forms; + +type + TJvAnimTitle = class(TComponent) + private + FTimer: TTimer; + FEnabled: Boolean; + FTitle: string; + FCurrentTitle: string; + FDelay: Integer; + FSens: Boolean; + FForm: TCustomForm; + FBlink: Integer; + FBlinked: Integer; + FBlinking: Boolean; + procedure SetTitle(const NewTitle: string); + procedure SetEnabled(NewEnable: Boolean); + procedure SetDelay(NewDelay: Integer); + procedure AnimateTitle(Sender: TObject); + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property Title: string read FTitle write SetTitle; + property Enabled: Boolean read FEnabled write SetEnabled default False; + property Delay: Integer read FDelay write SetDelay default 50; + property Blink: Integer read FBlink write FBlink default 5; + end; + + +implementation + +constructor TJvAnimTitle.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FEnabled := False; + FDelay := 50; + FBlink := 5; + FForm := GetParentForm(TControl(AOwner)); + FTitle := FForm.Caption; + FSens := True; + FBlinking := False; + FBlinked := 0; + + FTimer := TTimer.Create(Self); + FTimer.Enabled := FEnabled; + FTimer.Interval := FDelay; + FTimer.OnTimer := @AnimateTitle; +end; + +destructor TJvAnimTitle.Destroy; +begin + FTimer.Free; + if not (csDestroying in FForm.ComponentState) then + FForm.Caption := FTitle; + inherited Destroy; +end; + +procedure TJvAnimTitle.AnimateTitle(Sender: TObject); +begin + if FBlinking then + begin + // (rom) this is a bad implementation better try to manipulate + // (rom) the WM_GETTEXT and WM_SETTEXT to the Form window + if FForm.Caption = Title then + FForm.Caption := '' + else + begin + FForm.Caption := Title; + Inc(FBlinked); + if FBlinked >= Blink then + begin + FBlinking := False; + FBlinked := 0; + end; + end; + end + else + begin + if FSens then + begin + if Length(FCurrentTitle) = Length(Title) then + begin + FSens := False; + if Blink > 0 then + FBlinking := True; + end + else + FCurrentTitle := FCurrentTitle + Title[Length(FCurrentTitle) + 1]; + end + else + if FCurrentTitle = '' then + FSens := True + else + SetLength(FCurrentTitle, Length(FCurrentTitle) - 1); + {$IFDEF UNIX} + if FCurrentTitle = '' then + FForm.Caption := ' ' // else caption becomes <1> + else + {$ENDIF UNIX} + FForm.Caption := FCurrentTitle; + end; +end; + +procedure TJvAnimTitle.SetTitle(const NewTitle: string); +begin + FTitle := NewTitle; + FCurrentTitle := ''; + FSens := True; +end; + +procedure TJvAnimTitle.SetEnabled(NewEnable: Boolean); +begin + FEnabled := NewEnable; + FTimer.Enabled := FEnabled; +end; + +procedure TJvAnimTitle.SetDelay(NewDelay: Integer); +begin + FDelay := NewDelay; + FTimer.Interval := FDelay; +end; + + +end.