From c348abe15920cca6521c16a5999865e1c7341d92 Mon Sep 17 00:00:00 2001 From: Daniel Prado Velasco Date: Tue, 12 Sep 2023 21:51:39 +0200 Subject: [PATCH] Preparing version 1.8.0 Beta 6 as new release --- doc/BetaReleases_README.txt | 2 +- doc/Changes in 1.8.0 Beta1-6.txt | 498 ++++++++++++++++++++++++ doc/Changes in 1.8.0 Beta1-6_Details.7z | Bin 0 -> 14307 bytes doc/Changes in 1.8.0 Beta1.txt | 314 --------------- doc/Changes in 1.8.0 Beta2.txt | 119 ------ doc/Changes in 1.8.0 Beta3.txt | 47 --- doc/Changes in 1.8.0 Beta4.txt | 83 ---- doc/Changes in 1.8.0 Beta5.txt | 19 - doc/Changes in 1.8.0 Beta6.txt | 17 - doc/Comments on KNT file formats.txt | 33 +- doc/history.txt | 157 +++----- 11 files changed, 581 insertions(+), 708 deletions(-) create mode 100644 doc/Changes in 1.8.0 Beta1-6.txt create mode 100644 doc/Changes in 1.8.0 Beta1-6_Details.7z delete mode 100644 doc/Changes in 1.8.0 Beta1.txt delete mode 100644 doc/Changes in 1.8.0 Beta2.txt delete mode 100644 doc/Changes in 1.8.0 Beta3.txt delete mode 100644 doc/Changes in 1.8.0 Beta4.txt delete mode 100644 doc/Changes in 1.8.0 Beta5.txt delete mode 100644 doc/Changes in 1.8.0 Beta6.txt diff --git a/doc/BetaReleases_README.txt b/doc/BetaReleases_README.txt index c434a74..9b64b01 100644 --- a/doc/BetaReleases_README.txt +++ b/doc/BetaReleases_README.txt @@ -26,7 +26,7 @@ extract to a folder and then overwrite it with the files in the following archiv See #544: New option to keep backups at regular intervals (https://github.com/dpradov/keynote-nf/issues/544) - - - - - - - - - - - - - - - -* KeyNote_1.8.0 Beta4.zip +* KeyNote_1.8.0 Beta6.zip - KeyNote.exe - kntutils.dll - *.txt diff --git a/doc/Changes in 1.8.0 Beta1-6.txt b/doc/Changes in 1.8.0 Beta1-6.txt new file mode 100644 index 0000000..02b0f8b --- /dev/null +++ b/doc/Changes in 1.8.0 Beta1-6.txt @@ -0,0 +1,498 @@ + +Changes in 1.8.0 Beta 1 - Beta 6 (01 aug 2023 -- 06 sep 2023) +================================= + +* Adaptation from Borland Delphi 2006 to to Embarcadero Delphi CE 11.3 (Community Edition 11.3 Alexandria). + + I have abandoned some 3rdParty components/libraries, incorporated new releases of some of them, and patched many of the others. + In the case of UnRxLib (which I have used to replace RxLibrary), I have made a series of changes to several files, specially + RxRichEd.pas. Although the changes are marked as such, I include in this commit only the original files, and in the next commit + I will apply the changes (tested with all the rest of project uploaded in this actual commit). + + Along the way I have identified some errors present in actual version of KNT (and some minor improvements). Some of them have + been corrected during the process of adaptation to Delphi CE. But in others I have preferred not to correct them at this moment, + to not mixing them with all the changes necessary to this adaptation (many files, many changes...). I will make specific commits. + + I have decided to drop support for the 'Dart format'. In the case that someone needs to reuse a file in that format, can use + an older version of KeyNote to convert to normal KeyNote format. + + (More information in doc\README_SourceCode.txt and doc\README_News.txt) + +========== +* Find All: Improvements + + - Excerpts from the note of the matches found are displayed, where the searched words are highlighted + + - Searches will be much faster + Now the search is done directly on a string previously retrieved from the rich edit control, instead of continuous call to + RichEdit controls. The new search mechanism is much faster. + + - Added new option: "Current node and subtree" + + - The treatment of the options 'All the words' and 'Any of the words' is extended : + Now, results are shown that include all the words considered, and there may be more than one + result per node / note. + + - 'All the words': the first word found from the list provided is highlighted, as well + as those others that appear within the excerpt, to its right. If the last word found + within the identified match is not shown in the excerpt obtained for the first word + found, an additional excerpt for the last word is added, where all searched words + are highlighted. + + - 'Any of the words': Results are created that include, and highlight, all occurrences + of each of the words in the search term. New results are only added for those words + that are not visible within the previous excerpt. + + - Global option: Font size in Find All results (In Advanced | Other tab ) + + - Improved the display of node path in search results (when option "Show full node path in search results" is checked) + I recommend to check the option "Show full node path in search results". The text of the node with the match is now + highlighted in the path. + (Default value for "Show full node path in search results" is now True) + +- - - - - +* Changed: The option "Reverse order" it is used now only with the the option "Show full node path in status bar". + Node path in search results will always show top to bottom. + +* Fixed: The option "Show full node path in search results" was not used. + It was always used "Show full node path in status bar" instead. Now both are available and are independent. + + +========== +* New KNT Links, vinculated to markers, not only to caret position + + When marking a KNT location (Ctr+F6) the app will now insert a small hidden bookmark next to the text + identified as target. When inserting the link (Shift+F6) the new hyperlink will refer to the created bookmark, + and will locate it even though all the text could have been relocated (within the same note/node). + If the marker were eliminated, the caret position would be used, as before. + + This has forced to review multiple aspects of the application, mainly the text search (Find Next and Find All). + + (See a further explanation in the comment before the InsertOrMarkKNTLink method, in kn_LinksMng.pas) + + - If we are marking (CTR+F6) the start of a node or note (CaretPos = 0), no hidden marker + will be created. Link created after will always aim for that position 0. + + - Hint in status bar now shows the number of the new hidden mark created, as a reference. + It also remember us that we can use Undo to delete a new hidden mark (created by error) + + - Another hint in status bar shows the number of the hidden mark we are pointing it (if any) + ( Note: hidden mark numbers start by 1 and are specific to each node ) + + + * IMPORTANT: a .knt file modified with the last 1.8.0 version, where we used Ctr+F6 and Shift+F6, will + have little fragments of hidden text besides the text where the marker is located. + If the file is opened with an older version: + - The links will function still ok but using the old behaviour based in caret position. + - If on the text including this hidden marks is applied Paste font attributes (or the button 'Copy format'), + or certain edit functions like 'Change Case' or 'White Space' (among others), the hidden characters will + be made visible. + For example, if the text "The new Beta is available" has a marker pointing to word "Beta", it could + change to something like: "The new B1Beta is available". Ascii characters #11 (DC1) y #12 (DC2) + will be shown as little squares. (B1: B: Bookmark "1") + - When searching text that includes hidden marks, the located pattern could be affected. + For example, if we serch for "new Beta", KNT will not be able to find a coincidence. + - Also, if text including this hidden marks is copied to other sites inside KNT or outside, the hidden + marks will be copied also. If the file is then modified with new version, the links that pointed to that + text could now jump to the new pasted text, if it is upper in the node. + - In general, that hidden characters could 'emerge' in different situations + + +========== +* Redesigned navigation history mechanism + + - Default navigation is now global and so we can move between the nodes of a note but also between notes + - Local navigation (traveling only active note's history) is also possible, clicking on the toolbar button with Ctrl. + - Every jump from an internal keynote link will generate history, not only those that go to another node in the same + note. + - Bookmark jumps will also generate history + - Standard RTF notes (not multi-lvel tree notes) will have its own history navigation + - Related buttons have been moved to main toolbar. + Their color and hint indicates if global and/or local history is available in that direction + + (An explanation of the new behaviour is available in the comment before 'NavigateInHistory', in kn_LinksMng.pas) + + +========== +* New: Added 'KeyNote' as target format in File/Export... + + Now it is easy to create new KeyNote files from current file, with the export mechanism: + + - Including only active note + - Including only current node and subtree of the active note + - Including only checked nodes in active note + - Including selected notes + - Including all notes (this is equivalent to File/Copy To.., but with the possibility to select the file name) + + In all that cases it is possible to consider only not hidden nodes. For example, if we run 'Find All' with + 'Filter Tree note' option, we can then generate a new .knt with the nodes that include the searched pattern. + + The created .knt file will have the same properties as the original (native, compressed, ..) + + +========== +* Improved Alarm management window. Revised design and usability + + +========== +* Added a new property, "Default Zoom": Allows to use a default value other than 100% + Can be defined as default for the current file or for all the files. + +* Changed behaviour of Zoom Text action. + Usually new zoom value is set by selecting one of the items of the combo. In this case, clicking in one value + will apply it ALL notes by default. If Ctrl is down while clicking, it will apply only to active note. + If the new zoom value is typed in the control, pressing Intro will apply it to all notes. Pressing Ctrl+Intro + will do nothing. To apply a typed zoom value only to the active note, click on the note while pressing Ctrl. + + Double click resets the zoom to %, as before. Now it is controlled also by Ctrl key. + + If pressing escape inside zoom combo, active note will gain focus, and no change will be done in any zoom. + Deleting the combo will be similar to pressing Esc. + + Ctrl will control also the menu options 'Zoom in' and 'Zoom out'. + +- - - - - +* New: View | Alternative Margins + + Allows switching between default (minimum) and defined margins in .ini + (As suggested in https://github.com/dpradov/keynote-nf/issues/602#issuecomment-1685401368 ) + New options define text margins in pixels: + + MarginAltLeft =80 + MarginAltRight=80 + +- - - - - +* New: pressing [Ctrl] + will temporarily preserve editor width, reducing the application window width + + When the user hides the Tree Panel pressing Ctrl (usually: Ctr + Shift+F11 or Ctrl + [View | Tree Panel] ) then, + instead of letting the editor panel grow to the left occuping the width of the tree panel, the application window will + reduce its width temporarily so that the editor maintain its width and position. + + Once shown the Tree panel again, the application window's size and position will be restored. + + If, after hiding the tree panel in this way (the window's width is now reduced), the user selects another note, then + the application will automatically make the tree panel visible and restore the aplication window width, before changing + to the other note. + + Opening onother file or closing the application while the windows's width is reduced, will restore it to it's correct size. + + This functionality can be disabled in keynote.ini, with: IgnoreCtrHideTrePanel = 1 + +- - - - - +* Fixed: High DPI displays. The application should scale correctly based on OS settings + Set 'AppDPIAwarenessMode' in the app manifest as 'GDI Scaling' + Ref: https://www.softacom.com/blog/windows_application_manifest_in_rad_studio/ + +- - - - - +* Improvement in the design of the form Configuration Options + + +========== +* Optimization in file open/save, mainly in native format + Reduced load and save times, more notably in native format, where it's not needed to + compress/decompress or encrypt/decrypt the file content. + + ** Note: Although reduction in time obtained for compressed format files is much less that for + native format, I want to recall that it could be more convenient to use that format instead + of native format, specially if the file contains images, because of the way images are saved in RTF, + at least in RichEdit control: images are saved in plain ascii, as hexadecimal values. + + I recommend seeing the results of some tests in which I compare the native format with the three options + of the compressed format: Max, Default, Fastest + -> "Comments on KNT file formats.txt" + +- - - - - +* Fixed possibly difficulty on saving, if file is located in a externally synchronized folder (for example with Dropbox) + The way backup was realized lead to a little interval where the actual file was moved to the backup folder. + That little gap could be observed by Dropbox, that detected the movement of the file and asked us if we want to delete the file. + (more info within the changes: knt_NoteFileMng: NoteFileSave) + + - Minor corrections in the process of saving. Revised some of the messages shown in case of error + - Revised some hints in several options of the configuration form, related with file save and backup, + emphasizing the convenience of selecting the option "Backup at regular intervals". + + +========== +* Fixes and changes in URL actions: + - Fixed: 'Open in New window' didn't open URL in a new window (worked equal to 'Open') + - Removed option (in Actions | URL actions ) "Shift key must be held down when URL is clicked" + (It didn't work. URL Click is not raised when Shift is down) + +* Improved click options on hyperlinks + Now right-click on a hyperlink will always show the prompt window (to edit, modify or open) + Added a new option to define the action on CTRL + Click + +* Fixed: Option "Use system default web browser" was not working + + + +========== +** Clipboard Capture / Web Clip / Paste external + +* Try to offer RTF Format in clipboard whenever possible (from HTML format) + (as it has been done with 'Paste Special...') + + So far, if we just pasted normal from a web page, without being selected 'Paste external as Plain text' + we might end up pasting completely plain text, while selecting 'Paste external as Plain text' we + might paste more or rich RTF (depending on 'Plain text mode'). Confusing. + This not ocurred when using Clipboard Capture or Web Clip, where conversion from HTML was always needed + + More information in the comment to the procedure PasteBestAvailableFormat, kn_EditorUtils + +- - - - - +* When pasting from HTML (web pages), the current font and size in the active editor will be used as default values, + instead of the usual Times New Roman 12. + +- - - - - +* When converting from HTML to RTF, on pasting from web pages, last aditional line break will be removed + + In most cases, when pasting from web pages, the RTF obtained after convert from HTML adds at least an extra final line break. + Now it is removed. This way the result obtained when configuring the divider string (defined in Clipboard Capture or Web Clip), + is more clear. + +- - - - - +* Fixed: Pasting as plain text could move the caret several characters before its correct position + + In solution to issue #539 (Pasting as plain text moves the caret beyond pasted text when it includes several lines) + this problem was partially mitigated and caused, on certain occasions, the opposite effect, placing the caret + ahead of the position that corresponds to it. + + Now I have changed the way the plain text is pasted, and I think it has finally been correctly resolved. + +- - - - - +* Fixed: copying and pasting from certain web pages can produce nothing or truncate some text + + KeyNote will paste from web page as plain text (without any formatting) when detected that conversion from HTML to RTF it is no ok + + It can occur that the conversion to RTF (obtained with TWebBrowser) from the HTML copied to the clipboard from certain pages + are totally o partially incorrect (even MSWord can't convert correctly that fragments). + I have detected this problem with the following site, whose html seems to be odd: stackoverflow.com. But it could happen + with other site/s. + + For example, consider the following URLs and try to copy and paste several paragraphs altogether. + https://stackoverflow.com/questions/46991729/how-to-load-a-stringstream-with-utf8-characters-to-a-stringlist-in-android + https://stackoverflow.com/questions/11122197/why-does-memo-lines-use-tstrings-instead-of-tstringlist + + Most of them will produce '<>' or '', others '<<<' or something similar and a few can truncate some text. + If in this examples we copy (and paste) only fragments of certain paragraphs or just snippets of code, it seems to be ok. + + +--------------- +** Improvements on Clipboard Capture / Web Clip capture + + - Added new token: '%%' + + Added a new token (%%) that delimits a divider string for the second and following consecutive paste + from the same page (same URL). + KNT will remember the last URL it was pasted from in the current [Clipboard Capture] session. + + This allows, for example, to include the URL and title only before the first fragment we paste from a certain web page. + Next (consecutive) fragments of the same URL can include any of the tokens, but normally we will only need a simple + delimiter (like '- - - '). + + Predefined divider strings have been updated, including this new token and allowing this behaviour. + It is of course possible to create a custom divider, and you don't have to use the new token in it. + +- - - - - + - Ensure to include Title for URL (%S, %s, %U) + + So far, when pasting with Clipboard Capture (and 'Include source URL' selected) or with Web Clip, from a web page, + only the URL was include, no the title. At the beginning some browsers included that information on the clipboard, + but currently it does not. + Now KeyNote NF will try to get the title using WebBrowser (offline, using cache). + Although it tries to process as little HTML text as possible to get it, the time it takes can depend on the page. + Normally it wil be very fast, but there are very heavy web pages on witch it can takes a little more time. + For this reason, the application includes now three tokens to referentiate source URL in the divider string: + + '%S' insert Source URL (with title) + '%s' insert source URL (with title, limited waiting time) + '%U' insert source URL (without title) + + With '%S', it will get the title for the URL, without time limit (6 seconds, just for security) + With '%s', If title is not figured out in less that 2 seconds (normally will be much faster) only URL will be used + With '%U', KeyNote will only show URL, not title (even though it's already available (*) ) + + (*) A small cache will be used for titles, in case you need to paste several times, from the same pages. + So, even certain delays will only apply to the first capture on a certain URL. + + There is more info on on Clip Web and Clipboard Capture on: + 'Improvements on Clip Web and Clipboard Capture #532' (https://github.com/dpradov/keynote-nf/issues/532) + +- - - - - + * Title from YouTube page: exception to the normal paste behaviour + + From now it seems not possible to obtain the title of a page of YouTube, because the html returned by TWebBrowser + in this case does'nt contain the final html page. + So, KNT will not try to guess title if URL begins with https://www.youtube.com + As a easy shortcut to create a hyperlink that includes the URL and the caption of the video, we can do simply: + - Select only the caption of the video (just click three times in one word of the video title) + - Copy Paste (or Web Clip) + + If the text selected includes only 1 line and it hasn't more that 100 characters, then it wil be assumed as the title + and a normal hyperlink with Youtube URL and that title will be inserted. + + (Note: https://www.smperth.com/resources/youtube/youtube-character-limit/ ) + +- - - - - + * Titles from web pages: convert HTML Ascii codes + + Some titles are available in UTF8, but others express special characters with HTML Ascii codes of the form "ϧ" + For example, from the page 'https://www.microsoft.com/es-es/windows/windows-11' we can obtain the following title: + + "Descubre Windows 11: la versión más reciente de Windows | Microsoft" + + Now,it is converted to: + "Descubre Windows 11: la versión más reciente de Windows | Microsoft" + +- - - - - + - Added new token: source server/domain (%d) + + If when pasting we are including source, the URL is not visible (*) and the the server/domain is not shown + in the title (ignoring spaces and case), then the new token '%d' (case sensitive) will show the server in square brackets. + Some examples: + + 'https://martinfowler.com/eaaCatalog/', 'Catalog of Patterns of Enterprise Application Architecture' => [martinfowler.com] + 'https://stackoverflow.com/questions/1549145/case-insensitive-pos', 'delphi - case insensitive Pos - Stack Overflow' => '' + 'https://www.youtube.com/watch?v=r0R6gMw2s44', 'El Círculo de Quintas: Una explicación detallada | Versión 2.0' => [YouTube] + + (*) URL will be visible, if divider uses %U token or we are pasting in a PlainText note, for example + +- - - - - + * Revised and improved predefined dividers + +- - - - - +* Adjustment in the option "URLOnly" + + Option only modifiable from .INI, [Clipboard capture]. When enabled (default option) and we copied at most one word, + that text will be ignored and instead of it, the URL (and title if available) will be shown. + + Improvement in the way it is decided to apply or not this option (depending on text selected) + Also, URL pasted this way adds line break + + +--------------- +** Clipboard paste / copy / cut + +* Fixed bug that could affect the paste action, when determining if normal or plain paste should be applied: + - When calculating if two strings copied to the clipboard are identical, appying CRC32, the length considered + were not correct. It should be expressed in bytes, not in characters (different in unicode or WideString) + - That comparison is considered, for example, to determine if the text is copied from outside KeyNote. + So, in certain cases the text could be pasted as normal, not plain, even if the option "Paste external + as plain text" was set. + +- - - - - +* Fixed bug that made that the option "Ignore duplicate clips" were ignored + Option configurable in: + Advanced / Clipboard capture + keynote.ini: [Clipboard capture] TestDupClips + +- - - - - +* Fixed: An exception "Cannot open clipboard: Access Denied" could occasionally be raised + In that cases the message could be accepted without closing the app, but could be annoying. + +- - - - - +* Fixed: The option "Limited size to", in Advanced/Clipboard ("Maximum length of text to capture, in bytes (when paste as plain text)") + should only be considered for Clipboard Capture, not for normal plain paste (nor Web clip) + + +========== +* Several fixes and enhancements related to 'Note properties...' and 'Default Settings...' + + - Changes in design and functionality in "Default settings.." (F6) and "Note properties.." (F4) + - Only uses two tabs, "Note setting" and "Tree setting" + - Allows you to use the current settings of a note tree as the default settings + for all files or all notes in current file + - The 'Inherit BG color from active node' property state is shown to clarify the reason for the color being + displayed for the note (the logic is now the opposite) + - Some small informative notes are added to clarify issues that can be confusing + + - Modified several captions and hints to avoid possible confusion between color of nodes and color of editor + - Changed: Moved the option 'Inherit BG color from active node' from 'Tree panel' section to 'Rich Text editor'. + + - Added: Font and BG color can be changed for ALL tree panels at once + Can be changed from active note (Note | Note properties...) or from default settings (Tools | Default settings...) + In 'Tree settings' tab: "Apply to ALL tree notes" + + - Fixed: modifying the properties of a note (Note properties..[F4]) could cause font formatting to be lost in certain + situations (bug existing from version 1.6.5). + It seems to always happened when changing the properties of a note after the word wrap state on that note had + been changed (on the selected node or just by traversing nodes with different WodWrap state). + Now it is solved and the word wrap option is also included in "Note properties..", not only in "Default settings.." + Changes in the default font properties of a note should affect only to new nodes, not to existing nodes + (exception: plain text only notes) + + - Fixed: sometimes the defined default font properties of the note where ignored on new nodes. + The text written in the new node didn't use the correct font. + + - Fixed: Changes in tree font didn't update correctly + Font changes in the tree (from 'Note Properties...') were not reflected on it on many occasions, + precisely those in which we had not modified the background color. + It was also happening that the font changes, when they were shown, did not give rise, many times, + to a correct resizing of the height of each item. + (These problems were of tree refresh. Saving and reopening the file would show up correctly.) + + - Fixed: Sometimes changes from Note Properties (F4) did not modify the status of the file (to modified) + (eg. changing the editor font size for new nodes), or did not modify the status of the Save toolbar button + +* Fixed: Making bold a tree node din't maintain other possible styles of the default TV font + + +========== +* Fixed: Option "Autoregister file type" now works ok without any special permissions + + Now it is registered for current user, in HKEY_CURRENT_USER. Registered types: .knt, .kne, .knm, .knl + (HKEY_LOCAL_MACHINE / HKEY_CLASSES_ROOT: + On the newest Windows versions, you need admin rights to register a file type for all the machine users) + +* Fixed: Change in read-only state of a note => save button state + Setting a note to read-only was marking the file as modified, but was not reflected in the save button + + +========== +* Fixed: Ensure that all nodes in a RTF tree note are saved in RTF format, + and all nodes in a plain text only tree note are saved in plain format. + + when dropping a file with plain text into a new node of a RTF Tree, or when dragging and dropping a node with plain content + (from a tree configured as such) onto a RTF tree, We must ensure that the node's stream is loaded with it's RTF + conversion, to avoid ending up saving that node's stream content in plain format to the .knt file when saving + (could be problematic when reading the .knt file). + Something similar is needed in the opposite case (RTF content into a plain tree), although in this case the only problematic + case would be to import a plain file dropping it into a new node of a plain tree (more information in the comments to the + changes). + +* Fixed: Text files imported as a new note note could be saved plain, not RTF + + This problem exists in KNT from the beginning, but with the changes included from version 1.8.0 + could be much more problematic, when loading the .knt file + + When importing a file with plain text into a new note, we must ensure that the note's stream is loaded with its RTF + conversion, to avoid ending up saving that note's stream content in plain format to the .knt file when saving. + This could occur if we didn't modify the text of that new note before saving the file. + + +========== +* Modification in RxRichEd to change the way a retry is made when the load of stream detects an error + + It will retry with no TEncoding conversion, setting only SF_TEXT (no SF_UNICODE). The stream will be + supposed to be in UTF8 format, with BOM. RichEdit will manage it correctly. + This is how TRichEditStrings.LoadFromStream (in RxRichEd with KeyNote) worked in previous versions. + Now those symbols incorrrectly converted (with previous versions) wil be ignored, but the rest will be + shown correctly as UTF8. + (Resolves issue #610) + + +========== + +* Fixed possible exceptions when no file was loaded + +* Changes in log management + + +========== +* At the moment, the Send Mail functionality will not be included in KNT + + It would be necessary to update it to manage correctly authentication (username and password / smtpAuthXOAuth2 / smtpAuthOAuthBearer), + and I think that this is not, probably, a demanded feature of KeyNote. + + Besides, with the update to 'ICS - Internet Component Suite - V8.70', by Francois Piette, it implies + almost 600kB extra in executable file's size. diff --git a/doc/Changes in 1.8.0 Beta1-6_Details.7z b/doc/Changes in 1.8.0 Beta1-6_Details.7z new file mode 100644 index 0000000000000000000000000000000000000000..c9b0b7b527ef56b525bbb50483f1ee451eb94a16 GIT binary patch literal 14307 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 R5C8xSf=UVjg1=Od003gs$h!al literal 0 HcmV?d00001 diff --git a/doc/Changes in 1.8.0 Beta1.txt b/doc/Changes in 1.8.0 Beta1.txt deleted file mode 100644 index 5106572..0000000 --- a/doc/Changes in 1.8.0 Beta1.txt +++ /dev/null @@ -1,314 +0,0 @@ - - -Changes in 1.8.0 Beta 1 (01/08/2023) -======================= - --------------- -* Find All: Improvement in the output of results - - - Excerpts from the note of the matches found are displayed, where the searched words are highlighted - - - The treatment of the options 'All the words' and 'Any of the words' is extended : - Now, results are shown that include all the words considered, and there may be more than one - result per node / note. - - - 'All the words': the first word found from the list provided is highlighted, as well - as those others that appear within the excerpt, to its right. If the last word found - within the identified match is not shown in the excerpt obtained for the first word - found, an additional excerpt for the last word is added, where all searched words - are highlighted. - - - 'Any of the words': Results are created that include, and highlight, all occurrences - of each of the words in the search term. New results are only added for those words - that are not visible within the previous excerpt. - ----------------- -* Search will be faster from the very beginning - Note and Node 'TextPlain' variables, are now initialized automatically - ----------------- -* New KNT Links, vinculated to markers, not only to caret position -> Improvement in search - - When marking a KNT location (Ctr+F6) the app will now insert a small hidden bookmark next to the text - identified as target. When inserting the link (Shift+F6) the new hyperlink will refer to the created bookmark, - and will locate it even though all the text could have been relocated (within the same note/node). - If the marker were eliminated, the caret position would be used, as before. - - This has forced to review multiple aspects of the application, mainly the text search (Find Next and Find All). - - Now the search is done directly on a string previously retrieved from the rich edit control. - The new search mechanism is much faster. The first search with Find All can take about the same time as before, - (at least for now...) but consecutive searches will now be almost instantaneous, whereas currently each search incurred - the same amount of time. - - (See a further explanation in the comment before the InsertOrMarkKNTLink method, in kn_LinksMng.pas) - - * IMPORTANT: a .knt file modified with the last 1.8.0 version, where we used Ctr+F6 and Shift+F6, will - have little fragments of hidden text besides the text where the marker is located. - If the file is opened with an older version: - - The links will function still ok but using the old behaviour based in caret position. - - If on the text including this hidden marks is applied Paste font attributes (or the button 'Copy format'), - or certain edit functions like 'Change Case' or 'White Space' (among others), the hidden characters will - be made visible. - For example, if the text "The new Beta is available" has a marker pointing to word "Beta", it could - change to something like: "The new B1Beta is available". Ascii characters #11 (DC1) y #12 (DC2) - will be shown as little squares. (B1: B: Bookmark "1") - - When searching text that includes hidden marks, the located pattern could be affected. - For example, if we serch for "new Beta", KNT will not be able to find a coincidence. - - Also, if text including this hidden marks is copied to other sites inside KNT or outside, the hidden - marks will be copied also. If the file is then modified with new version, the links that pointed to that - text could now jump to the new pasted text, if it is upper in the node. - - In general, that hidden characters could 'emerge' in different situations - - ----------------- -* Modification in RxRichEd to change the way a retry is made when the load of stream detects an error - It will retry with no TEncoding conversion, setting only SF_TEXT (no SF_UNICODE). The stream will be - supposed to be in UTF8 format, with BOM. RichEdit will manage it correctly. - This is how TRichEditStrings.LoadFromStream (in RxRichEd with KeyNote) worked in previous versions. - Now those symbols incorrrectly converted (with previous versions) wil be ignored, but the rest will be - shown correctly as UTF8. - (Resolves issue #610) - ----------------- -* New: Added 'KeyNote' as target format in File/Export... - - Now it is easy to create new KeyNote files from current file, with the export mechanism: - - - Including only active note - - Including only current node and subtree of the active note - - Including only checked nodes in active note - - Including selected notes - - Including all notes (this is equivalent to File/Copy To.., but with the possibility to select the file name) - - In all that cases it is possible to consider only not hidden nodes. For example, if we run 'Find All' with - 'Filter Tree note' option, we can then generate a new .knt with the nodes that include the searched pattern. - - The created .knt file will have the same properties as the original (native, compressed, ..) - ----------------- -* Find All: Added new option: "Current node and subtree" - ----------------- -* Redesigned navigation history mechanism - - - Default navigation is now global and so we can move between the nodes of a note but also between notes - - Local navigation (traveling only active note's history) is also possible, clicking on the toolbar button with Ctrl. - - Every jump from an internal keynote link will generate history, not only those that go to another node in the same - note. - - Bookmark jumps will also generate history - - Standard RTF notes (not multi-lvel tree notes) will have its own history navigation - - Related buttons have been moved to main toolbar. - Their color and hint indicates if global and/or local history is available in that direction - - (An explanation of the new behaviour is available in the comment before 'NavigateInHistory', in kn_LinksMng.pas) - ----------------- -* At the moment, the Send Mail functionality will not be included in KNT - - It would be necessary to update it to manage correctly authentication (username and password / smtpAuthXOAuth2 / smtpAuthOAuthBearer), - and I think that this is not, probably, a demanded feature of KeyNote. - - Besides, with the update to 'ICS - Internet Component Suite - V8.70', by Francois Piette, it implies - almost 600kB extra in executable file's size. - ----------------- -* Clipboard Capture / Web Clip. Added new token: '%%' - - Added a new token (%%) that delimits a divider string for the second and following consecutive paste - from the same page (same URL). - KNT will remember the last URL it was pasted from in the current [Clipboard Capture] session. - - This allows, for example, to include the URL and title only before the first fragment we paste from a certain web page. - Next (consecutive) fragments of the same URL can include any of the tokens, but normally we will only need a simple - delimiter (like '- - - '). - - Predefined divider strings have beend updated, including this new token and allowing this behaviour. - It is of course possible to create a custom divider, and you don't have to use the new token in it. - ----------------- -* When converting from HTML to RTF, on pasting from web pages, last aditional line break will be removed - - In most cases, when pasting from web pages, the RTF obtained after convert from HTML adds at least an extra final line break. - Now it is removed. This way the result obtained when configuring the divider string (defined in Clipboard Capture or Web Clip), - is more clear. - ----------------- -* Fixed: Pasting as plain text could move the caret several characters before its correct position - - In solution to issue #539 (Pasting as plain text moves the caret beyond pasted text when it includes several lines) - this problem was partially mitigated and caused, on certain occasions, the opposite effect, placing the caret - ahead of the position that corresponds to it. - - Now I have changed the way the plain text is pasted, and I think it has finally been correctly resolved. - ----------------- -* Titles from web pages: convert HTML Ascii codes - - Some titles are available in UTF8, but others express special characters with HTML Ascii codes of the form "ϧ" - For example, from the page 'https://www.microsoft.com/es-es/windows/windows-11' we can obtain the following title: - - "Descubre Windows 11: la versión más reciente de Windows | Microsoft" - - Now,it is converted to: - "Descubre Windows 11: la versión más reciente de Windows | Microsoft" - --------- -* When pasting from HTML (web pages), the current font and size in the active editor will be used as default values, - instead of the usual Times New Roman 12. - ----------------- -* Fixed: copying and pasting from certain web pages can produce nothing or truncate some text - - KeyNote will paste from web page as plain text (without any formatting) when detected that conversion from HTML to RTF it is no ok - - It can occur that the conversion to RTF (obtained with TWebBrowser) from the HTML copied to the clipboard from certain pages - are totally o partially incorrect (even MSWord can't convert correctly that fragments). - I have detected this problem with the following site, whose html seems to be odd: stackoverflow.com. But it could happen - with other site/s. - - For example, consider the following URLs and try to copy and paste several paragraphs altogether. - https://stackoverflow.com/questions/46991729/how-to-load-a-stringstream-with-utf8-characters-to-a-stringlist-in-android - https://stackoverflow.com/questions/11122197/why-does-memo-lines-use-tstrings-instead-of-tstringlist - - Most of them will produce '<>' or '', others '<<<' or something similar and a few can truncate some text. - If in this examples we copy (and paste) only fragments of certain paragraphs or just snippets of code, it seems to be ok. - ----------------- -* Adjustment in the option "URLOnly" - - Option only modifiable from .INI, [Clipboard capture]. When enabled (default option) and we copied at most one word, - that text will be ignored and instead of it, the URL (and title if available) will be shown. - - Improvement in the way it is decided to apply or not this option (depending on text selected) - Also, URL pasted this way adds line break - ----------------- -* Clipboard Capture / Web Clip. Several improvements - - - Added new token: source server/domain - - If when pasting we are including source, the URL is not visible (*) and the the server/domain is not shown - in the title (ignoring spaces and case), then the new token '%d' (case sensitive) will show the server in square brackets. - Some examples: - - 'https://martinfowler.com/eaaCatalog/', 'Catalog of Patterns of Enterprise Application Architecture' => [martinfowler.com] - 'https://stackoverflow.com/questions/1549145/case-insensitive-pos', 'delphi - case insensitive Pos - Stack Overflow' => '' - 'https://www.youtube.com/watch?v=r0R6gMw2s44', 'El Círculo de Quintas: Una explicación detallada | Versión 2.0' => [YouTube] - - (*) URL will be visible, if divider uses %U token or we are pasting in a PlainText note, for example - ----------------- -* Revised and improved predefined dividers - ----------------- -* Title from YouTube page: exception to the normal paste behaviour - - From now it seems not possible to obtain the title of a page of YouTube, because the html returned by TWebBrowser - in this case does'nt contain the final html page. - So, KNT will not try to guess title if URL begins with https://www.youtube.com - As a easy shortcut to create a hyperlink that includes the URL and the caption of the video, we can do simply: - - Select only the caption of the video (just click three times in one word of the video title) - - Copy Paste (or Web Clip) - - If the text selected includes only 1 line and it hasn't more that 100 characters, then it wil be assumed as the title - and a normal hyperlink with Youtube URL and that title will be inserted. - - (Note: https://www.smperth.com/resources/youtube/youtube-character-limit/ ) - ----------------- -* Improvements on Clipboard Capture / Web Clip capture: ensure to include Title for URL - - So far, when pasting with Clipboard Capture (and 'Include source URL' selected) or with Web Clip, from a web page, - only the URL was include, no the title. At the beginning some browsers included that information on the clipboard, - but currently it does not. - Now KeyNote NF will try to get the title using WebBrowser (offline, using cache). - Although it tries to process as little HTML text as possible to get it, the time it takes can depend on the page. - Normally it wil be very fast, but there are very heavy web pages on witch it can takes a little more time. - For this reason, the application includes now three tokens to referentiate source URL in the divider string: - - '%S' insert Source URL (with title) - '%s' insert source URL (with title, limited waiting time) - '%U' insert source URL (without title) - - With '%S', it will get the title for the URL, without time limit (6 seconds, just for security) - With '%s', If title is not figured out in less that 2 seconds (normally will be much faster) only URL will be used - With '%U', KeyNote will only show URL, not title (even though it's already available (*) ) - - (*) A small cache will be used for titles, in case you need to paste several times, from the same pages. - So, even certain delays will only apply to the first capture on a certain URL. - - There is more info on on Clip Web and Clipboard Capture on: - 'Improvements on Clip Web and Clipboard Capture #532' (https://github.com/dpradov/keynote-nf/issues/532) - ----------------- -* Try to offer RTF Format in clipboard whenever possible (from HTML format) - (as it has been done with 'Paste Special...') - - So far, if we just pasted normal from a web page, without being selected 'Paste external as Plain text' - we might end up pasting completely plain text, while selecting 'Paste external as Plain text' we - might paste more or rich RTF (depending on 'Plain text mode'). Confusing. - This not ocurred when using Clipboard Capture or Web Clip, where conversion from HTML was always needed - - More information in the comment to the procedure PasteBestAvailableFormat, kn_EditorUtils - ----------------- -* Fixed possibly difficulty on saving, if file is located in a externally synchronized folder (for example with Dropbox) - The way backup was realized lead to a little interval where the actual file was moved to the backup folder. - That little gap could be observed by Dropbox, that detected the movement of the file and asked us if we want to delete the file. - (more info within the changes: knt_NoteFileMng: NoteFileSave) - - - Minor corrections in the process of saving. Revised some of the messages shown in case of error - - Revised some hints in several options of the configuration form, related with file save and backup, - emphasizing the convenience of selecting the option "Backup at regular intervals". - ----------------- -* Fixed: Ensure that all nodes in a RTF tree note are saved in RTF format, - and all nodes in a plain text only tree note are saved in plain format. - - when dropping a file with plain text into a new node of a RTF Tree, or when dragging and dropping a node with plain content - (from a tree configured as such) onto a RTF tree, We must ensure that the node's stream is loaded with it's RTF - conversion, to avoid ending up saving that node's stream content in plain format to the .knt file when saving - (could be problematic when reading the .knt file). - Something similar is needed in the opposite case (RTF content into a plain tree), although in this case the only problematic - case would be to import a plain file dropping it into a new node of a plain tree (more information in the comments to the - changes). - ----------------- -* Fixed: The option "Limited size to", in Advanced/Clipboard ("Maximum length of text to capture, in bytes (when paste as plain text)") - should only be considered for Clipboard Capture, not for normal plain paste (nor Web clip) - ----------------- -* Improvement in the design of the form Configuration Options - ----------------- -* Fixed bug that could affect the paste action, when determining if normal or plain paste should be applied: - - When calculating if two strings copied to the clipboard are identical, appying CRC32, the length considered - were not correct. It should be expressed in bytes, not in characters (different in unicode or WideString) - - That comparison is considered, for example, to determine if the text is copied from outside KeyNote. - So, in certain cases the text could be pasted as normal, not plain, even if the option "Paste external - as plain text" was set. - ----------------- -* Fixed bug that made that the option "Ignore duplicate clips" were ignored - Option configurable in: - Advanced / Clipboard capture - keynote.ini: [Clipboard capture] TestDupClips - ----------------- -* Adaptation from Borland Delphi 2006 to to Embarcadero Delphi CE 11.3 (Community Edition 11.3 Alexandria). - - I have abandoned some 3rdParty components/libraries, incorporated new releases of some of them, and patched many of the others. - In the case of UnRxLib (which I have used to replace RxLibrary), I have made a series of changes to several files, specially - RxRichEd.pas. Although the changes are marked as such, I include in this commit only the original files, and in the next commit - I will apply the changes (tested with all the rest of project uploaded in this actual commit). - - Along the way I have identified some errors present in actual version of KNT (and some minor improvements). Some of them have - been corrected during the process of adaptation to Delphi CE. But in others I have preferred not to correct them at this moment, - to not mixing them with all the changes necessary to this adaptation (many files, many changes...). I will make specific commits. - - I have decided to drop support for the 'Dart format'. In the case that someone needs to reuse a file in that format, can use - an older version of KeyNote to convert to normal KeyNote format. - - (More information in doc\README_SourceCode.txt and doc\README_News.txt) - diff --git a/doc/Changes in 1.8.0 Beta2.txt b/doc/Changes in 1.8.0 Beta2.txt deleted file mode 100644 index e68087d..0000000 --- a/doc/Changes in 1.8.0 Beta2.txt +++ /dev/null @@ -1,119 +0,0 @@ - - -Changes in 1.8.0 Beta 2 (19/08/2023) -======================= - -* Fixed: High DPI displays. The application should scale correctly based on OS settings - Set 'AppDPIAwarenessMode' in the app manifest as 'GDI Scaling' - Ref: https://www.softacom.com/blog/windows_application_manifest_in_rad_studio/ - -* Added a new property, "Default Zoom": Allows to use a default value other than 100% - Can be defined as default for the current file or for all the files. - -* Changed behaviour of Zoom Text action. - Usually new zoom value is set by selecting one of the items of the combo. In this case, clicking in one value - will apply it ALL notes by default. If Ctrl is down while clicking, it will apply only to active note. - If the new zoom value is typed in the control, pressing Intro will apply it to all notes. Pressing Ctrl+Intro - will do nothing. To apply a typed zoom value only to the active note, click on the note while pressing Ctrl. - - Double click resets the zoom to %, as before. Now it is controlled also by Ctrl key. - - If pressing escape inside zoom combo, active note will gain focus, and no change will be done in any zoom. - Deleting the combo will be similar to pressing Esc. - - Ctrl will control also the menu options 'Zoom in' and 'Zoom out'. - -- - - - - - - - - - - - -* New option: Font size in Find All results - In Advanced | Other tab - -* Improved the display of node path in search results (when option "Show full node path in search results" is checked) - I recommend to check the option "Show full node path in search results". The text of the node with the match is now - highlighted in the path. - (Default value for "Show full node path in search results" is now True) - -* Changed: The option "Reverse order" it is used now only with the the option "Show full node path in status bar". - Node path in search results will always show top to bottom. - -* Fixed: The option "Show full node path in search results" was not used. - It was always used "Show full node path in status bar" instead. Now both are available and are independent. - -* Fixed: Find All with the option 'Current node and subtree' could ignore nodes from some point in certain situations - -- - - - - - - - - - - - -* Several fixes and enhancements related to 'Note properties...' and 'Default Settings...' - - - Changes in design and functionality in "Default settings.." (F6) and "Note properties.." (F4) - - Only uses two tabs, "Note setting" and "Tree setting" - - Allows you to use the current settings of a note tree as the default settings - for all files or all notes in current file - - The 'Inherit BG color from active node' property state is shown to clarify the reason for the color being - displayed for the note (the logic is now the opposite) - - Some small informative notes are added to clarify issues that can be confusing - - - Modified several captions and hints to avoid possible confusion between color of nodes and color of editor - - Changed: Moved the option 'Inherit BG color from active node' from 'Tree panel' section to 'Rich Text editor'. - - - Added: Font and BG color can be changed for ALL tree panels at once - Can be changed from active note (Note | Note properties...) or from default settings (Tools | Default settings...) - In 'Tree settings' tab: "Apply to ALL tree notes" - - - Fixed: modifying the properties of a note (Note properties..[F4]) could cause font formatting to be lost in certain - situations (bug existing from version 1.6.5). - It seems to always happened when changing the properties of a note after the word wrap state on that note had - been changed (on the selected node or just by traversing nodes with different WodWrap state). - Now it is solved and the word wrap option is also included in "Note properties..", not only in "Default settings.." - Changes in the default font properties of a note should affect only to new nodes, not to existing nodes - (exception: plain text only notes) - - - Fixed: sometimes the defined default font properties of the note where ignored on new nodes. - The text written in the new node didn't use the correct font. - - - Fixed: Changes in tree font didn't update correctly - Font changes in the tree (from 'Note Properties...') were not reflected on it on many occasions, - precisely those in which we had not modified the background color. - It was also happening that the font changes, when they were shown, did not give rise, many times, - to a correct resizing of the height of each item. - (These problems were of tree refresh. Saving and reopening the file would show up correctly.) - - - Fixed: Sometimes changes from Note Properties (F4) did not modify the status of the file (to modified) - (eg. changing the editor font size for new nodes), or did not modify the status of the Save toolbar button - -* Fixed: Making bold a tree node din't maintain other possible styles of the default TV font - -- - - - - - - - - - - - -* Optimization in file open/save, mainly in native format - Reduced load and save times, more notably in native format, where it's not needed to - compress/decompress or encrypt/decrypt the file content. - - ** Note: Although reduction in time obtained for compressed format files is much less that for - native format, I want to recall that it could be more convenient to use that format instead - of native format, specially if the file contains images, because of the way images are saved in RTF, - at least in RichEdit control: images are saved in plain ascii, as hexadecimal values. - - I recommend seeing the results of some tests in which I compare the native format with the three options - of the compressed format: Max, Default, Fastest - -> "Comments on KNT file formats.txt" - -- - - - - - - - - - - - -* Fixed: Exception while trying to insert a KNT link in a special case - If it was checked the option General Settings | Tree Panel |"Reverse order" (TreeOptions.PathTopToBottom in keynote.ini), - and was set the option TreeOptions.RelativeKNTLinks in keynote.ini, that hides common part of the path (common ancestors), - and the inserting point of the KNT link was a descendant of the node with the target point, an exception would be thrown - while looking for that common path. - -* Fixed: Change in read-only state of a note => save button state - Setting a note to read-only was marking the file as modified, but was not reflected in the save button - -- - - - - - - - - - - - -* Fixed possible exceptions when no file was loaded -* Fixed exception by UpdateHistoryCommands in file without notes - -- - - - - - - - - - - - -* Changes in log management diff --git a/doc/Changes in 1.8.0 Beta3.txt b/doc/Changes in 1.8.0 Beta3.txt deleted file mode 100644 index ced6730..0000000 --- a/doc/Changes in 1.8.0 Beta3.txt +++ /dev/null @@ -1,47 +0,0 @@ - -Changes in 1.8.0 Beta 3 (20/08/2023) -======================= - -* Fixed: (Important) Text files imported as a new note note could be saved plain, not RTF - - This problem exists in KNT from the beginning, but with the changes included from version 1.8.0 - could be much more problematic, when loading the .knt file - - When importing a file with plain text into a new note, we must ensure that the note's stream is loaded with its RTF - conversion, to avoid ending up saving that note's stream content in plain format to the .knt file when saving. - This could occur if we didn't modify the text of that new note before saving the file. - - This was fixed when importing as nodes, but not applied also for files imported as notes (...!) - Was corrected for importing as nodes in Commit ac672bb258... 11/06/23: - * Fixed: Ensure that all nodes in a RTF tree note are saved in RTF format, - and all nodes in a plain text only tree note are saved in plain format. - -- - - - - - -* New: pressing [Ctrl] + will temporarily preserve editor width, reducing the application window width - - When the user hides the Tree Panel pressing Ctrl (usually: Ctr + Shift+F11 or Ctrl + [View | Tree Panel] ) then, - instead of letting the editor panel grow to the left occuping the width of the tree panel, the application window will - reduce its width temporarily so that the editor maintain its width and position. - - Once shown the Tree panel again, the application window's size and position will be restored. - - If, after hiding the tree panel in this way (the window's width is now reduced), the user selects another note, then - the application will automatically make the tree panel visible and restore the aplication window width, before changing - to the other note. - - Opening onother file or closing the application while the windows's width is reduced, will restore it to it's correct size. - - This functionality can be disabled in keynote.ini, with: IgnoreCtrHideTrePanel = 1 - -- - - - - - -* Fixed: checkbox 'Inherit BG color from active node' not updated in 'Note Properties..' - - Was ok in commit * New: "Default zoom" / Several fixes and enhancements related to 'Note properties...' and 'Default Settings...' - But modified by error in * New: Font and BG color can be changed for ALL tree panels at once - -- - - - - - - * Added log entries in several points, to obtain information about possible problems related to RichEdit - (To use only with keynote.exe generated in debug and log enabled) \ No newline at end of file diff --git a/doc/Changes in 1.8.0 Beta4.txt b/doc/Changes in 1.8.0 Beta4.txt deleted file mode 100644 index c177c4b..0000000 --- a/doc/Changes in 1.8.0 Beta4.txt +++ /dev/null @@ -1,83 +0,0 @@ - -Changes in 1.8.0 Beta 4 (02/09/2023) -======================= - -* Fixed: KNT Files where displaying RTF content as txt in systems with locale codepage set to UTF8 (65001) - - See the problem described here: https://github.com/dpradov/keynote-nf/issues/602#issuecomment-1688644599 - - Note. To change that setting in W10: - Settings -> From Time & Language, select Region. - Under Related Settings, select Additional date, time, & regional settings. - Select Region to change location. - On the Administrative tab, click Change system locale.... - Check (or uncheck) "Use Unicode UTF-8 for worldwide language support" - Restart the system. - - (As of Windows 10 1803, Microsoft added the ability to specify UTF-8 as the character encoding used by Windows itself) - (Appears as beta in Windows 10) - -* Fixed: Certain RTF insertions were interpreted as text plain in RichEdit version <= 4 - - See https://github.com/dpradov/keynote-nf/issues/602#issuecomment-1688868732 - (problem with old RichEdit versions -- W7 ) - -- - - - - - -* Improved Alarm management window. Revised design and usability - -- - - - - - -* Fixed: Indentation of multiple lines done pressing TAB was not working - -- - - - - - -* Improvements in internal KNT links - - - Fixed: A previously inserted hidden marker might not be reused in all situations - (in that case, new hidden markers could be inserted at the same position) - - - New: If we are marking (CTR+F6) the start of a node or note (CaretPos = 0), no hidden marker - will be created. Link created after will always aim for that position 0. - - - New: Hint in status bar now shows the number of the new hidden mark created, as a reference. - It also remember us that we can use Undo to delete a new hidden mark (created by error) - - - New: Another hint in status bar shows the number of the hidden mark we are pointing it (if any) - - ( Note: hidden mark numbers start by 1 and are specific to each node ) - - -- - - - - - -* Fixed: Option "Autoregister file type" now works ok without any special permissions - - Now it is registered for current user, in HKEY_CURRENT_USER. Registered types: .knt, .kne, .knm, .knl - (HKEY_LOCAL_MACHINE / HKEY_CLASSES_ROOT: - On the newest Windows versions, you need admin rights to register a file type for all the machine users) - -* Fixed: Option "Use system default web browser" was not working - -* Fixes and changes in URL actions: - - Fixed: 'Open in New window' didn't open URL in a new window (worked equal to 'Open') - - CTRL+Click: Now it is associated to Open (not to Open in new window as before --although not worked as such) - - Removed option (in Actions | URL actions ) "Shift key must be held down when URL is clicked" - (It didn't work. URL Click is not raised when Shift is down) - -- - - - - - -* Other fixes and improvements: - - * Fixed: Exception in Find All adding matching result in standard note (without tree) - Also, it is controlled the exception that could generate a malformed RTF content - - * Optimization when removing KNT hidden characters - - * Fixed: buffer size for TRxCustomRichEdit.TextPlain could truncate one character on certain situations - - * Changed the way RTFAux control is created and used / Several fixes related to removing of hidden knt chars - Mainly to avoid the chance of interference between initial process used to load TextPlainVariables (on second plane) - and other tasks that used the control RTFAux, created as global and instanced with lazy load. - - * Minor corrections in management of knt hidden characters (used with internal KNT links) - diff --git a/doc/Changes in 1.8.0 Beta5.txt b/doc/Changes in 1.8.0 Beta5.txt deleted file mode 100644 index 8553135..0000000 --- a/doc/Changes in 1.8.0 Beta5.txt +++ /dev/null @@ -1,19 +0,0 @@ - -Changes in 1.8.0 Beta 5 (04/09/2023) -======================= - -* Fixed: Selection of search result (from "Find All") was not working in RichEdit <=4 - - See problem described here: https://github.com/dpradov/keynote-nf/issues/602#issuecomment-1704371949 - This problem was specific of version 1.8.0 of KeyNote. In previous versions the results of 'Find All' - were not shown in a RichEdit control. From 1.8.0 it is used to offer excerpts that show a context for - each coincidence. - It is a bug in RichEdit v4, but the new solution will work ok in that old version and current ones. - - -* Improved click options on hyperlinks - - Now right-click on a hyperlink will always show the prompt window (to edit, modify or open) - Added a new option to define the action on CTRL + Click - -* Added numbering to serch results diff --git a/doc/Changes in 1.8.0 Beta6.txt b/doc/Changes in 1.8.0 Beta6.txt deleted file mode 100644 index ae3e2dc..0000000 --- a/doc/Changes in 1.8.0 Beta6.txt +++ /dev/null @@ -1,17 +0,0 @@ -Changes in 1.8.0 Beta 6 (06/09/2023) -======================= - -* New: View | Alternative Margins - - Allows switching between default (minimum) and defined margins in .ini - New options define text margins in pixels: - - MarginAltLeft =80 - MarginAltRight=80 - - (As suggested in https://github.com/dpradov/keynote-nf/issues/602#issuecomment-1685401368 ) - -* Fixed: An exception "Cannot open clipboard: Access Denied" could occasionally be raised - In that cases the message could be accepted without closing the app, but could be annoying. - -* Fixed: Error loading Glossary list diff --git a/doc/Comments on KNT file formats.txt b/doc/Comments on KNT file formats.txt index e6eec84..79f5e40 100644 --- a/doc/Comments on KNT file formats.txt +++ b/doc/Comments on KNT file formats.txt @@ -1,5 +1,5 @@ -File formats in KeyNote NF. Native vs Compressed format -======================================================= +File formats in KeyNote NF. Native vs Compressed format / Use of IMAGES +======================================================================= To help decide which format may be the most suitable to use with KeyNote NF files, depending on the circumstances, I have made a series of measurements that I show below. @@ -11,7 +11,8 @@ desktop, running Windows 10. I have used two files as a reference, comparing in both cases the times obtained when loading and saving the files, considering the native format and three options of the compressed format: Max, Default, Fastest - + +* Note: See the notes at the end regarding sizes after pasting images vs dragging images In general terms I want to highlight the following: --------------------------------------------------- @@ -86,7 +87,31 @@ In general terms I want to highlight the following: - Native: 27.569 KB 1.438 (*) 47 - Zip Max: 5.418 KB 1.593 2.422 - Zip Default: 5.453 KB 1.547 1.328 - - Zip Fast: 6.827 KB 1.594 391 + - Zip Fast: 6.828 KB 1.594 391 (*) Reading and parsing the file, loading the data model, but without building the UI: 188 ms + + * NOTE - The sizes of "File 2", could be much smaller if the images had been dragged into the editor from files + (for example, Img1.png and Img2.jpg) + + - Native: 9.800 KB + - Zip Max: 3.399 KB + - Zip Default: 3.409 KB + - Zip Fast: 3.837 KB + + + IMAGES + ------ + Note that in current versions of the RichEdit control it is possible to drag an image file into the editor + (from the file explorer, for example) of any of the formats listed above. + In these cases, the RichEdit control will save the image in a more optimized RTF format (the file will take up less space). + It will still save the image as ASCII in hexadecimal format, but in many cases it will do so once compressed to JPG or PNG: + + PNG, GIF, BMP, TIFF => png format (\pngblip) + JPG => jpg format (\jpegblip) + Capture from clipboard => windows meta file format (WMF) (\wmetafile8) + + This last format was the only one recognized by older versions (e.g., version 4, available in XP or W7), and it takes up + much more size than the rest (png or jpg). + diff --git a/doc/history.txt b/doc/history.txt index 9662234..ffdfdc5 100644 --- a/doc/history.txt +++ b/doc/history.txt @@ -35,109 +35,45 @@ Issue #tracker at https://github.com/dpradov/keynote-nf/issues ------------- -v 1.8.0 .6 Beta (06 sep 2023) --------------- -Corrects or implements the following issues: -(more information in doc/Changes in 1.8.0 Beta6.txt) - -* Fixed: An exception "Cannot open clipboard: Access Denied" could occasionally be raised -* Fixed: Error loading Glossary list - -* New: View | Alternative Margins - - -v 1.8.0 .5 Beta (04 sep 2023) --------------- +v 1.8.0 Beta 1 - Beta 6 (01 aug 2023 -- 06 sep 2023) +------------------------ Corrects or implements the following issues: -(more information in doc/Changes in 1.8.0 Beta5.txt) +(more detail and information in doc/Changes in 1.8.0 Beta1-6.txt) -* Fixed: Selection of search result (from "Find All") was not working in RichEdit <=4 -* Improved click options on hyperlinks -* Added numbering to serch results +* Adaptation from Borland Delphi 2006 to to Embarcadero Delphi CE 11.3 (Community Edition 11.3 Alexandria). -v 1.8.0 .4 Beta (02 sep 2023) --------------- -Corrects or implements the following issues: -(more information in doc/Changes in 1.8.0 Beta4.txt) +* Find All: Improvements + - Excerpts from the note of the matches found, where searched words are highlighted + - Search is now much faster + - Added new option: "Current node and subtree" + - The treatment of the options 'All the words' and 'Any of the words' is extended + * Changed: The option "Reverse order" it is used now only with the the option "Show full node path in status bar". + * Fixed: The option "Show full node path in search results" was not used. + +* New KNT Links, vinculated to markers, not only to caret position -* Fixed: KNT Files where displaying RTF content as txt in systems with locale codepage set to UTF8 (65001) -* Fixed: Certain RTF insertions were interpreted as text plain in RichEdit version <= 4 +* Redesigned navigation history mechanism -* Fixed: Indentation of multiple lines done pressing TAB was not working +* New: Added 'KeyNote' as target format in File/Export... * Improved Alarm management window. Revised design and usability -* Improvements in internal KNT links - -* Fixed: Option "Autoregister file type" now works ok without any special permissions -* Fixed: Option "Use system default web browser" was not working -* Fixes and changes in URL actions - -* Other fixes and improvements - - -v 1.8.0 .3 Beta (20 aug 2023) --------------- -Corrects or implements the following issues: -(more information in doc/Changes in 1.8.0 Beta3.txt) - -* Fixed: (Important) Text files imported as a new note note could be saved plain, not RTF -* New: pressing [Ctrl] + will temporarily preserve editor width, reducing the application window width - -* Fixed: checkbox 'Inherit BG color from active node' not updated in 'Note Properties..' -* Added log entries in several points, to obtain information about possible problems related to RichEdit - - -v 1.8.0 .2 Beta (19 aug 2023) --------------- -Corrects or implements the following issues: -(more information in doc/Changes in 1.8.0 Beta2.txt) - -* Fixed: High DPI displays. The application should scale correctly based on OS settings * Added a new property, "Default Zoom": Allows to use a default value other than 100% * Changed behaviour of Zoom Text action. - -* New option: Font size in Find All results -* Improved the display of node path in search results (when option "Show full node path in search results" is checked) -* Changed: The option "Reverse order" it is used now only with the the option "Show full node path in status bar". -* Fixed: The option "Show full node path in search results" was not used. -* Fixed: Find All with the option 'Current node and subtree' could ignore nodes from some point in certain situations - -* Several fixes and enhancements related to 'Note properties...' and 'Default Settings...' - - Changes in design and functionality in "Default settings.." (F6) and "Note properties.." (F4) - - Modified several captions and hints to avoid possible confusion between color of nodes and color of editor - - Changed: Moved the option 'Inherit BG color from active node' from 'Tree panel' section to 'Rich Text editor'. - - Added: Font and BG color can be changed for ALL tree panels at once - - Fixed: modifying the properties of a note (Note properties..[F4]) could cause font formatting to be lost in certain situations - - Fixed: sometimes the defined default font properties of the note where ignored on new nodes. - - Fixed: Changes in tree font didn't update correctly - - Fixed: Sometimes changes from Note Properties (F4) did not modify the status of the file (to modified) - -* Fixed: Making bold a tree node din't maintain other possible styles of the default TV font +* New: View | Alternative Margins +* New: pressing [Ctrl] + will temporarily preserve editor width, reducing the application window width +* Fixed: High DPI displays. The application should scale correctly based on OS settings +* Improvement in the design of the form Configuration Options * Optimization in file open/save, mainly in native format +* Fixed possibly difficulty on saving, if file is located in a externally synchronized folder (for example with Dropbox) -* Fixed: Exception while trying to insert a KNT link in a special case -* Fixed: Change in read-only state of a note => save button state -* Fixed possible exceptions when no file was loaded -* Fixed exception by UpdateHistoryCommands in file without notes -* Changes in log management - - -v 1.8.0 .1 Beta (01 aug 2023) --------------- -Corrects or implements the following issues: -(more information in doc/Changes in 1.8.0 Beta1.txt) +* Fixes and changes in URL actions +* Improved click options on hyperlinks +* Fixed: Option "Use system default web browser" was not working -* Find All - - Search is now much faster - - Improvement in the output of results - - Added new option: "Current node and subtree" -* New KNT Links, vinculated to markers, not only to caret position -* New: Added 'KeyNote' as target format in File/Export... -* Redesigned navigation history mechanism * Clipboard Capture / Web Clip / Paste external - Try to offer RTF Format in clipboard whenever possible (from HTML format) - When pasting from HTML (web pages), the current font and size in the active editor will be used as default values, @@ -145,31 +81,44 @@ Corrects or implements the following issues: - When converting from HTML to RTF, on pasting from web pages, last aditional line break will be removed - Fixed: Pasting as plain text could move the caret several characters before its correct position - Fixed: copying and pasting from certain web pages can produce nothing or truncate some text - - Titles from web pages: convert HTML Ascii codes -* Clipboard Capture / Web Clip. - - Ensure to include Title for URL - - Title from YouTube page: exception to the normal paste behaviour - - Several improvements, with new tokens +* Improvements on Clipboard Capture / Web Clip capture + - Added new token: '%%' + - Ensure to include Title for URL (%S, %s, %U) + - Titles from web pages: convert HTML Ascii codes + - Added new token: source server/domain (%d) - Revised and improved predefined dividers - Adjustment in the option "URLOnly" - - Fixed: The option "Limited size to", in Advanced/Clipboard - ("Maximum length of text to capture, in bytes (when paste as plain text)") - should only be considered for Clipboard Capture, not for normal plain paste (nor Web clip) - -* Clipboard paste + +* Clipboard paste / copy / cut - Fixed bug that could affect the paste action, when determining if normal or plain paste should be applied - Fixed bug that made that the option "Ignore duplicate clips" were ignored + - Fixed: An exception "Cannot open clipboard: Access Denied" could occasionally be raised + - Fixed: The option "Limited size to", in Advanced/Clipboard ("Maximum length of text to capture, in bytes (when paste as plain text)") + should only be considered for Clipboard Capture, not for normal plain paste (nor Web clip) + +* Several fixes and enhancements related to 'Note properties...' and 'Default Settings...' + - Changes in design and functionality in "Default settings.." (F6) and "Note properties.." (F4) + - Modified several captions and hints to avoid possible confusion between color of nodes and color of editor + - Changed: Moved the option 'Inherit BG color from active node' from 'Tree panel' section to 'Rich Text editor'. + - Added: Font and BG color can be changed for ALL tree panels at once + - Fixed: modifying the properties of a note (Note properties..[F4]) could cause font formatting to be lost in certain situations + - Fixed: sometimes the defined default font properties of the note where ignored on new nodes. + - Fixed: Changes in tree font didn't update correctly + - Fixed: Sometimes changes from Note Properties (F4) did not modify the status of the file (to modified) -* At the moment, the Send Mail functionality will not be included in KNT - -* Fixed possibly difficulty on saving, if file is located in a externally synchronized folder (for example with Dropbox) -* Fixed: Ensure that all nodes in a RTF tree note are saved in RTF format, - and all nodes in a plain text only tree note are saved in plain format. -* Improvement in the design of the form Configuration Options +* Fixed: Making bold a tree node din't maintain other possible styles of the default TV font -* Adaptation from Borland Delphi 2006 to to Embarcadero Delphi CE 11.3 (Community Edition 11.3 Alexandria). +* Fixed: Option "Autoregister file type" now works ok without any special permissions +* Fixed: Change in read-only state of a note => save button state +* Fixed: Ensure that all nodes in a RTF tree note are saved in RTF format, and all nodes in a plain text only tree note are saved in plain format. +* Fixed: Text files imported as a new note note could be saved plain, not RTF +* Modification in RxRichEd to change the way a retry is made when the load of stream detects an error +* Fixed possible exceptions when no file was loaded +* Changes in log management + +* At the moment, the Send Mail functionality will not be included in KNT v 1.7.9.9 Beta (07 jul 2017) (Distributed as 1.7.9 Beta 9 Test.2)