Jump to content

Uwe Raabe

Members
  • Content Count

    1092
  • Joined

  • Last visited

  • Days Won

    59

Everything posted by Uwe Raabe

  1. Uwe Raabe

    Getting Exception stack trace in 2021

    Indeed! Perhaps my advantage is that I had communicated with Matthias personally in German, so I never stumbled upon the name similarity.
  2. Uwe Raabe

    Showcase @Emba - should i?

    The zip file containing the source also contains an AlgoSim.dpr, but the dproj is still missing. Thus the project cannot be compiled as some units are not found. Also the package projects for the design time components are missing, but a quick analysis revealed that all pas files are included.
  3. Uwe Raabe

    Getting Exception stack trace in 2021

    What makes you think that? madExcept is from Matthias Rauen (aka madshi) and DebugEngine is from Mahdi Safsafi.
  4. Uwe Raabe

    Overloocked Format( ) options

    The documentation found in System.SysUtils.pas is pretty comprehensive. A thorough read is recommended. { The Format routine formats the argument list given by the Args parameter using the format string given by the Format parameter. Format strings contain two types of objects--plain characters and format specifiers. Plain characters are copied verbatim to the resulting string. Format specifiers fetch arguments from the argument list and apply formatting to them. Format specifiers have the following form: "%" [index ":"] ["-"] [width] ["." prec] type A format specifier begins with a % character. After the % come the following, in this order: - an optional argument index specifier, [index ":"] - an optional left-justification indicator, ["-"] - an optional width specifier, [width] - an optional precision specifier, ["." prec] - the conversion type character, type The following conversion characters are supported: d Decimal. The argument must be an integer value. The value is converted to a string of decimal digits. If the format string contains a precision specifier, it indicates that the resulting string must contain at least the specified number of digits; if the value has less digits, the resulting string is left-padded with zeros. u Unsigned decimal. Similar to 'd' but no sign is output. e Scientific. The argument must be a floating-point value. The value is converted to a string of the form "-d.ddd...E+ddd". The resulting string starts with a minus sign if the number is negative, and one digit always precedes the decimal point. The total number of digits in the resulting string (including the one before the decimal point) is given by the precision specifer in the format string--a default precision of 15 is assumed if no precision specifer is present. The "E" exponent character in the resulting string is always followed by a plus or minus sign and at least three digits. f Fixed. The argument must be a floating-point value. The value is converted to a string of the form "-ddd.ddd...". The resulting string starts with a minus sign if the number is negative. The number of digits after the decimal point is given by the precision specifier in the format string--a default of 2 decimal digits is assumed if no precision specifier is present. g General. The argument must be a floating-point value. The value is converted to the shortest possible decimal string using fixed or scientific format. The number of significant digits in the resulting string is given by the precision specifier in the format string--a default precision of 15 is assumed if no precision specifier is present. Trailing zeros are removed from the resulting string, and a decimal point appears only if necessary. The resulting string uses fixed point format if the number of digits to the left of the decimal point in the value is less than or equal to the specified precision, and if the value is greater than or equal to 0.00001. Otherwise the resulting string uses scientific format. n Number. The argument must be a floating-point value. The value is converted to a string of the form "-d,ddd,ddd.ddd...". The "n" format corresponds to the "f" format, except that the resulting string contains thousand separators. m Money. The argument must be a floating-point value. The value is converted to a string that represents a currency amount. The conversion is controlled by the CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator, and CurrencyDecimals global variables, all of which are initialized from locale settings provided by the operating system. For example, Currency Format preferences can be set in the International section of the Windows Control Panel. If the format string contains a precision specifier, it overrides the value given by the CurrencyDecimals global variable. p Pointer. The argument must be a pointer value. The value is converted to a string of the form "XXXX:YYYY" where XXXX and YYYY are the segment and offset parts of the pointer expressed as four hexadecimal digits. s String. The argument must be a character, a string, or a PChar value. The string or character is inserted in place of the format specifier. The precision specifier, if present in the format string, specifies the maximum length of the resulting string. If the argument is a string that is longer than this maximum, the string is truncated. x Hexadecimal. The argument must be an integer value. The value is converted to a string of hexadecimal digits. If the format string contains a precision specifier, it indicates that the resulting string must contain at least the specified number of digits; if the value has less digits, the resulting string is left-padded with zeros. Conversion characters may be specified in upper case as well as in lower case--both produce the same results. For all floating-point formats, the actual characters used as decimal and thousand separators are obtained from the DecimalSeparator and ThousandSeparator global variables. Index, width, and precision specifiers can be specified directly using decimal digit string (for example "%10d"), or indirectly using an asterisk charcater (for example "%*.*f"). When using an asterisk, the next argument in the argument list (which must be an integer value) becomes the value that is actually used. For example "Format('%*.*f', [8, 2, 123.456])" is the same as "Format('%8.2f', [123.456])". A width specifier sets the minimum field width for a conversion. If the resulting string is shorter than the minimum field width, it is padded with blanks to increase the field width. The default is to right-justify the result by adding blanks in front of the value, but if the format specifier contains a left-justification indicator (a "-" character preceding the width specifier), the result is left-justified by adding blanks after the value. An index specifier sets the current argument list index to the specified value. The index of the first argument in the argument list is 0. Using index specifiers, it is possible to format the same argument multiple times. For example "Format('%d %d %0:d %d', [10, 20])" produces the string '10 20 10 20'. The Format function can be combined with other formatting functions. For example S := Format('Your total was %s on %s', [ FormatFloat('$#,##0.00;;zero', Total), FormatDateTime('mm/dd/yy', Date)]); which uses the FormatFloat and FormatDateTime functions to customize the format beyond what is possible with Format. Each of the string formatting routines that uses global variables for formatting (separators, decimals, date/time formats etc.), has an overloaded equivalent requiring a parameter of type TFormatSettings. This additional parameter provides the formatting information rather than the global variables. For more information see the notes at TFormatSettings. }
  5. Uwe Raabe

    TJsonTextWriter out of memory

    Please show your code - otherwise we all can just guess.
  6. Uwe Raabe

    Theme updates incomplete

    Regarding IDE themes I have given up trying to act 100% correct. As switching themes back and force is a rare process and the fact that the display is correct on the next IDE start led me to the decision to leave things as is for the moment.
  7. Uwe Raabe

    MMX Window is blank sometimes

    Thanks, I will investigate your findings to track that down. The described behavior even bothers myself.
  8. Uwe Raabe

    Prevent Alt or Ctrl + Print Screen

    That was the story that I had in mind when writing my comment.
  9. Uwe Raabe

    Prevent Alt or Ctrl + Print Screen

    Make a photo with your smartphone
  10. I just created a feature request.
  11. AFAIK there is no such option. MMX parses the methods bodies and writes them in the requested order with a hard coded one line between each method body. Comments preceding each method are associated to that method (at least with the default parsing settings). The two empty lines after the method bodies in your example are not associated with the method.
  12. Uwe Raabe

    compiling DCU without creating EXE

    DDevExtensions is open sourced, IDEFixPack is not.
  13. Uwe Raabe

    LIBSUFFIX Again

    Do you by any chance happen to have Project Magician installed with Auto LibSuffix option active?
  14. Uwe Raabe

    LIBSUFFIX Again

    In which build/platform configuration are you removing that value?
  15. Uwe Raabe

    compiling DCU without creating EXE

    Additional options to pass to the compiler
  16. Uwe Raabe

    "Use/Open Unit" and Project Groups

    I guess you have different search paths by project group then? Well, I cannot promise, but I can try to add an option in a future version to include all search paths from each project in the project group.
  17. Uwe Raabe

    compiling DCU without creating EXE

    It is even possible to compile just pas files with dcc<xxx>. So create a unit that uses all of your units and compile that one.
  18. As long as no time machine is available it doesn't help much to lament about facts that cannot be changed afterwards. (One could as well claim that there would be no with-troubles when N.Wirth didn't invent it in the first place.) The topic is not about with being bad or how it could be made better, but about a tool to convert with statements without breaking existing code (which can be quite tricky shown by Anders).
  19. No need for that. You can already write this instead of such a with-clause. begin var foo := some.long.long.nested.object; foo.bar := laz ... end; That doesn't help converting existing with constructs, though.
  20. Uwe Raabe

    "Add Method" (Ctrl+Alt+M) wrongly assigned to TForm

    OK, I didn't realize that DoIt doesn't exist. MMX basically works on the current unit and the selected entity - property, method, class, module etc.
  21. Uwe Raabe

    "Add Method" (Ctrl+Alt+M) wrongly assigned to TForm

    Adding a layer of action to achieve a goal is probably not well accepted by long time MMX users as it would break their work flow. Even if such functionality would exist, which class should the method be added when DoIt is not declared in TMyObject, but in TMyBaseObject, which TMyObject is derived from? Instead of asking for the target object each time, it is much simpler to Ctrl-Click on the TMyObject reference or even the DoIt reference in the code, which immediately selects the requested object on which the Add Method action then can be executed on.
  22. Uwe Raabe

    "Add Method" (Ctrl+Alt+M) wrongly assigned to TForm

    Wrong Expectation! The method is (obviously) added to the currently selected object TForm1. Works as expected.
  23. Uwe Raabe

    I will be less active for a few weeks

    I have got my first shot on Sunday. Monday morning I felt like 20 again, where I also had massive problems to get out of bed (albeit for other reasons). Took a nap after dinner (can't remember doing such thing before). Fortunately that fatigue went away in the evening. So I highly recommend a vaccination, too.
  24. Uwe Raabe

    Generic Interface implementation

    Unfortunately the conditions when taking over MMX explicitly forbid making the code or parts of it Open Source.
  25. Cannot test it from here, so something is probably still missing, but it might look like this one: uses System.SysUtils, REST.Client, REST.Authenticator.OAuth, REST.Types; procedure Main; var auth: TOAuth2Authenticator; client: TRESTClient; request: TRESTRequest; response: TCustomRESTResponse; begin client := TRESTClient.Create(nil); try client.BaseURL := 'https://notify-api.line.me'; auth := TOAuth2Authenticator.Create(nil); try auth.TokenType := TOAuth2TokenType.ttBearer; auth.AccessToken := 'U4314taadsffhjjjjykllFVissffdfssdfsdfsgfgz'; client.Authenticator := auth; request := TRESTRequest.Create(nil); try request.Client := client; request.Method := rmPOST; request.Resource := 'api/notify'; request.AddParameter('message', 'abcTest', pkREQUESTBODY); request.AddParameter('stickerPackageId', '1', pkREQUESTBODY); request.AddParameter('stickerId', '113', pkREQUESTBODY); request.AddParameter('imageFile', 'D:\mypic.jpg', pkFILE); request.Execute; response := request.Response; if response.Status.Success then begin Writeln('Success: ' + response.Content); end else begin Writeln('Failed with ' + response.StatusText + ': ' + response.Content); end; finally request.Free; end; finally auth.Free; end; finally client.Free; end; end;
×