Jump to content

dmitrybv

Members
  • Content Count

    48
  • Joined

  • Last visited

Everything posted by dmitrybv

  1. Hello. The following code throws an 'Invalid class typecast' exception. procedure TForm1.Button1Click(Sender: TObject); var RttiContext: TRttiContext; LType: TRttiType; ACaretPositionProp: TRttiProperty; Val: TValue; begin RttiContext := TRttiContext.Create; LType := RttiContext.GetType(TMemo); ACaretPositionProp := LType.GetProperty('CaretPosition'); Val := ACaretPositionProp.GetValue(Memo1); end; Although it shouldn't. Place a TMemo and a TButton on a Form and write the Button.OnClick event as described above. Embarcadero® RAD Studio 12 Version 29.0.53571.9782 Delphi 12 Update 2.
  2. Exception: Project TestDemo.exe raised exception class EInvalidCast with message 'Invalid class typecast'. On the line: Val := ACaretPositionProp.GetValue(Memo1);
  3. Hello. My TValue.ToString for TAlphaColor type returns a strange result. I can't figure out if it's a bug or if I'm using the TValue.ToString function incorrectly Here's an example of code. type TColorObj = class(TPersistent) private FColorProp: TAlphaColor; published property ColorProp: TAlphaColor read FColorProp write FColorProp; end; procedure TFormSimpleDraw2.Button1Click(Sender: TObject); var RttiContext: TRttiContext; Val: TValue; LType: TRttiType; ColorObj: TColorObj; AColorProp: TRttiProperty; begin ColorObj := TColorObj.Create; ColorObj.ColorProp := 4294303411; //TAlphaColorRec.Wheat RttiContext := TRttiContext.Create; LType := RttiContext.GetType(TColorObj); AColorProp := LType.GetProperty('ColorProp'); Val := AColorProp.GetValue(ColorObj); //Memo1.Lines.Add('ColorObj.ColorProp.ToString = ' + ColorObj.ColorProp.ToString); Memo1.Lines.Add('ColorObj.ColorProp.ToString = ' + Cardinal(ColorObj.ColorProp).ToString); Memo1.Lines.Add('TValue.ToString = ' + Val.ToString); ColorObj.Free; end; Here's the result. ColorObj.ColorProp.ToString = 4294303411 TValue.ToString = 18446744073708887731 Embarcadero® RAD Studio 12 Version 29.0.53571.9782 Delphi 12 Update 2.
  4. Hi All What are the performance profilers for Delphi 12? Under Delphi 10.4 I use AQTime. But it looks like AQTime with Delphi 12 support hasn't been released yet.
  5. I wonder why TIniFile.ReadString sets the maximum value size to 2047 without checking the actual value in the file and without limiting the value size in TIniFile.WriteString. Stackoverflow accepted the maximum allowed value to be 65,535 https://stackoverflow.com/questions/10507927/getprivateprofilestring-buffer-length https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprivateprofilestringw DWORD GetPrivateProfileStringW( [in] LPCWSTR lpAppName, [in] LPCWSTR lpKeyName, [in] LPCWSTR lpDefault, [out] LPWSTR lpReturnedString, [in] DWORD nSize, [in] LPCWSTR lpFileName ) ... If neither lpAppName nor lpKeyName is NULL and the supplied destination buffer is too small to hold the requested string, the string is truncated and followed by a null character, and the return value is equal to nSize minus one. But if the developers of System.IniFiles.TIniFile implemented a limit of 2047, then why did they do it only for TIniFile.ReadString (without throwing an exception when exceeded), but not for TIniFile.WriteString. unit System.IniFiles ... function TIniFile.ReadString(const Section, Ident, Default: string): string; var Buffer: array[0..2047] of Char; begin SetString(Result, Buffer, GetPrivateProfileString(MarshaledString(Section), MarshaledString(Ident), MarshaledString(Default), Buffer, Length(Buffer), MarshaledString(FFileName))); end; procedure TIniFile.WriteString(const Section, Ident, Value: string); begin if not WritePrivateProfileString(MarshaledString(Section), MarshaledString(Ident), MarshaledString(Value), MarshaledString(FFileName)) then raise EIniFileException.CreateResFmt(@SIniFileWriteError, [FileName]); end;
  6. I have a Compile.Cmd file that I run from my VCL application to compile my packages. File Compile.Cmd Call C:\RADStudio\22.0\Bin\rsvars.bat ECHO BDS=%BDS% ECHO BDSCOMMONDIR=%BDSCOMMONDIR% %FrameworkDir%\MSBuild EhLib.Rtl.dproj /t:Build /p:Config=Release /p:platform=Win32 I run this file using the CreateProcess function with the parameter CmdLine = cmd.exe /c Compile.Cmd 1.-- If I run my program from under RAD Studio 12 (Rtl Ver 23), then when I execute cmd.exe /c Compile.Cmd, an error is displayed: cmd.exe /c C:\RADStudio\23.0\Projects\EhLib12_Installer\Installer\Compile.Cmd C:\Users\Public\Documents\Embarcadero\Studio\22.0\Components\EhLib\Src>Call C:\RADStudio\22.0\Bin\rsvars.bat BDS=C:\RADStudio\22.0 BDSCOMMONDIR=C:\Users\Public\Documents\Embarcadero\Studio\22.0 Copyright (C) Microsoft Corporation. All rights reserved. Done Building Project "C:\Users\Public\Documents\Embarcadero\Studio\22.0\Components\EhLib\Src\EhLib.Rtl.dproj" (Build target(s)) -- FAILED. Build FAILED. EhLib.Rtl.dpk(38): error E2213: Bad packaged unit format: c:\radstudio\23.0\lib\Win32\release\rtl.dcp.System - Expected version: 35.0, Windows Unicode(x86) Found version: 36.0, Windows Unicode(x86) [C:\Users\Public\Documents\Embarcadero\Studio\22.0\Components\EhLib\Src\EhLib.Rtl.dproj] 1 Error(s) Time Elapsed 00:00:00.23 It is clear that MSBuild starts using library files of version 35.0 and 36.0 simultaneously. 2.-- If I run my compiled exe file directly from File Explorer, the cmd.exe /c Compile.Cmd command works without errors. And MSBuild compilation occurs without errors. 3.-- Is it possible that rsvars.bat does not set all the necessary environment variables for MSBuild to work correctly and MSBuild picks up these variables from the higher-level process bds.exe and thus an intersection of versions of the base libraries is formed? For example, rsvars.bat does not set the environment variables BDSLIB and BDSBIN.
  7. Good day. How to correctly translate links in a cmd file from dcc32.exe to MSBuild.exe. I have cmd files that compile packages for different Delphi versions. File Make_RADStudioXE10_1_NoSrc.Cmd … Chdir /d C:\RADStudio\18.0\EhLib\Src C:\RADStudio\18.0\Bin\dcc32.exe EhLib.Rtl.dpk -W^^ -$Y- -$L- -$D- -B -JPHNE -JL - || Pause Copy C:\RADStudio\18.0\EhLib\Src\Rtl\*.dcu RADSpecific\RADStudioXE10_1\Lib\Win32\Release || Pause File Make_RADStudioXE10_2_NoSrc.Cmd … Chdir /d C:\RADStudio\19.0\EhLib\Src C:\RADStudio\19.0\Bin\dcc32.exe EhLib.Rtl.dpk -W^^ -$Y- -$L- -$D- -B -JPHNE -JL || Pause Copy C:\RADStudio\19.0\EhLib\Src\Rtl\*.dcu RADSpecific\RADStudioXE10_2\Lib\Win32\Release || Pause Please tell me how to change the dcc32.exe command line correctly to switch the compilation to MSBuild.exe? By default, MSBuild.exe is not available from the command line because it is not specified in the PATH. You can specify the full path C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe But how do you pass a link to the dcc32.exe compiler version to MSBuild.exe? Like MSBuild.exe /dcc=C:\RADStudio\19.0\Bin\dcc32.exe Like MSBuild.exe /dcc=C:\RADStudio\18.0\Bin\dcc32.exe How does MSBuild.exe know which version of dcc32.exe to use?
  8. Good day. What is the analogue of the CM_DESIGNHITTEST message in FireMonkey? I need my specific section of my FmxControl to receive mouse messages in DesignTime.
  9. Thanks Uwe. I didn't know about it. I did some tests. Indeed, if you execute a cmd file by its name without a prefix, then when you exit the cmd file, the values of the environment variables are not saved, but not always. After installing RAD Studio, the installer adds a shortcut “RAD Studio Command Prompt” with the following value Target = %comspec% /K "C:\RADStudio\23.0\bin\rsvars.bat" /k Carries out the command specified by <string> and keeps the command processor running. There is no call prefix in the Target parameter when calling rsvars.bat. This means that rsvars.bat is executed as a standard cmd file. But, after running “RAD Studio Command Prompt” (AND executing rsvars.bat and exiting rsvars.bat), all variables set in rsvars.bat have the values that were set in this file.
  10. The rsvars.bat file contains the following line: @SET PATH=%FrameworkDir%;%FrameworkSDKDir%;C:\RADStudio\23.0\bin;C:\RADStudio\23.0\bin64;C:\RADStudio\23.0\cmake;%PATH% As far as I understand, this command adds new paths to the PATH. How safe is it to call rsvars.bat many times? I need to compile my packages for all Delphi versions starting from 2009. Can the PATH variable overflow after a certain number of rsvars.bat calls? Or not? Or is there a way to reset all variables set in the rsvars.bat file?
  11. It looks like you need to specify the dcc32.exe version via the BDS environment variable. @SET BDS=C:\RADStudio\22.0 @SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v4.0.30319 @SET FrameworkVersion=v4.5 %FrameworkDir%\MSBuild EhLib.Rtl.dproj /t:Build /p:Config=Release /p:platform=Win32 %FrameworkDir%\MSBuild EhLib.Rtl.dproj /t:Build /p:Config=Release /p:platform=Win64 %FrameworkDir%\MSBuild EhLib.Rtl.dproj /t:Build /p:Config=Release /p:platform=Android64 %FrameworkDir%\MSBuild EhLib.Rtl.dproj /t:Build /p:Config=Release /p:platform=Linux64 %FrameworkDir%\MSBuild EhLib.Rtl.dproj /t:Build /p:Config=Release /p:platform=OSX64
  12. Good afternoon. I have created a library package for cross-platform work on Windows, Android, Linux, macOS, iOS. My package compiles and runs error-free on all platforms. But when I tried to compile the package for different platforms using the command-line compiler, I encountered compilation errors. Here is the result of the experiments ----Win32: Compilation via the RAD Studio IDE - No errors. Compilation via dcc32.exe C:\RADStudio\23.0\Bin\dcc32.exe -B -JPHNE -JL EhLib.Rtl.dpk … 316157 lines, 6.00 seconds, 2562852 bytes code, 3508 bytes data. No Errors. ----Win64: Compilation via the RAD Studio IDE - No errors. Compilation via dcc64.exe C:\RADStudio\23.0\Bin\dcc64.exe -$Y- -$L- -$D- -B -JPHNE -JL -NSData.Win;Bde;Vcl;Vcl.Imaging;Data;Winapi;System;System.Win;Datasnap;Xml;Xml.Win EhLib.Rtl.dpk No Errors. ---- Android64 Compilation via the RAD Studio IDE - No errors. Compilation via dccaarm64.exe C:\RADStudio\23.0\Bin\dccaarm64.exe -$Y- -$L- -$D- -B -NSData.Win;Bde;Vcl;Vcl.Imaging;Data;Winapi;System;System.Win;Datasnap;Xml;Xml.Win EhLib.Rtl.dpk No Errors. ---- Linux64 Compilation via the RAD Studio IDE - No errors. Compilation via dcclinux64.exe C:\RADStudio\23.0\Bin\dcclinux64.exe -$Y- -$L- -$D- -B -NSData.Win;Bde;Vcl;Vcl.Imaging;Data;Winapi;System;System.Win;Datasnap;Xml;Xml.Win EhLib.Rtl.dpk Embarcadero Delphi for Linux 64 bit compiler version 35.0 Copyright (c) 1983,2022 Embarcadero Technologies, Inc. Linker command line: C:\RADStudio\22.0\Bin\ld-linux.exe -o bplEhLib.Rtl280.so -e _ZN5Ehlib3Rtl14initializationEv --gc-sections --version-script EhLib.Rtl.vsr -shared --no-undefined --export-dynamic -z noexecstack -z relro --build-id --eh-frame-hdr -m elf_x86_64 --dynamic-linker /lib64/ld-linux-x86-64.so.2 -s @EhLib.Rtl.lnk -lgcc_s -lrtlhelper_PIC -lc -ldl -lpthread -lz -l:bplrtl280.so -l:bplxmlrtl280.so -l:bpldbrtl280.so -rpath $ORIGIN Error: E2597 C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find -lgcc_s C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find -lrtlhelper_PIC C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find -lc C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find -ldl C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find -lpthread C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find -lz C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find bplrtl280.so C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find bplxmlrtl280.so C:\RADStudio\22.0\Bin\ld-linux.exe: error: cannot find bpldbrtl280.so c:\radstudio\22.0\lib\linux64\release\SysInit.o(.data+0x0): error: undefined reference to '__init_record_System' c:\radstudio\22.0\lib\linux64\release\SysInit.o:SysInit:function Sysinit::__malloc(NativeUInt): error: undefined reference to 'malloc' c:\radstudio\22.0\lib\linux64\release\SysInit.o:SysInit:function Sysinit::__free(void*): error: undefined reference to 'free' … C:\Users\Public\Documents\Embarcadero\Studio\22.0\Components\EhLib\Src\EhLib.Rtl.dpk.o:.EhLib.Rtl:_ZN5Ehlib3Rtl0E: error: undefined reference to 'Xml::Xmldoc::Finalization()' Fatal: F2588 Linker error code: 1 ($00000001) ---- OSX64 Compilation via the RAD Studio IDE - No errors. Compilation via dccosx64.exe C:\RADStudio\23.0\Bin\dccosx64.exe -$Y- -$L- -$D- -B NSData.Win;Bde;Vcl;Vcl.Imaging;Data;Winapi;System;System.Win;Datasnap;Xml;Xml.Win EhLib.Rtl.dpk Embarcadero Delphi for Mac OS X 64 bit compiler version 36.0 Copyright (c) 1983,2024 Embarcadero Technologies, Inc. Rtl\MemTableDataEh.pas(674) Warning: W1075 Overloading a similar index type by declaring an array property 'Items' + Rtl\MemTableDataEh.pas(674) Related member: property TOrderByList.Items[Integer]: TOrderByItemEh; + Rtl\MemTableDataEh.pas(674) Related member: property TObjectList.Items[NativeInt]: TObject; Linker command line: C:\RADStudio\23.0\bin\ld.exe -arch x86_64 -o bplEhLib.Rtl280.dylib -e __ZN5Ehlib3Rtl14initializationEv -dead_strip -dead_strip_dylibs -mark_dead_strippable_dylib -exported_symbols_list EhLib.Rtl.exp -dylib -export_dynamic -S -x -macosx_version_min 10.14 -rpath $ORIGIN -install_name @rpath/bplEhLib.Rtl280.dylib -filelist EhLib.Rtl.lnk Error: E2597 ld: warning: directory not found for option '-L/usr/lib' ld: warning: directory not found for option '-F/System/Library/Frameworks/' ld: file not found: librtlhelper.a Fatal: F2588 Linker error code: 1 ($00000001) ---- Result Thus, using parameters similar to dcc32, it is not possible to compile through programs dcclinux64.exe , dccosx64.exe . Is it necessary for dcclinux64.exe dccosx64.exe should I specify any additional parameters?
  13. Good day. By default, when compiling packages in Release and Debug mode, the following files are created *.dcu, *.bpl, *.dcp. If you enable generation of C++ files, then *.lib, *.bpi files are also created. Usually *.dcu files are moved to the \$(Platform)\$(Config) folder *.bpl files are moved to the $(BDSCOMMONDIR)\Dcp folder *.dcp, *.lib, *.bpi files are moved to the $(BDSCOMMONDIR)\Bpl folder But since the $(BDSCOMMONDIR)\Dcp and $(BDSCOMMONDIR)\Bpl folders do not provide subfolders for Release and Debug configuration, how does the IDE separate *.bpl, *.dcp, *.lib, *.bpi files for Release and Debug configuration?
  14. Hello How to move a group of files and folders while minimizing the number of intermediate errors? I need to move a group of files and folders so that in case of an error, either all the files and folders remain in their old place. Probably, I need to somehow check each file for blocking by another process and block all the files myself during the move.
  15. Some of my customers get the message >dcc32.exe MyLib.dpk >This version of the product does not support command line compiling when compiling via dcc32.exe. I use dcc32.exe to compile and get the library binaries in my Installer.exe program How to determine that dcc32.exe does not support command line compiling so that Installer can correctly detect the problem and stop installing the library? dcc32.exe returns echo %ERRORLEVEL% = 0.
  16. Good day. I use Embarcadero RAD Studio 11 Version 28.0.48361.3236 If I create a new Android 64-bit application in RAD Studio 11, it runs on the phone without errors. If I try to run the old application, I get the error [PAClient Error] Error: E7688 Error in c:\radstudio\22.0\lib\android\Debug\activity-1.7.2.dex.jar: [PAClient Error] Error: E7688 java.nio.file.NoSuchFileException: c:\radstudio\22.0\lib\android\Debug\activity-1.7.2.dex.jar In my folder c:\radstudio\22.0\lib\android\Debug\ there is only the file activity-1.1.0.dex.jar. My old project Project1.dproj contains the lines <EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex .jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0 .dex.jar ;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex .jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;…</ EnabledSysJars> If you create a new project, then the <EnabledSysJars> section contains a link to the activity-1.1.0.dex.jar file. <EnabledSysJars>activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar; Maybe I need to update the <EnabledSysJars> section somehow.
  17. Yes. Following this procedure fixes the error. Thank you.
  18. Hello Embarcadero® Delphi 10.4 Version 27.0.40680.4203 Please tell me how to correctly add a platform to a run-time package. I have Windows, macOS, Linux (+FmxLinux), iOS, Android platforms installed. But the Add Platform menu item for the package is unavailable in the IDE. The packages were created in Delphi 10.3 with Win32 and Win64 platforms. After opening groupproj in Delphi 10.4, I saw that the IDE converted dproj files from version <ProjectVersion>18.8</ProjectVersion> to version <ProjectVersion>19.2</ProjectVersion> and Even inside the dproj file, text for the Android, Android64, iOSDevice64, iOSSimulator, OSX64 platforms is visible, but they are not visible in the IDE.
  19. I'd rather recreate the packages without using the upgrade package feature when opening a package from a previous version of RAD Studio. In this case, RAD Studio allows you to add platforms.
  20. Embarcadero® Delphi 10.4 Version 27.0.40680.4203 Q1. Why is the Package output directory setting specified for the Android 64-bit platform? Nothing is written there when compiling a package. Perhaps *.a files should be written to the Bpl\$Platform folder? Accordingly, when compiling a dependent package, an error is returned E2202 Required package 'EhLib.Rtl' not found Q2. Why, when creating a default package, does the system specify the IMAGEBASE parameter for the Android platform if it is Specific to a platform?
  21. Embarcadero® RAD Studio 12 Version 29.0.51961.7529 If you create an empty Form in the FMX project, then create a descendant of this Form Then place a TGrid component on the Descendant Form Then open the Items Editor for TGrid and add several columns, then the Delete button in the Items Editor window becomes unavailable, and it is always unavailable so that it is not possible to delete columns from the TGrid component. Most likely the problem is related to the code unit FMX.Design.Items; … btnDelete.Enabled := Editable and (Designer.GetAncestorDesigner = nil) and (ItemsTree.Selected <> nil);
  22. Hello How to set which platforms my component supports? I found the System.Classes.ComponentPlatformsAttribute attribute, but it seems that there are other ways. For example, the TDataSource component does not have the ComponentPlatformsAttribute attribute set, but the Hint component palette shows that TDataSource supports all available platforms.
  23. If a FMX Frame is created from a class that is a descendant of the TFrame class, the designer starts saving non-existent properties in the fmx file. For example, in my project, a frame saves the ClientHeight and ClientWidth properties in the file, although there are no such properties in the TFrame class. As a result, when trying to place a frame on a form, an error occurs: ‘Cannot paste a from or datamodule into another form or module’. When trying to create a Frame at run-time, an error occurs: Project Project1.exe raised exception class EReadError with message 'Property ClientHeight does not exist'. I attach screenshots and a demo project. unit UnitBaseFrame; interface uses SysUtils, System.Classes, System.StartUpCopy, FMX.Forms, FMX.TabControl; type { TBaseInTabFrame } TBaseInTabFrame = class(TFrame) private public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation { TBaseInTabFrame } constructor TBaseInTabFrame.Create(AOwner: TComponent); begin inherited Create(AOwner); end; destructor TBaseInTabFrame.Destroy; begin inherited Destroy; end; end. unit UnitInheritedFrame; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, UnitBaseFrame, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls; type TInheritedFrame = class(TBaseInTabFrame) private { Private declarations } public { Public declarations } end; implementation {$R *.fmx} end. object InheritedFrame: TInheritedFrame Left = 0 Top = 0 ClientHeight = 480 ClientWidth = 640 FormFactor.Width = 320 FormFactor.Height = 480 FormFactor.Devices = [Desktop, iPhone, iPad] DesignerMasterStyle = 0 end 2024-08-26-FrameInheriting.zip
  24. There is information that when adding a new platform to the list of target platforms of the package, all components of the package are considered fully functional on these platforms.
  25. - Embarcadero RAD Studio 12 Version 29.0.51961.7529 The debugger does not fall into interface methods. In RAD Studio 12, when I press F7, the debugger does not fall into interface methods. RAD Studio 10.4 falls normally. For example, if you set a breakpoint on line FCaptured.MouseClick(Button, Shift, P.X, P.Y); Or Obj.MouseClick(Button, Shift, P.X, P.Y); In the method procedure TCommonCustomForm.MouseUp(Button: TMouseButton; Shift: TShiftState; AFormX, AFormY: Single; DoClick: Boolean = True); Obj is IControl; and FCaptured is IControl; then the RAD Studio 12 debugger on F7 does not go to debugging the method procedure TControl.MouseClick(Button: TMouseButton; Shift: TShiftState; X, Y: Single); I can't understand if this is a feature or a bug or a setting. Addition: It seems that the problem only occurs in the Target Platform mode – Windows 64-bit. In Windows 32-bit mode, the debugger falls into the method.
×