Jump to content

Uwe Raabe

Members
  • Content Count

    2750
  • Joined

  • Last visited

  • Days Won

    162

Everything posted by Uwe Raabe

  1. Uwe Raabe

    Request

    Yeah, that's better. Thanks!
  2. As there must be a reason why it doesn't happen here: Any other non-standard plugins installed?
  3. TMS Components used to have their own copy of Spin.pas.
  4. Weird - I have never seen this. A quick test didn't show this either. I will try on a clean Delphi installation later. Meanwhile, can you try with a clean Debug Layout by deleting the Debug Layout.dst from %APPDATA%\Embarcadero\BDS\21.0\ ?
  5. Uwe Raabe

    Delphi 10.4.1 and the IDE FIx Pack

    The idea was to write all units in all uses clauses with their full names instead of relying on the value in Unit Scope Names.
  6. Uwe Raabe

    Delphi 10.4.1 upgrade

    Not from the IDEs point of view. When a unit is referenced by a package that is not contained in that package, it looks for other installed packages for this unit. In this case it found one in the getit package. That is standard behavior since ages. Try compiling a package that uses VCL.Controls without mentioning anything in the requires clause. Delphi will suggest to add vcl.
  7. Uwe Raabe

    Delphi 10.4.1 upgrade

    Just guessing: You are referencing a unit named "Utils" in your project, which you missed to add to the package project directly.
  8. Uwe Raabe

    Delphi 10.4.1 and the IDE FIx Pack

    Are you able to check without Unit Scope Names?
  9. Uwe Raabe

    TMemo - How to select (highlight) a line of text in code?

    Have you tried MyMemo.HideSelection := False; ?
  10. Uwe Raabe

    Delphi 10.4.1 and the IDE FIx Pack

    Define Large
  11. Uwe Raabe

    FireDAC and pooling random error

    Indeed, that could be misinterpreted easily. Although it is not necessarily a thread, but could as well be collecting data for a report or consolidate data monthly or other areas where multiple DB actions can be grouped. Obviously it is data is processed or retrieved in the background, where multi-threading steps in. Due to the integrated connection pooling, opening and closing a TFDConnection doesn't cost as much as it did in the past (BDE era that is).
  12. Uwe Raabe

    FireDAC and pooling random error

    That is exactly how I do it. The TFDConnection has the proper ConnectionDefName set. Then, inside the same thread, I open the connection, do all the query stuff and close the connection. All the queries linked to that connection are only used inside that same thread.
  13. Uwe Raabe

    general question about embedding docs in an app

    This may as well be the case for the specific browser currently installed at the customers system. That is another point for the component solution, as you definitely know the capabilities.
  14. Uwe Raabe

    FireDAC and pooling random error

    I am with Dmitry here. Having a separate connection per query is definitely wrong. Interestingly I never made use of that TFDQuery.ConnectionName feature. Instead I have a single TFDConnection instance for a specific part of the program where all necessary queries are connected to. Thus all these queries use the same connection and it works perfectly even in multi-threaded situations. I admit that identifying those groups of queries sharing one connection may sometimes be a bit tricky.
  15. Uwe Raabe

    Delphi's code formatter vs. GExperts' code formatter

    I often use this double slash comments at the end of a line to force a line break. const cArr: TArray<string> = [ // 'SELECT *', // 'FROM EMPLOYEE', // 'WHERE EMP_NO > 2', // 'ORDER BY EMP_NO', // '']; (Align line end comments is active here) Without these comments the formatter will produce this: const cArr: TArray<string> = ['SELECT *', 'FROM EMPLOYEE', 'WHERE EMP_NO > 2', 'ORDER BY EMP_NO', ''];
  16. Uwe Raabe

    "Simulating" a com port with data arriving

    I am pretty fine with Advanced Virtual Com Port
  17. Uwe Raabe

    Request

    Can you explain a bit more, please?
  18. Uwe Raabe

    Changing the WordWrap property of a TMemo runtime

    Seems legit. If you have a horizontal scroll bar there is no need for wrapping anything.
  19. Uwe Raabe

    TControl.SetParent

    You are not alone: Parented controls with free notifications aren't scaled Frame with Assigned PopupMenu is wrong Displayed on high DPI A scaled form gets resized to design time ClientWidth/ClientHeight when embeded in a parent form
  20. That's an important point. There are situations where your program is not the only one accessing the data. This doesn't mean that it could not be done different, but sometimes these other systems are out of your reach.
  21. Not sure if it fits your needs, but nevertheless this might be an interesting read for you (unless you have already done so): Dataset Enumerator Reloaded And here ist the corresponding rep: DataSetEnumerator
  22. Yes, there are. One can use this fact to distinguish between UTF8 and ANSI encoding. An ANSI encoded text file can throw an exception when read as UTF8 if it contains certain characters. UTF8 character sequences start with a specific byte range followed by one to three bytes from a different range. Simply exchanging the first two bytes of a UTF8 sequence invalidates the file.
  23. Uwe Raabe

    Project Magician gotcha

    @timfrost It doesn't matter if what you do with Project Magician is intended usage or not - it should not crash - period. In case this depends on the project file: Can you send me a copy, please?
  24. Uwe Raabe

    Project Magician gotcha

    Can you send me that dproj file? The version info is handled directly when you save the project options from the dialog - or you change the Project Magician options.
  25. Uwe Raabe

    string helpers question

    Actually, I like this and make heavy use of it. begin if Value.StartsWith(Prefix, IgnoreCase) then Result := Value.Substring(Prefix.Length) else Result := Value; end; is just easier to read than var isPrefixed: Boolean; begin if IgnoreCase then isPrefixed := StartsText(Prefix, Value) else isPrefixed := StartsStr(Prefix, Value); if isPrefixed then Result := Copy(Value, Length(Prefix) + 1, Length(Value)) else Result := Value; end;
×