From 1c2a502b585e2b4b9d00fb579ef8eb274c6eb0d2 Mon Sep 17 00:00:00 2001 From: alexs75 Date: Fri, 20 Apr 2018 13:57:15 +0000 Subject: [PATCH] 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 --- .../demos/RxContols/RxSwitch/project1.lps | 132 +---- components/rx/trunk/images/TRxDBCalcEdit.png | Bin 1225 -> 1459 bytes components/rx/trunk/images/TRxDBColorBox.png | Bin 1106 -> 1192 bytes components/rx/trunk/images/rx.res | Bin 142508 -> 143760 bytes components/rx/trunk/languages/rxconst.es.po | 8 + components/rx/trunk/languages/rxconst.po | 8 + components/rx/trunk/languages/rxconst.ru.po | 8 + components/rx/trunk/languages/rxconst.uk.po | 8 + components/rx/trunk/rx.res | Bin 142508 -> 143760 bytes .../rx/trunk/rxcontrols/rxpopupnotifier.pas | 500 ++++++++++++++++++ components/rx/trunk/rxnew.lpk | 6 +- components/rx/trunk/rxnew.pas | 2 +- components/rx/trunk/rxtools/rxconst.pas | 3 + 13 files changed, 570 insertions(+), 105 deletions(-) create mode 100644 components/rx/trunk/rxcontrols/rxpopupnotifier.pas diff --git a/components/rx/trunk/demos/RxContols/RxSwitch/project1.lps b/components/rx/trunk/demos/RxContols/RxSwitch/project1.lps index aa6f9a6d2..88c8c33d7 100644 --- a/components/rx/trunk/demos/RxContols/RxSwitch/project1.lps +++ b/components/rx/trunk/demos/RxContols/RxSwitch/project1.lps @@ -3,7 +3,7 @@ - + @@ -17,6 +17,7 @@ + @@ -26,12 +27,10 @@ - - + - @@ -40,19 +39,17 @@ - + - - + - @@ -75,8 +72,25 @@ + + + + + + + + + + + + + + + + + - + @@ -85,105 +99,17 @@ - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/components/rx/trunk/images/TRxDBCalcEdit.png b/components/rx/trunk/images/TRxDBCalcEdit.png index 6cd26286ae932da450e8a63c33773fdb7ecc97bc..471a1ffc1c984a3626bc1651f8005fb2429e7ae1 100644 GIT binary patch delta 1442 zcmV;T1zq~d39}23BYy>YNklH94WLqGeE;uN z;kpevaun4tBu)}iop9jMO)N#?wr?IK7i0l@b&}}5&d$y?DCLLMid(Hl$@J7zJU?4K z5!?EnAQKFwI_0(R_59xe2Vkx;e`8B?%TpV>+v9pnhcVFD(2SJesFh^1T(SSvW1kA^ z;SP!DUy1{n>VFg=L>aA{!iaN1Fe3#>d0`33>}-YcD2f_|p~YaA6p>@Jp;DVamT$=K zI5s$PcW2j?eq2kYrlu#ushQ~@sn&uNQx!tqAKPTmv+mLWNnMk5{oW`HzwT!;PlEWF zC&f%0g^pu|O|yQPsCK=Q;zwDV`A$Ommn8wD5QLNZsekM$+b)IZ^OXE@>?r1=8cIl{ zu}G;Ri+wzDcv4hPvf*>TxHurtf}%0_VTg%CYPH%zfHe@b$eke9Xe;kDGEKBLmtl2d zqP*E8v}c{d^x<&s@?Jl6HjGcd^gF5Y7Y9TFnrnVjV^+?MPRv;$1OQS>zp=4#&T%t} zBut;Ru7CZE^32Q9IH?fHSgE{xc6$2U_tWVY`)wr~>9CHG9%b2s5dK9#E|+0knLxk$ ztGZGu6+)nta?9oNZ>_c49VrwIP3~rm*lQed(ipSJSaZ3xG}~HzzI8?G^xkjXTl!x) zcYk&lFa7!jAHQ&symMz?;5Z7Y9EH~Ml+fl;nSa=4KyDP+*c#qWo%(#G8olp9o;yED zrBVT4V&XhoKlurwC_*WPv{oRnuctcwuyojMtS(y19m-J;c+RrUVj=gwfYx$AzTAos zf-`4E+5g%hT-O0WSZnEh;y?%r;=;q<;NZZz&X(Q1ANaVP7;I=RKt+l&wOKHp9MdgB@QdNo=2Ld zD5cQakf4aIgRn8y3wUoLP9~Ef48vkmF`s{TY;0;-`LginHG5b;*takRKSNK))qmXc z#rt^Sm(Oz3ty>rxI7+!~H4l~!lTQ5&`S9=}Q;w91QmOoi##S>h)bx zdg}~yOC`3|ui>F>!zXq;{eO|QK+4mP?-8}Tw5EPkNgSF zjB=uX`(nU913)^?UNA|uW^VLdS@b>saH`Y020qvsDy%O>QmSjE*8M?7ao`W5+<)Eod5{im zS9BqzWbL|Z&{A?%NE~74fBiIBUy-EdKL7#{_MjWfF`JnCtS3GSYUQhc?B9Cx#x3{W zJaQ_td&P&|c<`~|Q(;|W%%$IrqXb!BQBU-7Hz)snIR@760sXHg3qmk6I|D!(*Z6B& wnW2))o68G}?7vs3HfRfRq8k}};w}LG0oONZS^b6~UjP6A07*qoM6N<$f{X&!MF0Q* delta 1206 zcmV;n1WEg|3&{zPBYyx1a7bBm000ie000ie0hKEb8vp&w`jGhRtLSKIk_;%oy>5 zF&g!YX2LRuOBmVY;-;IEIrW3ixPi<$NSqmiav8EwQ5f_F^nbLaFev4+LR-pO5XxoH zm0J&#i{(~YdT2}g_ic?NWQkBd_)q?M&wI}EVMPi>w^4{0@m;;-2Acv1{P?y zdvQBX413rzED@8?KIq00U<(-_43qi=uhn4|9yCTPp*h$N7ET0I8&`|by(ZZAE+Z#h z3f`Y{-cSJXfnYjJj(aaj@zCzW-LLB4pjJ@ySuK9$s4z~A;kzTZQ6JHQKc20Dc62__ zqRO2DUVjY$I8pftbi8mg&@L8J$kY$YioW8~1Eh(LUkv4lnxP##XJsh3#Z8 z&9f7;i(B3)mCC72KtQFcWzU;e`fx0J5@*X@IDgOEz_Efw+>&)|3(y)z*`ddy`1-;* ze35z%>JAlXarIV!*@mvURp3sO4Vf}0E{WVYk@puk)tc=q7#w9S%tY|nI%x{7av8l9 z5R)}#`=-na!}$7^WKoj_S$s1tp64UxYBvsN81ViNdSXM+u^HWXFYTc}Hbal&Sw?)2 zIe$p9yr`GU=C=Tj-k8olo^8b^Tsyv(09WL|nNl|{6b~XUvk%|Cm5!*Cb{t4*$HC-| zO-H7v5%sZ#d{g83Ga4MZW^~qwc)v)*!t^Ij)XBn?H!ku~bWMq_pIR~dxe)BpoE0`E z>#=*y4|s@KazNe0F0yg1Z(!Bsfql)5Wq$_?yTgT~T$6Au&NRJjXDn4pxF+A=yB<7Coq5{rL5Mb=-f?lmcuYXPp zO|uf++768M_h44j0I^sM*0qXLIlHJJA@3hRub~s|O$}(EYrx}{pn+6jBA~T`d{k9c z!MVDOlR4(yw`gR*06{qya#{#E8LFHXp_W)C7DB))gUhjiq}>cTrFg0Bzwfd?c)7?y z#@RbFp#$Rc7bU6O`RPv!877f4$uA`5F-&s)6q7{Of1Sv&FsBPF%)8f_8S4Mk-!xr^ UK=6vBmjD0&07*qoM6N<$g3Td8`2YX_ diff --git a/components/rx/trunk/images/TRxDBColorBox.png b/components/rx/trunk/images/TRxDBColorBox.png index 640ee2a3de0f4c22beb43d83b5f6a3c6189d4598..e0f133f6dc28cc16448f501b77e7730aeae1d2ce 100644 GIT binary patch delta 1173 zcmV;G1Zw-z2&f5=BYy;MNklA#4c4m*+ExiESEu;-nz)~a;p)DSi z8Z-nNF5N&HR1%G*#6%GZ2v!mi0VNnofQZH;Q3%jzr36F_(O?3!1Y!zOpv88fX-iv{ z9y@!??B^d#TOc%Ue}Bzq!)RuH0IlI$+U%gdpo*%Z{BIYb%d_aw<})F zug@Lh;r(Tk5(20Ic3jNdHIK9x9wB(Chrdb>G3SI|IleQ`J_6FdI78a3Y%9O_PGI$w z`rALbOcG8(>3^?GQt>GEjZ4Cq??u5$pv53#_f=ZOSA1LmGv28YB_(IoB;B?oCS}4U zQtwuZe@gyfirq#-a{vzt&bKDe2#E3;{+{w1Ep=BYzW6fDbuH$2k3C_4(*NL@lZhDX zrjICv@->!Lg(zHCPu}$f+^X~Qm~T4Hyd;XUlWQ+D1b>DHh+*;Qs$9mMDkdEl=WPe6 zTHvJTlZhCWH;_nL4>WQ*5@ykgBab^Y<^TK+NCmKnLTivGcJ^@j>O79+?xk%{BcWGv zxV-uVMb$5HVg6AH*IeW49~U|=RaaA1Rt7*U78`ITgg^*^loBZ=u~-Zhu<|qVVNxm! zBi$VGcz>9&{3$vQ_{lVFbsUDLE8q?Fk!zpD#v{k2J+_Z#v-t>3&#-iUO|+fvHgQp!Fl<%3oq zRD39FYisX2n?1Y4T)cQO>am)(rfglc?fAZts(+j?W3#eQH9P;dbkN>sC%SJxo7QcI zwHa`{4IKUT0J?z7lAvL5w&pC`w{60=w2X$US1^pAOimtwdZFQ253jmx>2Z2BU zU3a4>Ho}o8-mEeB{eGF5nW?A}iAQ(6Ykw2sV7gl@ADt|wtD4MFEj8KQYopJbqgMTL zIPt;1tD>SJ3qU=&?HNipowL0{}5(_#lb@rggVYYHDilz?csCft0AK nI@#;>Vp&$g(f8jA0RI69x9jJ-wGKgW00000NkvXXu0mjfM*S=L delta 1086 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 C9Xu2O diff --git a/components/rx/trunk/languages/rxconst.es.po b/components/rx/trunk/languages/rxconst.es.po index 7604572d7..70ee0698c 100644 --- a/components/rx/trunk/languages/rxconst.es.po +++ b/components/rx/trunk/languages/rxconst.es.po @@ -39,6 +39,14 @@ msgstr "Izquierdo" msgid "Right" msgstr "Derecho" +#: rxconst.sclose +msgid "Close" +msgstr "" + +#: rxconst.scloseaftersec +msgid "Close after %d sec" +msgstr "" + #: rxconst.scloseallexceptthis msgid "Close all except this" msgstr "" diff --git a/components/rx/trunk/languages/rxconst.po b/components/rx/trunk/languages/rxconst.po index eabdf0140..5a978f4f1 100644 --- a/components/rx/trunk/languages/rxconst.po +++ b/components/rx/trunk/languages/rxconst.po @@ -37,6 +37,14 @@ msgstr "" msgid "Right" msgstr "" +#: rxconst.sclose +msgid "Close" +msgstr "" + +#: rxconst.scloseaftersec +msgid "Close after %d sec" +msgstr "" + #: rxconst.scloseallexceptthis msgid "Close all except this" msgstr "" diff --git a/components/rx/trunk/languages/rxconst.ru.po b/components/rx/trunk/languages/rxconst.ru.po index 714cdc504..bd0538f59 100644 --- a/components/rx/trunk/languages/rxconst.ru.po +++ b/components/rx/trunk/languages/rxconst.ru.po @@ -37,6 +37,14 @@ msgstr "Влево" msgid "Right" msgstr "Вправо" +#: rxconst.sclose +msgid "Close" +msgstr "" + +#: rxconst.scloseaftersec +msgid "Close after %d sec" +msgstr "" + #: rxconst.scloseallexceptthis msgid "Close all except this" msgstr "Закрыть все окна, за исключением этого" diff --git a/components/rx/trunk/languages/rxconst.uk.po b/components/rx/trunk/languages/rxconst.uk.po index ad53e23ad..6c22faf12 100644 --- a/components/rx/trunk/languages/rxconst.uk.po +++ b/components/rx/trunk/languages/rxconst.uk.po @@ -48,6 +48,14 @@ msgstr "Ліворуч" msgid "Right" msgstr "Праворуч" +#: rxconst.sclose +msgid "Close" +msgstr "" + +#: rxconst.scloseaftersec +msgid "Close after %d sec" +msgstr "" + #: rxconst.scloseallexceptthis msgid "Close all except this" msgstr "Закрити всі вікна, за виключенням цього" diff --git a/components/rx/trunk/rx.res b/components/rx/trunk/rx.res index 3ec5f94c8a5969affcc71b8093d823bd62fcb095..82112f252e015699f49188668867f98bdc9de524 100644 GIT binary patch delta 7243 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 C9Xu2O diff --git a/components/rx/trunk/rxcontrols/rxpopupnotifier.pas b/components/rx/trunk/rxcontrols/rxpopupnotifier.pas new file mode 100644 index 000000000..7516f7390 --- /dev/null +++ b/components/rx/trunk/rxcontrols/rxpopupnotifier.pas @@ -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. + diff --git a/components/rx/trunk/rxnew.lpk b/components/rx/trunk/rxnew.lpk index a94d97762..870fb1838 100644 --- a/components/rx/trunk/rxnew.lpk +++ b/components/rx/trunk/rxnew.lpk @@ -26,7 +26,7 @@ Copyright (c) 1998 Master-Bank translate to Lazarus by alexs in 2005 - 2018"/> - + @@ -322,6 +322,10 @@ translate to Lazarus by alexs in 2005 - 2018"/> + + + + diff --git a/components/rx/trunk/rxnew.pas b/components/rx/trunk/rxnew.pas index 34f9b6e52..b2522de29 100644 --- a/components/rx/trunk/rxnew.pas +++ b/components/rx/trunk/rxnew.pas @@ -21,7 +21,7 @@ uses RxIniPropStorage, rxlclconst, rxlogin, RxMDI, rxpagemngr, rxpickdate, rxShortCutUnit, rxspin, rxswitch, RxSystemServices, rxtbrsetup, RxTimeEdit, rxtoolbar, rxtooledit, RxDBGrid_PopUpFilterUnit, rxdbverticalgrid, - rxlclutils, RxRangeSel, RxXMLPropStorage, LazarusPackageIntf; + rxlclutils, RxRangeSel, RxXMLPropStorage, rxPopupNotifier, LazarusPackageIntf; implementation diff --git a/components/rx/trunk/rxtools/rxconst.pas b/components/rx/trunk/rxtools/rxconst.pas index 3b9da455d..c49f8dd33 100644 --- a/components/rx/trunk/rxtools/rxconst.pas +++ b/components/rx/trunk/rxtools/rxconst.pas @@ -129,6 +129,9 @@ resourcestring sVariableIsNotDT = 'Variable %s is not date/time'; sVariableIsNotBoolean = 'Variable %s is not boolean'; + { TRxNotifierForm } + sClose = 'Close'; + sCloseAfterSec = 'Close after %d sec'; implementation end.