From 1d024b954c6986cb50a8c63bcf8cf2b9a5306818 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 9 Jan 2019 13:17:10 +0000 Subject: [PATCH] Sorting the FileS display grid would hide the KnownHash column. Now it remains visible after multiple sorts --- CHANGELOG.md | 18 +++-- dbases_sqlite.lfm | 10 +-- dbases_sqlite.pas | 8 +- frmaboutunit.lfm | 4 +- frmaboutunit.lrs | 44 +++++------ quickhash.lpi | 99 ++++++++++++------------ unit2.lfm | 186 +++++++++++++++++++++++----------------------- unit2.pas | 3 +- 8 files changed, 185 insertions(+), 187 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c4f940..c2176ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,23 +1,31 @@ Version History =============== -v3.0.3 (Nov 2018) +v3.0.3 (Jan 2019) The 'Load Hashlist' functionality in the 'FileS' tab would accept all values but then compare them against computer uppercase hashes strings, meaning any lowercase imported values were not matched. Now all input is converted to uppercase first. +The 'Load Hashlist' functionality in the 'FileS' tab can now accept CSV saved files (but must still contain only one column of hash values!) + +The 'Known Hash Flag' column, where it reports either YES or NO after importing a hash list, was only showing with the default display grid in FileS tab. If the user resorted, the column would vanish. Now it should remain for all sorting. + +The filehandles were not always being released properly, even if hashing completed OK, thus leaving open handles to processed files. A bug I introduced by mistake in v3.0.2. by trying to free handles more gracefully! That was fixed. Report issues with this if still not working properly. + The 'FileS' tab was computing file hashes of zero bytes returning the default initialisation hash for the chosen algorithm. I thought I had corrected that a long time ago but I may only have done so for the 'File' tab according to the release notes. That was fixed returning instead 'ZERO BYTE FILE'. A feature request was made asking for a clearer message when computed hashes do not match expected hash values input -by the user. So a new message dialog is now shown that tries to make it very clear the hashes do or do not match for -single file hashing in the 'File' tab or when using 'drag and drop'. +by the user. So a new message dialog is now shown that tries to make it very clear the hashes do, or do not, match for +single file hashing in the 'File' tab or when using 'drag and drop' feature. The exe version has been updated to the correct numbering for the version (forgot to update in the project file last time). -The program will now show either "64-bit" or "32-bit" in the title if its 64 or 32 bit accordingly. +The program will now show either "64-bit" or "32-bit" in the main title if its 64 or 32 bit accordingly. + +The 'About' dialog has been updated and also re-aligned for word-wrap, to try and make it look neater. -The 'About' menu updated and re-aligned for word-wrap, to try and make it look neater. +The 'About' dialog was showing an incorrect link to the donations page! Corrected to https://paypal.me/quickhashgui v3.0.2 (Mar 2018) diff --git a/dbases_sqlite.lfm b/dbases_sqlite.lfm index e0ba506..3cd9f4a 100644 --- a/dbases_sqlite.lfm +++ b/dbases_sqlite.lfm @@ -9,12 +9,12 @@ object frmSQLiteDBases: TfrmSQLiteDBases OnClose = FormClose OnCreate = FormCreate Position = poScreenCenter - LCLVersion = '1.6.4.0' + LCLVersion = '1.8.4.0' object lblConnectionStatus: TLabel Left = 32 - Height = 13 + Height = 15 Top = 32 - Width = 72 + Width = 81 Caption = 'Not Connected' ParentColor = False end @@ -27,7 +27,6 @@ object frmSQLiteDBases: TfrmSQLiteDBases FieldDefs = <> Database = SQLite3Connection1 Transaction = SQLTransaction1 - Options = [] Params = <> left = 48 top = 80 @@ -35,7 +34,6 @@ object frmSQLiteDBases: TfrmSQLiteDBases object SQLTransaction1: TSQLTransaction Active = False Database = SQLite3Connection1 - Options = [] left = 48 top = 224 end @@ -44,7 +42,6 @@ object frmSQLiteDBases: TfrmSQLiteDBases LoginPrompt = False KeepConnection = False Transaction = SQLTransaction1 - Options = [] left = 48 top = 296 end @@ -69,7 +66,6 @@ object frmSQLiteDBases: TfrmSQLiteDBases FieldDefs = <> Database = SQLite3Connection1 Transaction = SQLTransaction1 - Options = [] Params = <> left = 160 top = 80 diff --git a/dbases_sqlite.pas b/dbases_sqlite.pas index ace046c..09e2b49 100644 --- a/dbases_sqlite.pas +++ b/dbases_sqlite.pas @@ -792,7 +792,7 @@ procedure TfrmSQLiteDBases.SortByID(DBGrid : TDBGrid); begin try DBGrid.DataSource.Dataset.Close; // <--- we don't use sqlFILES but the query connected to the grid - TSQLQuery(DBGrid.DataSource.Dataset).SQL.Text := 'SELECT Id, Filename, FilePath, HashValue, FileSize ' + + TSQLQuery(DBGrid.DataSource.Dataset).SQL.Text := 'SELECT Id, Filename, FilePath, HashValue, FileSize, KnownHashFlag ' + 'FROM TBL_FILES ORDER BY Id'; SQLite3Connection1.Connected := True; SQLTransaction1.Active := True; @@ -811,7 +811,7 @@ procedure TfrmSQLiteDBases.SortByFileName(DBGrid : TDBGrid); begin try DBGrid.DataSource.Dataset.Close; // <--- we don't use sqlFILES but the query connected to the grid - TSQLQuery(DBGrid.DataSource.Dataset).SQL.Text := 'SELECT Id, Filename, FilePath, HashValue, FileSize ' + + TSQLQuery(DBGrid.DataSource.Dataset).SQL.Text := 'SELECT Id, Filename, FilePath, HashValue, FileSize, KnownHashFlag ' + 'FROM TBL_FILES ORDER BY FileName'; SQLite3Connection1.Connected := True; SQLTransaction1.Active := True; @@ -831,7 +831,7 @@ procedure TfrmSQLiteDBases.SortByFilePath(DBGrid : TDBGrid); begin try DBGrid.DataSource.Dataset.Close; // <--- we don't use sqlFILES but the query connected to the grid - TSQLQuery(DBGrid.DataSource.Dataset).SQL.Text := 'SELECT Id, Filename, FilePath, HashValue, FileSize ' + + TSQLQuery(DBGrid.DataSource.Dataset).SQL.Text := 'SELECT Id, Filename, FilePath, HashValue, FileSize, KnownHashFlag ' + 'FROM TBL_FILES ORDER BY FilePath'; SQLite3Connection1.Connected := True; SQLTransaction1.Active := True; @@ -851,7 +851,7 @@ procedure TfrmSQLiteDBases.SortByHash(DBGrid : TDBGrid); begin try DBGrid.DataSource.Dataset.Close; // <--- we don't use sqlFILES but the query connected to the grid - TSQLQuery(DBGrid.DataSource.Dataset).SQL.Text := 'SELECT Id, Filename, FilePath, HashValue, FileSize ' + + TSQLQuery(DBGrid.DataSource.Dataset).SQL.Text := 'SELECT Id, Filename, FilePath, HashValue, FileSize, KnownHashFlag ' + 'FROM TBL_FILES ORDER BY HashValue'; SQLite3Connection1.Connected := True; SQLTransaction1.Active := True; diff --git a/frmaboutunit.lfm b/frmaboutunit.lfm index 4b3cab5..20a073e 100644 --- a/frmaboutunit.lfm +++ b/frmaboutunit.lfm @@ -11,7 +11,7 @@ object frmAbout: TfrmAbout object memAbout: TMemo Left = 16 Height = 489 - Top = 24 + Top = 16 Width = 484 Anchors = [akTop, akLeft, akRight, akBottom] Lines.Strings = ( @@ -44,7 +44,7 @@ object frmAbout: TfrmAbout AnchorSideTop.Side = asrBottom Left = 32 Height = 25 - Top = 513 + Top = 505 Width = 147 Caption = 'Close' OnClick = Button1Click diff --git a/frmaboutunit.lrs b/frmaboutunit.lrs index a7e2e4d..9628b7f 100644 --- a/frmaboutunit.lrs +++ b/frmaboutunit.lrs @@ -4,31 +4,31 @@ LazarusResources.Add('TfrmAbout','FORMDATA',[ 'TPF0'#9'TfrmAbout'#8'frmAbout'#4'Left'#3#6#2#6'Height'#3'*'#2#3'Top'#3#138#0 +#5'Width'#3#2#2#7'Caption'#6#19'About QuickHash-GUI'#12'ClientHeight'#3'*'#2 +#11'ClientWidth'#3#2#2#8'Position'#7#16'poMainFormCenter'#10'LCLVersion'#6#7 - +'1.8.4.0'#0#5'TMemo'#8'memAbout'#4'Left'#2#16#6'Height'#3#233#1#3'Top'#2#24#5 + +'1.8.4.0'#0#5'TMemo'#8'memAbout'#4'Left'#2#16#6'Height'#3#233#1#3'Top'#2#16#5 +'Width'#3#228#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#13 +'Lines.Strings'#1#6'$Developed by Ted Smith (c) 2011-2019'#6#0#6#127'Home Pa' +'ge : http://www.quickhash-gui.org (First registered in 2011 on Sourceforge ' - +'at http://sourceforge.net/projects/quickhash)'#6#0#6#219'Donations are welc' + +'at http://sourceforge.net/projects/quickhash)'#6#0#6#222'Donations are welc' +'omed! The website is hosted using AWS which is actually quite expensive! If' +' you have found QuickHash useful to you or your business, please consider d' - +'onating using PayPal at https://paypal.me/quickhash'#6#0#6'FThe development' - +' Github Page is : https://github.com/tedsmith/quickhash'#6#0#6#142'Bug Trac' - +'ker is available at http://www.quickhash-gui.org/bug-tracker/ where bugs an' - +'d feature requests can be submitted, reviewed and tracked. '#6#0#6#244'Cont' - +'ributions made by DaReal Shinji (http://www.github.com/darealshinji), espec' - +'ially regarding repository maintenance and Debian packaging are both welcom' - +'ed and acknowledged, in addition to the Lazarus forum members, who are alwa' - +'ys so helpful. '#6#0#12#20#1#0#0'For a private communication or technical h' - +'elp which the website does not answer, you can e-mail me at tedsmith@quickh' - +'ash-gui.org, however, this should not be used as the means to ask about bug' - +'s or problems. Please use the bug tracker for that so that other users can ' - +'benefit. '#6#0#6'QCreated using the Lazarus IDE and the Freepascal Compiler' - +' (www.lazarus-ide.org). '#6#0#6#167'The HashLib4Pascal library is licensed ' - +'under MIT and developed by the talented Ugochukwu Mmaduekwe Stanley (aka Xo' - +'r-el - see https://github.com/Xor-el/HashLib4Pascal).'#6#0#6'>QuickHash is ' - +'open-source and released under the GPL2 license. '#0#8'ReadOnly'#9#10'Scrol' - +'lBars'#7#10'ssAutoBoth'#8'TabOrder'#2#0#0#0#7'TButton'#7'Button1'#21'Anchor' - +'SideTop.Control'#7#8'memAbout'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'Left' - +#2' '#6'Height'#2#25#3'Top'#3#1#2#5'Width'#3#147#0#7'Caption'#6#5'Close'#7'O' - +'nClick'#7#12'Button1Click'#8'TabOrder'#2#1#0#0#0 + +'onating using PayPal at https://paypal.me/quickhashgui'#6#0#6'FThe developm' + +'ent Github Page is : https://github.com/tedsmith/quickhash'#6#0#6#142'Bug T' + +'racker is available at http://www.quickhash-gui.org/bug-tracker/ where bugs' + +' and feature requests can be submitted, reviewed and tracked. '#6#0#6#244'C' + +'ontributions made by DaReal Shinji (http://www.github.com/darealshinji), es' + +'pecially regarding repository maintenance and Debian packaging are both wel' + +'comed and acknowledged, in addition to the Lazarus forum members, who are a' + +'lways so helpful. '#6#0#12#20#1#0#0'For a private communication or technica' + +'l help which the website does not answer, you can e-mail me at tedsmith@qui' + +'ckhash-gui.org, however, this should not be used as the means to ask about ' + +'bugs or problems. Please use the bug tracker for that so that other users c' + +'an benefit. '#6#0#6'QCreated using the Lazarus IDE and the Freepascal Compi' + +'ler (www.lazarus-ide.org). '#6#0#6#167'The HashLib4Pascal library is licens' + +'ed under MIT and developed by the talented Ugochukwu Mmaduekwe Stanley (aka' + +' Xor-el - see https://github.com/Xor-el/HashLib4Pascal).'#6#0#6'>QuickHash ' + +'is open-source and released under the GPL2 license. '#0#8'ReadOnly'#9#10'Sc' + +'rollBars'#7#10'ssAutoBoth'#8'TabOrder'#2#0#0#0#7'TButton'#7'Button1'#21'Anc' + +'horSideTop.Control'#7#8'memAbout'#18'AnchorSideTop.Side'#7#9'asrBottom'#4'L' + +'eft'#2' '#6'Height'#2#25#3'Top'#3#249#1#5'Width'#3#147#0#7'Caption'#6#5'Clo' + +'se'#7'OnClick'#7#12'Button1Click'#8'TabOrder'#2#1#0#0#0 ]); diff --git a/quickhash.lpi b/quickhash.lpi index 38aa883..b9b5fbb 100755 --- a/quickhash.lpi +++ b/quickhash.lpi @@ -57,10 +57,9 @@ - - + @@ -92,8 +91,9 @@ - - + + + @@ -256,7 +256,8 @@ - + + @@ -337,8 +338,8 @@ - - + + @@ -369,7 +370,7 @@ - + @@ -377,14 +378,14 @@ - + - + - + @@ -455,123 +456,123 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + @@ -610,14 +611,6 @@ - - - -
- - - - diff --git a/unit2.lfm b/unit2.lfm index 6aed625..2312aa8 100755 --- a/unit2.lfm +++ b/unit2.lfm @@ -1,11 +1,11 @@ object MainForm: TMainForm - Left = 222 + Left = 449 Height = 733 - Top = 138 + Top = 230 Width = 1023 AllowDropFiles = True Caption = 'QuickHash v3.0.3 (Jan 2019) - The easy and convenient way to hash data in Linux, OSX and Windows' - ClientHeight = 714 + ClientHeight = 713 ClientWidth = 1023 Menu = MainMenu1 OnClose = FormClose @@ -16,7 +16,7 @@ object MainForm: TMainForm LCLVersion = '1.8.4.0' object PageControl1: TPageControl Left = 16 - Height = 676 + Height = 675 Top = 24 Width = 991 ActivePage = TabSheet1 @@ -28,7 +28,7 @@ object MainForm: TMainForm object TabSheet1: TTabSheet Hint = 'Hash portions of text' Caption = 'Te&xt' - ClientHeight = 650 + ClientHeight = 647 ClientWidth = 983 OnContextPopup = TabSheet1ContextPopup ParentShowHint = False @@ -39,7 +39,7 @@ object MainForm: TMainForm Width = 847 Anchors = [akTop, akLeft, akRight] Caption = 'Text Hashing' - ClientHeight = 513 + ClientHeight = 512 ClientWidth = 843 Color = clForm Font.Height = -13 @@ -105,7 +105,7 @@ object MainForm: TMainForm end object lbleExpectedHashText: TLabeledEdit Left = 8 - Height = 24 + Height = 25 Hint = 'Paste an existing hash value here to see if'#13#10'the generated hash matches the computed hash.'#13#10'To resume normal behaviour, return value '#13#10'to ''...'' (3 dots only)'#13#10'It expects you to paste hash values '#13#10'of the correct length' Top = 368 Width = 822 @@ -115,8 +115,8 @@ object MainForm: TMainForm EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = lbleExpectedHashText EditLabel.Left = 8 - EditLabel.Height = 16 - EditLabel.Top = 349 + EditLabel.Height = 17 + EditLabel.Top = 348 EditLabel.Width = 822 EditLabel.Caption = 'Expected Hash Value (clear, then paste value from other utility)' EditLabel.ParentColor = False @@ -132,7 +132,7 @@ object MainForm: TMainForm Top = 208 Width = 448 Caption = 'Line-By-Line Hashing Options' - ClientHeight = 99 + ClientHeight = 98 ClientWidth = 444 TabOrder = 3 object btnFLBL: TButton @@ -161,10 +161,10 @@ object MainForm: TMainForm end object cbToggleInputDataToOutputFile: TCheckBox Left = 184 - Height = 20 + Height = 21 Hint = 'If unticked, source text (including '#13#10'hashes) will be output. '#13#10'If ticked, only the computed'#13#10'hashes will be output.' Top = 16 - Width = 192 + Width = 197 Caption = 'Source text INcluded in output' OnChange = cbToggleInputDataToOutputFileChange ParentShowHint = False @@ -235,7 +235,7 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 108 + ClientHeight = 107 ClientWidth = 100 Font.Height = -13 ItemIndex = 1 @@ -259,16 +259,16 @@ object MainForm: TMainForm Top = 152 Width = 96 Caption = 'System RAM' - ClientHeight = 60 + ClientHeight = 59 ClientWidth = 92 Font.Height = -13 ParentFont = False TabOrder = 2 object lblRAM: TLabel Left = 8 - Height = 16 + Height = 17 Top = 8 - Width = 12 + Width = 9 Caption = '...' ParentColor = False end @@ -277,7 +277,7 @@ object MainForm: TMainForm object TabSheet2: TTabSheet Hint = 'Hash a single file (useful for hashing disks in Linux)' Caption = 'F&ile' - ClientHeight = 650 + ClientHeight = 647 ClientWidth = 983 ParentShowHint = False object FileHashingGroupBox: TGroupBox @@ -287,7 +287,7 @@ object MainForm: TMainForm Width = 848 Anchors = [akTop, akLeft, akRight] Caption = 'Single File Hashing' - ClientHeight = 377 + ClientHeight = 376 ClientWidth = 844 Color = clForm Font.Height = -13 @@ -297,32 +297,32 @@ object MainForm: TMainForm TabOrder = 0 object Label6: TLabel Left = 552 - Height = 32 + Height = 34 Top = 47 - Width = 264 + Width = 270 Caption = 'As root, this section can be used to hash disks'#10'e.g. /dev/sdX or /dev/sdaX, or /dev/hdX' ParentColor = False WordWrap = True end object lblStartedFileAt: TLabel Left = 272 - Height = 16 + Height = 17 Top = 8 - Width = 12 + Width = 9 Caption = '...' ParentColor = False end object lblFileTimeTaken: TLabel Left = 272 - Height = 16 + Height = 17 Top = 56 - Width = 12 + Width = 9 Caption = '...' ParentColor = False end object edtFileNameToBeHashed: TEdit Left = 6 - Height = 24 + Height = 25 Top = 96 Width = 822 Anchors = [akTop, akLeft, akRight] @@ -333,7 +333,7 @@ object MainForm: TMainForm end object btnHashFile: TButton Left = 6 - Height = 23 + Height = 25 Hint = 'Choose a single file to hash (or Linux physical device e.g. /dev/sda)' Top = 64 Width = 83 @@ -349,16 +349,16 @@ object MainForm: TMainForm end object StatusBar1: TStatusBar Left = 0 - Height = 20 - Top = 357 + Height = 23 + Top = 353 Width = 844 Panels = <> end object lblDragAndDropNudge: TLabel Left = 112 - Height = 16 + Height = 17 Top = 64 - Width = 115 + Width = 121 Caption = 'or drag n drop a file' ParentColor = False end @@ -387,7 +387,7 @@ object MainForm: TMainForm end object lbleExpectedHash: TLabeledEdit Left = 8 - Height = 24 + Height = 25 Hint = 'Paste an existing hash value here to see if'#13#10'the generated file hash matches it, or not. ' Top = 264 Width = 820 @@ -397,8 +397,8 @@ object MainForm: TMainForm EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = lbleExpectedHash EditLabel.Left = 8 - EditLabel.Height = 16 - EditLabel.Top = 245 + EditLabel.Height = 17 + EditLabel.Top = 244 EditLabel.Width = 820 EditLabel.Caption = 'Expected Hash Value (paste from other utility before or after file hashing)' EditLabel.ParentColor = False @@ -409,18 +409,18 @@ object MainForm: TMainForm end object lbEndedFileAt: TLabel Left = 272 - Height = 16 + Height = 17 Top = 32 - Width = 12 + Width = 9 Caption = '...' ParentColor = False end object ZVDateTimePickerFileTab: TZVDateTimePicker Left = 8 - Height = 24 + Height = 25 Hint = 'Enter date and time (hours and minutes) '#13#10'to start the process. Must be in the future!' Top = 32 - Width = 138 + Width = 136 CenturyFrom = 1941 MaxDate = 72686 MinDate = 42736 @@ -444,10 +444,10 @@ object MainForm: TMainForm end object lblschedulertickboxFileTab: TCheckBox Left = 8 - Height = 20 + Height = 21 Hint = 'Tick and set a date and time ahead of current time'#13#10'and then select the file to hash.' Top = 8 - Width = 108 + Width = 105 Caption = 'Start at a time:' OnChange = lblschedulertickboxFileTabChange ParentShowHint = False @@ -476,17 +476,17 @@ object MainForm: TMainForm AnchorSideTop.Control = pbFile AnchorSideTop.Side = asrBottom Left = 456 - Height = 16 + Height = 17 Top = 324 - Width = 12 + Width = 9 Caption = '...' ParentColor = False end object cbFlipCaseFILE: TCheckBox Left = 8 - Height = 20 + Height = 21 Top = 208 - Width = 88 + Width = 86 Caption = 'Switch case' OnChange = cbFlipCaseFILEChange TabOrder = 9 @@ -507,7 +507,7 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 108 + ClientHeight = 107 ClientWidth = 100 Font.Height = -13 ItemIndex = 1 @@ -527,18 +527,18 @@ object MainForm: TMainForm object TabSheet3: TTabSheet Hint = 'Compute hashes for multiple files in a directory'#13#10'recursively, or just those in the root of the directory' Caption = 'FileS' - ClientHeight = 650 + ClientHeight = 647 ClientWidth = 983 ParentShowHint = False ShowHint = True object DirectoryHashingGroupBox: TGroupBox Left = 120 - Height = 630 + Height = 627 Top = 10 Width = 851 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'Hash all files in chosen directory - recursive by default' - ClientHeight = 609 + ClientHeight = 605 ClientWidth = 847 Color = clForm Font.Height = -13 @@ -548,7 +548,7 @@ object MainForm: TMainForm object Label2: TLabel AnchorSideRight.Control = lblFilesExamined Left = 520 - Height = 16 + Height = 17 Top = 28 Width = 111 Anchors = [akTop, akLeft, akRight] @@ -559,7 +559,7 @@ object MainForm: TMainForm end object btnRecursiveDirectoryHashing: TButton Left = 8 - Height = 23 + Height = 25 Hint = 'All files and subdirectories below the chosen '#10'directory will be hashed, subject to selected'#10'options. Recursive by default.' Top = 96 Width = 99 @@ -575,7 +575,7 @@ object MainForm: TMainForm end object DirSelectedField: TEdit Left = 8 - Height = 24 + Height = 25 Hint = 'The chosen parent directory' Top = 136 Width = 814 @@ -587,7 +587,7 @@ object MainForm: TMainForm object Label4: TLabel AnchorSideRight.Control = lblNoFilesInDir Left = 520 - Height = 16 + Height = 17 Top = 6 Width = 111 Anchors = [akTop, akLeft, akRight] @@ -596,7 +596,7 @@ object MainForm: TMainForm end object PercentageComplete: TLabel Left = 520 - Height = 16 + Height = 17 Top = 56 Width = 225 Anchors = [akTop, akLeft, akRight] @@ -605,10 +605,10 @@ object MainForm: TMainForm end object btnClipboardResults: TButton Left = 224 - Height = 26 + Height = 27 Hint = 'Press this to copy entire grid content to RAM' Top = 96 - Width = 80 + Width = 84 AutoSize = True Caption = 'Clipboard' Enabled = False @@ -619,10 +619,10 @@ object MainForm: TMainForm end object btnStopScan1: TButton Left = 152 - Height = 23 + Height = 25 Hint = 'Click to abort the hash as soon as the'#10'current file hashing action completes. ' Top = 96 - Width = 48 + Width = 50 AutoSize = True Caption = 'S&top' OnClick = btnStopScan1Click @@ -631,18 +631,18 @@ object MainForm: TMainForm end object chkRecursiveDirOverride: TCheckBox Left = 8 - Height = 20 + Height = 21 Hint = 'Hash files just in the root of the chosen folder'#13#10'Sub-folders will be ignored. ' Top = 8 - Width = 162 + Width = 167 Caption = 'Ignoring sub-directories?' TabOrder = 1 end object Label5: TLabel Left = 110 - Height = 24 + Height = 28 Top = 312 - Width = 606 + Width = 575 Caption = 'This area will be populated once the scan is complete...please wait!' Font.Height = -20 ParentColor = False @@ -655,7 +655,7 @@ object MainForm: TMainForm AnchorSideRight.Side = asrBottom Left = 8 Height = 23 - Top = 571 + Top = 567 Width = 839 Align = alCustom Anchors = [akLeft, akRight] @@ -677,7 +677,7 @@ object MainForm: TMainForm AnchorSideRight.Control = DirectoryHashingGroupBox AnchorSideRight.Side = asrBottom Left = 686 - Height = 16 + Height = 17 Top = 56 Width = 161 Anchors = [akTop, akLeft, akRight] @@ -687,7 +687,7 @@ object MainForm: TMainForm object lblNoFilesInDir: TLabel AnchorSideRight.Control = lblTimeTaken3 Left = 631 - Height = 16 + Height = 17 Top = 6 Width = 55 Anchors = [akTop, akLeft, akRight] @@ -697,7 +697,7 @@ object MainForm: TMainForm object lblPercentageComplete: TLabel AnchorSideRight.Control = lblTimeTaken4 Left = 631 - Height = 16 + Height = 17 Top = 56 Width = 55 Anchors = [akTop, akLeft, akRight] @@ -707,7 +707,7 @@ object MainForm: TMainForm object lblFilesExamined: TLabel AnchorSideRight.Control = lblTotalBytesExamined Left = 631 - Height = 16 + Height = 17 Top = 28 Width = 55 Anchors = [akTop, akLeft, akRight] @@ -718,24 +718,24 @@ object MainForm: TMainForm AnchorSideRight.Control = DirectoryHashingGroupBox AnchorSideRight.Side = asrBottom Left = 686 - Height = 16 + Height = 17 Top = 28 - Width = 12 + Width = 9 Caption = '...' ParentColor = False end object chkHiddenFiles: TCheckBox Left = 8 - Height = 20 + Height = 21 Hint = 'Tick to have files in hidden folders hashed. '#13#10'Hidden files are hashed by default anyway '#13#10'but hidden folders, ergo their contents, are not found by default.' Top = 64 - Width = 130 + Width = 137 Caption = 'Hidden folders too?' TabOrder = 6 end object FileMaskField2: TEdit Left = 288 - Height = 24 + Height = 25 Hint = 'Use an asterix, full stop and the file type '#10'extension, seperated by a semi-colon.'#10'NO space characters' Top = 36 Width = 200 @@ -747,19 +747,19 @@ object MainForm: TMainForm end object FileTypeMaskCheckBox2: TCheckBox Left = 288 - Height = 20 + Height = 21 Hint = 'Select file type masks (e.g. *.doc;*.pdf)'#13#10'Remember that JPG and jpg are different'#13#10'file names on Linux and OSX!!' Top = 8 - Width = 123 + Width = 126 Caption = 'Choose file types?' OnChange = FileTypeMaskCheckBox2Change TabOrder = 8 end object ZVDateTimePickerFileSTab: TZVDateTimePicker Left = 128 - Height = 24 + Height = 25 Top = 36 - Width = 138 + Width = 136 CenturyFrom = 1941 MaxDate = 72686 MinDate = 42736 @@ -781,17 +781,17 @@ object MainForm: TMainForm end object lblschedulertickboxFileSTab: TCheckBox Left = 8 - Height = 20 + Height = 21 Hint = 'Tick and set a date and time ahead of current time'#13#10'and then select the directory to hash.' Top = 36 - Width = 108 + Width = 105 Caption = 'Start at a time:' OnChange = lblschedulertickboxFileSTabChange TabOrder = 10 end object RecursiveDisplayGrid1: TDBGrid Left = 8 - Height = 379 + Height = 375 Top = 176 Width = 835 Anchors = [akTop, akLeft, akRight, akBottom] @@ -825,9 +825,9 @@ object MainForm: TMainForm end object cbLoadHashList: TCheckBox Left = 288 - Height = 20 + Height = 21 Top = 64 - Width = 98 + Width = 101 Caption = 'Load HashList' OnChange = cbLoadHashListChange TabOrder = 13 @@ -859,7 +859,7 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 108 + ClientHeight = 107 ClientWidth = 100 Font.Height = -13 ItemIndex = 1 @@ -896,7 +896,7 @@ object MainForm: TMainForm Width = 843 Anchors = [akTop, akLeft, akRight] Caption = 'Hash files in chosen directory, copy them, and re-hash the copied files (recursive by default) ' - ClientHeight = 575 + ClientHeight = 574 ClientWidth = 839 Color = clForm Font.Height = -13 @@ -1267,7 +1267,7 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 108 + ClientHeight = 107 ClientWidth = 100 Font.Height = -13 ItemIndex = 1 @@ -1302,7 +1302,7 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 108 + ClientHeight = 107 ClientWidth = 100 Font.Height = -13 ItemIndex = 1 @@ -1326,7 +1326,7 @@ object MainForm: TMainForm Width = 843 Anchors = [akTop, akLeft, akRight] Caption = 'Choose two files and click ''Compare Files''' - ClientHeight = 275 + ClientHeight = 274 ClientWidth = 839 Font.Height = -13 ParentFont = False @@ -1500,7 +1500,7 @@ object MainForm: TMainForm Width = 835 Anchors = [akLeft, akRight, akBottom] Caption = 'Summary' - ClientHeight = 156 + ClientHeight = 155 ClientWidth = 831 Font.Height = -13 ParentFont = False @@ -1529,7 +1529,7 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 108 + ClientHeight = 107 ClientWidth = 100 Font.Height = -13 ItemIndex = 1 @@ -1551,7 +1551,7 @@ object MainForm: TMainForm Width = 835 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'Compare two folders' - ClientHeight = 389 + ClientHeight = 388 ClientWidth = 831 DragMode = dmAutomatic Font.Height = -13 @@ -1856,7 +1856,7 @@ object MainForm: TMainForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 108 + ClientHeight = 107 ClientWidth = 100 Font.Height = -13 ItemIndex = 1 @@ -1878,7 +1878,7 @@ object MainForm: TMainForm Width = 847 Anchors = [akTop, akLeft, akRight] Caption = 'Base64 Decoder and Hasher' - ClientHeight = 593 + ClientHeight = 592 ClientWidth = 843 Color = clForm Font.Height = -13 @@ -2016,8 +2016,8 @@ object MainForm: TMainForm Top = 1 Width = 248 AutoSize = False - Caption = 'Copyright © 2011-2018 Ted Smith' - Font.Height = 12 + Caption = 'Copyright © 2011-2019 Ted Smith' + Font.Height = 16 Font.Style = [fsBold] ParentColor = False ParentFont = False @@ -2028,10 +2028,10 @@ object MainForm: TMainForm AnchorSideRight.Side = asrBottom Cursor = crHandPoint Left = 736 - Height = 13 + Height = 15 Hint = 'Click to open URL in browser' Top = 1 - Width = 170 + Width = 169 BorderSpacing.Right = 10 Caption = 'http://www.quickhash-gui.org' Font.Color = clBlue diff --git a/unit2.pas b/unit2.pas index f79ac1c..e72637f 100755 --- a/unit2.pas +++ b/unit2.pas @@ -2071,7 +2071,8 @@ procedure TMainForm.btnLoadHashListClick(Sender: TObject); HashListChooserDialog.Title := 'Choose exisiting text hash set...'; HashListChooserDialog.InitialDir := GetCurrentDir; - HashListChooserDialog.Filter := 'Text|*.txt'; + //HashListChooserDialog.Filter := 'Text|*.txt'; 'CSV|*.csv'; + HashListChooserDialog.Filter := 'Text files|*.txt;*.csv'; HashListChooserDialog.DefaultExt:= 'txt'; HashListChooserDialog.Options:= [ofReadOnly]; if HashListChooserDialog.Execute then