Re: [fpc-pascal] Directory Tree
>I have split the unit uEXE_INI (subdirectory pascal_o_r_mapping/02_Units ) and >moved the code causing the creation of this entry in a new unit >uEXE_INI_Global. Thank you, it is not creating this other file anymore. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 04/05/2021 à 01:55, James Richters via fpc-pascal a écrit : I’ve been noticing odd behavior in Lazarus.. if I stop the program and modify the form, then hit the green arrow… none of my for modifications are shown.. it’s still using the old form.. but if I use the pull down menus to build the project, then I get my new form.Is this normal or do I have some setting messed up in Lazarus? Very difficult to reproduce for me. May be you tried to open the lfm file in the editor and tried to modify it by hand ? It's the only way I could get that. In Delphi 7, when you choose to open the dfm in the text editor, Delphi 7 asked you to close the pas file before and the visual designers. I copied all the relevant files to another computer to see how they would run… and I noticed that after I run the program, it creates and etc directory, and inside it there is a file called _Configuration.ini which contains one section: [Options] and one entry under that: Chemin_Global= I have split the unit uEXE_INI (subdirectory pascal_o_r_mapping/02_Units ) and moved the code causing the creation of this entry in a new unit uEXE_INI_Global. Subdirectory etc is where I usually stores the configuration files. Maybe I will move Configuration.ini to etc/INIPropStorage.ini ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Thanks for the explanation of classes. I didn’t realize I ended up making it so big, I was trying to keep it able to fit on a 1280 x 1024 screen.. I guess 1280x1024 is less of a percentage of my 4K screen than I thought. The 2 rows is much nicer. Some of my machine times and run times get quite long if it’s over 10 days.. so the second row helps make room for them. Thanks for fixing the dates The loading speed has improved quite a bit on my windows 10 machines. I had an issue with the fonts being different sizes on one of my windows 10 machines.. but I found if I shut off ParentFont everything is the right size on the other machine. I’ve been noticing odd behavior in Lazarus.. if I stop the program and modify the form, then hit the green arrow… none of my for modifications are shown.. it’s still using the old form.. but if I use the pull down menus to build the project, then I get my new form. Is this normal or do I have some setting messed up in Lazarus? I copied all the relevant files to another computer to see how they would run… and I noticed that after I run the program, it creates and etc directory, and inside it there is a file called _Configuration.ini which contains one section: [Options] and one entry under that: Chemin_Global= Any idea what’s causing this? James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 03/05/2021 à 13:55, James Richters via fpc-pascal a écrit : >Defining it in public in TText_to_PDF is a good idea. I tried putting it under the destructor in public… above the private variables, but it wouldn’t compile thereI thought it would have to be above all the functions and procedures… and there is no Var for variables and there are two public and two private definitions, I don’t really understand what’s going on…Can I just mix up variables with functions and procedures since there is no Var declaration?Or is there an order that must be followed? Yes, the destructor is a special procedure, so it doesn't work. (it's the same for constructor which is a special function). You can put any number of public/private /protected sections. Usually for each specific aspect of my class, I add: - at first level a comment with the aspect. - Then right below a "private" section for the internal stuff of the aspect, not useful from outside the class - eventually a "protected" section ( like private but can be accessed from child classes) - a "public" section for stuff useful from outside the class. - you can have a "published" section, kind of "super public", mainly for components in the ide palette , rtti, and when you need to discover properties of an object at run time. (this works for classes defined with "class end", for old style, kind of record with methods defined with "object end", "published" doesn't work). >(Sorry, I've renamed a lot of things) Thanks, I’m still trying to pick up the naming conventions.For some reason all my form changes got reset.I merged them back in and pushed it.I made the background of the information boxes white, not invisible that’s why I set them to ‘‘ at the beginning.. so the white boxes would be visible.I also padded the text in the boxes with spaces so the white background would make a border around the text.I also re-arranged a lot of things, added horizontal scroll bars and shut off word wrap on the results panel.. removed extra buttons we don’t need now with the menu, etc..Let me know what you think of my form design. It's nice. I keep my original design mainly because my "main"screen on linux has a lower resolution. Any idea how I change the format of M.Text=’[Date]’; in uText_To_PDF.pas ?It shows up 2021-05-03(Which I actually like better because it sorts properly)but here in the USA 05-03-2021 is customary.I don’t see where [Date] gets filled in with the date or how to define the format of it.I think I could make my own date format, but I don’t want to over-complicate things. '[Date]' is decoded in unit fpreport TFPReportCustomMemo.ParseText; and expanded in TFPReportCustomMemo.ExpandExpressions; using method TFPReportElement.ExpressionResultToString wich uses virtual function TFPReportElement.GetDateTimeFormat for getting the datetime format. You just need to declare a subclass of TFPReportMemo which overrides GetDateTimeFormat. I 've adde a "TfprmText_to_PDF = class( TFPReportMemo)" in uText_to_PDF for this. In the unit test I've added a generation of a 1 lines inifile for testing. This lead me to change some things to improve the loading speed. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>Just for notice: classes and objects are not particular to Lazarus, it's plain >Object Pascal, understood by Freepascal and Delphi whatever the context( >console, graphic/Lazarus or javascript/pas2js) I have some classes and objects in my console programs, but they are there to get some new features to work and are mixed it with my turbo pascal code. I never really fully understood them.. only a vague idea of how they work. >Defining it in public in TText_to_PDF is a good idea. I tried putting it under the destructor in public… above the private variables, but it wouldn’t compile there I thought it would have to be above all the functions and procedures… and there is no Var for variables and there are two public and two private definitions, I don’t really understand what’s going on… Can I just mix up variables with functions and procedures since there is no Var declaration? Or is there an order that must be followed? >(Sorry, I've renamed a lot of things) Thanks, I’m still trying to pick up the naming conventions. For some reason all my form changes got reset. I merged them back in and pushed it. I made the background of the information boxes white, not invisible that’s why I set them to ‘‘ at the beginning.. so the white boxes would be visible. I also padded the text in the boxes with spaces so the white background would make a border around the text. I also re-arranged a lot of things, added horizontal scroll bars and shut off word wrap on the results panel.. removed extra buttons we don’t need now with the menu, etc.. Let me know what you think of my form design. Any idea how I change the format of M.Text=’[Date]’; in uText_To_PDF.pas ? It shows up 2021-05-03 (Which I actually like better because it sorts properly) but here in the USA 05-03-2021 is customary.I don’t see where [Date] gets filled in with the date or how to define the format of it. I think I could make my own date format, but I don’t want to over-complicate things. Thank you for the help. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 02/05/2021 à 23:42, James Richters via fpc-pascal a écrit : But I’m thinking I didn’t really define the variable the way it would normally be done with Lazarus. Just for notice: classes and objects are not particular to Lazarus, it's plain Object Pascal, understood by Freepascal and Delphi whatever the context( console, graphic/Lazarus or javascript/pas2js) Is there a better way I should have defined this variable? Defining it in public in TText_to_PDF is a good idea. (Sorry, I've renamed a lot of things) ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I’ve been making progress with learning how to make some modifications myself to this project, I’ve been pushing them to Github. I added a custom report title, I have if functioning the way I want it to.. just pulling the report title from the INI file and saving it in a variable, then putting the contents of the variable in the report, But I’m thinking I didn’t really define the variable the way it would normally be done with Lazarus. I just stuck a Report_Title : String; variable in the uText_to_PDF.pas unit… it works fine and that’s the way I would do it in a console application, but I’m thinking I should have made the variable part of the TText_to_PDF class… I tried to put it under public, but that did not work so I just made it a unit variable. Is there a better way I should have defined this variable? James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>For some reason, the timer isn’t delaying the initial load anymore… I’m back >to having a long delay while it loads and then the form is displayed with a >large data file.. but I see the timer is still there. I increased the amount >of time on the timer, but it still loads before the screen is displayed. I tracked it down and fixed it… It was loading when the file name changed, and I guess the ini file changed the file name, so it loaded… before the screen was up.. so I fixed it by only loading if the timer was disabled: procedure TfFileVirtualTree.eFileNameChange(Sender: TObject); begin If Not(tFirst.Enabled) Then Load_from_File; end; James From: fpc-pascal On Behalf Of James Richters via fpc-pascal Sent: Sunday, May 2, 2021 9:14 AM To: 'FPC-Pascal users discussions' Cc: James Richters ; 'Jean SUZINEAU' Subject: Re: [fpc-pascal] Directory Tree >>Any ideas how to save and restore the column widths for VirtualStrinTrees in >>the ini file? > Done with the events and methods of TIniPropStorage. Thanks, I see how that works now. I see you cleaned it all up and made pull down menus. For some reason, the timer isn’t delaying the initial load anymore… I’m back to having a long delay while it loads and then the form is displayed with a large data file.. but I see the timer is still there. I increased the amount of time on the timer, but it still loads before the screen is displayed. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>>Any ideas how to save and restore the column widths for VirtualStrinTrees in >>the ini file? > Done with the events and methods of TIniPropStorage. Thanks, I see how that works now. I see you cleaned it all up and made pull down menus. For some reason, the timer isn’t delaying the initial load anymore… I’m back to having a long delay while it loads and then the form is displayed with a large data file.. but I see the timer is still there. I increased the amount of time on the timer, but it still loads before the screen is displayed. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 01/05/2021 à 15:27, James Richters via fpc-pascal a écrit : Any ideas how to save and restore the column widths for VirtualStrinTrees in the ini file? Done with the events and methods of TIniPropStorage. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Sorry, I didn' had time this week to have a look to your last additions. Le 01/05/2021 à 15:27, James Richters via fpc-pascal a écrit : Any ideas how to save and restore the column widths for VirtualStrinTrees in the ini file? I imagine it can be done through the events of the IniProperty Storage. If it doesn't work, in last resort, you can do that using TINIFile to access directly the ini file. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I’ve been trying to save more things to the configuration.ini file, I’ve managed to save my Load Time Variable… I was just trying to change SessionProperties myself, but it wouldn’t work if I tried that.. but if I used object inspector and click ed on SessionProperties and added it to the list with that, it worked. I don’t understand why it only works if I pick it from the list in object inspector… but at least it works now. but now I’m trying to save the widths of the columns for the two VirtualStringTrees. I see the widths in the object inspector under TVirtualStringTree > Header > Columns Then if I click on the 2 Items I get 0 – File and 1 – Time, and If I click on one of those I get properties for vst.TVTHeader.Columns[0].width But when I go to SessionProperteis to add that to the list, all I see is vst.header but no way to get the array elements. If I try to add vst.header it crashes with an exception about the properties. If I try to add vst.TVTHeader.Columns[0].width myself to the end of SessionProperties in ufFileVirtualTree.lfm it doesn’t save or restore it. I don’t get an entry for it in configuration.ini at all. Any ideas how to save and restore the column widths for VirtualStrinTrees in the ini file? James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Thanks for the explanation... phew, what a lot of stuff... no wonder I like my console programs so much 😃 For critical timing applications I have a lot more control of exactly when things happen... but this project is helping me appreciate the benefits of a GUI application. I just need to learn how to think differently (non sequentially) for the most part doing things on events makes sense to me, it's just when I run into wanting to do something at a certain time that I get confused. >I have moved the LoadFromFile to a Timer event just fired on creation of the Form with 10ms. When the message of the timer arrives, > usually all the loading an painting is already done, their messages have been posted before in the message queue. The timer is working GREAT, I thought a timer would work, I just didn't know how to implement it. >> I'm not getting the page break in word either. >May be the template is not up to date ? I think that after type >Ctrl+Enter in the template Libre Office adds a parameter for allowing >soft page breaks. Maybe I'll install open office and see if it's just a word for windows issue. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 25/04/2021 à 21:30, James Richters via fpc-pascal a écrit : >I added LoadFromFile in this event. That was the first thing I tried, but the problem is, this happens before anything is put on the screen.. so when I run the program with an Ini file with 4000 entries in it, there is a good 30 second delay, and then the screen is shown with everything loaded. So I tried putting it in various places in the form, but then it runs additionally when I don’t want it to. The problem I’m having is understanding the sequence of things (if there even is one) with my console programs, I specifically determine the exact order I want things to run, but this is more just a collection of things that all run at the same time.. well they don’t run at the same time, it’s an illusion, computers only do one thing at a time.. but I don’t understand how this illusion is controlled…how can I order it to show form1, show the buttons, show the load bar graph… get everything on the screen, THEN load the last used file? I can’t really use config.ini, because in order to get everything on the screen in the proper size and position, the configuration would have had to be read in already.. so before anything is displayed.. I want the load to happen after everything is displayed. I supposed I can maybe launch a timer to wait 1 second to get everything on the screen then load the files, but I don’t even know where to put the timer. I'm not an expert of that, but let's say that since the good old time of Windows 3.1, your Windows app is based on a so-called "message loop". The main part of your app just register a callback for processing a message. There are hundreds of different kind of messages ( from the Windows emulator in linux: https://wiki.winehq.org/List_Of_Windows_Messages ) Windows kernel is running the loop and sometimes calls your callback to repaint a window, set the focus, notify you of a mouse move You can still make your own callback ( https://docs.microsoft.com/en-us/windows/win32/winmsg/using-window-procedures ). But it's so complex that in practice we uses base classes like TApplication and TForm to do all the basic code of the windows app. In the times of Windows 3.1 made for single task processors, I think there were a single message loop for all the system, shared by all the apps. If you took too much time processing one of your messages you could hang up the system. It was non-preemptive multitasking. With Windows 95 and 32 bits it began to use the multitasking capability of the processor, it began to be preemptive multitasking, you couldn't lock the system with an infinite loop, just your program. With the advent of multicore processors, I think that now you can have really several assembler instructions running in parallel (https://en.wikipedia.org/wiki/Multi-core_processor). In some cases you can accelerate your program by running several threads in parallel with the TThread class for example. Most of your components (TEdit, TButton) are child windows hosted in the form parent window and they receive their own messages for painting, mouse, ... I have moved the LoadFromFile to a Timer event just fired on creation of the Form with 10ms. When the message of the timer arrives, usually all the loading an painting is already done, their messages have been posted before in the message queue. I'm not getting the page break in word either. May be the template is not up to date ? I think that after type Ctrl+Enter in the template Libre Office adds a parameter for allowing soft page breaks. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>I'll try another pull request of something simple just to see if it will work. I made another pull request on GitHub, https://github.com/jsuzineau/pascal_o_r_mapping/pull/3 This one is an attempt to add some text boxes and to use them to display the totals and to get a time variable that represents how long it takes to unload/reload the machine. I have the total times working, but I get errors that my variables are not found when I try to use the textboxes. I'm trying to access them with things like eMachineTime.Text := Duration_From_DateTime(Total_Machine_Time); I'm not sure what I'm doing wrong.. maybe it's the way I re-named the text box from edit1 ?? Any ideas what I'm doing wrong? James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>I added LoadFromFile in this event. That was the first thing I tried, but the problem is, this happens before anything is put on the screen.. so when I run the program with an Ini file with 4000 entries in it, there is a good 30 second delay, and then the screen is shown with everything loaded. So I tried putting it in various places in the form, but then it runs additionally when I don’t want it to. The problem I’m having is understanding the sequence of things (if there even is one) with my console programs, I specifically determine the exact order I want things to run, but this is more just a collection of things that all run at the same time.. well they don’t run at the same time, it’s an illusion, computers only do one thing at a time.. but I don’t understand how this illusion is controlled…how can I order it to show form1, show the buttons, show the load bar graph… get everything on the screen, THEN load the last used file? I can’t really use config.ini, because in order to get everything on the screen in the proper size and position, the configuration would have had to be read in already.. so before anything is displayed.. I want the load to happen after everything is displayed. I supposed I can maybe launch a timer to wait 1 second to get everything on the screen then load the files, but I don’t even know where to put the timer. >I have extracted the pdf generation to a unit uText_to_PDF with a class TText_to_PDF to make a pdf from a string. You can even use it in a console app. >3 pdf are generated now: List, Tree, List+Tree. The PDF Files look great, separate PDF files is really better in my opinion anyway. That is awesome that I can make text to pdf in a console app!Thanks for making that a separate unit. >I’m I have delete some files which differed only by case. After committing from linux, the pull on windows deleted all the files but I could revert them on next commit from windows to get them back in correct case. >It seems to be stable now. I'll try another pull request of something simple just to see if it will work. >I used your code for days to make a function Duration_from_DateTime( _DateTime: TDateTime): String; >I added on main form a button "Test" with a few test cases >Let me know if it's ok for you. still not getting a page break using word to open the odt file. The duration looks great, all the test cases look great too. I'm not getting the page break in word either. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 25/04/2021 à 15:24, James Richters via fpc-pascal a écrit : RE: [fpc-pascal] Directory Tree I fixed the time totals to show days correctly with this: I didn't use your pull request because I don't know yet how to handle it. I have delete some files which differed only by case. After committing from linux, the pull on windows deleted all the files but I could revert them on next commit from windows to get them back in correct case. It seems to be stable now. I used your code for days to make a function Duration_from_DateTime( _DateTime: TDateTime): String; I added on main form a button "Test" with a few test cases. Let me know if it's ok for you. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 25/04/2021 à 02:54, James Richters via fpc-pascal a écrit : RE: [fpc-pascal] Directory Tree I’ve been trying make “Load from file”happen automatically when the program starts.. I would like it to happen after configuration.ini restores the file name and also after the form is on the screen so I can see the load bargraph. I tried putting it in Panel1 OnEnter but the form doesn’t have the buttons on it yet when it does the load.. and it is also doing the load when I push a button.. which is not what I want to happen.Any idea how to do the load once automatically after the screen is up so I can see the load progress bar and after all the buttons are on the form? The persistence of configuration is managed by the ips:TIniPropStorage component. Digging a bit , I found that TIniPropStorage has an event OnRestoreProperties which fired after the configuration is restored (Ctrl+Click on TIniPropStorage, then on OnRestoreProperties, which leads you do TCustomPropertyStorage, where you'll find with a search on FOnRestoringProperties that FOnRestoringProperties is called in procedure TCustomPropertyStorage.Restore after restoring properties). I added LoadFromFile in this event. I have extracted the pdf generation to a unit uText_to_PDF with a class TText_to_PDF to make a pdf from a string. You can even use it in a console app. 3 pdf are generated now: List, Tree, List+Tree. I added a page break between list and tree in the odt. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I fixed the time totals to show days correctly with this: procedure TTreeData.SetdValue( _dValue: TDateTime); begin FdValue:= _dValue; FValue:=''; If FdValue>=2 Then FValue:= Format ('%d Days ',[Trunc(FdValue)]) Else If FdValue>=1 Then FValue:= Format ('%d Day ',[Trunc(FdValue)]); If (FValue<>'') OR (HourOf(FdValue)>0) Then FValue:=FValue+Format ('%.1d:',[HourOf(FdValue)]); If (FValue='') Then FValue:=Format ('%.1d:',[MinuteOf(FdValue)]) Else FValue:=FValue+Format ('%.2d:',[MinuteOf(FdValue)]); FValue:=FValue+Format ('%.2d',[SeconDof(FdValue)]); end; I made a pull request to your repository on Github with it James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I was able to fix the spacing on the PDF file so there are no more gaps between the box characters. I had to change both: DB.Layout.Height:=4; // 0.4 cm. DB.StretchMode:=smDontStretch; So now that the PDF file looks correct, I don’t need the open office document because it never needs to be editable. I have a date time routine for one of my big console projects that displays days, hours, minutes and seconds and takes off any leading zeros for days and hours from a date/time variable. I’ll see if I can bring that routine over and get it to work. James From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Saturday, April 24, 2021 9:39 AM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree Le 23/04/2021 à 19:56, James Richters via fpc-pascal a écrit : Get Checked or Selected works great, but if I push it twice, the second time I get: Unable to open file C:\Users\James\AppData\Local\Temp\FiC152.odt But I did make sure to close word and the PDF file before pushing it a second time. Yes, it's a very interesting bug that I'm currently investigating. May be I don't use the temp directory correctly. When making the output, I start by copying the template file to another filename/filepath. When I use my code to generate the new filename in the temp directory (Nom:= OD_Temporaire.Nouveau_ODT(Prefixe);), on the second time, the system doesn't find the source file for the copy ('FileVirtualTree_txt_to_odt.odt') and the copy fails. But the source file isn't deleted, it continues to be visible in File Explorer, you can open it in LibreOffice. And this happens either if , instead of using the CopyFile from lazutils/FileUtils.pas, I use a home made "MyCopyFile" function coded with BlockRead/BlockWrite or even using command line cmd.exe / xcopy to do the job. But if I copy the template to a file in the exe directory (just Nom:= 'temp_'+IntToStr(temp)+'.odt'; Inc(temp);), it works ... I tried to change formatDateTime to include Days, because many selections go well over 24 hours and it was just leaving the days off... so instead of showing 2days, 3:14:54 it’s just showing 3:14:54 So I changed format date to d:h:m:s but for some reason the totals of the branches are coming up with 30 days even though the totals are nowhere near even one day. I don’t see where the 30 days could possibly be coming from. I didn't had time to work on this for now. I think it's a bit too much complicated for FormatDateTime, it would be safer to decode the datetime value in a special function (something like days:= int(datetime); hours:= frac(datetime)*24; minutes:= frac(hours)*60 ... ) ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I’ve been trying make “Load from file” happen automatically when the program starts.. I would like it to happen after configuration.ini restores the file name and also after the form is on the screen so I can see the load bargraph. I tried putting it in Panel1 OnEnter but the form doesn’t have the buttons on it yet when it does the load.. and it is also doing the load when I push a button.. which is not what I want to happen. Any idea how to do the load once automatically after the screen is up so I can see the load progress bar and after all the buttons are on the form? James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 23/04/2021 à 19:56, James Richters via fpc-pascal a écrit : RE: [fpc-pascal] Directory Tree Get Checked or Selected works great, but if I push it twice, the second time I get: Unable to open file C:\Users\James\AppData\Local\Temp\FiC152.odt But I did make sure to close word and the PDF file before pushing it a second time. Yes, it's a very interesting bug that I'm currently investigating. May be I don't use the temp directory correctly. When making the output, I start by copying the template file to another filename/filepath. When I use my code to generate the new filename in the temp directory (Nom:= OD_Temporaire.Nouveau_ODT(Prefixe);), on the second time, the system doesn't find the source file for the copy ('FileVirtualTree_txt_to_odt.odt') and the copy fails. But the source file isn't deleted, it continues to be visible in File Explorer, you can open it in LibreOffice. And this happens either if , instead of using the CopyFile from lazutils/FileUtils.pas, I use a home made "MyCopyFile" function coded with BlockRead/BlockWrite or even using command line cmd.exe / xcopy to do the job. But if I copy the template to a file in the exe directory (just Nom:= 'temp_'+IntToStr(temp)+'.odt'; Inc(temp);), it works ... I tried to change formatDateTime to include Days, because many selections go well over 24 hours and it was just leaving the days off... so instead of showing 2days, 3:14:54 it’s just showing 3:14:54 So I changed format date to d:h:m:s but for some reason the totals of the branches are coming up with 30 days even though the totals are nowhere near even one day.I don’t see where the 30 days could possibly be coming from. I didn't had time to work on this for now. I think it's a bit too much complicated for FormatDateTime, it would be safer to decode the datetime value in a special function (something like days:= int(datetime); hours:= frac(datetime)*24; minutes:= frac(hours)*60 ... ) ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Get Checked or Selected works great, but if I push it twice, the second time I get: Unable to open file C:\Users\James\AppData\Local\Temp\FiC152.odt But I did make sure to close word and the PDF file before pushing it a second time. I tried to change formatDateTime to include Days, because many selections go well over 24 hours and it was just leaving the days off... so instead of showing 2days, 3:14:54 it’s just showing 3:14:54 So I changed format date to d:h:m:s but for some reason the totals of the branches are coming up with 30 days even though the totals are nowhere near even one day. I don’t see where the 30 days could possibly be coming from. James From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Friday, April 23, 2021 8:32 AM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree Le 23/04/2021 à 11:08, James Richters via fpc-pascal a écrit : Now if I type new text in the ODT document, it’s Consolas, but the actual text in the document is still Liberation Serif… and it doesn’t align, if I select all the text and change it to Consolas it’s fine.. I tried making a new template with Word I get a warning that some things won’t be saved in ODT format.. and then it comes up with Calibri. Maybe it’s an issue with Word. Maybe I’ll have to install open office to make the template. I found out my error was happening because I didn’t close the template in Word. May be toot that a handle stays open when I copy the template to a new file in the temp directory. I'm not sure. The PDF Files have Consolas in them now, but I’m still getting too much space between the lines. I fiddled around with the settings under //Actual line but nothing I change seems to control the line spacing, it’s like it’s 1-1/2 line spaced, instead of just single spaced. Instead of page breaks, how about just two separate PDF files? One with the tree and one with the file list? I’ve been trying to clear the old file when Load from file is pressed with a new file. I tried added slFiles.Clear and vst.Clear in ThVirtualStringTree.Load.fromFile, but I get an exception External Sigsegv I think it has to do with an index that is set to the old data size, but I’m not sure how to re-set everything. I’ve also been trying to save the last used INI file in Configuration.ini I've added this. and just load that when the program starts. Is there a way to make it run load from file as soon as the program is open, but after the screen is up so I can still see the load bar? I’ve also been trying to combine Get Checked Items with get selected items.. so one button gets all items that are either checked or selected, but doesn’t create duplicate entries. I tried to make a pull request of what I’ve been trying to do with configuration.ini and the combined get checked and selected, but I don’t know if it can be merged because there are a few files I had to commit that had the same name, but the cases were different… I had to commit them with one name and then commit them again with the other name to get past that or I couldn’t do anything with it. I've added a checked or selected function. The items are not duplicated and you can click the button Get Checked twice, memory is properly re-initialized. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 23/04/2021 à 11:08, James Richters via fpc-pascal a écrit : RE: [fpc-pascal] Directory Tree Now if I type new text in the ODT document, it’s Consolas, but the actual text in the document is still Liberation Serif… and it doesn’t align, if I select all the text and change it to Consolas it’s fine.. I tried making a new template with Word I get a warning that some things won’tbe saved in ODT format.. and then it comes up with Calibri.Maybe it’s an issue with Word.Maybe I’ll have to install open office to make the template. I found out my error was happening because I didn’t close the template in Word. May be toot that a handle stays open when I copy the template to a new file in the temp directory. I'm not sure. The PDF Files have Consolas in them now, but I’m still getting too much space between the lines. I fiddled around with the settings under //Actual line but nothing I change seems to control the line spacing, it’s like it’s 1-1/2 line spaced, instead of just single spaced. Instead of page breaks,how about just two separate PDF files?One with the tree and one with the file list? I’ve been trying to clear the old file when Load from file is pressed with a new file.I tried added slFiles.Clear and vst.Clear in ThVirtualStringTree.Load.fromFile, but I get an exception External Sigsegv I think it has to do with an index that is set to the old data size, but I’m not sure how to re-set everything. I’ve also been trying to save the last used INI file in Configuration.ini I've added this. and just load that when the program starts.Is there a way to make it run load from file as soon as the program is open, but after the screen is up so I can still see the load bar? I’ve also been trying to combine Get Checked Items with get selected items.. so one button gets all items that are either checked or selected, but doesn’t create duplicate entries. I tried to make a pull request of what I’ve been trying to do with configuration.ini and the combined get checked and selected, but I don’t know if it can be merged because there are a few files I had to commit that had the same name, but the cases were different… I had to commit them with one name and then commit them again with the other name to get past that or I couldn’t do anything with it. I've added a checked or selected function. The items are not duplicated and you can click the button Get Checked twice, memory is properly re-initialized. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Now if I type new text in the ODT document, it’s Consolas, but the actual text in the document is still Liberation Serif… and it doesn’t align, if I select all the text and change it to Consolas it’s fine.. I tried making a new template with Word I get a warning that some things won’t be saved in ODT format.. and then it comes up with Calibri. Maybe it’s an issue with Word. Maybe I’ll have to install open office to make the template. I found out my error was happening because I didn’t close the template in Word. The PDF Files have Consolas in them now, but I’m still getting too much space between the lines. I fiddled around with the settings under //Actual line but nothing I change seems to control the line spacing, it’s like it’s 1-1/2 line spaced, instead of just single spaced. Instead of page breaks, how about just two separate PDF files? One with the tree and one with the file list? I’ve been trying to clear the old file when Load from file is pressed with a new file. I tried added slFiles.Clear and vst.Clear in ThVirtualStringTree.Load.fromFile, but I get an exception External Sigsegv I think it has to do with an index that is set to the old data size, but I’m not sure how to re-set everything. I’ve also been trying to save the last used INI file in Configuration.ini and just load that when the program starts. Is there a way to make it run load from file as soon as the program is open, but after the screen is up so I can still see the load bar? I’ve also been trying to combine Get Checked Items with get selected items.. so one button gets all items that are either checked or selected, but doesn’t create duplicate entries. I tried to make a pull request of what I’ve been trying to do with configuration.ini and the combined get checked and selected, but I don’t know if it can be merged because there are a few files I had to commit that had the same name, but the cases were different… I had to commit them with one name and then commit them again with the other name to get past that or I couldn’t do anything with it. Thanks for your help James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 22/04/2021 à 22:17, James Richters via fpc-pascal a écrit : RE: [fpc-pascal] Directory Tree My system could not find DejaVuSans, You can find it in C:\lazarus\fpc\3.2.0\source\packages\fcl-report\demos\fonts. May be you don't need to install the font, just add on the line below where you changed the font: gTTFontCache.SearchPath.Add('C:\lazarus\fpc\3.2.0\source\packages\fcl-report\demos\fonts\'); but I found it in the code and changed it to Consolas which is always included with Windows and is a nice clear monospaced font with nice box characters. Notice it shouldn't be the name displayed for the font by Windows, but its Postscript name, which is buried somewhere in the ttf file, for example CourierNewPSMT for Courier New. It’s almost perfectthe only issue is that there is too much space between the lines, so the verticals don’t touch the way they are supposed it.. it’s not quite double spaced, more like 1-1/4 or 1-3/8 spaced.. if it was single spaced it would be perfect.I don’t know how to control the spacing between lines.I made the font bigger but there was still a gap.If I could close that gap it would be perfect. Is there an easy way to send a page break between the file list and the tree? I'm not an expert of fcl-report but allowing to Michael Van Canneyt response to "fpreport: can not use two ObjectLists as datasource in one report" on 18/03/2021, I think this would be difficult. It think it would need 2 distinct databands which seems to be not possible. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 22/04/2021 à 23:17, James Richters via fpc-pascal a écrit : For some reason the ODT file wants to know if I want to translate it from French, and while the font is “Courier New” for anything I would type into the document, the font of the text itself is “Liberation Serif” If I change the font manually to “Courier New” I get gaps in the vertical lines,but if I change it to “Consolas” there are no gaps and it looks perfect. Basically, I think you should replace the FileVirtualTree_txt_to_odt.odt by one created on your machine. Just create an empty document in Word and save it in odt format as FileVirtualTree_txt_to_odt.odt. To change the font, don't modify it directly in the paragraph, but modify the default style, change the font of the default style to the one which fits the best for you. Eventually, you could make a style with a specific name, and specify it in the pascal code. I have changed the font of the default style to Consolas. It works on my Windows machine, but not on Ubuntu. I have switched the language to English US too. So I thought I should be able to just save a template with the font set to “Consolas” and the spacing set to “No Spacing” which is basically single spacing it.. Well when I save it like that, when I try to run it I get: Unable to Open File: C:\Users\James\AppData\Local\Temp\Fi8004.odt Press OK and risk data corruption or press abort to kill the program I think it must have something to do with using Microsoft Word to save the template. May be the file was already opened ? or the template broken ? (saved in docx format instead of odt ?) ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
For some reason the ODT file wants to know if I want to translate it from French, and while the font is “Courier New” for anything I would type into the document, the font of the text itself is “Liberation Serif” If I change the font manually to “Courier New” I get gaps in the vertical lines, but if I change it to “Consolas” there are no gaps and it looks perfect. So I thought I should be able to just save a template with the font set to “Consolas” and the spacing set to “No Spacing” which is basically single spacing it.. Well when I save it like that, when I try to run it I get: Unable to Open File: C:\Users\James\AppData\Local\Temp\Fi8004.odt Press OK and risk data corruption or press abort to kill the program I think it must have something to do with using Microsoft Word to save the template. James From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Wednesday, April 21, 2021 6:21 PM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree Another way of seeing is to generate and odt file with the generated text. You get a slightly better rendering because I could define Courier New as default font in the new template: FileVirtualTree_txt_to_odt.odt >From the OpenOffice "File" menu, you can generate a pdf file. There is a way too, to execute LibreOffice/OpenOffice from command line to convert directly the odt to pdf. I have some code for this at https://github.com/jsuzineau/pascal_o_r_mapping/blob/master/OOo/uOD.pas, in methods - function TOD.Executable_soffice: String; - function TOD.Format_Sortie_from_(_Nom_ODT: String): String; - function TOD.PDF_from_(_Nom_ODT: String): String; but it can't be used as is for the current case. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>But I've included the source code from this project and modified the code to >produce the pdf. >I've had trouble with the fonts but it seems to works reasonably well with >DejaVuSans. >It's not the ideal font, but box characters are displayed relatively correctly. >I'm not 100% sure it will work for you. My system could not find DejaVuSans, but I found it in the code and changed it to Consolas which is always included with Windows and is a nice clear monospaced font with nice box characters. It’s almost perfect the only issue is that there is too much space between the lines, so the verticals don’t touch the way they are supposed it.. it’s not quite double spaced, more like 1-1/4 or 1-3/8 spaced.. if it was single spaced it would be perfect. I don’t know how to control the spacing between lines. I made the font bigger but there was still a gap. If I could close that gap it would be perfect. Is there an easy way to send a page break between the file list and the tree? James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Another way of seeing is to generate and odt file with the generated text. You get a slightly better rendering because I could define Courier New as default font in the new template: FileVirtualTree_txt_to_odt.odt From the OpenOffice "File" menu, you can generate a pdf file. There is a way too, to execute LibreOffice/OpenOffice from command line to convert directly the odt to pdf. I have some code for this at https://github.com/jsuzineau/pascal_o_r_mapping/blob/master/OOo/uOD.pas, in methods - function TOD.Executable_soffice: String; - function TOD.Format_Sortie_from_(_Nom_ODT: String): String; -function TOD.PDF_from_(_Nom_ODT: String): String; but it can't be used as is for the current case. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 18/04/2021 à 17:22, James Richters via fpc-pascal a écrit : RE: [fpc-pascal] Directory Tree I figured out how to make a pdf file, but I don’t know how to implement it… if we can just have a button to print result.txt… then I could just change the printer to Microsoft Print to PDF which is included with Widows 10…. There is a Freepascal utility for converting a text file to pdf. Supposing your lazarus is installed at c:\lazarus, it 'll be at C:\lazarus\fpc\3.2.0\source\packages\fcl-report\demos\txt2pdf.lpi It doesn't display the correct chars if you compile and execute it directly on Result.txt on the command line. But I've included the source code from this project and modified the code to produce the pdf. I've had trouble with the fonts but it seems to works reasonably well with DejaVuSans. It's not the ideal font, but box characters are displayed relatively correctly. I'm not 100% sure it will work for you. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I updated Lazarus to Lazarus 2.0.12 / fpc 3.2.0 and that indeed did fix the default encoding error. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>I use currently Lazarus 2.0.12 / fpc 3.2.0. I have Lazarus 2.04 / fpc 3.04 I have fpc 3.2.0 in another directory. It should be easy enough for me to re-install Lazarus. Thanks for figuring that out! >I have corrected this point, it should work now. Yes it looks fixed even in my large data file. Thank you. I figured out how to make a pdf file, but I don’t know how to implement it… if we can just have a button to print result.txt… then I could just change the printer to Microsoft Print to PDF which is included with Widows 10…. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 18/04/2021 à 16:10, James Richters via fpc-pascal a écrit : RE: [fpc-pascal] Directory Tree I getuFileVirtualTree.pas(533,9) Error: identifier idents no member "DefaultEncoding" It seems, using svn blame, that DefaultEncoding has been added in FreePascal source trunk on the svn server on June 4th 2019. I don't know the version number of the fpc release following this date but it's likely your lazarus/freepascal is older than mine. I use currently Lazarus 2.0.12 / fpc 3.2.0. It has the incorrect character in front of File1, It’s a vertical_line_char instead of a crossing_char. I have corrected this point, it should work now. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Thanks for figuring that out. I get uFileVirtualTree.pas(533,9) Error: identifier idents no member "DefaultEncoding" For line:sl.DefaultEncoding:= TEncoding.GetEncoding(850); If I just comment out that line, it works fine for me, because I'm codepage 850 anyway, but that doesn't help anyone else who may not be on 850 I’m getting this now: (not sure if the box characters will come though everyone’s email but they look right on my email) M: = 32:34 ├───Project1 = 18:30 │ │───File1 = 8:32 │ ├───File2 = 7:43 │ └───File3 = 2:15 └───Project2 = 14:04 └───Component1 = 14:04 ├───Part1 = 5:32 └───Part2 = 8:32 It has the incorrect character in front of File1, It’s a vertical_line_char instead of a crossing_char. I get the same thing on my large ini file.. and there is a pattern… the last two files on a branch are always correct, and everything above that are not.. they are using the vertical line instead of a crossing character.. so if there are 7 files in the branch, the first 5 will be vertical lines , the 6th one will be the correct crossing character and the 7th will be the correct angle character. Thank you again for the help! James -Original Message- From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Saturday, April 17, 2021 8:07 PM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree In Unicode/UTF8 "char" can be represented by several bytes so my code won't work. It seems you use page code 850 (here in France we are in 1252 which doesn't have the box chars). In unit uFileVirtualTree line 469, I have added type String850= type String(850); declared the local variable s of String850 on line 488, and changed on line 533 the default encoding of the Stringlist to 850 by sl.DefaultEncoding:= TEncoding.GetEncoding(850); It seems to be sufficient to get the box characters. I didn't dig further but it seems to work either on Windows and Linux and in text file generated. In the ODT file I used a numbered list but I think it will be difficult to get something closer to a tree. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org <mailto:fpc-pascal@lists.freepascal.org> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
In Unicode/UTF8 "char" can be represented by several bytes so my code won't work. It seems you use page code 850 (here in France we are in 1252 which doesn't have the box chars). In unit uFileVirtualTree line 469, I have added type String850= type String(850); declared the local variable s of String850 on line 488, and changed on line 533 the default encoding of the Stringlist to 850 by sl.DefaultEncoding:= TEncoding.GetEncoding(850); It seems to be sufficient to get the box characters. I didn't dig further but it seems to work either on Windows and Linux and in text file generated. In the ODT file I used a numbered list but I think it will be difficult to get something closer to a tree. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I tried vertical_line_char=#179; horizontal_line_char=#196; angle_char=#192; crossing_char=#195; which are the appropriate ASCII box characters... but it produces: M: = 32:34 Project1 = 18:30 ? File1 = 8:32 ? File2 = 7:43 ? File3 = 2:15 Project2 = 14:04 Component1 = 14:04 Part1 = 5:32 Part2 = 8:32 I also tried vertical_line_char=chr(179); horizontal_line_char=chr(196); angle_char=chr(192); crossing_char=chr(195); then I thought they must be Unicode.. so I tried the Unicode box characters: vertical_line_char=$2502; horizontal_line_char=$2500; angle_char=$2514; crossing_char=$251C; but that gave me errors saying my constants were out of range and must be between 0 and 255... so if they have to be between 0 and 255, then they should be ACSII characters.. .so my original characters should have worked... so maybe it's just my text editor that's the problem... is there a way we can maybe make it rich text format so the font can be specified? Then I could specify Consolas which is a fixed width font and get the box characters from that... or maybe there is a way to do this with the ODT file. The ODT file opens in MS Word, but it doesn't draw the tree, it has text Like: 1 1.1 M: 32:34 1.1.1 Project1 18:30 1.1.1.1 File1 8:32 1.1.1.2 File2 7:43 Any ideas how to get box characters to work? James -Original Message- From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Friday, April 16, 2021 6:23 PM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree Le 15/04/2021 à 20:16, James Richters via fpc-pascal a écrit : > It doesn't have to be a PDF, it could be an image file, or even a text > file...maybe I can just make a text file of the output and use box > characters to draw the tree. It seems like I should be able to get the > branches of the treedata somehow and just do a writeln to a file with > the right formatting. I have added a text rendering of the tree, it's saved in a text file Result.txt. The rendering code is in unit uFileVirtualTree, function ThVirtualStringTree.render_as_text. It's called in ufFileVirtualTree in procedure TfFileVirtualTree.bGetCheckedClick: m.Lines .Text:= slResult.Text+#13#10+hvstResult.render_as_text; m.Lines .SaveToFile('Result.txt'); In function ThVirtualStringTree.render_as_text I used 3 constants for the chars used for drawing the tree outline: vertical_line_char='|'; horizontal_line_char='-'; angle_char='*'; crossing_char='L'; You can tune this to your needs. I have added to a rendering as numbered list in an odt file, the text file format for Libre Office and Open Office. The "template" FileTree.odt is duplicated with a temp name in the user temp directory, and opened in the software register in windows for opening odt files by the function OpenDocument() of Lazarus. Depending on your installation it can be open in Libre Office/OpenOffice or in MS Word (sometimes the rendering is not perfect in Word). Before recompiling the project, you will need to open first in Lazarus the package pascal_o_r_mapping\02_Units\OD_DelphiReportEngine_Units.lpk in order to make Lazarus know where it is. If for some reason you can't load this package, you can remove it from the dependency panel of the project inspector, and in unit ufFileVirtualTree, comment out in the use clause the unit uFileVirtualTree_odt, and comment out in procedure TfFileVirtualTree.bGetCheckedClick the line: OpenDocument( FileVirtualTree_odt( 'FileTree.odt', hvstResult)); I've considered making a screenshot of virtual tree component but if the whole opened tree doesn't fit in the screen it will not work. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 15/04/2021 à 20:16, James Richters via fpc-pascal a écrit : It doesn't have to be a PDF, it could be an image file, or even a text file...maybe I can just make a text file of the output and use box characters to draw the tree. It seems like I should be able to get the branches of the treedata somehow and just do a writeln to a file with the right formatting. I have added a text rendering of the tree, it's saved in a text file Result.txt. The rendering code is in unit uFileVirtualTree, function ThVirtualStringTree.render_as_text. It's called in ufFileVirtualTree in procedure TfFileVirtualTree.bGetCheckedClick: m.Lines .Text:= slResult.Text+#13#10+hvstResult.render_as_text; m.Lines .SaveToFile('Result.txt'); In function ThVirtualStringTree.render_as_text I used 3 constants for the chars used for drawing the tree outline: vertical_line_char='|'; horizontal_line_char='-'; angle_char='*'; crossing_char='L'; You can tune this to your needs. I have added to a rendering as numbered list in an odt file, the text file format for Libre Office and Open Office. The "template" FileTree.odt is duplicated with a temp name in the user temp directory, and opened in the software register in windows for opening odt files by the function OpenDocument() of Lazarus. Depending on your installation it can be open in Libre Office/OpenOffice or in MS Word (sometimes the rendering is not perfect in Word). Before recompiling the project, you will need to open first in Lazarus the package pascal_o_r_mapping\02_Units\OD_DelphiReportEngine_Units.lpk in order to make Lazarus know where it is. If for some reason you can't load this package, you can remove it from the dependency panel of the project inspector, and in unit ufFileVirtualTree, comment out in the use clause the unit uFileVirtualTree_odt, and comment out in procedure TfFileVirtualTree.bGetCheckedClick the line: OpenDocument( FileVirtualTree_odt( 'FileTree.odt', hvstResult)); I've considered making a screenshot of virtual tree component but if the whole opened tree doesn't fit in the screen it will not work. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Thanks for the explanations and fixing your sample program. I thought there would probably be an easy way to save settings in an Ini File >>Is there a way to export the file list and the second TVirtualStringTree to a >>PDF file? >As far as I know, there is no way to directly export it. I will have a look if >I have some time. It doesn't have to be a PDF, it could be an image file, or even a text file...maybe I can just make a text file of the output and use box characters to draw the tree. It seems like I should be able to get the branches of the treedata somehow and just do a writeln to a file with the right formatting. James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 15/04/2021 à 15:31, James Richters via fpc-pascal a écrit : How did you make the TVirtualStringTree open the first level? I've been looking to see how you did it but I don't see how that was done. unit uFileVirtualTree, line 360, method ThVirtualStringTree.vst_expand_first_level; I would like to have the second TVirtualStringTree expanded all the way out. it's easier, just : vst.FullExpand; You'll find it line 373, method ThVirtualStringTree.vst_expand_full; Is there a way to export the file list and the second TVirtualStringTree to a PDF file? As far as I know, there is no way to directly export it. I will have a look if I have some time. I would like to save settings to an INI file, things like window size, divider positions, ect.. I have done this with INI files in my console apps, I just write out every variable I want to save and read them back in.. but I'm curious if Lazarus is more sophisticated.. maybe it has a way to save all settings for a form by itself? Or do I do it the same way as my console app and save each variable myself? Where is the proper place to load the INI file, where it would happen before the forms are displayed, and where is the proper place to save the INI file right before the program is closed? From tab "Misc", just drop a TIniPropStorage on your form. You need to set the ini filename in the component. Then in the properties of the form, you'll find the SessionProperties property with a "..." button on the right. This opens a dialog which allows you to configure which properties of which components you want to persist. I have added this , configured for a "Configuration.ini" file and "fFileTree" section. The following link is for TXMLPropStorage, but it work nearly the same for TIniPropStorage. Just read the first paragraph "Using TForm.SessionProperties and TXMLPropStorage" https://wiki.freepascal.org/Remember_form_position_and_size#Using_TForm.SessionProperties_and_TXMLPropStorage ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>I finally found on my linux machine a 'test_gICAPI\jsLignes.Exclus.txt' >... >It should work for you now. I've tested several time checking out the whole >repository and switching to the TjsDataContexe branch It does work, but not perfectly. I'm using GitKracken and Github desktop. I am able to change to the TjsDataContexe branch now, but when I do, a lot of files show up in staged files as being removed, and I can't unstage them.. when I try, their case changes.. so an example is: jsWorks/Generateur_de_code/04_Parametres/PROJECT.Details.txt if try to unstage the deleted file, it changes to jsWorks/Generateur_de_code/04_Parametres/Project.Details.txt there are 21 files like this all in jsWorks/Generateur_de_code/04_Parametres >This way I could add another VirtualTreeView with no checkboxs to display the >results. I think it's easier to use a VirtualTreeView to manage your time sums. >The ThVirtualStringTree class allows to reuse the exact same code for the >result tree with time sums, and it allows reduce the complexity and the amount >of code in ufFileVirtualTree. The two TVirtualStringTrees are very nice and keeping the file list above was a great idea. A few questions, I hope you don't mind: How did you make the TVirtualStringTree open the first level? I've been looking to see how you did it but I don't see how that was done. I would like to have the second TVirtualStringTree expanded all the way out. Is there a way to export the file list and the second TVirtualStringTree to a PDF file? I would like to save settings to an INI file, things like window size, divider positions, ect.. I have done this with INI files in my console apps, I just write out every variable I want to save and read them back in.. but I'm curious if Lazarus is more sophisticated.. maybe it has a way to save all settings for a form by itself? Or do I do it the same way as my console app and save each variable myself? Where is the proper place to load the INI file, where it would happen before the forms are displayed, and where is the proper place to save the INI file right before the program is closed? Thanks again! James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 14/04/2021 à 13:06, James Richters via fpc-pascal a écrit : I still can’t get off the Master branch on my windows machine. I deleted everything, re-forked it, re-cloned it, I finally found on my linux machine a 'test_gICAPI\jsLignes.Exclus.txt' file right in tools directory, and removed it. It has been generated by a delphi program (with \ hardcoded for file path separator) that I quickly recompile with lazarus under linux. The \ is an escape sequence in linux file names. It seems it isn't a problem for TortoiseGit on my Windows machine, he just ignores it. It should work for you now. I've tested several time checking out the whole repository and switching to the TjsDataContexe branch I added a Load Time edit box, Total Run time, and total including loading needed in the report… Yay I managed to do something on my own! I also cleared the old tree when a new file was loaded.. so I managed to do two things 😊 I wanted my run time to be just minutes and seconds, so I made your procedure that fixes the time format into a function and used that for my edit box as well. Since I still can't change branches on your repository, I updated mine https://github.com/Zaaphod/FileTree But now I have more questions…. while I can understand the pascal code… I find that I am still a bit lost on how things work, so I really appreciate the help. I would like the initial display of the tree to be expanded one level.. so just like I hit the + in front of M: so I thought, how hard could that be? ... I have added a procedure vst_expand_first_level; for this . I also thought I would display the output in another tree in the right side of the split.. maybe a TTreeView Tree since it won't need checkboxes, and it could be just displayed already expanded all the way out. o I thought I would start by making function TfFileVirtualTree.Get_Checked add the nodes to TTreeView so I tried to put tv_addnode_from_key_value( td.Key, td.Value); right before Formate_Liste( Result, #13#10, td.Key+' '+td.Value); Well it couldn't find tv_addnode_from_key_value() because it's in ufFileTree.Pas but I don't understand why it can't find it, because ufFileTRee is in the uses section of ufFileVirtualTree. I did move procedure tv_addnode_from_key_value( _Key, _Value: String); from private to public.. but it still can't find it. I'm not really sure how to get data from one of the .PAS files into the other. Even in public, you would have needed to call it as fFileTree.tv_addnode_from_key_value , but it will have worked on the TreeView from fFileTree, which is not what you want. You can consider a bit a class as a record. If tv_addnode_from_key_value is defined in a class TfFileTree, you can only call it on an instance of TfFileTree, in this case fFileTree, the same way you would access to something defined in a record. Well, this lead me to a big refactoring. I move most of the code from ufFileTree to uFileTree. I didn't put it in the interface of the unit, but you could now eventually use procedure TreeView_addnode_from_key_value from uFileTree for this. I did the same for ufFileVirtualTree, creating a unit uFileVirtualTree with a class ThVirtualStringTree dedicated to the handling of a TVirtualStringTree. This way I could add another VirtualTreeView with no checkboxs to display the results. I think it's easier to use a VirtualTreeView to manage your time sums. The ThVirtualStringTree class allows to reuse the exact same code for the result tree with time sums, and it allows reduce the complexity and the amount of code in ufFileVirtualTree. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
>I've removed this file. I work both with Linux and Windows, most of the time >it's ok I still can’t get off the Master branch on my windows machine. I deleted everything, re-forked it, re-cloned it, and I still can’t check out any branch other than Master… It’s not that important I just re-downloaded all the files from the github website.. but it’s tedious that way, I have to look at each file, then click on Raw then save as, then get rid of the .txt it wants to put at the end.. >I've added a few lines to handle this. >Conversion from datetime to string is in TTreeData.SetdValue, and conversion >from string to datetime is in TTreeData.SetValue. Thank you, that works better than what I was trying to do and now it displays the way I would like and the totals also come out correct. >I have added a gauge and a buttton to trigger the processing. Thanks, that works great! >I find the execution relatively slow on Windows, I can see the progression of >the gauge. >On Ubuntu the result appears instantly, I can't see the progression of the >gauge ( and my linux machine is less powerful than my windows machine The real INI file has over 4000 entries in it, so it takes about 30 seconds to load, so the gauge is really helpful. I added a Load Time edit box, Total Run time, and total including loading needed in the report… Yay I managed to do something on my own! I also cleared the old tree when a new file was loaded.. so I managed to do two things 😊 I wanted my run time to be just minutes and seconds, so I made your procedure that fixes the time format into a function and used that for my edit box as well. Since I still can't change branches on your repository, I updated mine https://github.com/Zaaphod/FileTree But now I have more questions…. while I can understand the pascal code… I find that I am still a bit lost on how things work, so I really appreciate the help. I would like the initial display of the tree to be expanded one level.. so just like I hit the + in front of M: so I thought, how hard could that be? ... well since I don't even see where hitting the + expands a level, and don't know the command to expand it or how to identify that first level.. I find I'm lost again I've been going through Code Explorer and Object Inspector trying to figure out how this might be done, but I don't see how to find a command to expand a branch. I also thought I would display the output in another tree in the right side of the split.. maybe a TTreeView Tree since it won't need checkboxes, and it could be just displayed already expanded all the way out. o I thought I would start by making function TfFileVirtualTree.Get_Checked add the nodes to TTreeView so I tried to put tv_addnode_from_key_value( td.Key, td.Value); right before Formate_Liste( Result, #13#10, td.Key+' '+td.Value); Well it couldn't find tv_addnode_from_key_value() because it's in ufFileTree.Pas but I don't understand why it can't find it, because ufFileTRee is in the uses section of ufFileVirtualTree. I did move procedure tv_addnode_from_key_value( _Key, _Value: String); from private to public.. but it still can't find it. I'm not really sure how to get data from one of the .PAS files into the other. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Le 13/04/2021 à 13:50, James Richters via fpc-pascal a écrit : I tried to make a fork of your repository but I could not change off the master branch,, I always get an error: Checkout Failed Cannot checkout to invalid path 'tools/text_glCAPI\jsLignes.Exclus.txt' I suspect the / in the path is the problem because I am on Windows and it can only use \ for the path.. but I don't know how to fix it, so I just made my own repository of this so I can use GitHub. The current version is at https://github.com/Zaaphod/FileTree I've removed this file. I work both with Linux and Windows, most of the time it's ok, but it can happen when by mistake I commit some files with weird names that can cause some havoc in git in Windows ... For example the same file name but with differences in char case: 'tools/jsFichiers/JSFICHIERS_Resultat_du.txt' 'tools/jsFichiers/jsFichiers_Resultat_du.txt' I noticed the time was in hours and minutes, but it's supposed to be in minutes and seconds, but sometimes it's in hours and minutes and seconds, so I tried to fix this.. it seems to be fixed ok for the totals, but to fix it I had to put the extra 0: in front of all my times so they are 0:03:20 instead of 3:20 I was able to display it the way I want in the totals, but I don't see how to change how it's displayed in the files.. so they are displaying with the extra 0: now. I've added a few lines to handle this. Conversion from datetime to string is in TTreeData.SetdValue, and conversion from string to datetime is in TTreeData.SetValue. But I noticed the VirtualTreeView is not building the tree correctly. I am getting I made an error in TfFileVirtualTree.vst_addnode_from_key_value:Recursif. With "slNodes.AddObject( sCle, TObject(Parent));" , M:\Project1\File2 ended up in M: instead of M:\Project1 Corrected with : slNodes.AddObject( sCle, TObject(Node)); The program takes a while to load with a large datafile, is there a way to put up some kind of screen immediately, even just a box that says loading... just to let the user know the program was started so they don’t try to start it again? Or even more fun.. have a bargraph showing the progress through the INI file 😊 (something I have absoilutly no idea how to accomplish) I have added a gauge and a buttton to trigger the processing. I find the execution relatively slow on Windows, I can see the progression of the gauge. On Ubuntu the result appears instantly, I can't see the progression of the gauge ( and my linux machine is less powerful than my windows machine). Thanks again for the help with this! With pleasure. I couldn't do this all the time, but it happens I have a bit of free time for this these days. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I tried to make a fork of your repository but I could not change off the master branch,, I always get an error: Checkout Failed Cannot checkout to invalid path 'tools/text_glCAPI\jsLignes.Exclus.txt' I suspect the / in the path is the problem because I am on Windows and it can only use \ for the path.. but I don't know how to fix it, so I just made my own repository of this so I can use GitHub. The current version is at https://github.com/Zaaphod/FileTree I noticed the time was in hours and minutes, but it's supposed to be in minutes and seconds, but sometimes it's in hours and minutes and seconds, so I tried to fix this.. it seems to be fixed ok for the totals, but to fix it I had to put the extra 0: in front of all my times so they are 0:03:20 instead of 3:20 I was able to display it the way I want in the totals, but I don't see how to change how it's displayed in the files.. so they are displaying with the extra 0: now. Also my input INI File data is not sorted... so I sorted the Tstring list, that seemed to have worked. But I noticed the VirtualTreeView is not building the tree correctly. I am getting M: Project 1 File 1 File 2 File 3 Project2 Component1 Part1 Part2 Project3 Part1 Part2 Part3 Part4 Part5 Part6 Part7 It should be M: Project 1 File 1 File 2 File 3 Project2 Component1 Part1 Part2 Project3 Part1 Part2 Part3 Part4 Part5 Part6 Part7 The TTreeView is correct. Any ideas why this is? I'm not sure if I broke something when I tried to fix the time to minutes and seconds... or if it has to do with the INI file not being sorted... The program takes a while to load with a large datafile, is there a way to put up some kind of screen immediately, even just a box that says loading... just to let the user know the program was started so they don’t try to start it again? Or even more fun.. have a bargraph showing the progress through the INI file 😊 (something I have absoilutly no idea how to accomplish) Thanks again for the help with this! James -Original Message- From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Sunday, April 11, 2021 6:53 PM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree I have updated the VirtualTreeView example with sub-totals of time. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I have updated the VirtualTreeView example with sub-totals of time. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
TStringList works pretty much like an inifile section. The index corresponds to the line number in you text block. The Names property corresponds to the part of the line before the '=' char. The ValueFromIndex property corresponds to the part of the line after the '=' char. So if you line i contains "M:\Project1\File1=8:32", Names[i] will returns "M:\Project1\File1" and ValueFromIndex returns "8:32" The text block (property Text) is viewed like a kind of list of virtual records "name=value" You can iterate the nodes in the TreeView and change their text. I have updated the example with a VirtualTreeView on a new form (you should download all the files in a different directory). It's more complex to implement, but with checkboxes you just need a simple click. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I had a feeling it wouldn't be easy to change, but thought I would ask. I like the selected items to be highlighted as they are in your TTreeview example. I'm confused by your reference to slFiles.Names and slFiles.ValueFromIndex I am trying to see how those got defined. I see slFiles is a TStringList, I thought a TStringList was strictly a list of strings, but this seems to be more like a list of records, but don't see how the records were ever defined.. and I didn't know this was something you could even do with TStringList. In fact I like the records a lot better than just strings, but I'm trying to figure out how it was accomplished. I'm also trying to figure out where the tree data is stored and if I can modify it? Once the tree is built, I would like to go through and modifiy all the parent names with the total times of all the children under the parent. Is this even possible with TTreeView? Or is this another reason I might use something else? Or will I have to re-build the input file to include the totals somehow? James -Original Message- From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Sunday, April 11, 2021 9:23 AM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree Indeed, I think it's difficult (if possible) to change the behaviour of the multiselection this way. The TTreeview.MultiSelectStyle property allows you to change from CtrL+Click to Shift+Click. https://lazarus-ccr.sourceforge.io/docs/lcl/comctrls/tmultiselectstyle.html To make the multi selection with just a left click, I think the best way would be to use the TVirtualTreeView with checkboxes. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Indeed, I think it's difficult (if possible) to change the behaviour of the multiselection this way. The TTreeview.MultiSelectStyle property allows you to change from CtrL+Click to Shift+Click. https://lazarus-ccr.sourceforge.io/docs/lcl/comctrls/tmultiselectstyle.html To make the multi selection with just a left click, I think the best way would be to use the TVirtualTreeView with checkboxes. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Jean, Thank you very much for the example! That gives me a great start and I really appreciate the effort you put in. Thanks for re-sending it, the first one never came though. I was able to replace the sample INI file with some of the real data and it all came in very nicely! I'm curious if there is a way that I can make the selections with a normal left click.. or better yet make left-click toggle the selection? So... the same as ctrl-click wihtout holding down control I know the normal way you make multiple selections in Windows is with CTRL-Click, so I don't know is there is a way to change this that isn't super complicated. James -Original Message- From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Friday, April 9, 2021 7:36 PM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree (I re-send my mail with different sender, it seem the first one has been blocked by orange) I made a short example based on TTreeView with your data at : https://github.com/jsuzineau/pascal_o_r_mapping/tree/TjsDataContexte/tools/FileTree You just need to download all the files , open project FileTree.lpi in Lazarus and hit F9. You can multi-select with Ctrl+Click and see you select with "Get Selection" button. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
(I re-send my mail with different sender, it seem the first one has been blocked by orange) I made a short example based on TTreeView with your data at : https://github.com/jsuzineau/pascal_o_r_mapping/tree/TjsDataContexte/tools/FileTree You just need to download all the files , open project FileTree.lpi in Lazarus and hit F9. You can multi-select with Ctrl+Click and see you select with "Get Selection" button. ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
The data I'm trying to display in the tree is a list of filename, but they aren't the names of the files on the disk, they are modified to include the time they take to run on a CNC machine. What I have is an INI file with a list like this: [Files] M:\Project1\File1=8:32 M:\Project1\File2=7:43 M:\Project1\File3=2:15 M:\Project2\Component1\Part1=5:32 M:\Project2\Component1\Part2=8:32 ... I want to display all these in a tree including run time appended at the end... I could just read the INI file as a text file and replace all the = with spaces. I need the to allow the user to open and collapse branches of the tree, Select either individual branches or separate files, and remember they are selected even if a branch is collapsed.. then when they hit a button, I get a TstringList of the selected files.. then I can just process the string list to generate a cut list and extract all the run times and give the user a total runtime needed. The selections don't have to be checkboxes... things could just get highlighted and stay highlighted while other things are selected I'm trying to keep this simple, as I have very little experience with Lazarus, or any GUI programming... I have 30+ years of Pascal, but only did very small simple projects with Lazarus. I went to: https://wiki.freepascal.org/VirtualTreeview_Example_for_Lazarus Where it states: "The tutorial/docs can be downloaded from http://www.soft-gems.net. Below someone would find only the quick way to use VirtualTreeview on Lazarus, not explanations. For explanations and lots of other functions/methods, get the official documents and the tutorial." But the link for the tutorial / docs doesn't have anything about VirtualTreeview anymore. Any idea if the full documentation exists anywhere? ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
If you just select files, as Bart stated in another message, I think TShellTreeView will be more adequate and easier than TTreeView (actually TShellTreeView is a file tree specific descendent TTreeView). In TTreeView (and TShellTreeView) you can enable multiselection by adding tvoAllowMultiSelect in Options set (something like "with TreeView1 do Options:=Options+[tvoAllowMultiSelect];" or better by just checking Options/tvoAllowMultiSelect in the Object inspector) https://wiki.freepascal.org/TTreeView#Example_of_using_Multiple_Node_Selection_for_Multiple_User_Selections If you want checkboxes, I think it's possible with TVirtualStringTree from the VirtualTreeView package, it may be a bit harder to implement (as far as I remember you need your own data structure to store the status of the tree) : https://wiki.freepascal.org/VirtualTreeview https://wiki.freepascal.org/VirtualTreeview_Example_for_Lazarus#Checkbox VirtualTreeView package is included in Lazarus v2.0+, but I'm not sure it's installed by default: if you don't find a tab "Virtual controls" in your components, you may need to go to Package menu/Install packages, select virtualtreeview_package 5.5.3.1 for installation and rebuild Lazarus. Here you should enable multiselection with something like with VirtualStringTree1.TreeOptions do SelectionOptions:=SelectionOptions+[toMultiSelect]; or by checking TreeOptions/SelectionOptions/toMultiSelect in the Object inspector when your VirtualStringTree1 is selected. (I've used VirtualTreeView a while ago, I didn't test checkboxes today) ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
It looks like Lazarus is going to be the best way. I've been looking at TTreeView... but I'm not sure I can make it do what I want. I need to select multiple items in the tree at the same time, and then get a list of what has been selected. Is there a way to add checkboxes to the tree with TTreeView? Or is there a better tree object I should look at? I am also wondering if there is some convenient method of saving a tree to some kind of data file, and later restoring the data file to the tree. It seems that since trees are all over the place that maybe there is already a built in way to load a data file that somehow designates the hierarchical order. James -Original Message- From: fpc-pascal On Behalf Of James Richters via fpc-pascal Sent: Tuesday, April 6, 2021 1:13 PM To: 'FPC-Pascal users discussions' Cc: James Richters ; 'Jean SUZINEAU' Subject: Re: [fpc-pascal] Directory Tree I'm developing a new application where the user will need to select items from a tree structure.. I'm trying to figure out how to do the tree at all, and allow the user to select multiple files and/or folders. If the tree is going to be too complicated in text mode, then maybe I'll have to figure out Lazarus and go that way. I haven't even started the project yet, but this tree selection with the ability to expand or collapse branches is going to be a big part of it, so I'm trying to see what's available. James -Original Message- From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Tuesday, April 6, 2021 8:46 AM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree As far as I understand, you are searching for a general tree component like TTreeView in Lazarus, but for FreeVision, running in text mode in console ? ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
I'm developing a new application where the user will need to select items from a tree structure.. I'm trying to figure out how to do the tree at all, and allow the user to select multiple files and/or folders. If the tree is going to be too complicated in text mode, then maybe I'll have to figure out Lazarus and go that way. I haven't even started the project yet, but this tree selection with the ability to expand or collapse branches is going to be a big part of it, so I'm trying to see what's available. James -Original Message- From: fpc-pascal On Behalf Of Jean SUZINEAU via fpc-pascal Sent: Tuesday, April 6, 2021 8:46 AM To: fpc-pascal@lists.freepascal.org Cc: Jean SUZINEAU Subject: Re: [fpc-pascal] Directory Tree As far as I understand, you are searching for a general tree component like TTreeView in Lazarus, but for FreeVision, running in text mode in console ? ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
On Tue, Apr 6, 2021 at 12:29 PM James Richters via fpc-pascal wrote: > Or Am I going to be better off going graphical with Lazarus for something > like this? TShellTreeView in Lazarus should do exactly what you want. It's not console though. -- Bart ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
On 2021-04-06 14:43, James Richters wrote: Is there any documentation or a sample program for TDirListBox? I tried doing a search but only found a page that showed it's functions and procedures, but no real explanation on what they are supposed to do. The functionality is used within the text mode IDE (sources are in package IDE). In particular TChDirDialog (still part of FV, in particular) is invoked using File / ChDir and it contains TDirListBox as one of its subcomponents. The respective implementation is in the include file fpmfile.inc (search for PChDirDialog). It's rather simple (but it might be enhanced in a possible descendent, of course). Tomas ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
As far as I understand, you are searching for a general tree component like TTreeView in Lazarus, but for FreeVision, running in text mode in console ? ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
Is there any documentation or a sample program for TDirListBox? I tried doing a search but only found a page that showed it's functions and procedures, but no real explanation on what they are supposed to do. James >FPC package FV (FreeVision) contains an object TDirListBox which allows >traversing the directory tree, but it doesn't provide a generic feature of >collapsing / expanding (you can expand just one directory). ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Re: [fpc-pascal] Directory Tree
On 2021-04-06 12:29, James Richters via fpc-pascal wrote: Does FPC include any tools to display a directory tree, similar to the way files and folders are normally displayed, but I want to make my own custom entries. Have the branches expand and collapse etc.. It doesn't have to be graphical, it can be text based. Or Am I going to be better off going graphical with Lazarus for something like this? Lazarus shall be a more appropriate choice for a graphical output. If talking about text output, FPC package FV (FreeVision) contains an object TDirListBox which allows traversing the directory tree, but it doesn't provide a generic feature of collapsing / expanding (you can expand just one directory). Tomas ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
[fpc-pascal] Directory Tree
Does FPC include any tools to display a directory tree, similar to the way files and folders are normally displayed, but I want to make my own custom entries. Have the branches expand and collapse etc.. It doesn't have to be graphical, it can be text based. Or Am I going to be better off going graphical with Lazarus for something like this? James ___ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal