Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation on 12/29/21 in all areas

  1. dummzeuch

    Bookmarks dead?

    While I agree in principle, an open source project without somebody actually maintaining it, is pretty much useless. And I can tell you from experience that it takes a lot of time and effort. On the other hand, a closed source plugin without somebody maintaining it, is totally useless once a new Delphi version is released.
  2. dummzeuch

    Bookmarks dead?

    A mess like this is the reason why I am usually not thrilled when Embarcadero buys some tool or some components/library and takes over maintenance.
  3. David Heffernan

    Encrypting string

    Fair enough. Let's just switch to PHP then and be done with it. Bruh.
  4. baoquan.zuo

    Special Offer for Documentation Insight

    Thanks for the kind words! I must admit, the current status of the product is far away from my expectation and I'm really sorry that the new version has not come out in such a long time. However, there is much in-progress working on the product. I hope good things will happen in the upcoming 2022.
  5. Remy Lebeau

    how to respond on user drag of a column border in a listview

    Off the top of my head, something like this: private OldListViewWndProc: TWndMethod; procedure MyListViewWndProc(var Message: TMessage); ... uses ..., Winapi.CommCtrl, Winapi.Messages; procedure TMyForm.FormCreate(Sender: TObject); begin OldListViewWndProc := ListView1.WindowProc; ListView1.WindowProc := MyListViewWndProc; end; procedure TMyForm.MyListViewWndProc(var Message: TMessage); var pnmhdr: PHDNotifyW; begin if Message.Msg = WM_NOTIFY then begin case TWMNotify(Message).NMHdr^.code of HDN_BEGINTRACKW, HDN_ENDTRACKW, HDN_TRACKW: pnmhdr := PHDNotifyW(TWMNotify(Message).NMHdr); // use pnmhdr^ fields as needed: // - pnmhdr^.Item is the index of the column being tracked // - pnmhdr^.Button is the mouse button generating the message: 0=left, 1=right, 2=middle // - pnmhdr^.PItem is a pointer to a THDItemW describing the changes to the tracked column // // to block changes, set Message.Result := 1 and Exit here... end; end; OldListViewWndProc(Message); end;
  6. Tommi Prami

    Bookmarks dead?

    Open Sourcing those plugins would be pretty good choice, depending on things. Might contain lot of closed source code etc which would make it impossible. I think David has other things also, I think some of us might be willing to help 🙂 Also having good quality plugins with ritch GUI would be suberb to have as OpenSource, as a stepping stone for others also. Just my 0.02€
  7. David Heffernan

    Encrypting string

    Nothing there is useful. Hard to get past the basic sin of treating a string as if it were a byte array.
  8. David Heffernan

    Encrypting string

    It doesn't much matter what the thing is that you encrypt. What matters is who encrypts it, and who has knowledge of the key or keys used to encrypt and decrypt. That's what I mean by usage. As for how you do it, convert the text to binary using a well defined encoding, e.g. UTF8, and encrypt that. Encryption algorithms work with binary data not text.
  9. David Heffernan

    Encrypting string

    It depends on what your usage is
  10. Serge_G

    How to make ListView items multiline?

    Hi, What do you mean ? Something like this ? An item with a height depending on the text size You can find the source of this one here https://github.com/Serge-Girard/FMXListView10.4.2, object of a RSP https://quality.embarcadero.com/browse/RSP-33360.
  11. hsauro

    FMX 2D drawing

    If you’ve done any 2d drawing with VCL it’s not too dissimilar to that. If you need interactive drawing, use a TPaintBox component and write your drawing code in the onpaint event. This control can also detect mouse actions so that you can respond to events like mousedown, mouse up and mouse move. https://stackoverflow.com/questions/40677671/how-to-draw-a-line-in-delphi-on-an-fmx-canvas
  12. I've heard about the Omni Thread Library for years, authored by Primož Gabrijelcic, but have never more than glanced at it. Most of the examples I've seen have been fairly basic, and I didn't have any reason to suspect it might be more than what you find in Delphi's PPL. Boy, I couldn't have been more wrong! It took an amazing amount of digging around to find stuff, and after all of this I thought it would be helpful to memorialize my discoveries here for everybody to see. This is truly a remarkable piece of work. The library itself is FOSS, and Primož has posted stuff in his blog about it over time -- which spans 10 years now! It's a LOT of material to go through. You can get the latest source code (V3.07.9) on github here: https://github.com/gabr42/OmniThreadLibrary The version in GetIt is a bit outdated (3.07.7) Rather than publish a detailed Help guide or online resource, he chose to publish a book that can be purchased here: https://leanpub.com/omnithreadlibrary NOTE: you can get the book + the 3 webinars described later for even less than it says below at the LeanPub link. For the record, I don't particularly like digging through source code trying to figure things out, so I started hunting around for other resources. I found a recording (33 min) of CodeRage talk he gave at CodeRage 6 in 2011, and a free replay (MP4 download) of it can be found here: https://cc.embarcadero.com/item/28591 I watched that video and discovered that this is an UTTERLY AMAZING treasure trove of material, and it covers things I never imagined to see! It actually has seven (7) high-level abstract APIs (if you will) that really surprised me to see -- I'd figured it was mostly just the first few that are found in most threading libraries. * Async -- start a background task and continue -- this is similar to, yet more than what Delphi's PPL does * Future -- start background task, do some work, then wait to retrieve the result * ParallelTask -- start multiple copies of one task (for background procesing) and then wait for them all to complete * Join -- start several different background tasks and then wait for them to complete * Fork/Join -- do a divide and conquer, in parallel * ForEach -- perform a parallel iteration over an integer range, or on the contents of any container with built-in iterators (ie, that support for-in) * Pipeline -- run a multi-stage process I found a post here referring to an article using Deplhi's TCountdownEvent that has a bunch of code that does what Fork/Join does in just a handful of lines of code. What really blew my socks off were the ForEach and the Pipeline methods. I wanted more and kept digging.... eventually I found this: https://thedelphigeek.gumroad.com There you can find three hour-long tutorial videos on all of those high-level APIs. The link I found only went to the first video. I took a wild guess and found #3 that had the info on ForEach and Parallel, which is what I wanted, and bought that one. They're $10 each. Later I found out you can get all three for $25. ** EDIT: you can get these with the book at the LeanPub link above for just $5 more. NOTE: I'm mentioning this stuff here because it's so damn hard to find these things anywhere! You'll never find them searching for the term "video" because they're only referred to as "webinars". The couple of links I found on his blog specifically for these VIDEOS were dead and the ones in another place were wrong. I only found these because of one very brief and cryptic reply to a random question way down on one blog entry from 2015. I didn't notice them on LeanPub because I wasn't looking for "webinars". I started this search because I've been going around in circles trying to figure out the best way to deal with a collection of data displayed in a TListView with some data objects attached to the ListItems' .Data property, and I want to allow the user to hit a "Go!" button and have the code process the whole lot in parallel. They need to issue a bunch of REST service calls, so mostly they're just sitting idle waiting for replies, and I suspect they can all complete in the time it takes for the longest one to run. It turns out the ForEach<T> lets you iterate over the Listview's Items property using it's existing Iterator, and pass each TListItem into an anonymous Proc (by type!) and process it directly -- with each one running in parallel. You can easily do something when each of those threads finishes running, and also when the entire list is processed, all without having to send messages or go through crazy contortions to effect a fork/join operation. It's all handled invisibly. WHOA! The Pipeline abstraction is really something to behold. Many years ago I spent 9 months building a system that implemented a multi-step pipeline process that literally was spread out over a half-dozen different PCs on a LAN. Today they could all be done on one multi-core CPU, and using this bit of code would let me build it in less than a week (assuming all of the component parts were already working). In fact, i've built a few other systems that could have benefitted from this abstraction as well. And I can think of one coming up that might be able to use it. In summary ... maybe a lot of folks discovered this library when it was first published in 2010, but it seems to have virtually disappeared aside from an occasional mention in comparison to Delphi's Parallel Processing Library. Personally, I don't even think they're comparable. If you've never looked at it and are doing parallel programming stuff, take a look. And if you're famliar with it but may not have remembered all it does, give it another look and see if there's anything new worth studying. BTW, one thing that it had been criticized about was no way to Cancel threads in several places; the latest version (3.07.9) that's on github fixes that. It's relatively new, and not in the GetIt version.
  13. Edit: New Vcl.Imaging.QOI unit uploaded to GitHub. See https://github.com/AngusJohnson/TQoiImage
  14. David Heffernan

    Your Delphi verion does not support COMMAND

    Pro has command line compiler
  15. Vincent Parrett

    Your Delphi verion does not support COMMAND

    Pretty sure the Pro version has the command line compiler - if it didn't that would be the end of my delphi journey for sure. As a tech partner I have enterprise installed, but my subscription is for pro (I never use the enterprise features).
  16. Vincent Parrett

    Omni Thread Library resources

    I've been telling anyone who would listen for years that Omni is the best thing since sliced bread. We use it in the stepping engine in FinalBuilder. Some of the low level stuff is hard to grok though, I struggle with it when I haven't worked on it for a while, but the high level stuff is simple to use.
  17. I believe that for general purposes, a great image format option would be WebP. It has the same performance as PNG but compresses 30% more in lossless mode. In lossy mode, it compresses 30% more than jpeg (with same quality) and still allows transparencies. It is a format that also allows animated images such as gif. It is supported by all browsers, many softwares, and even Windows 10 already displays thumbnails in folders. As for the future, I would bet on Heif. There are already many libraries that support it but most in beta mode, like skia. Compatibility is very important, I wouldn't bet on a format that image editors, viewers or browsers can't open.
  18. Dmitry Arefiev

    Using TFDEventAlerter with MSSQL server

    Did you read and fully follow to the comment at: <demos>\Object Pascal\Database\FireDAC\Samples\DBMS Specific\MSSQL\QueryNotify\Unit1.pas Most of these are SQL Server "limitations" / "requirements".
  19. Stéphane Wierzbicki

    Your Delphi verion does not support COMMAND

    I guess that installer is compiling sources, thus needs command line compiler which is not provided with community edition...
  20. Stefan Glienke

    Bookmarks dead?

    Someone should have invited David Millington or the dev at Embarcadero that is now responsible for those plugins to the Delphi 11 beta so they could have worked on those plugins at the time when many other IDE plugin devs did. /s
  21. Vincent Parrett

    Bookmarks dead?

    You seem to think we should all be grateful for what we get and be quiet, you forget that ultimately we are all paying customers, many of us having sunk significant amounts of money into delphi over the years (not to mention staking our careers on it). As paying customers, we have a right to expect better, and to complain and criticise when it's warranted - and sadly lately with Delphi it is warranted. I've paid for way more versions of delphi than I have actually been able to use (due to quality issues - including D11). As for the hard working team, well they are anonymous - name 5 people on the team (and I don't mean the product managers).. I'll wait.... Back in the day the dev team were on the newsgroups, interacting with their customers, now you would be hard pressed to name one of them that posts here. I have no idea if the 'team' (1 person, 5, 10? who knows) even reads these forums or if they even have any idea how their customers feels about what they are delivering. Some days I have to drag myself back to working on my delphi projects.. today I fired up delphi to debug a problem with FinalBuilder, the IDE crashed on the first run - not an uncommon occurance. I've used delphi since 1995, I have millions of lines of code invested in it - so I persist - but I very much doubt that potential new customers would do the same - I know I wouldn't if I were one of them.
  22. Just tried the Image32's SVG viewer, the rendering result is almost perfect in my eyes! You've done a great job Angus!
×