Jump to content

dummzeuch

Members
  • Content Count

    2857
  • Joined

  • Last visited

  • Days Won

    101

Everything posted by dummzeuch

  1. dummzeuch

    Filter Exception causing debugger errors

    Is this in a particular Delphi version or in several?
  2. dummzeuch

    On the use of Interposers

    It's the same with email programs: 30 years ago, every Fidonet reader / editor (but in particular GoldEd) was able to follow specific reply threads in echo and netmail. I know of no email program today that does this properly. (Yet another branch -> down Fidonet memory lane. 😉 ) And don't get me started on quoting.
  3. dummzeuch

    Strange text effect

    Yes, I know. The problem is that the fix for 10.4 Patch 3 must also be applied to 10.4.1. For that to work, it must detect whether either of those is installed. The released DLL doesn't do that yet, but the current source code does.
  4. Regarding Find-methods: I always make them return a boolean. If I need the index too, I make that an additional out parameter. If it gets too much hassle to always pass a dummy variable, I overload that method with one that does it for me and declare it inline: function TBla.Find(const _Key: TSomeType; out _Data: TSomeOtherType): Boolean; overload; inline; var Idx: Integer; begin Result := Find(_Key, _Data, Idx); end;
  5. --------------------------- Delphi 10.4: bds.exe - Entry Point Not Found --------------------------- The procedure entry point @Deskform@TDesktopForm@AdjustLastLoadedBounds$qqrv could not be located in the dynamic link library D:\source\_Sourceforge\GExperts\Binaries\GExpertsRS104.dll. --------------------------- I just got this error when I tried to load the GExperts DLL compiled with Delphi 10.4.1 into Delphi 10.4(.0). This is probably related to the problems many have experienced when loading IDE desktops that include docked forms from older plugins. Solution: Either get the last GExperts version released for Delphi 10.4, or compile your own DLL using Delphi 10.4.
  6. Personally I see nothing wrong with using exit there. I usually add a comment to it to make it more visible. procedure SaveData2(aID: Integer; const aName: string); var i: Integer; vNewData: TDataRec; begin for i := Low(Data) to High(Data) do if Data[i].DataID = aID then begin Data[i].DataName := aName; Exit; //==> end; // Save new Data rec, if ID not found // ... end; (But people have criticized me for adding that comment.) Of course purists will tell you that exit is just a goto in disguise and that "everybody knows that "goto is considered harmful".
  7. dummzeuch

    Grep search empty window with 10.4.1

    Hm interesting. Is your Grep results window docked or undocked? I just tried it (but not with a project group but a single project) and got a different effect: The background of the results window is black. Switching to a different tab in the history list fixes that. But then other strange effects happened: The history list all of a sudden displayed the match list rather than the history. Something seems to mess with the controls or the handles in that dialog. (My bet is on the theming of the IDE.)
  8. Have you checked the map provider's license terms? Map data is usually not free. OpenStreetMap is free, but there are of course still conditions. If you have an internet connection, you can download our rendered tiles from there. You need to calculate the right coordinates, construct the download URLs, download the tiles and display them. It's not rocket science, but also not as easy as it sounds. We use an internally developed map component, which can display data from various sources (including OpenStreetMap). Developing that definitely wasn't simple. Be prepared to learn a lot about different geographical coordinate systems. Probably more than you ever wanted to know. Also, rendering map data in a way that looks nice is not simple. Our component is still far from looking nice. Using pre-rendered tiles makes that a lot easier.
  9. dummzeuch

    Grep search empty window with 10.4.1

    Are you using the new DLL for 10.4.1 ?
  10. dummzeuch

    Grep search empty window with 10.4.1

    Not that I am aware of.
  11. The usual way to get version information for a file goes like this: type TEXEVersionData = record CompanyName, FileDescription, FileVersion, InternalName, LegalCopyRight, LegalTradeMarks, OriginalFilename, ProductName, ProductVersion, Comments, PrivateBuild, SpecialBuild: string; end; function TCustomFileInfo.ReadVersionData: TEXEVersionData; type PLandCodepage = ^TLandCodepage; TLandCodepage = record wLanguage, wCodePage: Word; end; var Dummy: Cardinal; Len: Cardinal; Buf: array of Byte; pntr: Pointer; lang: string; begin Len := GetFileVersionInfoSize(PChar(Filename), Dummy); if Len = 0 then RaiseLastOSError; SetLength(Buf, Len); if not GetFileVersionInfo(PChar(Filename), 0, Len, @Buf[0]) then RaiseLastOSError; if not VerQueryValue(Buf, '\VarFileInfo\Translation\', pntr, Len) then RaiseLastOSError; lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\CompanyName'), pntr, Len) { and (@len <> nil)} then Result.CompanyName := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\FileDescription'), pntr, Len) { and (@len <> nil)} then Result.FileDescription := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\FileVersion'), pntr, Len) { and (@len <> nil)} then Result.FileVersion := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\InternalName'), pntr, Len) { and (@len <> nil)} then Result.InternalName := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\LegalCopyright'), pntr, Len) { and (@len <> nil)} then Result.LegalCopyRight := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\LegalTrademarks'), pntr, Len) { and (@len <> nil)} then Result.LegalTradeMarks := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\OriginalFileName'), pntr, Len) { and (@len <> nil)} then Result.OriginalFilename := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\ProductName'), pntr, Len) { and (@len <> nil)} then Result.ProductName := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\ProductVersion'), pntr, Len) { and (@len <> nil)} then Result.ProductVersion := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\Comments'), pntr, Len) { and (@len <> nil)} then Result.Comments := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\PrivateBuild'), pntr, Len) { and (@len <> nil)} then Result.PrivateBuild := PChar(pntr); if VerQueryValue(@Buf[0], PChar('\StringFileInfo\' + lang + '\SpecialBuild'), pntr, Len) { and (@len <> nil)} then Result.SpecialBuild := PChar(pntr); end; (This is based on http://stackoverflow.com/a/5539411/49925 ) This only handles the case of known strings. But you can put any additional strings into it, e.g.: LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US 1 VERSIONINFO LOADONCALL MOVEABLE DISCARDABLE IMPURE FILEVERSION 1, 3, 6, 577 PRODUCTVERSION 1, 3, 6, 577 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEOS VOS__WINDOWS32 FILETYPE VFT_APP { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "CompanyName", "dummzeuch.de\000" VALUE "FileDescription", "dzlib PrepBuild commandline and IDE prebuild tool\000" VALUE "FileVersion", "1.3.6.577\000" VALUE "InternalName", "PrepBuild\000" VALUE "LegalCopyright", "Copyright 2002-2020 by Thomas Mueller\000" VALUE "LegalTrademarks", "\000" VALUE "OriginalFilename", "PrepBuild.exe\000" VALUE "ProductName", "PrepBuild\000" VALUE "ProductVersion", "2020-05-31\000" VALUE "Comments", "<svn range=\"87:92\" modified=\"yes\" url=\"https://svn.osdn.net/svnroot/dzprepbuild/trunk\" />\000" VALUE "Revision", "\000" VALUE "BuildDateTime", "2020-05-31\000" } } BLOCK "VarFileInfo" { VALUE "Translation", 1033, 1252 } } This contains two additional strings: Revision (which is empty) and BuildDateTime. There could be many more. But, how do I get these strings without knowing their name? VerQueryValue requires me to pass it the name of the string I want to read, so that's not a solution.
  12. dummzeuch

    How do get all strings from a version resource

    There are some odd entries in the resources of BDS.EXE and BDS.fr: And some other executables do not have proper version info: So they do not display anything when read the usual way (like e.g. in the Properties dialog in Windows). Older Delphi versions still refer to Appmethod in the translations (this is XE8): (I definitely had too much time on my hands today. 😉
  13. dummzeuch

    How do get all strings from a version resource

    Got it to work. Now the GExperts PEInfo tool also shows all strings in all languages stored in the version info resource which includes the non-standard once like BuildDateTime:
  14. But it would probably also fail. As long as I don't know what causes this it's pointless to try.
  15. dummzeuch

    How do get all strings from a version resource

    There apparently is an official documentation for the VS_VERSIONINFO structure. Which then references the VarFileInfo structure, which in turn refers to the Var Structure, and the StringFileInfo structure, which in turn refers to the StringTable structure, which then refers to the String structure. Not simple but doable. I also found some C++ code to read the VS_VERSIONINFO structure on StackOverflow https://stackoverflow.com/a/43229358/49925 I'll see where it that gets me.
  16. Or maybe even better: Somebody with such a high resolution to find the problem. (Or somebody who sponsors me a high resolution monitor 😉 ) Which monitor are you using? Would you recommend it?
  17. dummzeuch

    remove ExplicitXxxx properties

    In theory they are used to preserve the original size and position of controls when they are set to alClient, alTop etc. so when they are set back so alNone at a later time, they automatically revert to their original size and position. Personally I never found that useful and since these values tend to change very often (no idea why, they shouldn't) they pollute the DFM diffs and history.
  18. dummzeuch

    Delphi 6 all of a sudden wants to be activated

    WTF? Now it simply starts again! I hate it when problems go away without finding out what the cause was.
  19. I think I fixed this now. At least it works for me in Delphi 10.4.1. Could you please compile and test it?
  20. dummzeuch

    10.4.1 Released today

    Around that time Borland developed JBuilder, so maybe it really came from Java.
  21. dummzeuch

    10.4.1 Update

    In my case, deleting a custom desktop layout which was automatically loaded for a project, solved that problem. I then had to create that desktop layout again.
  22. dummzeuch

    Grep search empty window with 10.4.1

    That's odd, because GExperts only uses the standard runtime packages that come with the IDE. The other third party sources (e.g. SynEdit) are compiled into the DLL (one reason why GExperts cannot be a package based IDE plugin).
  23. dummzeuch

    Grep search empty window with 10.4.1

    Yes I meant "Parse map file". But it doesn't matter as with "empty" you meant something totally different than I expected. Thanks for the screenshot.
  24. dummzeuch

    Grep search empty window with 10.4.1

    Works fine for me in 10.4.1 What do you mean by "empty" in this context? Could you please post a screen shot? What are you grep'ing for? Have you maybe enabled or disabled the "use .map file" option in the new version? Is that the released version 1.3.16 or did you compile it from sources?
  25. dummzeuch

    10.4.1 Released today

    No. It's just very easy to miss. Bad installer UI. Yeah, just found it on the third try. As you said: Bad UI.
×