From b96c2a9d72b0f2661ffb40f77d6a84b486d31791 Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Tue, 20 May 2014 09:19:04 +0000 Subject: [PATCH] Added: details view and Clear button to Observer.MonitorForm --- Resources/Clear.bmp | Bin 0 -> 1334 bytes Resources/Save.bmp | Bin 0 -> 1334 bytes Test/source/MainFrm.pas | 3 + X2Log.Constants.pas | 4 + X2Log.Observer.MonitorForm.dfm | 359 +++++++++++++++++++++++---------- X2Log.Observer.MonitorForm.pas | 47 ++++- 6 files changed, 302 insertions(+), 111 deletions(-) create mode 100644 Resources/Clear.bmp create mode 100644 Resources/Save.bmp diff --git a/Resources/Clear.bmp b/Resources/Clear.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cd033b76cd00680446102d97651704e10340fc66 GIT binary patch literal 1334 zcmeH_-%FEW6vscNnP&N;tvRPtr`x+(^G(ZEHeb^@6}C3rjA@Gkqo}ko8H6_l)m48) zS6%hP5)&h#pkG$k1xbVibzumB2}x@9^t@9q`X4+G-}B>p&U2o_d0$`1vz4@XvcM(1 z!gXYjvzEw!SNUr|`Z|Pugg}W4vhzn79v)}lmY}(Ll7hM!f>#9b_+6^)_i2oLrO3C0 zxnc^((Jyp$J)`lGV6Xc*7cV}+QTvh3&Jm0yV`N#LQtbau?@fUvBxLPv-0s_$Tpvg# z@3C*+INO`%QNyzYgYPH}{$z*Y1-Y(iJZF}%N0un8e~+S;mr$}+pOAMEXz#k~JBX8$5RJ$DHN9#MBr(0gMAhxZeihH<*D3o4?5lF)Bz zYTjV*Ow&3fC{Vv)aZF(<8$labk#pW5SDj|3_KSn(1%Cf1rodlJ+8l+&((hQNv||o? zOi*dNhu!&*%BnH;oD^8QWIt_z!NJFvY;P%SU8JgI9{GM?mCEQJIpZiz z34y`C#7=dFQ0M`wIzds%C^p*&-a*0P0fGCJz|kjgosf`km1qY5o0)HoZg4 z7a!7zrh2`NF6EUvQ7?)h%SFb*wyX{#XA1;kV2y literal 0 HcmV?d00001 diff --git a/Resources/Save.bmp b/Resources/Save.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9250003efd3be637220b1b7a0d681c63536d4c86 GIT binary patch literal 1334 zcmeH_`%~0a7{))|fsqZ9BqG2Ind8Ki8d%m;ARr7~rjnTrhKmrv){e8NTv8m#C}IN# zNedUSMnGUtc0s2b9zwAu)8lTgI3A?LhNm|WLry1^k;gbR;&3!+&HCACOayKy1au7 z-MB%MbUDg5oKYY4qu})Cl)dXoeMt_JlaqYk+Cs(N6_lpNVLZ5jAJ6)8?m`78pL3)n zbQ6YLDZ}ccoX=9A33H}hC8tTTjhkb4(VPflTrESF;fLkdMH*vWsV@JT&eD&mk?o?# z)J;dc9p`sLp41c5ha0)9@Zz#cNlDOpYR(*EGSOVBU?6)ZsvV$>^JHGk zwM({^v2m+-_b0hhoK1t&j>W}AF1!dvV>k6#@6Zw}p*lUBo43bliCIHuM=R<#ov_@U zW@LPd%3w#z6SgovKhMm}3=+~E$x6HIC-1#=rh2Hed)E(VR)Bfe+ySCF7yP9gn%Lw0OWBz3lV}b*t zqoeesd12Pb>F@1EUz|&0krI8J3ng*x42pk7b6iS;ICF5|Iv0Z^;!JytiH>Me{HZPc z4D5+KnX*G*J+Ox^NP2p>za`!gC4!Ek-x-qOGRI)=xLDJ z(<0{dKmKb1JJMF~dpE~s@pBafkEfnl^&Omb4+@CYJ{~9RI(2BH zjlYz%W_R$;XO9UFcv4cH>g}~}`Fm}D-&xc@4GGa|wFh2JNeTaGzs>KqwWz4*OB*&F z68VAPh|L8B1$#V_J-kD0{&hY=ew|8H8J&D2+@?qQ2nBMv+&9_R`##SR0#%ijs^~pO v3T=8=jv&}{UwK5j3{I}h5qy=(Xk~tZ#K8?7&3GbTM0C8W?&*xYe}(Wj#u=Te literal 0 HcmV?d00001 diff --git a/Test/source/MainFrm.pas b/Test/source/MainFrm.pas index 85b7042..d1de07d 100644 --- a/Test/source/MainFrm.pas +++ b/Test/source/MainFrm.pas @@ -77,6 +77,9 @@ begin SetLogResourceString(@LogMonitorFormColumnTime, 'Tijd'); SetLogResourceString(@LogMonitorFormColumnMessage, 'Melding'); + SetLogResourceString(@LogMonitorFormButtonClear, 'Wissen'); + SetLogResourceString(@LogMonitorFormButtonSaveDetails, 'Opslaan'); + FLog := TX2Log.Create; FLog.SetExceptionStrategy(TX2LogmadExceptExceptionStrategy.Create); diff --git a/X2Log.Constants.pas b/X2Log.Constants.pas index 7621d1e..e35f1d0 100644 --- a/X2Log.Constants.pas +++ b/X2Log.Constants.pas @@ -38,6 +38,10 @@ resourcestring LogMonitorFormColumnTime = 'Time'; LogMonitorFormColumnMessage = 'Message'; + { Caption of the toolbar buttons } + LogMonitorFormButtonClear = 'Clear'; + LogMonitorFormButtonSaveDetails = 'Save'; + function GetLogLevelText(ALogLevel: TX2LogLevel): string; diff --git a/X2Log.Observer.MonitorForm.dfm b/X2Log.Observer.MonitorForm.dfm index b85915c..38f0bc1 100644 --- a/X2Log.Observer.MonitorForm.dfm +++ b/X2Log.Observer.MonitorForm.dfm @@ -3,7 +3,7 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm Top = 0 Caption = 'Live Log' ClientHeight = 519 - ClientWidth = 658 + ClientWidth = 990 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -11,53 +11,192 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False + Position = poScreenCenter OnClose = FormClose OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 - object vstLog: TVirtualStringTree + object splDetails: TSplitter + Left = 634 + Top = 0 + Width = 6 + Height = 500 + Align = alRight + ResizeStyle = rsUpdate + ExplicitLeft = 637 + ExplicitHeight = 519 + end + object pnlDetails: TPanel + Left = 640 + Top = 0 + Width = 350 + Height = 500 + Align = alRight + BevelOuter = bvNone + TabOrder = 0 + ExplicitHeight = 519 + object tbDetails: TToolBar + Left = 0 + Top = 0 + Width = 350 + Height = 22 + AutoSize = True + ButtonWidth = 51 + Images = ilsLog + List = True + ShowCaptions = True + TabOrder = 0 + object tbSaveDetails: TToolButton + Left = 0 + Top = 0 + Caption = 'Save' + Enabled = False + ImageIndex = 5 + end + end + object pnlBorder: TPanel + Left = 0 + Top = 22 + Width = 350 + Height = 478 + Align = alClient + BevelKind = bkFlat + BevelOuter = bvNone + TabOrder = 1 + ExplicitLeft = 80 + ExplicitTop = 240 + ExplicitWidth = 185 + ExplicitHeight = 41 + object HeaderControl1: THeaderControl + Left = 0 + Top = 0 + Width = 346 + Height = 17 + Sections = < + item + AutoSize = True + ImageIndex = -1 + Text = 'Details' + Width = 346 + end> + NoSizing = True + ExplicitTop = 29 + end + object reDetails: TRichEdit + Left = 0 + Top = 17 + Width = 346 + Height = 457 + Align = alClient + BorderStyle = bsNone + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + ParentFont = False + PlainText = True + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 1 + ExplicitTop = 29 + ExplicitHeight = 486 + end + end + end + object pnlLog: TPanel Left = 0 Top = 0 - Width = 658 - Height = 519 + Width = 634 + Height = 500 Align = alClient - Header.AutoSizeIndex = 2 - Header.Font.Charset = DEFAULT_CHARSET - Header.Font.Color = clWindowText - Header.Font.Height = -11 - Header.Font.Name = 'Tahoma' - Header.Font.Style = [] - Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible, hoHeaderClickAutoSort] - Images = ilsLog - TabOrder = 0 - TreeOptions.PaintOptions = [toHideFocusRect, toShowButtons, toShowDropmark, toThemeAware] - TreeOptions.SelectionOptions = [toFullRowSelect] - OnFreeNode = vstLogFreeNode - OnGetText = vstLogGetText - OnGetImageIndex = vstLogGetImageIndex - OnInitNode = vstLogInitNode - Columns = < - item - Options = [coAllowClick, coDraggable, coEnabled, coParentBidiMode, coParentColor, coShowDropMark, coVisible, coAllowFocus] - Position = 0 - Width = 24 + BevelOuter = bvNone + TabOrder = 1 + ExplicitLeft = 408 + ExplicitTop = 256 + ExplicitWidth = 185 + ExplicitHeight = 41 + object vstLog: TVirtualStringTree + Left = 0 + Top = 22 + Width = 634 + Height = 478 + Align = alClient + Header.AutoSizeIndex = 2 + Header.Font.Charset = DEFAULT_CHARSET + Header.Font.Color = clWindowText + Header.Font.Height = -11 + Header.Font.Name = 'Tahoma' + Header.Font.Style = [] + Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible, hoHeaderClickAutoSort] + Images = ilsLog + TabOrder = 0 + TreeOptions.PaintOptions = [toHideFocusRect, toShowButtons, toShowDropmark, toThemeAware] + TreeOptions.SelectionOptions = [toFullRowSelect] + OnFocusChanged = vstLogFocusChanged + OnFreeNode = vstLogFreeNode + OnGetText = vstLogGetText + OnGetImageIndex = vstLogGetImageIndex + OnInitNode = vstLogInitNode + ExplicitTop = 0 + ExplicitWidth = 637 + ExplicitHeight = 519 + Columns = < + item + Options = [coAllowClick, coDraggable, coEnabled, coParentBidiMode, coParentColor, coShowDropMark, coVisible, coAllowFocus] + Position = 0 + Width = 24 + end + item + Position = 1 + Width = 150 + WideText = 'Time' + end + item + Position = 2 + Width = 456 + WideText = 'Message' + end> + end + object tbLog: TToolBar + Left = 0 + Top = 0 + Width = 634 + Height = 22 + AutoSize = True + ButtonWidth = 52 + Caption = 'tbLog' + Images = ilsLog + List = True + ShowCaptions = True + TabOrder = 1 + ExplicitWidth = 637 + object tbClear: TToolButton + Left = 0 + Top = 0 + AutoSize = True + Caption = 'Clear' + Enabled = False + ImageIndex = 6 + OnClick = tbClearClick end - item - Position = 1 - Width = 150 - WideText = 'Time' - end - item - Position = 2 - Width = 480 - WideText = 'Message' - end> + end + end + object sbStatus: TStatusBar + Left = 0 + Top = 500 + Width = 990 + Height = 19 + Panels = <> + ExplicitLeft = 504 + ExplicitTop = 272 + ExplicitWidth = 0 end object ilsLog: TImageList Left = 584 Top = 48 Bitmap = { - 494C010105004000480010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C010107004000540010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000002000000001002000000000000020 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -69,115 +208,115 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000009B7C6C009B7C 6C009B7C6C009B7C6C009B7C6C009B7C6C009B7C6C009B7C6C009B7C6C009B7C - 6C009B7C6C009B7C6C0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 6C009B7C6C009B7C6C0000000000000000000000000000000000AF704E00A747 + 1100895E4600A7ABAB00B9B2AB00C8C7C300C9C9CC00AFAFAF0099A2A8008238 + 0D00A7471100A34B2100A47763000000000000000000000000002427AE00161C + AC005A5AA90000000000000000000000000000000000000000005353A9004F4F + A200000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000009B776600FFFF FF00FAF4E900FAF4E900FAF4E900FAF4E900FAF4E900FAF4E900FAF4E900F9EF - E000F9EFE0009779670000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + E000F9EFE00097796700000000000000000000000000BC764500BE631700CD79 + 27009E877000B9875900CE700D00DCAF7A00FEFFFF00FEFFFF00D9E2EA00AD70 + 2400DD943500ECBE7500A4450E0000000000000000004E4EAB001844F600194D + F8001031D2002427AE000000000000000000000000004E4EAB000928D7000928 + D7000313B3004E4EAB0000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000A27F6F00FFFF FF00DDC1B400DDC1B400DDC1B400DDC1B400DDBEAD00DDBEAD00DCBAA500DCBA - A500F9EFE0009779670000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + A500F9EFE00097796700000000000000000000000000C9680D00C0702800C36C + 1E00A7876B00AE7C5A00BA580900C69A6C00D9DFE500FEFFFF00F4F9FC00A363 + 1D00D5872D00E5AF6900A4450E0000000000000000002022B1002451F9001F52 + FF00194DF8001744E8001017AF00000000004747AC000928D7001344F9001041 + F6000E3EF600041ABC006F6FAA00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000A3807000FFFF FF00DBC4BD00DBC4BD00DDC1B400DDC1B400DDBEAD00DDBEAD00DCBAA500DCBA - A500FAF4E9009B7C6C0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + A500FAF4E9009B7C6C00000000000000000000000000C9680D00BB682300BF66 + 1900B4906E00B37C6000AF490000B5875E00BFC6CD00D5DEE400FEFFFF00A363 + 1D00D5872D00E5AF6900A4450E000000000000000000000000001832DB00295A + FF002451F9002451F9001A4AF200060EAF000F30DD00164AFE001344F9001041 + F6000E3EF6000E3EF6002C2CA200000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000A9877800FFFF FF00DBC6C200DBC4BD00DBC4BD00DDC1B400DBBFB400DCBAA500DDBEAD00DDBE - AD00FAF4E9009779670000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + AD00FAF4E90097796700000000000000000000000000C9680D00BF661900BF66 + 1900B07D5800C1BFBD00B0ACA80098918B009A8E8400A3978A00AEA79F009058 + 1F00A7672300DA954200A4450E0000000000000000007777B3001832DB003A6F + FF00295AFF00295AFF00295AFF002451F900194DF800194DF8001344F9001344 + F9000E3EF600161CAC0000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000AB897A00FFFF FF00DBC6C200DBC6C200DBC4BD00DBC4BD00DBBFB400DCBAA500DDBEAD00DCBA - A500FAF4E9009B7C6C0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + A500FAF4E9009B7C6C00000000000000000000000000C9670A00B55D1B00B55D + 1B00BA580900BA580900BA580900C2620E00C5671000C8691300C8691300CD79 + 2700D07F2A00D3893200A4450E000000000000000000000000006B6BB6001A25 + C5003A6FFF003668FF00295AFF00295AFF002451F900194DF8001F52FF00123D + ED002427AE000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000AB897A00FFFF FF00DBC6C200DBC4BD00DBC4BD00DBC4BD00DDC1B400DBBFB400DCBAA500DDBE - AD00FAF4E9009B7C6C0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + AD00FAF4E9009B7C6C00000000000000000000000000C9680D00B0551400B169 + 3300AF714200AF714200AF714200B0764200B0764200B0764200B0764200B076 + 4200BD804100D5872D00A4450E00000000000000000000000000000000000000 + 00002F2FB3002E4EE7003668FF00295AFF00295AFF002451F900123DED002C2C + A200000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B1908000FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCF9F500FCF9F500FCF9F500FAF4 - E900FAF4E9009B7C6C0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + E900FAF4E9009B7C6C00000000000000000000000000C2620E00AF490000B39D + 8900E6F2FB00E4EDF300E4EDF300E4EDF300E1E9EF00D9E2EA00DFE3E600D9E2 + EA00AD9A8A00D07F2600A4450E00000000000000000000000000000000000000 + 000000000000253FDF003A6FFF003668FF00295AFF00295AFF001B46EA002427 + AE00000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000AF8F8000FFFF FF00DFCDCB00DFCDCB00DBC6C200DBC4BD00DBC4BD00DDC1B400DDBEAD00DDBE - AD00FCF9F5009B7C6C0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + AD00FCF9F5009B7C6C00000000000000000000000000C9670A00A8430300B899 + 8400FEFFFF00D4D3D200BEBDBC00C1BFBD00C1BFBD00C2C1C000C9C9CC00DFE3 + E600B19B8500CD792700A4450E00000000000000000000000000000000000000 + 00002B2CC0004B7CFF004170FF003A6FFF003A6FFF00295AFF00295AFF001031 + D2004A4AB2000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B1908000FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCF9F500FCF9F500FAF4 - E900F0E8E0009B7C6C0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + E900F0E8E0009B7C6C00000000000000000000000000C2620E00A23C0000B899 + 8400FEFFFF00E4EDF300EEEEEE00EEEEEE00EEEEEE00E5E4E300DFE3E600E5E4 + E300AD9A8A00CD792700A4450E00000000000000000000000000000000000000 + 0000253FDF00527CFA004170FF003464FF000C13C1004170FF00295AFF002451 + F9000B1DC2000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B1908000FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCF9F500A3807000A380 - 7000A3807000A380700000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 7000A3807000A3807000000000000000000000000000C2620E00A23C0000BC9C + 8A00FEFFFF00DDDCDB00C1BFBD00C2C1C000C2C1C000C1BFBD00C9C9CC00E1E9 + EF00B19B8500CD771F00A4450E00000000000000000000000000000000004F4F + BD00527CFA005081FF004B7CFF001A25C500000000001A25C5003A6FFF002451 + F9001A4AF2001419B10000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B8988800FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCF9F500FFFFFF00A3807000F5E2 - D900B08E7D00AB9E980000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + D900B08E7D00AB9E9800000000000000000000000000C2620E009A310000BC9C + 8A00FEFFFF00FEFFFF00EEEEEE00EEEEEE00EEEEEE00E5E4E300E5E4E300EEEE + EE00B39D8900C2701D00A9480D0000000000000000000000000000000000252D + D6006A9CFF005788FF002B46E7006B6BB60000000000000000001A25C500295A + FF002451F9001439DD004747AC00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B8988800FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A3807000B08E - 7D00AB9E98000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 7D00AB9E980000000000000000000000000000000000C562060093280000BC9C + 8A00FEFFFF00E5E4E300D1CFCC00D1CFCC00C9C9CC00D1CFCC00D4D3D200E4ED + F300B9A38C008A4F1400B0551400000000000000000000000000000000004B4B + C8003951E2005081FF002B2CC000000000000000000000000000000000001628 + D300265AFF000F2EE3002022B100000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B8988800B898 8800B1908000B1908000B08E7D00B08E7D00AC887700AC887700A3807000AB9E - 9800000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 98000000000000000000000000000000000000000000BF8D5800C0540200C8A4 + 8300D4D3D200D4D3D200D4D3D200D4D3D200C9C9CC00C8C7C300C1BFBD00BEBD + BC00B1947B00C0540200B07D5800000000000000000000000000000000000000 + 0000000000003E3EB90000000000000000000000000000000000000000006B6B + B6002F2FB3000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -317,11 +456,11 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000424D3E000000000000003E000000 2800000040000000200000000100010000000000000100000000000000000000 - 000000000000000000000000FFFFFF00FFFF000000000000C003000000000000 - C003000000000000C003000000000000C003000000000000C003000000000000 - C003000000000000C003000000000000C003000000000000C003000000000000 - C003000000000000C003000000000000C003000000000000C007000000000000 - C00F000000000000FFFF000000000000FFFFFFFFFFFFFFFFF81FF81FFFFF8001 + 000000000000000000000000FFFFFF00FFFFFFFFFFFF0000C003C001C7CF0000 + C003800183830000C003800181010000C0038001C0010000C003800180030000 + C0038001C0070000C0038001F00F0000C0038001F80F0000C0038001F0070000 + C0038001F0070000C0038001E0830000C0038001E0C10000C0078001E1E10000 + C00F8001FBE70000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFF81FF81FFFFF8001 F00FF00F80038001E007E00780018001C003C003800180018001800180018001 80018001C003800180018001E003800180018001E007800180018001F00F8001 80018001F00F8001C003C003F81F8001E007C007F81F8001F00FE00FFC3F8001 diff --git a/X2Log.Observer.MonitorForm.pas b/X2Log.Observer.MonitorForm.pas index b11f9b3..8614e2d 100644 --- a/X2Log.Observer.MonitorForm.pas +++ b/X2Log.Observer.MonitorForm.pas @@ -1,5 +1,7 @@ unit X2Log.Observer.MonitorForm; +// #ToDo3 -oMvR: 20-5-2014: pause button + interface uses System.Classes, @@ -10,7 +12,7 @@ uses VirtualTrees, Winapi.Messages, - X2Log.Intf; + X2Log.Intf, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls, Vcl.ToolWin; const @@ -21,6 +23,17 @@ type TX2LogObserverMonitorForm = class(TForm, IX2LogObserver) vstLog: TVirtualStringTree; ilsLog: TImageList; + splDetails: TSplitter; + HeaderControl1: THeaderControl; + pnlDetails: TPanel; + reDetails: TRichEdit; + pnlLog: TPanel; + tbLog: TToolBar; + tbDetails: TToolBar; + pnlBorder: TPanel; + tbClear: TToolButton; + tbSaveDetails: TToolButton; + sbStatus: TStatusBar; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); @@ -28,6 +41,8 @@ type procedure vstLogFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure vstLogGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); procedure vstLogGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer); + procedure vstLogFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); + procedure tbClearClick(Sender: TObject); private class var FInstances: TDictionary; private @@ -195,6 +210,9 @@ begin vstLog.NodeDataSize := SizeOf(TLogEntryNodeData); vstLog.Header.Columns[ColumnTime].Text := GetLogResourceString(@LogMonitorFormColumnTime); vstLog.Header.Columns[ColumnMessage].Text := GetLogResourceString(@LogMonitorFormColumnMessage); + + tbClear.Caption := GetLogResourceString(@LogMonitorFormButtonClear); + tbSaveDetails.Caption := GetLogResourceString(@LogMonitorFormButtonSaveDetails); end; @@ -248,9 +266,15 @@ var nodeData: PLogEntryNodeData; begin +// #ToDo1 -oMvR: 20-5-2014: thread safety; Log is not guaranteed to be called in the main thread! + if GetCurrentThreadId <> MainThreadID then + exit; + node := vstLog.AddChild(nil); nodeData := vstLog.GetNodeData(node); nodeData^.Initialize(ALevel, AMessage, ADetails); + + tbClear.Enabled := True; end; @@ -334,4 +358,25 @@ begin end; end; + +procedure TX2LogObserverMonitorForm.vstLogFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); +var + nodeData: PLogEntryNodeData; + +begin + if Assigned(Node) then + begin + nodeData := Sender.GetNodeData(Node); + reDetails.Text := nodeData^.Details; + end else + reDetails.Text := ''; +end; + + +procedure TX2LogObserverMonitorForm.tbClearClick(Sender: TObject); +begin + vstLog.Clear; + tbClear.Enabled := False; +end; + end.