RxFPC:start work on new component - TRxPopupNotifier

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6328 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
alexs75 2018-04-20 13:57:15 +00:00
parent 0608517e55
commit 1c2a502b58
13 changed files with 570 additions and 105 deletions

View File

@ -3,7 +3,7 @@
<ProjectSession> <ProjectSession>
<Version Value="11"/> <Version Value="11"/>
<BuildModes Active="Default"/> <BuildModes Active="Default"/>
<Units Count="9"> <Units Count="11">
<Unit0> <Unit0>
<Filename Value="project1.lpr"/> <Filename Value="project1.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -17,6 +17,7 @@
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="Form1"/> <ComponentName Value="Form1"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/> <UnitName Value="Unit1"/>
<CursorPos X="23" Y="16"/> <CursorPos X="23" Y="16"/>
@ -26,12 +27,10 @@
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="../../../rxcontrols/rxswitch.pas"/> <Filename Value="../../../rxcontrols/rxswitch.pas"/>
<IsVisibleTab Value="True"/> <EditorIndex Value="-1"/>
<EditorIndex Value="1"/>
<TopLine Value="82"/> <TopLine Value="82"/>
<CursorPos X="16" Y="118"/> <CursorPos X="16" Y="118"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="../../../rxcontrols/rxswitch.inc"/> <Filename Value="../../../rxcontrols/rxswitch.inc"/>
@ -40,19 +39,17 @@
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="../../../rxdb/rxdbgrid.pas"/> <Filename Value="../../../rxdb/rxdbgrid.pas"/>
<EditorIndex Value="2"/> <EditorIndex Value="-1"/>
<TopLine Value="7723"/> <TopLine Value="7723"/>
<CursorPos X="23" Y="7755"/> <CursorPos X="23" Y="7755"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit4> </Unit4>
<Unit5> <Unit5>
<Filename Value="../../../rxcontrols/rxlclutils.pas"/> <Filename Value="../../../rxcontrols/rxlclutils.pas"/>
<EditorIndex Value="3"/> <EditorIndex Value="-1"/>
<TopLine Value="675"/> <TopLine Value="675"/>
<CursorPos X="29" Y="683"/> <CursorPos X="29" Y="683"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="/home/install/source/fpcsrc/rtl/objpas/classes/streams.inc"/> <Filename Value="/home/install/source/fpcsrc/rtl/objpas/classes/streams.inc"/>
@ -75,8 +72,25 @@
<CursorPos X="10" Y="64"/> <CursorPos X="10" Y="64"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit8> </Unit8>
<Unit9>
<Filename Value="../../../../tachart/numlib_fix/ipf_fix.pas"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
<TopLine Value="453"/>
<CursorPos X="66" Y="467"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="Z:/home/install/source/fpcsrc/packages/numlib/src/typ.pas"/>
<EditorIndex Value="2"/>
<TopLine Value="185"/>
<CursorPos X="3" Y="199"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit10>
</Units> </Units>
<JumpHistory Count="27" HistoryIndex="26"> <JumpHistory Count="5" HistoryIndex="4">
<Position1> <Position1>
<Filename Value="unit1.pas"/> <Filename Value="unit1.pas"/>
</Position1> </Position1>
@ -85,105 +99,17 @@
<Caret Line="16" Column="23"/> <Caret Line="16" Column="23"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="../../../rxcontrols/rxswitch.pas"/> <Filename Value="../../../../tachart/numlib_fix/ipf_fix.pas"/>
<Caret Line="155" Column="12" TopLine="140"/> <Caret Line="466" Column="49" TopLine="452"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="../../../rxdb/rxdbgrid.pas"/> <Filename Value="Z:/home/install/source/fpcsrc/packages/numlib/src/typ.pas"/>
<Caret Line="308" TopLine="290"/> <Caret Line="199" Column="3" TopLine="185"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="../../../rxcontrols/rxswitch.pas"/> <Filename Value="../../../../tachart/numlib_fix/ipf_fix.pas"/>
<Caret Line="177" Column="21" TopLine="164"/> <Caret Line="467" Column="26" TopLine="452"/>
</Position5> </Position5>
<Position6>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="94" Column="17" TopLine="76"/>
</Position6>
<Position7>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="168" Column="3" TopLine="163"/>
</Position7>
<Position8>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="71" Column="15" TopLine="54"/>
</Position8>
<Position9>
<Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="7737" Column="47" TopLine="7725"/>
</Position9>
<Position10>
<Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="1217" Column="12" TopLine="1198"/>
</Position10>
<Position11>
<Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="3651" Column="35" TopLine="3619"/>
</Position11>
<Position12>
<Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="7739" Column="12" TopLine="7706"/>
</Position12>
<Position13>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="311" Column="20" TopLine="294"/>
</Position13>
<Position14>
<Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="7755" Column="23" TopLine="7723"/>
</Position14>
<Position15>
<Filename Value="../../../rxcontrols/rxlclutils.pas"/>
<Caret Line="85" Column="10" TopLine="66"/>
</Position15>
<Position16>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="320" Column="11" TopLine="294"/>
</Position16>
<Position17>
<Filename Value="../../../rxdb/rxdbgrid.pas"/>
<Caret Line="7755" Column="23" TopLine="7723"/>
</Position17>
<Position18>
<Filename Value="../../../rxcontrols/rxlclutils.pas"/>
<Caret Line="85" Column="10" TopLine="66"/>
</Position18>
<Position19>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="318" TopLine="294"/>
</Position19>
<Position20>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="319" TopLine="294"/>
</Position20>
<Position21>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="318" TopLine="294"/>
</Position21>
<Position22>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="317" Column="41" TopLine="294"/>
</Position22>
<Position23>
<Filename Value="../../../rxcontrols/rxlclutils.pas"/>
<Caret Line="683" Column="29" TopLine="675"/>
</Position23>
<Position24>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="317" Column="41" TopLine="294"/>
</Position24>
<Position25>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="319" Column="7" TopLine="294"/>
</Position25>
<Position26>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="320" Column="12" TopLine="301"/>
</Position26>
<Position27>
<Filename Value="../../../rxcontrols/rxswitch.pas"/>
<Caret Line="194" TopLine="175"/>
</Position27>
</JumpHistory> </JumpHistory>
<RunParams> <RunParams>
<FormatVersion Value="2"/> <FormatVersion Value="2"/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

View File

@ -39,6 +39,14 @@ msgstr "Izquierdo"
msgid "Right" msgid "Right"
msgstr "Derecho" msgstr "Derecho"
#: rxconst.sclose
msgid "Close"
msgstr ""
#: rxconst.scloseaftersec
msgid "Close after %d sec"
msgstr ""
#: rxconst.scloseallexceptthis #: rxconst.scloseallexceptthis
msgid "Close all except this" msgid "Close all except this"
msgstr "" msgstr ""

View File

@ -37,6 +37,14 @@ msgstr ""
msgid "Right" msgid "Right"
msgstr "" msgstr ""
#: rxconst.sclose
msgid "Close"
msgstr ""
#: rxconst.scloseaftersec
msgid "Close after %d sec"
msgstr ""
#: rxconst.scloseallexceptthis #: rxconst.scloseallexceptthis
msgid "Close all except this" msgid "Close all except this"
msgstr "" msgstr ""

View File

@ -37,6 +37,14 @@ msgstr "Влево"
msgid "Right" msgid "Right"
msgstr "Вправо" msgstr "Вправо"
#: rxconst.sclose
msgid "Close"
msgstr ""
#: rxconst.scloseaftersec
msgid "Close after %d sec"
msgstr ""
#: rxconst.scloseallexceptthis #: rxconst.scloseallexceptthis
msgid "Close all except this" msgid "Close all except this"
msgstr "Закрыть все окна, за исключением этого" msgstr "Закрыть все окна, за исключением этого"

View File

@ -48,6 +48,14 @@ msgstr "Ліворуч"
msgid "Right" msgid "Right"
msgstr "Праворуч" msgstr "Праворуч"
#: rxconst.sclose
msgid "Close"
msgstr ""
#: rxconst.scloseaftersec
msgid "Close after %d sec"
msgstr ""
#: rxconst.scloseallexceptthis #: rxconst.scloseallexceptthis
msgid "Close all except this" msgid "Close all except this"
msgstr "Закрити всі вікна, за виключенням цього" msgstr "Закрити всі вікна, за виключенням цього"

Binary file not shown.

View File

@ -0,0 +1,500 @@
unit rxPopupNotifier;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, ExtCtrls, Forms, Graphics, Controls, StdCtrls;
type
TRxPopupNotifierItem = class;
TRxPopupNotifier = class;
TRxPopupNotifierState = (rpsInactive, rpsMaximazed, rpsShowing, rpsMinimized);
TRxPopupNotifierEvent = procedure(Sender:TRxPopupNotifier; AItem:TRxPopupNotifierItem) of object;
{ TRxNotifierForm }
TRxNotifierForm = class(TForm)
private
FCloseButton:TButton;
FCaptionLabel:TLabel;
FMessageLabel:TLabel;
FTimerLabel:TLabel;
FOwnerItem:TRxPopupNotifierItem;
procedure CreateCloseButton;
procedure CreateCaption(ACaption:string);
procedure CreateMessage(AMessage:string);
procedure CreateTimerLabel;
procedure ButtonCloseClick(Sender: TObject);
public
constructor CreateNotifierForm(AOwnerItem:TRxPopupNotifierItem);
end;
{ TRxPopupNotifierItem }
TRxPopupNotifierItem = class(TCollectionItem)
private
FActive: boolean;
FAutoClose: boolean;
FCaption: string;
FColor: TColor;
FMessage: string;
FNotifyForm:TRxNotifierForm;
FShowCloseButton: boolean;
FShowCloseTimer: boolean;
FCloseTime:TDateTime;
FState: TRxPopupNotifierState;
procedure OnNotifyFormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure SetActive(AValue: boolean);
procedure SetColor(AValue: TColor);
procedure UpdateCloseLabel;
procedure CreateNotifierForm;
procedure UpdateFormSizes(var ATop:integer);
procedure UpdateFormPosition(var ATop:integer);
procedure NotifierClick(Sender: TObject);
protected
procedure AssignTo(Dest: TPersistent); override;
public
constructor Create(ACollection: TCollection); override;
property State:TRxPopupNotifierState read FState;
published
property Active:boolean read FActive write SetActive;
property Color:TColor read FColor write SetColor default clYellow;
property AutoClose:boolean read FAutoClose write FAutoClose default true;
property ShowCloseTimer:boolean read FShowCloseTimer write FShowCloseTimer default true;
property ShowCloseButton:boolean read FShowCloseButton write FShowCloseButton default true;
property Caption:string read FCaption write FCaption;
property Message:string read FMessage write FMessage;
end;
{ TNotifierCollection }
TNotifierCollection = class(TOwnedCollection)
protected
procedure Update(Item: TCollectionItem); override;
public
constructor Create(AOwner: TPersistent);
end;
{ TRxPopupNotifier }
TRxPopupNotifier = class(TComponent)
private
FActive: boolean;
FCloseInterval: Cardinal;
FDefaultColor: TColor;
FDefNotifierFormHeight: Cardinal;
FDefNotifierFormWidth: Cardinal;
FItems: TNotifierCollection;
FOnNotifiClick: TRxPopupNotifierEvent;
FTimer:TTimer;
procedure SetActive(AValue: boolean);
procedure SetItems(AValue: TNotifierCollection);
procedure UpdateNotifyFormsPositoon;
procedure UpdateTimeState;
procedure UpdateClosed;
procedure NotifyTimerEvent(Sender: TObject);
procedure DoNotifiClick(AItem:TRxPopupNotifierItem);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function AddNotifyItem(ACaption, AMessage:string):TRxPopupNotifierItem;
procedure Clear;
function NotifierFormWidth:Cardinal;
function NotifierFormHeight:Cardinal;
published
property Active:boolean read FActive write SetActive default True;
property Items:TNotifierCollection read FItems write SetItems;
property DefaultColor:TColor read FDefaultColor write FDefaultColor default clYellow;
property DefNotifierFormWidth:Cardinal read FDefNotifierFormWidth write FDefNotifierFormWidth default 0;
property DefNotifierFormHeight:Cardinal read FDefNotifierFormHeight write FDefNotifierFormHeight default 0;
property CloseInterval:Cardinal read FCloseInterval write FCloseInterval default 5;
property OnNotifiClick:TRxPopupNotifierEvent read FOnNotifiClick write FOnNotifiClick;
end;
implementation
uses rxconst;
{ TRxNotifierForm }
procedure TRxNotifierForm.CreateCloseButton;
begin
begin
FCloseButton:=TButton.Create(Self);
FCloseButton.Parent:=Self;
FCloseButton.Caption:=sClose;
FCloseButton.AutoSize:=true;
FCloseButton.BorderSpacing.Around:=6;
FCloseButton.Left:=Width - FCloseButton.Width;
FCloseButton.AnchorSideLeft.Control:=nil;
FCloseButton.AnchorSideRight.Control:=Self;
FCloseButton.AnchorSideRight.Side:=asrRight;
FCloseButton.AnchorSideTop.Control:=Self;
FCloseButton.OnClick:=@ButtonCloseClick;
end;
end;
procedure TRxNotifierForm.CreateCaption(ACaption: string);
begin
FCaptionLabel:=TLabel.Create(Self);
FCaptionLabel.Parent:=Self;
FCaptionLabel.BorderSpacing.Around:=6;
FCaptionLabel.Align:=alTop;
FCaptionLabel.Caption:=ACaption;
FCaptionLabel.Font.Style:=FCaptionLabel.Font.Style + [fsBold];
FCaptionLabel.OnClick:=@FOwnerItem.NotifierClick;
end;
procedure TRxNotifierForm.CreateMessage(AMessage: string);
begin
FMessageLabel:=TLabel.Create(Self);
FMessageLabel.Parent:=Self;
FMessageLabel.WordWrap:=true;
FMessageLabel.BorderSpacing.Around:=6;
FMessageLabel.Align:=alClient;
FMessageLabel.Caption:=AMessage;
FMessageLabel.OnClick:=@FOwnerItem.NotifierClick;
end;
procedure TRxNotifierForm.CreateTimerLabel;
begin
FTimerLabel:=TLabel.Create(Self);
FTimerLabel.Parent:=Self;
FTimerLabel.Top:=FCaptionLabel.Height+1;
FTimerLabel.Align:=alTop;
FTimerLabel.BorderSpacing.Around:=6;
FTimerLabel.Font.Style:=FTimerLabel.Font.Style + [fsItalic];
FTimerLabel.Caption:=' ';
FTimerLabel.OnClick:=@FOwnerItem.NotifierClick;
end;
procedure TRxNotifierForm.ButtonCloseClick(Sender: TObject);
begin
Close;
end;
constructor TRxNotifierForm.CreateNotifierForm(AOwnerItem: TRxPopupNotifierItem
);
begin
inherited CreateNew(Application);
FOwnerItem:=AOwnerItem;
end;
{ TNotifierCollection }
procedure TNotifierCollection.Update(Item: TCollectionItem);
var
FActive: Boolean;
i: Integer;
begin
inherited Update(Item);
FActive:=false;
for i:=0 to Count-1 do
if TRxPopupNotifierItem(Items[i]).Active then
begin
FActive:=true;
Break;
end;
TRxPopupNotifier(Owner).FTimer.Enabled:=TRxPopupNotifier(Owner).FActive and FActive;
end;
constructor TNotifierCollection.Create(AOwner: TPersistent);
begin
inherited Create(AOwner, TRxPopupNotifierItem);
end;
{ TRxPopupNotifierItem }
procedure TRxPopupNotifierItem.OnNotifyFormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
CloseAction:=caFree;
FNotifyForm:=nil;
FState:=rpsInactive;
end;
procedure TRxPopupNotifierItem.SetActive(AValue: boolean);
begin
if FActive=AValue then Exit;
FActive:=AValue;
if not AValue then
begin
FState:=rpsInactive;
if Assigned(FNotifyForm) then
FNotifyForm.Close;
end
else
begin
CreateNotifierForm;
FState:=rpsMaximazed;
end;
Changed(false);
end;
procedure TRxPopupNotifierItem.SetColor(AValue: TColor);
begin
if FColor=AValue then Exit;
FColor:=AValue;
if Assigned(FNotifyForm) then
FNotifyForm.Color:=FColor;
end;
procedure TRxPopupNotifierItem.UpdateCloseLabel;
var
D, D1: TDateTime;
N: Int64;
begin
if Assigned(FNotifyForm) and FShowCloseTimer then
begin
D:=Now;
if FCloseTime < D then
FState:=rpsMinimized
else
begin
// D1:=;
N:=Trunc((FCloseTime - D) * SecsPerDay);
FNotifyForm.FTimerLabel.Caption:=Format( sCloseAfterSec, [N]);
end;
end;
end;
procedure TRxPopupNotifierItem.CreateNotifierForm;
begin
if Assigned(FNotifyForm) then exit;
FNotifyForm:=TRxNotifierForm.CreateNotifierForm(Self);
FNotifyForm.Width:=TRxPopupNotifier(Collection.Owner).NotifierFormWidth;
FNotifyForm.Height:=1;
FNotifyForm.Left:=Screen.Width - FNotifyForm.Width - 2;
FNotifyForm.Top:=Screen.Height - FNotifyForm.Height - 2;
FNotifyForm.BorderStyle:=bsNone;
FNotifyForm.FormStyle:=fsStayOnTop;
FNotifyForm.ShowInTaskBar:=stNever;
FNotifyForm.Color:=FColor;
if FShowCloseButton then
FNotifyForm.CreateCloseButton;
FNotifyForm.CreateCaption(FCaption);
if FShowCloseTimer then
FNotifyForm.CreateTimerLabel;
FNotifyForm.CreateMessage(FMessage);
FNotifyForm.OnClose:=@OnNotifyFormClose;
FNotifyForm.Show;
end;
procedure TRxPopupNotifierItem.UpdateFormSizes(var ATop: integer);
begin
if Assigned(FNotifyForm) then
begin
if (FState = rpsMaximazed) then
begin
if (TRxPopupNotifier(Collection.Owner).NotifierFormHeight > FNotifyForm.Height) then
begin
FNotifyForm.Height:=FNotifyForm.Height + 1;
FNotifyForm.Top:=ATop - FNotifyForm.Height;
end
else
begin
FState:=rpsShowing;
FCloseTime:=Now + TRxPopupNotifier(Collection.Owner).FCloseInterval / SecsPerDay;
end;
end
else
if (FState = rpsMinimized) then
begin
if (FNotifyForm.Height > 1) then
begin
FNotifyForm.Height:=FNotifyForm.Height - 1;
FNotifyForm.Top:=ATop - FNotifyForm.Height;
end
else
FState:=rpsInactive;
end;
ATop:=ATop - FNotifyForm.Height;
ATop:=ATop - 2;
end;
end;
procedure TRxPopupNotifierItem.UpdateFormPosition(var ATop: integer);
begin
if Assigned(FNotifyForm) then
begin
FNotifyForm.Top:=ATop - FNotifyForm.Height;
ATop:=ATop - FNotifyForm.Height - 2;
end;
end;
procedure TRxPopupNotifierItem.NotifierClick(Sender: TObject);
begin
TRxPopupNotifier(Collection.Owner).DoNotifiClick(Self);
end;
procedure TRxPopupNotifierItem.AssignTo(Dest: TPersistent);
begin
if Dest is TRxPopupNotifierItem then
begin
TRxPopupNotifierItem(Dest).FColor:=FColor;
TRxPopupNotifierItem(Dest).FAutoClose:=FAutoClose;
TRxPopupNotifierItem(Dest).FShowCloseTimer:=FShowCloseTimer;
TRxPopupNotifierItem(Dest).FCaption:=FCaption;
TRxPopupNotifierItem(Dest).FMessage:=FMessage;
TRxPopupNotifierItem(Dest).FShowCloseButton:=FShowCloseButton;
end
else
inherited AssignTo(Dest);
end;
constructor TRxPopupNotifierItem.Create(ACollection: TCollection);
begin
inherited Create(ACollection);
FColor:=TRxPopupNotifier(ACollection.Owner).FDefaultColor;
FShowCloseButton:=true;
FShowCloseTimer:=true;
end;
{ TRxPopupNotifier }
procedure TRxPopupNotifier.UpdateNotifyFormsPositoon;
var
F: TRxPopupNotifierItem;
Y, i: Integer;
FReposition: Boolean;
begin
Y:=Screen.Height - 2;
FReposition:=false;
for i:=FItems.Count - 1 downto 0 do
begin
F:=FItems.Items[i] as TRxPopupNotifierItem;
if F.Active then
begin
if F.FState in [rpsMaximazed, rpsMinimized] then
begin
F.UpdateFormSizes(Y);
FReposition:=true;
end
else
if F.FState = rpsInactive then
FReposition:=true
else
if FReposition then
F.UpdateFormPosition(Y)
else
Y:=Y - F.FNotifyForm.Height - 2;
end;
end;
end;
procedure TRxPopupNotifier.UpdateTimeState;
var
i: Integer;
F: TRxPopupNotifierItem;
begin
for i:=FItems.Count - 1 downto 0 do
begin
F:=FItems.Items[i] as TRxPopupNotifierItem;
if F.Active and (F.State = rpsShowing) and F.ShowCloseTimer then
F.UpdateCloseLabel;
end;
end;
procedure TRxPopupNotifier.UpdateClosed;
var
F: TRxPopupNotifierItem;
i: Integer;
begin
for i:=FItems.Count - 1 downto 0 do
begin
F:=FItems.Items[i] as TRxPopupNotifierItem;
if F.FState = rpsInactive then
F.Active:=false;
end;
end;
procedure TRxPopupNotifier.SetItems(AValue: TNotifierCollection);
begin
FItems.Assign(AValue);
end;
procedure TRxPopupNotifier.SetActive(AValue: boolean);
begin
if FActive=AValue then Exit;
FActive:=AValue;
FTimer.Enabled:=false;
if not FActive then
Clear;
end;
procedure TRxPopupNotifier.NotifyTimerEvent(Sender: TObject);
begin
UpdateNotifyFormsPositoon;
UpdateClosed;
UpdateTimeState;
end;
procedure TRxPopupNotifier.DoNotifiClick(AItem: TRxPopupNotifierItem);
begin
if Assigned(FOnNotifiClick) then
FOnNotifiClick(Self, AItem)
end;
constructor TRxPopupNotifier.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDefaultColor:=clYellow;
FCloseInterval:=5;
FActive:=true;
FItems:=TNotifierCollection.Create(Self);
FTimer:=TTimer.Create(Self);
FTimer.Enabled:=False;
FTimer.Interval:=10;
FTimer.OnTimer:=@NotifyTimerEvent;
end;
destructor TRxPopupNotifier.Destroy;
begin
FTimer.Enabled:=false;
FreeAndNil(FItems);
inherited Destroy;
end;
function TRxPopupNotifier.AddNotifyItem(ACaption, AMessage: string
): TRxPopupNotifierItem;
begin
Result:=FItems.Add as TRxPopupNotifierItem;
Result.Caption:=ACaption;
Result.Message:=AMessage;
Result.FState:=rpsMaximazed;
Result.FColor:=FDefaultColor;
Result.Active:=true;
end;
procedure TRxPopupNotifier.Clear;
begin
end;
function TRxPopupNotifier.NotifierFormWidth: Cardinal;
begin
if FDefNotifierFormWidth > 0 then
Result:=FDefNotifierFormWidth
else
Result:=Screen.Width div 4;
end;
function TRxPopupNotifier.NotifierFormHeight: Cardinal;
begin
if FDefNotifierFormHeight > 0 then
Result:=FDefNotifierFormHeight
else
Result:=Screen.Height div 8;
end;
end.

View File

@ -26,7 +26,7 @@ Copyright (c) 1998 Master-Bank
translate to Lazarus by alexs in 2005 - 2018"/> translate to Lazarus by alexs in 2005 - 2018"/>
<License Value="LGPL"/> <License Value="LGPL"/>
<Version Major="3" Minor="2" Release="1" Build="210"/> <Version Major="3" Minor="2" Release="1" Build="210"/>
<Files Count="73"> <Files Count="74">
<Item1> <Item1>
<Filename Value="registerrx.pas"/> <Filename Value="registerrx.pas"/>
<HasRegisterProc Value="True"/> <HasRegisterProc Value="True"/>
@ -322,6 +322,10 @@ translate to Lazarus by alexs in 2005 - 2018"/>
<Filename Value="rxcontrols\rxswitch.res"/> <Filename Value="rxcontrols\rxswitch.res"/>
<Type Value="Binary"/> <Type Value="Binary"/>
</Item73> </Item73>
<Item74>
<Filename Value="rxcontrols\rxpopupnotifier.pas"/>
<UnitName Value="rxPopupNotifier"/>
</Item74>
</Files> </Files>
<LazDoc Paths="docs;\usr\local\share\lazarus\components\rxnew\docs"/> <LazDoc Paths="docs;\usr\local\share\lazarus\components\rxnew\docs"/>
<i18n> <i18n>

View File

@ -21,7 +21,7 @@ uses
RxIniPropStorage, rxlclconst, rxlogin, RxMDI, rxpagemngr, rxpickdate, RxIniPropStorage, rxlclconst, rxlogin, RxMDI, rxpagemngr, rxpickdate,
rxShortCutUnit, rxspin, rxswitch, RxSystemServices, rxtbrsetup, RxTimeEdit, rxShortCutUnit, rxspin, rxswitch, RxSystemServices, rxtbrsetup, RxTimeEdit,
rxtoolbar, rxtooledit, RxDBGrid_PopUpFilterUnit, rxdbverticalgrid, rxtoolbar, rxtooledit, RxDBGrid_PopUpFilterUnit, rxdbverticalgrid,
rxlclutils, RxRangeSel, RxXMLPropStorage, LazarusPackageIntf; rxlclutils, RxRangeSel, RxXMLPropStorage, rxPopupNotifier, LazarusPackageIntf;
implementation implementation

View File

@ -129,6 +129,9 @@ resourcestring
sVariableIsNotDT = 'Variable %s is not date/time'; sVariableIsNotDT = 'Variable %s is not date/time';
sVariableIsNotBoolean = 'Variable %s is not boolean'; sVariableIsNotBoolean = 'Variable %s is not boolean';
{ TRxNotifierForm }
sClose = 'Close';
sCloseAfterSec = 'Close after %d sec';
implementation implementation
end. end.