Jump to content

Dany Marmur

Members
  • Content Count

    285
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Dany Marmur

  1. Dany Marmur

    Controlling MS Word Window from Delphi form

    That is very good to know, thank you David. I have a feeling that i will be asked or will identify the need for Office-plugins in the foreseeable future. I am very interested about stable solutions and experiences in the whole "technology". I will start another more pertinent thread when, and if, i get the time to look more closely.
  2. Dany Marmur

    Controlling MS Word Window from Delphi form

    I used Add-in Express a long time ago. My experience (way back, be advised) was not 100% especially regarding licensing. I would like to remember that i got the tasks done. But i have since tried not to rely on Office installations as they change rapidly. For example, i had some plug-in to Outlook in order to enable users to send personal mail of any design for multiple recipients. Before the plugin i had a solution where you would pick up a draft from outlook (locally) and my application would "simply" put the recipients name and send a copy of that mail. Then users complained, it was not "intuitive" to have to mail some stuff from one application and other stuff from another (mine). So plugins. I do not remember the specific trials and tribulations, but i ended up writing a service that speaks to Exchange through EWS* each hour so now users have pertinent addresses and mailing lists continuously updated in their Exchange-Outlook solution. Imagine my relief when the client, not too long after that solution was implemented, told me they would start using the outlook web-version (and later Office365). I know you task is completely different, i'm just mumbling about a similar experience with the hope that it helps. Regards and good luck * AtoZ CrossTalk is used on the server - but that is just because Delphi could back then not handle the intricacies of the EWS protocol. /D
  3. Dany Marmur

    30 % and 35 % discount on Delphi

    Over here i have a 45% quote. However... "valid for 12 months". Now starting to use the Enterprise stuff... then after a year. Big bucks again. Slow fixing... et. al. NO. I'll stick to Professional + my ecosystem of 3rd party reliable "dudes". Thank you but no thank you.
  4. Dany Marmur

    HTML Library limited offer

    Congrats! And do not give up!
  5. In hebrew, as maybe in russian, 11 is "1 and 10", 12 is "2 and 10". Germanic languages (and i include english, yes) have that; "Twelve" not "2-teen" or "2-ten". I do not have any etymological proof, but as you suggest @Fr0sT.Brutal, an old economy based on 12 and 20 is very likely behind these things. In "old" swedish at least; "dussin" = 12, "Tjog" = 20. Messy! Lucky us to have been born late enough. Oh, and a british "draftsman" hired a desk across me for half a year and i was on about the metric system. She agreed; "The "1 and 1/18th inch" is old shit." she said. Once more admins; a "Language" sub-forum. No?
  6. Dany Marmur

    New TForm - Defaults

    Regarding legacy problems, i had a project with a lot of visual levels and (before high DPI) for each level the "ExplicitHeight/Width" properties messed things up. Utterly annoying to keep track of those. But that was not my point. What i ended up with was a small exe of my own that i ran before each build that went trough the dfm's and changed that. The notion might be useful.
  7. Dany Marmur

    Main menu

    @Anders Melander, we should maybe start another thread, in andother sub-forum, but i have also made that mistake when reading and commenting. The sub-forum name is IMHO visually too suppressed.
  8. @Lars Fosdal, being here and previously in G+ for a long, it would be impossible for this language-freak swede (me) not to know that! We are getting seriously OT here... - perhaps a sub-forum called "Natural Language (Processing and Discussions)" could be helpful? "Coders love language, absolute and natural."
  9. Oh, yes you do! That is one of the very few constants, like 0 degrees Kevin. Never heard a Dane say "sexti". Or did you mix Norwegian and Danish? The inconsistency that always throws me off phonetically is "firs" and "fjers". It has been explained to me numerous times by danes, but not consistently 🙂 Some other nuggets of (in this context quite useless information): The Danish way of doing numbers is so difficult that some schools have started teaching what they dub "Swedish Math". More or less like english. It's a bit frown upon but those kids excel in math compared to others. Danish (the language) is considered "muddy", phonetically challenging, because they tend to "swallow" the last syllable in each word. The native speakers shift between articulating more and "swallowing" more. This shifts happen in a sinuous way where the cycles are around 20 years. Some researcher concluded that kids that grow up in times when the trend is muddy are 2 years behind in their language development. I do not have a link, so this is kind of hearsay. Sorry. And the great thing about it is that us developers mostly do not have to care (if you are not into NLP i danish - thank... whoever for not putting me in that) because orthographically danish is really quite ok. It is a beautiful language IMHO. Abundant with top-of-the shelf idioms and proverbs. There are danes here (@delphipraxis). So i am now jumping down into a trench 😎 helmet on. - - - When the editor gets "stuck", just realised you refresh the page and click your comment line again (what you wrote pops back up) and it works again!!
  10. Dany Marmur

    Firebird 3 and SP in Object Pascal

    @Fr0sT.Brutal, yes! @Joseph MItzen like Lars von Trier says at the en of some of his movies, "must take the good with the bad". Thanks for the quotes, pertinent. I'll eventually will have to jump on some of the trains that my competitors are riding. But still. With a good eco-system i have been able to keep things apart. Each monster in it's own wardrobe. There's a HUGE amount of processing that can be efficiently done using a service connecting if you really use the "wonders" of ACID transaction handling. FB-FTW 🙂
  11. Dany Marmur

    Firebird 3 and SP in Object Pascal

    Nervermind...
  12. Dany Marmur

    How to compare msXML nodes

    If i understand your task, i'd walk upwards and check that i get exactly the same "path" up to the root. But i might be mistaken.
  13. Dany Marmur

    Firebird 3 and SP in Object Pascal

    Of course. That's what i do with services sometimes. Silly me. Thanks.
  14. Dany Marmur

    Deal - breaker: Registration Limit Increase

    That sounds odd to me. Traditionally windows did a hardware compare on some key-stuff and you had to re-register. Never experienced that with the IDE. I change number of cores and screens and memory a lot and have not had that problem. Also a lot of times my VMs start without network and the IDE do nt complain (except for the start page, but that's ok of course). Odd.
  15. Dany Marmur

    Firebird 3 and SP in Object Pascal

    I would agree with @Fr0sT.Brutal, if i understood the post above 100%, Postgres have had "Procedure Plugin" for years as i would guess M$SQL also have. Now, why would anyone want to go over the hazzle to connect compiled code for IN- and OUT stuff and access all the objects through error-prone pointers and the like? Only if you have employees that cannot learn PSQL i assume. BTW - if i was to evaluate a system for recommendations (it happens, not too often though) i'd put a big minus for introducing the possibility to call OS functions from inside the server processes. There's not much wrong with PSQL, we just need good "IDEs" for it. IBExpert offers debugging with breakpoints and value-peek for PSQL procs and triggers. I'd guess other admin tools do too. I am a little bit interested though, is there any RDBMS-manager that provides debugging for "library-code" (i.e. Java, OP, C# et. al)? How would that work?
  16. Dany Marmur

    Deal - breaker: Registration Limit Increase

    You got that 100% right at least 🙂 I will dearly hold on to all my VMs with regged installations.
  17. Dany Marmur

    InterBase or Firebird?

    This definitely feels like a good advice. IMHO the "embedded" variations of all them "full-blown" are... "legacy functionality". It's usable when you have a RDBMS with a lot of functionality (triggers, procs et.al) that you want to "keep" and bring "down" scalability-wise. But if this is a NEW project that would require a NEW database AND you have all the control of both backend AND frontend then i'd be very questioning why you would go thought the "hazzle" of embedding a full-blown RDBMS as most functionality would be moot.
  18. Dany Marmur

    InterBase or Firebird?

    Firebird has been working so well for me since version 1 that i have not been very interested in alternatives. IB/FB would probably be a more "political" choice. IB is proprietary and FB is OS. From what i gather PostgreSQL is a capable RDBMS functionality-wise too and it is OS too, even though a bit more commercial IMHO. Q: Why do you need a full-blown RDBMS for a one-platform application? Perhaps Johns suggestion is better, depends on a lot of factors... perhaps some more info for better recommendations?
  19. Dany Marmur

    How to use Open Street Maps with Delphi - cross platform?

    Ah! Thanks! I was thinking about doing something like that myself.
  20. The Delphi world contains a lot of database-solutions. One school of them are the TDataSet-based libraries, components and classes. If you are using TDataSet-based cached Lookups in a more "modern Delphi" you can easily speed up lookup handling. I'm posting this because when i googled in order to fix a couple of thing in my current project, i did not find much, almost nothing on this. This can save HUGE amounts of processor cycles if: You use "VCL Lookups" (they are not strictly VCL, but that is the term for example in DevExpress* forums) and have a lot of value-rows and a lot of lookup values. You use a component that cannot use lookup values and therefore need to "expand" the lookup values with their actual looked up "listfield" value. * I use the DevExpress PivotGrid a lot. The "QuantumGrid" has a "SortByDisplayText" property for sorting on lookup values. But the PivotGrid does not. So for the data fed to a PivotGrid i see to it to use "VCLLookups" so that the PivotGrid handles looked-up values rather than their IDs... as if they where text. This is the only way to get columns/rows sorted the way the users want. In a scenario with 100K rows and 80K lookup values having a character length of 256, this decreased the time needed to load the PivotGrid with data (for each fetch the lookup values is "expanded"). In some scenarios (like the one i describe above) the time needed for the operation (and that is the time the user has to wait) decreased from 120 to 6,5 seconds. The reason being the "LookupCache" in Data.DB uses an O(1) algo on a Variant. Let's change that like so: 1. The treading "lightly" approach is to override you TDataSet-based class, mine is called TkbmMemTable: ... interface ... // Faster lookups TDictionaryLookupList = class(TLookupList) private FDict: TDictionary<Variant, Variant>; public constructor Create; override; destructor Destroy; override; procedure Add(const AKey, AValue: Variant); override; procedure Clear; override; function ValueOfKey(const AKey: Variant): Variant; override; end; TkbmMemTableEx = class(TkbmMemTable) protected function GetLookupListClass(Field: TField): TLookupListClass; override; end; ... implementation ... function TkbmMemTable.GetLookupListClass(Field: TField): TLookupListClass; begin Result := TDictionaryLookupList; end; ... { TDictionaryLookupList } procedure TDictionaryLookupList.Add(const AKey, AValue: Variant); begin if not VarIsNull(AKey) then FDict.Add(AKey, AValue); end; procedure TDictionaryLookupList.Clear; begin FDict.Clear; end; constructor TDictionaryLookupList.Create; begin inherited; FDict := TDictionary<Variant, Variant>.Create; end; destructor TDictionaryLookupList.Destroy; begin if FDict <> nil then Clear; FDict.Free; end; function TDictionaryLookupList.ValueOfKey(const AKey: Variant): Variant; begin if (not VarIsNull(AKey)) and (not FDict.TryGetValue(AKey, Result)) then Result := Null; end; I am NOT "indexing" on Variant here. The TDictionary<Variant, ....> will convert variants to strings because the Dictionarys keys are hashed. I do not think that any database solution will yield a value when the key is null. But please comment if you are aware of such a scenario. 2. The "One Dict to rule them all" approach: Instead of having each flavour of TDataSet kick in the new LookupList you can substitute the vanilla one for our dictionary based one for the entire application: .... initialization DefaultLookupListClass := TDictionaryLookupList; This will see to it that any TDataSet that does not have it's own lookuplist will use the dictionary one. This approach can be tested in almost any application in under an hour. It would be interesting to receive a comment or two if it affected the performance of your application. Please note: This is only useful for lookup fields that have the "LookupCache" flag set. HTH, /Dany Disclaimer one: I did not look at lookups on segmented indices. Disclaimer two: All coding is done under the responsibility of the coder, not the author of this article.
  21. Dany Marmur

    Delphi 2007 to 10.3 and Windows 10 taskbar issue

    I was giong to say that... Yeah. But you do not need to override stuff as that's what the TDataSource component is for. Just put one on each of the dialogs that need to use that data and link it to the dataset on a datamodule... and the opened dialog(s) DB-aware control will update as needed. Then you can create and destroy windows galore. I have seen similar component concepts called SumethingSumehtingLink. Meh... you moved on i see now... sorry, i missed page 2
  22. Dany Marmur

    White an own Tcombobox descendent component

    DX do have this functionality for their TcxExtLookupComboBox and TcxLookupComboBox. But... in order to make it work the way you are aiming at (pulling refined SQLs) you would need to use their "ServerDatsControllers" OR implement a couple of GUI-oriented event handlers and put your SQL together there (not 100% cool model-wise). Their "ServerDataController" do not covering the stuff 100%. If you can find a solution to make your client have all the data,DX controls are splendid. But all the chrome-goodies works best when data is already local. Also - i have not used their ServerDataControllers myself.
  23. Dany Marmur

    Extremely slow Link phase

    A project of mine has begun to link very slow. It takes half a minute. I suspected the disk that the VM is on, but during linking disk access is not high at all. One core is used fully during the whole phase. The project contains a lot and uses DevExpress rather heavily. Delphi 10.2.3, Win10, VirtualBox. Any hints on what to check / try to reduce the time of the linking phase would be appreciated! TIA, /D
  24. Dany Marmur

    SetFocus issue

    Ahhh... the old ActiveX. Well. I think (and i might be mistaken) that these ActiveX-related thingies are legion and that the workaround are prominent in sources like TWebBrowser and the like. I avoid these things as much as i can, but i have a lot of murky memories of having to fiddle with interfaces (COM) and a sleuth of other trickery. Dig in to other projects using ActiveX, i guess you'll find comments and workarounds galore pertaining to your issue.
  25. Dany Marmur

    Who's gonna be at EKON 23?

    That day i'm getting my cast removed . So no, i'll be taking it slow.
×