Delphi XE2 and C++Builder XE2 Update 3 Bug Fix List

By: Tim DelChiaro

Abstract: List of user reported issues that are fixed in Update 3 for Delphi XE2, C++Builder XE2 and RAD Studio XE2

QC #: Date Reported: Area:
98881 9/14/2011 IDE\Code Editor
Description: Steps:
[QC Short Description]
Automated Incident Report - Pressing the right alt key in the Delphi editor always results in this error.

[QC Description]
Access violation at address 00000000. Read of address 00000000.

Using XE on a MACBook Pro running Windows 7 Ultimate. Keyboard is Norwegian Bokm?.

Pressing the right alt key in the Delphi editor always results in this error. Pretty inconvenient as it is required to display a square bracket.
QC Entry 98881
This bug is also found in Delphi 2010 This error also occurs in applications created with Delphi XE2 (and Delphi 2010).

QC #: Date Reported: Area:
97454 8/10/2011 IDE\VersionInfo
Description: Steps:
[QC Short Description]
Double quotes in version info break resource compilation

[QC Description]
If you put a double quote into any of the fields in the version info in project options, then your application will fail to compile. It seems the double quotes are not correctly encoded in the .vrc file.
QC Entry 97454

This it seems that worked in XE.
1. Start a new VCL application 2. In Project Options, turn on the option to include version information 3. Set LegalTrademark to: "Quoted" is my trademark 4. Compile. Expected: Application compiles Actual: Compilation fails with an error in the .vrc file saying Quoted is not a valid keyword.

QC #: Date Reported: Area:
99321 9/26/2011 IDE\VersionInfo
Description: Steps:
REGRESSION FROM DELPHI XE

[QC Short Description]
Versioninfo flags not written to dwFileFlags member

[QC Description]
dwFileFlags is always 0. Only dwFileFlagsmask bits are set.
QC Entry 99321
Load the attached project TestApp.dproj into the IDE.

Under project options, under VersionInfo, see that "Debug build" and "Special build" are checked.

Compile and run the application.

With the resulting window, click the button in the form's lower panel.

See the following output, indicating the problem.

dwFileFlags = $0
dwFileFlagsMask = $21

Compiling and running the app with Delphi XE produces the following expected result.

dwFileFlags = $21
dwFileFlagsMask = $3F


In the attached file, fMain.pas, the following source is used to obtain version information, inspired by GetFileVersion from System.SysUtils.

var
FileName: string;
InfoSize, Wnd: DWORD;
VerBuf: Pointer;
FI: PVSFixedFileInfo;
VerSize: DWORD;
S: String;
begin
S := '';
FileName := ParamStr(0);
UniqueString(FileName);
InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
if InfoSize <> 0 then
begin
GetMem(VerBuf, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
begin
S := Format('dwFileFlags = $%x', [FI.dwFileFlags]);
Memo1.Lines.Add(S);
S := Format('dwFileFlagsMask = $%x', [FI.dwFileFlagsMask]);
Memo1.Lines.Add(S);
end;
finally
FreeMem(VerBuf);
end;
end;
if S = '' then
RaiseLastOSError;
end;

QC #: Date Reported: Area:
101084 11/17/2011 IDE\VersionInfo
Description: Steps:
[QC Short Description]
The autogenerate option calculated the first of its fields incorrectly.

[QC Description]
From QC #94812:
8. The autogenerate option calculated the first of its fields incorrectly. It also fails to write the values to the product version or file version text fields (but you can't see them anyway.)
QC Entry 101084
1. Create a Delphi VCL application. 2. Open Project->Options->Version Info page. 3. Check Auto generate build number option. 4. Click ok button. 5. Build the project. 6. Look on the version information from output file properties. Exp: The number in the third group from FileVersion field should be days since 1/1/2000 - in the 4100 range at the moment (as per Pulsar build version). Act: But it displays 61300 or so.

QC #: Date Reported: Area:
101083 11/17/2011 IDE\VersionInfo
Description: Steps:
[QC Short Description]
The build system is sending some 16 bit parameters to the resource compiler.

[QC Description]
From QC #94812:
7. The build system is sending some 16 bit parameters to the resource compiler. Not serious as they are ignored by the current version of rc.exe - but maybe it would be best to drop them. (http://msdn.microsoft.com/en-us/library/aa380908(VS.85).aspx)
QC Entry 101083
Note that the .vrc version information starts with 1 VERSIONINFO LOADONCALL MOVEABLE DISCARDABLE IMPURE

QC #: Date Reported: Area:
100652 11/2/2011 IDE\VersionInfo
Description: Steps:
[QC Short Description]
"auto generate build number" decremetnts build number on diffrent / higher dates

[QC Description]
If you activate "auto generate build number", build the project - Delphi generates a number 3.7.61228.1582 (based on Date 2011-10-18).
If you build the same project again later it produces a number 3.7.61213.1576 (based on Date 2011-11-02).

It's very strange, because you can't compare versionnumbers to find out which release is more actual.

QC Entry 100652
Build project in "Release" with VersionInfo increase computer DateTime (by 1 day), or wait one day Build same project again

QC #: Date Reported: Area:
98574 9/5/2011 IDE\VersionInfo
Description: Steps:
[QC Short Description]
VersionInfo is alway stored with English locale

[See also 287857]

[QC Description]
When I include some version info into the exe and I switch the locale to German ($407), the
translation table in the compiled exe correctly says $407, but the StringFileInfo is stored as $409
(English). The version info can only be read properly when it is made with English locale.
QC Entry 98574
(using Delphi XE with language set to German on a German Windows 7 x64) - create new VCL application - open version info dialog - select (all configurations Win32) - select German locale - enter some text in CopyRight - compile Release version (to reduce exe size) - open exe in hex viewer - check the string following "StringFileInfo" exp: 040704E4 act: 040904E4

QC #: Date Reported: Area:
94812 8/1/2011 2:08:55 PM IDE\Build Tools\Delphi
Description: Steps:
Non-numeric values are not supported in FileVersion and ProductVersion found in Project|Options|Version Info even though this is described as correct by Microsoft at the following link.

http://msdn.microsoft.com/en-us/library/ms940375.aspx

For additional infromation regarding resource issues see RAID 283887.

In the IDE, create a new VCL application.

Under Project | Options, select "Version Info".

Under the entry labled "FileVersion", change the default "1.0.0.0" to "1.0.0.rc".

Compile the application and see the following compile-time error indicating failure.


[BRCC32 Error] Project3.vrc(39): undefined keyword or key name: rc


Repeating the same steps for "ProductVersion" produces a similar error.



QC #: Date Reported: Area:
99550 10/3/2011 Install\Files
Description: Steps:
[QC Short Description]
[Trial] Data.Cloud.CloudAPI.dcu files are missing for win32, win64, osx32.

[QC Description]
With current Trial version, only 2 files are installed as below.
...\9.0\lib\win32\release\Data.Cloud.CloudAPI.dcu
...\9.0\lib\osx32\release\Data.Cloud.CloudAPI.dcu

So, 1file is missing.
...\9.0\lib\win64\release\Data.Cloud.CloudAPI.dcu

With porduction version(e.g., Enterprise Edition), all of files are installed correctly.
QC Entry 99550
 

QC #: Date Reported: Area:
99260 9/23/2011 Database\DBExpress
Description: Steps:
[QC Short Description]
DBExpress/SqlServer 2008 r2 Memory Issue

[QC Description]
Added by Sysop
<<<<<<<<<
This issue is reproducible with XE and XE2.
>>>>>>>>>

By a very simple test project I can demostrate problems in memory managment or maybe memory leaks problems. For 24x7 software this failure becomes very serious
This fault causes a "out of memory" message and finally breaking the software when the memory comes to certain limit
(usually 1.5 Gb in 32 bits )

I'm not sure it does not occur with TEXT field (Maybe you need long time testing), but I'm sure it occur quikly with tables like SalesOrderDetail and TEXT fields.
QC Entry 99260
Added by Sysop
<<<<<<<<<<<<<<<<<<<
DBExpress/SqlServer 2008 r2 Memory Issue

I'm not sure it does not occur with TEXT field (Maybe you need long time testing), but I'm sure it occur quikly with tables like SalesOrderDetail and TEXT fields

1.Download and Unzip attachment
SomeDat
3.Compile and run with 10 threads (default value) of MemoryLeakDBExpress.dpr project (Check if database connection is Ok) you must click in "Create and execute threads"
4.Now, if you have windows 7, you can run performance monitor and select process and memory private space, I attached my screenshot of memory progress. Of course CPU will be 95%/100% because i an strong test for fast result. The process take more and more memory until "Out of Memory"

CREATE TABLE [dbo].[Cliente](
[Codigo] [char](10) NOT NULL,
[Apellido] [dbo].[MediumStringNotNull] NULL,
[Nombre] [dbo].[MediumStringNotNull] NULL,
[RazonSocial] [dbo].[MediumStringNotNull] NULL,
[CUIT] [char](13) NULL,
[TelefonoPrincipal] [char](25) NULL,
[Calle] [dbo].[MediumStringNull] NULL,
[Numero] [dbo].[MediumStringNull] NULL,
[Chacra] [dbo].[MediumStringNull] NULL,
[Manzana] [dbo].[MediumStringNull] NULL,
[Parcela] [dbo].[MediumStringNull] NULL,
[Sector] [dbo].[MediumStringNull] NULL,
[Casa] [dbo].[MediumStringNull] NULL,
[Escalera] [dbo].[MediumStringNull] NULL,
[Piso] [dbo].[MediumStringNull] NULL,
[Dpto] [dbo].[MediumStringNull] NULL,
[Entrecalles] [dbo].[MediumStringNull] NULL,
[Localidad] [dbo].[MediumStringNull] NULL,
[Barrio] [dbo].[MediumStringNull] NULL,
[Zona] [dbo].[MediumStringNull] NULL,
[CodigoProvincia] [char](3) NOT NULL,
[ObservacionDomicilio] [dbo].[LongStringNull] NULL,
[email] [dbo].[MediumStringNull] NULL,
[FechaNacimiento] [datetime] NULL,
[NroDocumento] [dbo].[MediumStringNull] NULL,
[Observacion] [text] NULL,
[IdEstado] [int] NOT NULL,
...
>>>>>>>>>>>>>

QC #: Date Reported: Area:
100811 11/7/2011 VCL
Description: Steps:
[QC Short Description]
Vcl.Menus.ShortCutToText gives unexpected result for VK_APPS

QC Entry 100811
ShortCutToText(ShortCut(VK_APPS, [])); returns undefined results. GetSpecialName(ShortCut) is called. This calls GetKeyNameText, without checking the result. If the result is 0, then the uncleared array of KeyName is returned.

QC #: Date Reported: Area:
71474 2/13/2009 VCL
Description: Steps:
[QC Short Description]
Black rectangles are painted on a DoubleBuffered form when resizing it in Vista x64

[QC Description]
If a form contains controls aligned to the top, and CPU is highly loaded, resizing this form on Vista x64 (only!) causes some black rectangles to be displayed.
QC Entry 71474
Create a new form and put some panels with Align=alTop onto it. Set DoubleBuffered = True for the form. Add some dummy threads to load the CPU. Run the project and try to resize the form See the enclosed video for the required streps.

QC #: Date Reported: Area:
100472 10/26/2011 VCL\Additional Controls\TStringGrid
Description: Steps:
[QC Short Description]
StringGrid row limit access violation

[QC Description]
Adding too many rows to a StringGrid causes an access violation when the Objects property accesses a row beyond this limit. The limit seems to be 1048560 rows.

Added by Sysop
<<<<<<
This issue occur on both XE and XE2(32bit VCL / 64bit VCL)
>>>>>>
QC Entry 100472
Drop a stringgrid on a form. Run the following code. $FFFF0 is fine, but once the counter gets to 1048561, there is an access violation in Grids.pas at: function TSparsePointerArray.MakeAt(Index: Integer): PPointer; See the code below to reproduce: procedure TForm4.Button1Click(Sender: TObject); var i: Integer; begin StringGrid1.RowCount := $FFFF1; for i := 0 to StringGrid1.RowCount-1 do StringGrid1.Objects[0, i] := nil; end;

QC #: Date Reported: Area:
101034 11/15/2011 VCL\Dialog Controls
Description: Steps:
[QC Short Description]
MessageDlg with DefaultButton marks wrong Button

[QC Description]
The function MessageDlg in unit Dialogs has an parameter DefaultButton. If the DefaultButton is in the middle of the parameter Buttons, the wrong button is marked. This happens only if Windows is themed.
QC Entry 101034
MessageDlg('Some text', mtConfirmation, [mbYes, mbNo, mbCancel], 0, mbNo);

QC #: Date Reported: Area:
92188 3/10/2011 VCL\Printing
Description: Steps:
[QC Short Description]
BeginDoc does not check StartDoc result

[QC Description]
TPrinter.BeginDoc does not check StartDoc result.
So, for example, a delphi program cannot handle the case in wich a driver refuse to start the job.

I've encountered problems with a third party solution (I cannot post the code obviously) that use the canvas handle to call some gdi+ function, obtaining a general error messagebox...
QC Entry 92188
Simply print to a "Microsoft XPS Document Writer" printer and cancel the request for a destination file name. This should return a -2 to StartDoc and BeginDoc (that should now be a funtion, not a procedure) should return false (or abort the job but I think this could lead to some backward compatibility issue).

QC #: Date Reported: Area:
99974 10/12/2011 VCL\Win 32 Controls\TListView
Description: Steps:
[QC Short Description]
OnColumnRightClick is not called on a second monitor

[QC Description]
The Report QC#91574(Internal#281904) has been close but it's not fixed. That's why I'm creating this new report. At first I was using C++Builder 2010 and I'm now on C++Builder XE2.

The TListView event OnColumnRightClick is not called my second monitor.

Solution: Since I code in C++ I used the MAKEPOINTS macro, like this:
DWORD LPosition = GetMessagePos();
POINTS P = MAKEPOINTS(LPosition);
QC Entry 99974
It's easy to reproduce, but you will need two monitors. The second monitor should be on the left of the main monitor in Windows Display Settings in order to have a negative value for x. 1) Add a TListView to a TForm. 2) Add this code to the constructor: ListView1->ViewStyle = vsReport; TListColumn* ListColumn = ListView1->Columns->Add(); ListColumn->Caption = "Right Click On Me"; ListColumn->Width = 200; 3) In the OnColumnRightClick event of the TListView add this code: Application->MessageBoxW(L"Hello World", L"", MB_OK); 4) The message box should appears when right clicking the column in the main monitor. Now put the window in the second monitor with negative x or y value and right click on the TListView column. The message box will not appear. In ComCtrls.pas: NM_RCLICK: begin P := Point(LoWord(GetMessagePos), HiWord(GetMessagePos)); hChildWnd := ChildWindowFromPoint(Handle, ScreenToClient(P)); When right clicking on the column in my second monitor the value for P is something like this {65033, 205} The value for x does not make sense. This why hChildWnd will not have a good value and the code will not be executed. From the GetMessagePos Help: "Important Do not use the LOWORD or HIWORD macros to extract the x- and y- coordinates of the cursor position because these macros return incorrect results on systems with multiple monitors. Systems with multiple monitors can have negative x- and y- coordinates, and LOWORD and HIWORD treat the coordinates as unsigned quantities."

QC #: Date Reported: Area:
97941 8/21/2011 VCL\Touch Controls\TTouchKeyboard
Description: Steps:
[QC Short Description]
TTouchKeyboard on TFrame doesn't work correctly when the touch-panel is used

[QC Description]
TTouchKeyboard on TFrame doesn't work correctly when the touch-panel is used.
Does work correctly when the mouse is used.
QC Entry 97941
1.Run kb_test.exe (Attachments) on PC [Mouse Operation] EXP: Left-side: OK (on TFrame) Right-side: OK (on TForm) ACT: Left-side: OK Right-side: OK [Touch Operation] EXP: Left-side: OK Right-side: OK ACT: Left-side: NG <----- Doesn't react. Right-side: OK

QC #: Date Reported: Area:
101179 11/20/2011 VCL\Styles
Description: Steps:
[QC Short Description]
DBGrid.visible:=false does not work with vcl Styles

[QC Description]
The DBGrid loses functionality to hide when used with styles.

With a VCL Windows style it is possible to hide a DBGrid with DBGrid.visible:=false when not using styles. The command does not work (hide the grid) when using styles, at least not with Carbon, Golden Graphite or Slate Classico; the ones I tried.

If you check the Visible false box for the control in design mode, run the application, the DBGrid is hidden and DBGrid.visible:=true will make it visible, however, you can not make a 'visible' DBGrid invisible using the command DBGrid.visible:=false;
QC Entry 101179
Put a VCL DBGrid1 on a form. Add a button with the command DBGrid.visible:=false. ------- procedure TVCLdbGrid.Button1Click(Sender: TObject); begin if dbgrid1.Visible then DBGrid1.visible:=false else DBGrid1.Visible:=true; end; ------- Also add the capability to switch between styles (something like: TStyleManager.TrySetStyle('Carbon'). Start with Slate Classico; use the button to hide the DBGrid. Nothing happens to the DBGrid although all controls are properly 'skinned.' Try some other styles..nothing. Switch to TStyleManager.TrySetStyle('Windows'); use the button and the DBGrid vanishes as it is supposed to. The DBGrid loses functionality to hide when used with styles.

QC #: Date Reported: Area:
100935 11/10/2011 VCL\Styles
Description: Steps:
[QC Short Description]
On MDI application, EOSError exception: System Error Code: 1400 with Styles

[QC Description]
I have written a Delphi XE2 application that uses styles. I allow the user to select a style with 'Windows' as the default. If the user selects a non-Windows style, then Selects 'Windows', then selects a non-Windows style, the application locks up with a 'System Error. Code: 1400. Invalid window handle'. message. Are others seeing this and is there a way around it?

I should have added in my description that this is an MDI application. If there are no MDI child windows open, the switching of styles works fine. As soon as there is an MDI child window open, the sequence of changing from, for example, Iceberg Classico to Windows to Lavender Classico will generate the 'System Error. Code: 1400. Invalid window handle.' message.
QC Entry 100935
I allow the user to select a style with 'Windows' as the default. If the user selects a non-Windows style, then Selects 'Windows', then selects a non-Windows style, the application locks up with a 'System Error. Code: 1400. Invalid window handle'. message. use the Select Style menu item and verify that you can change from Windows to any other theme with no problem. So, select Carbon & Apply, then Windows & Apply, then Slate Classico & Apply, then Windows & Apply, etc. No problems encountered. Now click the LaunchMDI button to create an MDI child window. Select Windows & Apply, then Slate Classico & Apply and you will get the System Error. Code: 1400. Invalid window handle.

QC #: Date Reported: Area:
101049 11/15/2011 VCL\Styles
Description: Steps:
[QC Short Description]
StatusBar.Panels Alignment does not align text correctly

[QC Description]
With Style other than Windows.
If you have text in a statusbar panel, it does not align correctly to center or right.
QC Entry 101049
Set StatusBar.Panels[0].Alignment to either taCenter or taRightJustify and run your application with Style other than Windows.

QC #: Date Reported: Area:
101040 11/15/2011 VCL\Styles
Description: Steps:
[QC Short Description]
Visual clitches with PageControl with Styles tsButtons and tsFlatButtons and Form DoubleBuffered = True

[QC Description]
When using a PageControl with Styles property set to tsButtons or tsFlatButtons and the forms DoubleBuffered property set to True leads to visual clitches.

The issue is not related to TabVisible = False, because it occurs also with TabVisible = True and I can confirm that RAID #288539 is fixed in build 4329.

In the app where I found the issue DoubleBuffered is used to avoid flicker. This app uses multilevel inheritance and DoubleBuffered is set in the first ancestor (the form that inherits from TForm) and when disabling DoubleBuffered when using Styles then it is not flicker anymore it is like an animation where control by control is painted and so disabling DoubleBuffered is not really an option.

-> see steps and attached screenshots
QC Entry 101040
- save the attached test case - open MergeDlg.dpr - F9 expected: first page "Merge type" looks like on attached screenshot SvnMergeDialogMergeTypeStyledNoDoubleBuffered.png actual: first page "Merge type" has a white background with a black border on the right and bottom (see attached screenshot SvnMergeDialogMergeTypeStyledDoubleBuffered.png) - press two times the button "Next >" till you are on page "Merge options" expected: only the controls from page "Merge options" is visible actual: also the controls from the other pages are visible, unexpected white and black background (see attached screenshot SvnMergeDialogMergeOptionsStyledDoubleBuffered.png)

QC #: Date Reported: Area:
101310 11/25/2011 VCL\Styles\Style Files
Description: Steps:
[QC Short Description]
Style named "Untitled" appears as the last item in "Custom Styles"

[QC Description]
There's a style named "Untitled" as the last item in the "Custom Styles" list under Project - Options - Application - Appearance - Custom Styles.

//USc: This is the style in $(BDSCOMMONDIR)\Styles\DefaultStyle.vsf
QC Entry 101310
A bunch of unfinished styles are being delivered:
LightStyle.vsf
EOS.vsf
Luna.vsf
Obsidian.vsf
Silver.vsf
MaverickGreen.vsf
DefaultStyle.vsf
MasterStyle.vsf
Modern.vsf
Untitled.vsf

QC #: Date Reported: Area:
99936 10/11/2011 VCL\Styles\Designer
Description: Steps:
[QC Short Description]
VCL Style designer does not export/import style.png properly

[QC Description]
Using the new VCL style designer to export and subsequently import style.png (edited or not) results in a loss of anti-aliasing on all controls and other artifacts.

Artifacts include curved lines on the inside corners of a groupbox and other controls such as check boxes having distorted borders.

Unfortunately this makes editing existing VCL styles without the ability to use the style.png image as a template.

The loss of antialising and various artifacts produced by exporting and importing a style.png makes the VCL style designer unusable and is a show stopper for me.
QC Entry 99936
Open the VCL style designer. Open any of the supplied VCL styles. Export style.png Reimport/Update style.png Preview the VCL Style.. You will see the artifacts i mentioned and if you look carefully a loss of antialiasing on the borders of controls.

QC #: Date Reported: Area:
98724 9/9/2011 Debugger\Evaluator\Delphi
Description: Steps:
[QC Short Description]
[x64] strange threadvar behavior

[QC Description]
threavar in 64 bit world works differntly than in 32 bit
QC Entry 98724
0. I use Firebird 2.5
1. Install FIBPlus from attachment
2. Unpack attachemnt and open src\ConnectionLost\ConnectionLost.dpr
3. This app demonstrates FIBPlus feature for DB disconnects monitoring. Run app with Firebird started
4. Update some data in the grid
4. Shutdown firebird
5. push "Apply updates" button
6. Debugger opens at
constructor EFIBError.Create(ASQLCode: Long; const aMsg: String;Sender:TObject);

StatusVectorArray[1] will have zero value.


If this app compile in 32 bit mode
StatusVectorArray[1] has some right value.

Lapshin: Addition.

There are two problem was here - on evaluator and on FIBPlus side.

After fix was applied I discovered what correct error codes appeared in FStatusVector, but indexes are wrong for x64 target- for example in accordance with InterBase manuals error indicator is at StatusVector[0] = 1 (correct), but actual error code expected at StatusVector[1] = 0 (wrong). Real error code at StatusVector[2] - see screenshot attached, fixed evaluator used. But value is correct - see second screenshot for 32-bit target (actually InterBase network error, correct in test case).

Then I started investigation why offsets shifted on +4 bytes and discovered what it is problem of FIBPlus - in FireBird64 error codes have not LongInt but PtrInt (or NativeInt) type - ISC_STATUS, so each error code is 8 bytes in size on x64. StatusVector filled by FireBird x64 with 8 bytes values, but in FIBPlus ISC_STATUS still declared as LongInt - probably porting needed here. ISC_STATUS is portable type in FireBird, it depends on platform pointer size.

http://tracker.firebirdsql.org/browse/CORE-1844

QC #: Date Reported: Area:
99310 9/25/2011 Debugger\Evaluator\Delphi
Description: Steps:
[QC Short Description]
Tooltip expression evaluation on x64 bug

[QC Description]
When debugging a x64 app on delphi with the following class:

TClassABC = class
public
ClassA : TClassA;
ClassB : TClassB;
ClassC : TClassC;
end;

When I just create TClassABC and do not assign any value to ClassA, ClassB and ClassC and I evaluate ClassABC using the tool tip when debugging on Win32 the tool tip correctly displays nil for each one, but the same App under x64, the tool tip displays values different than nil. (The running code work ok when evaluate if ClassABC.ClassA = nil then). (if I assign a
value to ClassA for example the tool tip display correctly the values of ClassA).
QC Entry 99310
Create a class like the following: TClassABC = class public ClassA : TClassA; ClassB : TClassB; ClassC : TClassC; end; Then just create ClassABC without assigning values to the inner classes and then display the value of ClassABC using the tool tip evaluator and it will display values different to nil on ClassA, B and C.

QC #: Date Reported: Area:
99020 9/18/2011 Debugger\Evaluator\Delphi
Description: Steps:
[QC Short Description]
Evaluator View/ToolTips is broken with 64-bit optimization

[QC Description]
When debugging optimized 64-bit code, inspecting variables with Evaluator View and ToolTips does not work reliably. This is easy to reproduce, see Steps for a simple example.
QC Entry 99020
1) Start a new VCL application

2) Add Win64 as target platform (and activate it)

3) In project options, activate code optimization (in the Win64 debug configuration) (Project | Options | Delphi Comipiler | Compiling | Optimization, set it to True)

4) Add the following code to the form's OnCreate event:
========================================
procedure TForm1.FormCreate(Sender: TObject);
var
T: NativeInt;
begin
T := Tag;
T := T + 1; // <== Set break point here // variable T is accessible
Tag := T; // variable T is not accessible
T := Tag; // variable T is not accessible
T := T + 1; // variable T is accessible again
Tag := T; // variable T is not accessible
end;
========================================

5) Set a breakpoint to the second line

6) Run (hit F9) ==> debug break

==> At this point, Evaluator/Evaluator View/ToolTips correctly show content of local variable 'T' and member variable 'Tag'

7) Execute the second line by pressing F7 once

Expected:
==> Evaluator/Evaluator View/ToolTips should show content of 'T' and 'Tag'

Actual:
==> Variables cannot be inspected anymore

Press F7 again, and watch the variable T each time, in T := T + 1, the T is accessiable again.

QC #: Date Reported: Area:
100442 10/25/2011 Debugger\Evaluator\Delphi
Description: Steps:
[QC Short Description]
REGRESSION: Debugger evals PChar(eax) like Pointer(eax) instead of showing the string

[QC Description]
If you cast a CPU register (eax, edx, ecx, ebx, esi, edi, ..., rax, rbx, rcx, rdc, r8, r9, ...) into a PChar or PAnsiChar in the debugger evaluation window or watch window, the debugger doesn't show you the string but instead shows you the hex
value of the CPU register's content.

This is a regression from RAD Studio XE where it showed the string.


PAnsiChar(eax) also doesn't work either.
QC Entry 100442
1. Create a new console application 2. Replace the content with the following program. 3. Put a breakpoint in the "if S <> nil then" line 4. Start the application. 5. On the breakpoint press Ctrl+F7 (evaluate) and write "PChar(eax)" program Project1; function Test(S: PChar): PChar; begin if S <> nil then Result := '' else Result := S; end; begin Test('Hello'); end. Expected: PChar(eax) shows 'Hello' Actual: PChar(eax) shows $12345678 (where $12345678 is the memory address of the string 'Hello')

QC #: Date Reported: Area:
100419 10/24/2011 Debugger\Kernel
Description: Steps:
[QC Short Description]
x64 REGRESSION: The debugger fails to load the RSM file that includes an old-style object type

[QC Description]
Which essentially means that any x64 program that uses old-style objects, or as much as merely includes a unit that declares an old-style object type (w/o actually using it), cannot be debugged.

THIS IS A REGRESSION FROM RTM/UPDATE#1.
QC Entry 100419
Run the following programme under the x64 debugger: -------8<------- type DealBreaker = object end; asm int 3 end. -------8<------- Use the Module view to confirm that the corresponding RSM file is not loaded. What is much worse, the IDE has forgotten to inform the user about this mishap.

QC #: Date Reported: Area:
101048 11/15/2011 Debugger\Debugger UI
Description: Steps:
[QC Short Description]
misspelling of overflow

[QC Description]
'floating point overlow at....'

Search for overlow in bordbk160N.dll
QC Entry 101048



in win32src\dbk.rh
The text "floating point overflow at ...." misses the 2nd f: floating point overlow at. Search for overlow in bordbk160N.dll

QC #: Date Reported: Area:
100101 10/16/2011 Debugger\Evaluator ToolTips
Description: Steps:
[QC Short Description]
[Starter] Hint evaluation may blink in starter edition

[QC Description]
Added by Sysop
<<<<<
Start debug session in starter edition and point into any local variable. Hint window may blink with [Evaluating...] text
Please see attached screenshot for more information.
>>>>>

I am not talking about "Evaluator tooltip hints go transparent" i dont neeed this strange feature. I just need ordinal evaluaton that always dislpays eveluating and hides a tooltip now.
QC Entry 100101


This happens when evaluating a function call.
-Hin
Added by Sysop
<<<<<<<
1. create new VCL form application and add TButton, then wrtire OnClick event handler as below.
------
procedure TForm1.Button1Click(Sender: TObject);
begin
if Length(TButton(Sender).Caption) > 0 then
;
end;
------
2. place a breakpoint at 'if' statement
3. start debugging and click button
4. move mouse cursor over 'Caption' symbol
5. Hint window will blink
>>>>>>>

Start debug session in starter edition and point into any local variable. Hint will blinks with evaluating text

QC #: Date Reported: Area:
88057 9/14/2010 AddOn\Interbase components
Description: Steps:
[QC Short Description]
IBStoredProc raises unexpected exception "invalid blob id"

[QC Description]
Calling a stored procedure with a blob parameter where the stored procedure raises an exception (for example primary key violation) may raise "invalid blob id" instead of the expected exception.
QC Entry 88057
Create a table with a primary key and a blob. Create a stored procedure with a blob parameter that inserts a record into that table. CREATE TABLE A_TABLE ( A_BLOB BLOB SUB_TYPE 1, A_KEY INTEGER NOT NULL); ALTER TABLE A_TABLE ADD PRIMARY KEY (A_KEY); CREATE PROCEDURE A_PROCEDURE (A_BLOB BLOB SUB_TYPE 1) AS BEGIN INSERT INTO A_TABLE(A_KEY, A_BLOB) VALUES(1, :A_BLOB); END Create a new project with a new form and place a TIBDatabase, a TIBTransaction and a TIBStoredProc component on the form and set the properties so that the IBStoredProc refers to the stored procedure. Place a button on the form with the following OnClick procedure: procedure TForm1.Button1Click(Sender: TObject); var s: TStringList; begin IBDatabase1.Connected := True; s := TStringList.Create; s.Add('A Blob'); IBStoredProc1.ParamByName('A_BLOB').Assign(s); IBStoredProc1.ExecProc; end; Run the programm and press the button twice. A "primary key violation" exception is expected but a "invalid blob id" exception will be raised.

QC #: Date Reported: Area:
92918 4/7/2011 AddOn\Interbase components
Description: Steps:
[QC Short Description]
Wrong typecast in IBEvent

[QC Description]
unit IBEvents

destructor TIBEvents.Destroy;
begin
try
if Registered then
UnRegisterEvents;
except
// silence any exceptions which might be raised
// by UnRegisterEvents during destruction
end;
If Assigned(FDatabase) then
FDatabase.RemoveEventNotifier(Self);
FThreads.Free;
IF Assigned(FEvents) then
TStringList(FEvents).OnChange := nil;
FEvents.Free;
FUniEvents.Free;
FGDSLibrary := nil;
inherited Destroy;
end;

The wrong typecast
TStringList(FEvents).OnChange := nil;
may cause data loss or an exception. FEvents is of type TList<AnsiString>, not TStringList.
QC Entry 92918
 

QC #: Date Reported: Area:
99362 9/27/2011 AddOn\Interbase components
Description: Steps:
[QC Short Description]
Memory leaking in IBX / Access violations

[QC Description]
I have several problems with IBX in Delphi XE2. There are a lot of bugs introduced in the IBX library with this version.
- Memory leaks
- Access violations

I have included a testproject which shows memoryleaks and access violations with IBSQL.
QC Entry 99362
Create a table Test in a database with the alias Test: CREATE TABLE "TEST" ( "TESTID" INTEGER NOT NULL, CONSTRAINT "PK_TEST" PRIMARY KEY ("TESTID") ); Start the testproject and press the buttons... You even don't have to connect with the database to see the memory leaks. Just start the example program and close it immediately. Then you already will have memory leaks. Or code examples: TIBTransaction: The class member FIBLoaded is declared, never assigned a value, but used in destroy. Consequence: Memory/Objects allocated in the constructor will not be freed => memory leaks. TIBDatabase: The class member FIBLoaded is declared and used in the destructor to determine to free memory/objects allocated in the constructor or not. The memory/objects in the destructor should always be freed. => memory leaks. TIBSQL: The same story. The destruction of memory/objects allocated in the constructor may not depend on member FIBLoaded => memory leaks. IBInt.pas: No finalization for IBClientInterface (IBClientInterface.Free; IBEmbeddedLibrary := nil; IBServerLibrary := nil;) => memory leak. My example to set transaction and database in a different order where the database = transaction.defaultdatabase shows a clear error that can be resolved easy. TIBSQL.SetDatabase with parameter nil is not checked => Exception. I cannot believe that this library has passed your QA.

QC #: Date Reported: Area:
98636 9/7/2011 AddOn\Interbase components
Description: Steps:
[QC Short Description]
Use of IBScript unit gives memory loss.

[QC Description]
Just including the unit in uses results in memory loss.
QC Entry 98636
1. Create a new VCL Form application. 2. Add System.ReportMemoryLeaksOnShutdown := true; to the project file (.dpr) 3. Run - Close ... no memory loss reported. 4. Add IBScript to uses. 5. Run - Close ... Memory loss is now reported.

QC #: Date Reported: Area:
30511 6/23/2006 AddOn\Interbase components
Description: Steps:
[QC Short Description]
Error in Dataset Editor in TIBDataSet

[QC Description]
When click in DataSet Edito in IBDataset, appears all columns in my database, when I mark columns who is part of my SQL, it' ok... but when I open again the Dataset Editor, there columns not appears marked, like Delphi 7.

These error is in BDS2005 two.

Sorry my poor english (Google transalated)
QC Entry 30511
Put these components: 1 TIBDatabase 1 TIBTransaction 1 TIBDataSet Set these components, and right-click in TIBDataset, choose Dataset Editor, choose columns you want... click Generate SQL, and Ok. When finished, right-click again inTIBDataset, and choose again DataSet Editor, the columns you marked not show marked.

QC #: Date Reported: Area:
77543 9/9/2009 AddOn\Interbase components
Description: Steps:
[QC Short Description]
FieldByName('xy').Clear fails with some fieldtypes

[QC Description]
Converting a D2007 project to D2010 I'm running in problems when I try to set a database field to null with the mentioned "Clear"-method.

Problems arise with the fieldtypes
Numeric(18,2): errormessage "BCD Overflow"
Date: errormessage "0.0 is not a valid time format"
query
I'm using IBX from D2010 against Firebird 2.0.4. Database uses Charset 8859_1 (no unicode at the moment).
QC Entry 77543
Added by Sysop
<<<<<<<
This issue is same as QC#78920.
Please see workaround area of QC.
>>>>>>>

Added by Sysop
<<<<<<<
This issue is similar to QC#76327.
>>>>>>>

QC #: Date Reported: Area:
88928 10/13/2010 Midas\TClientDataSet
Description: Steps:
[QC Short Description]
Provider error on catch DB error

[QC Description]
Using a ClientDataSet with a Provider, DB Errors with negative CODE results in this error:
'-2147217873 is not a valid value for field ''ERROR_CODE''. The allowed range is 0 to 4294967295'

This error occurs because the "TUpdateTree.InitErrorPacket" get the "ErrorDS" with a field ERROR_CODE as dataType like ftLongWord, and try store a negative value.

I converted my projects of Delphi 2010 to Delphi XE because of errors in the Delphi 2010 compiler (Generics), however, any
error in simple database commands (Sample: DELETE Constraint error) occurs above this error.

My projects use architecture DataSet> Provider> ClientDataSet.
QC Entry 88928
Create a Database in MS SQL Server, with a table: CREATE TABLE TESTE (ID INT PRIMARY KEY) Create a Console App. This App simulate the Primary Key error in Database. But the DELETE Constraint using TClientDataSet.Delete in a not read-only ClientDataset the error occurs too. {$APPTYPE CONSOLE} uses SysUtils, ADODB, DB, DBClient, Provider, ActiveX; var vAdoQuery : TADOQuery; vAdoConnection: TAdoConnection; vClientDataSet : TClientDataSet; vProvider : TDataSetProvider; vString : string; begin CoInitialize(nil); try vAdoQuery := TADOQuery.Create(nil); vAdoConnection := TAdoConnection.Create(nil); vClientDataSet := TClientDataSet.Create(nil); vProvider := TDataSetProvider.Create(nil); try vAdoConnection.ConnectionString := 'Provider=SQLNCLI;Server=localhost;'+ 'Database=MyDatabase;' + 'Uid=sa;' + 'Pwd=xxx;'; vAdoConnection.LoginPrompt := false; vAdoConnection.Connected := True; vAdoQuery.Connection :=vAdoConnection; vProvider.DataSet := vAdoQuery; vProvider.Options := vProvider.Options + [poAllowCommandText]; vProvider.Name := 'abc'; vClientDataSet.SetProvider(vProvider); vClientDataSet.CommandText := 'SELECT * FROM TESTE '; vClientDataSet.ReadOnly := False; vClientDataSet.Active := True; vClientDataSet.Insert; vClientDataSet.FieldByName('ID').AsInteger := 5; vClientDataSet.Post; vClientDataSet.ApplyUpdates(0); vClientDataSet.Insert; vClientDataSet.FieldByName('ID').AsInteger := 5; vClientDataSet.Post; vClientDataSet.ApplyUpdates(0); finally vAdoQuery.Free; vAdoConnection.Free; vClientDataSet.Free; vProvider.Free; end; except on E: Exception do begin Writeln(E.ClassName, ': ', E.Message); readln(vString); end; end; CoUninitialize; end.

QC #: Date Reported: Area:
98725 9/9/2011 Compiler\Delphi
Description: Steps:
[QC Short Description]
[x64] DCC Fatal Error during program compilation Win64

[QC Description]
64bit compiler issue.
QC Entry 98725
By USc: - dcc64 QC98725.dpr expected: it compiles actual: QC98725.dpr(27) Fatal: F2084 Internal Error: NI2279 program QC98725; {$APPTYPE CONSOLE} type TSecData = packed record end; TSertificateType = (stHeavy, stThink); TPasswordArrayItem = packed record end; TPasswordsArray = packed record Items: array of TPasswordArrayItem; end; TForm8 = class(TObject) procedure V2_OpenSertificate(aSertificateID: string; aSD: TSecData; aSertificateType: TSertificateType; aPasswords: TPasswordsArray); end; procedure TForm8.V2_OpenSertificate(aSertificateID: string; aSD: TSecData; aSertificateType: TSertificateType; aPasswords: TPasswordsArray); begin end; //<- F2084 Internal Error: NI2279 begin WriteLn('PASS'); // on compile end.

QC #: Date Reported: Area:
101487 12/1/2011 Compiler\Delphi
Description: Steps:
[QC Short Description]
[x64] Internal compiler error compiling record assignment in Win64

[QC Description]
[x64]
Follow the steps in the Step pane.

The Delphi XE 2 Win64 compiler generates the following error:

[DCC Fatal Error] ... F2084 Internal Error: NI4188

at the assignment line in the supplied source snippet.

All parameters in the Pro() procedure appear to be required. Commenting any one of them causes the code to compile. The types of the first four parameters do not appear to matter (they were all originally different types).

The fifth parameter must be of the TColourPalettes_ type for the error to be thrown.
QC Entry 101487
1. Create a new Delphi project 2. Add a Win64 target and set it active 3. Paste the following code into a new Delphi project. 4. Press compile -> Internal error is displayed. program QC101487; {$APPTYPE CONSOLE} type TColourPalette_ = record Colour: LongWord; Value: Double; end; TColourPalettes_ = record Transitions: array of TColourPalette_; end; procedure Proc(const AFilter1: TObject; const AFilter2: TObject; const ADesignDescriptor: TObject; const AReferenceVolumeType: TObject; const AColourPalettes: TColourPalettes_); var FColourPalettes: TColourPalettes_; begin FColourPalettes := AColourPalettes;//#1 end; begin WriteLn('PASS'); // on compile end.

QC #: Date Reported: Area:
100022 10/13/2011 Compiler\Delphi
Description: Steps:
[QC Short Description]
dcc64: VersionInfo wrong

[QC Description]
1. Right click on dcc64.exe
2. Goto tab "Version"
3. Select "InternalName"

act: "dcc32"
exp: "dcc64"

QC Entry 100022
 

QC #: Date Reported: Area:
100343 10/22/2011 Compiler\Delphi\Code Generation/Optimization
Description: Steps:
[QC Short Description]
[x64] 31415 / 100 = 314

[QC Description]
[x64]
It is a compiler bug. Even when c is declared as an Int64 the "/" should and still does result in the correct value (314.15).
It is just that when c is declared as Comp, it results in an incorrect result when using x64.
QC Entry 100343
By USc:
- dcc64 QC100343.dpr
- execute QC100343.exe

expected: output is PASS
actual: output is
FAIL #1 Expected: 314.15 Actual: 314.00
FAIL

program QC100343;

{$APPTYPE CONSOLE}

function TestCompRealDivision: Boolean;
var
C: Comp;
D: Double;
Counter: Integer;
begin
Counter := 0;
//Comp / Integer
C := 31415;
D := C / 100;
if Round(D * 100) = 31415 then
Inc(Counter)
else
WriteLn('FAIL #1 Expected: ', 314.15:5:2, ' Actual: ', D:5:2);

//Comp / Real
C := 31415;
D := C / 100.0;
if Round(D * 100) = 31415 then
Inc(Counter)
else
WriteLn('FAIL #2 Expected: ', 314.15:5:2, ' Actual: ', D:5:2);

//Integer / Integer
D := 31415 / 100;
if Round(D * 100) = 31415 then
Inc(Counter)
else
WriteLn('FAIL #3 Expected: ', 314.15:5:2, ' Actual: ', D:5:2);
Result := Counter = 3;
end;

begin
if TestCompRealDivision then
WriteLn('PASS')
else
WriteLn('FAIL');
end.


Original steps:
WIN32: 31415/100=314,15

and

WIN64: 31415/100=314


Source:

procedure TForm2.FormCreate(Sender: TObject);
var
c: comp;
d: double;
begin
c := 31415;
d := c / 100;
{$IFDEF WIN64}
Label1.Caption := 'WIN64: 31415/100='+FloatToStr(d);
{$ELSE}
Label1.Caption := 'WIN32: 31415/100='+FloatToStr(d);
{$ENDIF}
end;

QC #: Date Reported: Area:
100290 10/20/2011 Compiler\Delphi\Code Generation/Optimization
Description: Steps:
[QC Short Description]
Array Function Results in OS X

[QC Description]
Given the following types:

type
TMyEnum = (myFirst, mySecond, myThird);
TMyArray = Array[TMyEnum] of String;

then the function

function MyFunction(first, second, third : string) : TMyArray;
var
ary : TMyArray;
begin
ary[myFirst] := first;
ary[mySecond] := second;
ary[myThird] := third;

Result := ary;
end;

if you breakpoint after the Result assignment, you will see that Result is an empty array regardless what is passed into the function. Also, the value returned to the calling function shows the empty array.

Uwe has said that it also SIGSEVs when stepping over the assignment and hangs the debugger for him if he runs in the debugger and doesn't step. I haven't seen that behavior.
QC Entry 100290
- dccosx QC100290.dpr - execute QC100290 expected: output is PASS actual: Runtime error 231 at 00014D49 program QC100290; {$APPTYPE CONSOLE} uses System.SysUtils; type TMyEnum = (myFirst, mySecond, myThird); TMyArray = Array[TMyEnum] of string; function MyFunction(first, second, third: string): TMyArray; var ary: TMyArray; begin ary[myFirst] := first; ary[mySecond] := second; ary[myThird] := third; Result := ary; end; var MA: TMyArray; begin try MA := MyFunction('A', 'B', 'C'); if (MA[myFirst] = 'A') and (MA[mySecond] = 'B') and (MA[myThird] = 'C') then WriteLn('PASS') else WriteLn('FAIL'); except on E: Exception do begin Writeln('FAIL - Exception Error'); WriteLn(' ClassName=', E.ClassName); WriteLn(' Message=', E.Message); end; end; end.

QC #: Date Reported: Area:
98541 9/5/2011 Compiler\Delphi\Linker
Description: Steps:
[QC Short Description]
$L with 64 obj file - F2084 Internal Error: O852

[QC Description]
When I try link attached 64 bit obj file I recieve the following message:

[DCC Fatal Error] grddelphi.pas(1167): F2084 Internal Error: O852
QC Entry 98541
When I try link attached 64 bit obj file I recieve the following message:


program Project1;

{$APPTYPE CONSOLE}

{$IFDEF CPUX64}
{$L GrdFWMC64} //for x64 only
{$ENDIF}

uses
System.SysUtils;

begin
try
writeln('PASS'); //on compile
except
on E: Exception do
Writeln('FAIL - ',E.ClassName, ': ', E.Message);
end;
end.


Expected: succesfull compile
Actual : [DCC Fatal Error] Project1.dpr(12): F2084 Internal Error: O852

QC #: Date Reported: Area:
99377 9/27/2011 Compiler\Delphi\Language
Description: Steps:
[QC Short Description]
Little bug in Win64 Mode - old style, 'Object' type.

[QC Description]
Added by Sysop
<<<<
This issue is similar to QC#98448(Internal#285067).
>>>>

I found a bad bug in Win64 mode,
----------
Access Violation Error.
Project ObjectTest.exe raised exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'.
----------

But work fine Win32 Mode.
See Sample

Program ObjectTest;

Type
BaseObj = Object
Constructor Create;
Procedure P1; virtual ; // If Remove Virtual Not Exception In Call P1 Only Exception in v := 12.0
End;

SecObj = Object( BaseObj )
Var v: Double ;
Procedure P1; virtual ; // If Remove Virtual Not Exception In Call P1 Only Exception in v := 12.0
End;

Type
BaseClass = Class
Private
MyObj: BaseObj;

End;

Constructor BaseObj.Create;
Begin
{ }
End;

Procedure BaseObj.P1;
Begin
End;

Procedure SecObj.P1;
Begin
inherited ;
V := 12.0 ; // <----- Raise Exception This Line ( Not Win32 But Win64 )
End;

Var
MyObj : SecObj;
MyClass: BaseClass;

Begin
MyObj.Create;
MyObj.P1; // <----- Not Raise Exception This Line ( Win32 & Win64 )
// ----------------------------------------

MyClass := BaseClass.Create;
MyClass.MyObj.Create;
MyClass.MyObj.P1; // <----- Raise Exception This Line ( Not Win32 But Win64 )
MyClass.Free;

End.
QC Entry 99377
A)When i add "virtual" keyword in method definition: 1) In Win64 mode and define variable in global scope i can call P1 but raise exception in assign 12.0 to "v" variable; 2) In Win64 mode If i define variable inside class scope i cant call P1 and raise exception. B) When i remove "virtual" keyword in method definition: 1) In Win64 mode and define variable in global scope or inside class escope i can call P1 but raise exception in assign 12.0 to "v" variable; All this definition safe work in WIN32 mode.

QC #: Date Reported: Area:
99387 9/27/2011 Compiler\Delphi\Language\Variants
Description: Steps:
[QC Short Description]
[REGRESSION] On a late binding OLE call the "type := 33" results in a runtime tpe miss match error

[QC Description]
I am porting library function from XE to XE2 and came across a problem with OLE Objects which are OK in XE but produce a run time Type Mismatch error in XE2
QC Entry 99387
I am porting library function from XE to XE2 and came across a problem with OLE Objects which are OK in XE but produce a run time Type Mismatch error in XE2 When attempting to add a Field to a word document via OLE I get a run time Type Mismatch error which can be isolated to the type parameter; FMSWord.Selection.Fields.Add(Range := FMSWord.Selection.Range, type := wdFieldPage); wdFieldPage is a constant number. I tried passing as a variant also

QC #: Date Reported: Area:
101374 11/28/2011 Compiler\Delphi\Generics
Description: Steps:
[QC Short Description]
F2084 Internal Error: G9051 for an interface implementation with TBytes and stdcall

[QC Description]
Internal error when compiling:
[CDD Fatal Error] xxxxxxxxx.pas F2084 Internal Error: G9051

Same project compiles well with Delphi 2010
QC Entry 101374
By USc: - dcc32/dccosx QC101374.dpr expected: it compiles actual: <= XE2 U#1: QC101374.dpr(16) Fatal: F2084 Internal Error: G9051 XE2 U#2: it compiles Conditions: - TBytes definition needs to be in another unit (as it is in System.SysUtils by default) (#1) - interface method needs to have a calling convention specified (see #2; pascal works, but at least stdcall and cdecl fail) //--- QC101374.dpr --- program QC101374; {$APPTYPE CONSOLE} uses SysUtils.Simplified;//#1 type IDataConn = interface function Read: TBytes; stdcall;//#2 end; TDataConn = class(TInterfacedObject, IDataConn) public function Read: TBytes; virtual; stdcall; abstract; end; begin WriteLn('PASS'); // on compile end. //--- SysUtils.Simplified.pas --- unit SysUtils.Simplified; interface type TBytes = TArray<Byte>; implementation end. Original steps: Build the attched project

QC #: Date Reported: Area:
101590 12/6/2011 Compiler\Delphi\Generics
Description: Steps:
[QC Short Description]
Access violation when setting a generic record in a package

[QC Description]
I have a package containing a record.
This record has a generic record field.

When I Include the package in a exe. I get an access violation when setting the value of the generic record trough a class operator.

The error doesn't occour all the time. It mostly occours when I change something in the exe and run directly. (F9 instead of ctrl F9).

code:
//***************
In executable:
//***************
procedure TForm7.btnTestPkgRecClick(Sender: TObject);
begin
FPackageRecord.Id := 1;
FPackageRecord.NullInt := 123; //This fails when run with F9
FPackageRecord.NullDT := Now;
end;

//***********/
In package
//***********/

type
TPackageRecord = record
Id : Integer;
NullInt : Nullable<Integer>;
NullDT : Nullable<TDateTime>;
end;

type
Nullable<T> = record
private
FDummy : String;
FValue: T;
FHasValue: Boolean; // Default False

public
constructor Create(const Value: T);

function GetValue: T;
procedure SetValue(const Value: T);

property HasValue: Boolean read FHasValue;
property Value: T read GetValue write SetValue;

class operator Implicit(const Value: T): Nullable<T>;
class operator Explicit(const Value: T): Nullable<T>;
end;

implementation

{ Nullable<T> }

constructor Nullable<T>.Create(const Value: T);
begin
FHasValue := True;
FValue := Value;
FDummy := ''; //To avoid hints at compile time
end;

class operator Nullable<T>.Implicit(const Value: T): Nullable<T>;
begin
Result.FValue := Value;
Result.FHasValue := True;
end;

procedure Nullable<T>.SetValue(const Value: T);
begin
FValue := Value;
FHasValue := True;
end;

class operator Nullable<T>.Explicit(const Value: T): Nullable<T>;
begin
Result.FValue := Value;
Result.FHasValue := True;
end;

function Nullable<T>.GetValue: T;
begin
Result := FValue;
end;
QC Entry 101590
By USc: - save attached test case in the directory Simplified - dcc32 -LUQC101590Package QC101590.dpr - execute QC101590.exe expected: output is PASS actual: D2010 U#4/#5: FAIL #2 - Exception Error ClassName=EAccessViolation Message=Access violation at address 004013F1 in module 'QC101590.exe'. Read of address 00000000 FAIL XE/XE2: PASS

QC #: Date Reported: Area:
100119 10/16/2011 Compiler\Delphi\Generics
Description: Steps:
[QC Short Description]
[REGRESSION] Generic types can no longer be typecast to class types

[QC Description]
Since Update 2, the following code results in an 'Invalid typecast' error on the typecast to TComponentClass :-

constructor TObjGuard<T>.Create;
begin
inherited Create;
if T.InheritsFrom(TComponent) then
FObj := T(TComponentClass(T).Create(nil))
else
FObj := T(TClass(T).Create);
end
QC Entry 100119
- Create a new Delphi console application and save it as 'GenericClassCast' - Insert the following code program GenericClassCast; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Classes; type TTestType<T: class> = class private FObj: T; public function GetObj: T; end; { TTestType<T> } function TTestType<T>.GetObj: T; begin if T.InheritsFrom(TComponent) then FObj := T(TComponentClass(T).Create(nil)) else FObj := T(TClass(T).Create); end; begin try { TODO -oUser -cConsole Main : Insert code here } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. - Compile Expected: The application compiles Actual:

QC #: Date Reported: Area:
100655 11/2/2011 Compiler\Delphi\Generics
Description: Steps:
[QC Short Description]
REGRESSION: XE2 Update 2 - Error E2010 Incompatible types

[QC Description]
Delphi XE2 Update2 no longer compiles following code and shows Error E2010 Incompatible types 'T' and 'TXNamedPersistent'

//USc: This is regression from XE2 Update #1 and could be related to #288226.
QC Entry 100655
- dcc32/dcc64/dccosx QC100655.dpr expected: it compiles actual: QC100655.dpr(26) Error: E2010 Incompatible types: 'T' and 'TXNamedPersistent' program QC100655; {$APPTYPE CONSOLE} uses Classes; type TXNamedPersistent = class(TPersistent); TXObjectList<T: class, constructor> = class(TObject) protected function GetItem(AIndex: Integer): T; public function IndexOfName(const Name: string): Integer; property Items[AIndex: Integer]: T read GetItem; default; end; function TXObjectList<T>.GetItem(AIndex: Integer): T; begin Result := Default(T); end; function TXObjectList<T>.IndexOfName(const Name: string): Integer; begin if Items[0] is TXNamedPersistent then; end; begin WriteLn('PASS'); // on compile end.

QC #: Date Reported: Area:
99715 10/7/2011 RTL\Delphi
Description: Steps:
[QC Short Description]
_InitializeControlWord calls GetMXCSR without checking if SSE1 is available (32bit)

[QC Description]
System.pas::_InitializeControlWord uses the SSE1 instruction STMXCSR (GetMXCSR) when compiled for 32 bit. This has an effect on what CPUs are supported. Windows 2000 and XP can run on CPUs that don't have the SSE1 instruction set (like an AMD Athlon 1400) thus the application crashes with an "Invalid opcode" exception.


Before calling GetMXCSR the _InitializeControlWord should check if the CPU supports SSE1.
QC Entry 99715
1. Create a new 32bit windows console application 2. Compile it 3. Start the executable on a CPU that doesn't support SSE1 (like an AMD Athlon 1400) Expected: The application runs Actual: The application crashes

QC #: Date Reported: Area:
99941 10/11/2011 RTL\Delphi
Description: Steps:
[QC Short Description]
Delphi RTL source is missing build scripts for rebuilding

[QC Description]
The source code included with the product in the source\rtl directory cannot be rebuilt because of the special build requirements of System.pas and other core RTL units.
QC Entry 99941
Install Rad Studio
Try to rebuild System.pas

------------------
Add these files to the delivered source (in source\rtl):

BuildOSXRTL.dpk
BuildOSXRTL.dproj
BuildWinRTL.dpk
BuildWinRTL.dproj
RTL.Build.targets
BuildRTL.bat

QC #: Date Reported: Area:
100201 10/18/2011 RTL\Delphi\Other RTL
Description: Steps:
[QC Short Description]
SysInit: Incorrect assembly code for InterlockedExchange and InterlockedExchangePointer causing access violation

[QC Description]
This issue is a direct cause of access violation when using SetDliFailureHook2 on 32-bit platform reported in QC#98567(Internal#287466).

The code in SysInit from Delphi XE 2 Update 1 is:

function InterlockedExchange(var Target: Integer; Value: Integer): Integer; stdcall;
asm
MOV EAX,Value
MOV EDX,Target
LOCK XCHG [EDX],EAX
end;

function InterlockedExchangePointer(var Target: Pointer; Value: Pointer): Pointer; stdcall;
asm
JMP InterlockedExchange
end;

However, because InterlockedExchange is declared as "stdcall", it expects stack to be created and handled, while InterlockedExchangePointer calls it using a jump, therefore causing access violation.
QC Entry 100201

--
added by QA:
code produces AV only on 32 bit, does not on 64 bit.
Use the steps reported in QC#98567(Internal#287466). Specifically, call SetDliFailureHook2(AnyValue), which itself calls InterlockedExchangePointer and causes access violation.

QC #: Date Reported: Area:
100765 11/5/2011 RTL\Delphi\Memory, Pointer, Address
Description: Steps:
[QC Short Description]
[x64] getmem.inc bug

[QC Description]
Line 3358 from getmem.inc is wrong:

test byte ptr [esi - BlockHeaderSize], PreviousMediumBlockIsFreeFlag

esi should clearly be rsi.

The latest version of FastMM has the same code. An app with AlwaysAllocateTopDown defined crashes immediately at this line.
QC Entry 100765
In GetMem.inc, the following code block is seen for SysFreeMem.


mov [rsi + rbx - BlockHeaderSize], rcx
@NextBlockChecked:
{Can we combine this block with the previous free block? We need to
re-read the flags since it could have changed before we could lock the
medium blocks.}
test byte ptr [esi - BlockHeaderSize], PreviousMediumBlockIsFreeFlag
jnz @PreviousBlockIsFree
@PreviousBlockChecked:


In the Description, AlwaysAllocateTopDown is only seen FastMM4.pas, thus making the "crash" for this bug more difficult to reproduce in straight Delphi.

QC #: Date Reported: Area:
100726 11/4/2011 RTL\Delphi\Memory, Pointer, Address
Description: Steps:
[QC Short Description]
[x64] Memory manager failure if more than 4GBytes allocated

[QC Description]
Delphi fails to allocate memory although there is still enough memory available.
The memory manager will create an access violation while trying to allocate memory.
This problem seems only to happen if the process already has allocated more than 4GByte of memory.
This problem happens since I installed Delphi XE2 Update 2, it did not happen on Delphi XE2 RTM (i never have installed Delphi XE2 Update 1).
My PC has 12 GByte Memory available. At the point of the crash it uses ~8GByte of Memory.
QC Entry 100726
1. Load and run attached sample project 2. Press Button1 and wait expected result allocates all the TObjects without problems actual result access violation in getmem.inc line 2366 (and rcx, [eax - BlockHeaderSize]) Call Stack: System.SysGetMem(Opt.out) System._GetMem(???) System.TObject.NewInstance System._ClassCreate(???,???) System.TObject.Create Unit9.TForm9.Button1Click($6432F90)

QC #: Date Reported: Area:
100277 10/20/2011 SOAP\Client Applications
Description: Steps:
[QC Short Description]
Memory leak when consuming web services

[QC Description]
Thanks to
ReportMemoryLeaksOnShutdown := (DebugHook <> 0)
we can see that there are memory leaks when consuming web services.
QC Entry 100277

Added by Sysop
<<<<<<
Please see comment of QC to fix this issue.
>>>>>>
Just create a console application with this code : ---------------------------------------- program WSMemLeak; {$APPTYPE CONSOLE} {$R *.res} uses Soap.InvokeRegistry, Soap.Rio; type IHelloWorld = interface (IInvokable) ['{A9EDEF17-5208-4FE2-8DDE-71993F69E4E0}'] procedure SayHello (); stdcall; end; procedure MainWSMemLeak (); var LRio : IHelloWorld; begin InvRegistry.RegisterInterface (TypeInfo (IHelloWorld)); LRio := TRIO.Create (nil) AS IHelloWorld; LRio := nil; end; begin ReportMemoryLeaksOnShutdown := (DebugHook <> 0); MainWSMemLeak (); end. ---------------------------------------- and run it : there is a memory leak, the TRIO object is not destroyed (RefCount is still 1 after LRio := nil)

QC #: Date Reported: Area:
100832 11/7/2011 FireMonkey
Description: Steps:
[QC Short Description]
[iOS] TMemo crashing iOS application

[QC Description]
iOS program will crash after adding 20-30 characters to a TMemo field simply hold down the delete key after a number of characters are deleted the application will crash.
QC Entry 100832

Note: application fails with 'Program received signal: 'EXC_BAD_ACCESS'' at line 810 in FMX_Platform_iOS.pas

//tested with Xcode 4.2, iOS 5 on both simulator and device
Start a Firemonkey HD iOS project. Add a TMemo box to your form. Either add some text now or add it at runtime. Click on the memo field on the iOS device and press and hold the delete key and the application will eventually crash.

QC #: Date Reported: Area:
100814 11/7/2011 FireMonkey
Description: Steps:
[QC Short Description]
TListBox for iOS

[QC Description]
Each item clicked selects even when multiselect is False.
QC Entry 100814
Start a Firemonkey HD for iOS project. Drop a TListBox on the form. Turn on Turn on MouseTracking. Compile and Run. Click an Item and then click another item and scroll at the same time.

QC #: Date Reported: Area:
100318 10/21/2011 FireMonkey
Description: Steps:
[QC Short Description]
TPrinterSetupDialog is missing in component toolbar

[QC Description]
Added by Sysop
<<<<<<
TPrinterSetupDialog component is missing in [Dialogs] category of Tool Palette.
>>>>>>

The TPrinterSetup component is documented but does not show up in any unit.
QC Entry 100318
Look for it in component toolbar

QC #: Date Reported: Area:
97040 8/2/2011 FireMonkey
Description: Steps:
[QC Short Description]
TNumberBox not updating it's display

[QC Description]
The TNumberBox appears to be trying to act as a spin edit. If you hit the up and down arrow nothing appears to happen. If, on the other hand, you hit the up or down arrow followed by the right arrow then the number display updates. You can hit up 3 times, then right to move it from 0-3 (showing that the update IS happening, it is just not showing).

The same issue happens with the TSpinBox
QC Entry 97040
1) Place a TNumberBox on a blank 2D Firemonkey form 2) run the application 3) Hit up arrow 3 times followed by right arrow 4) repeat step 3

QC #: Date Reported: Area:
99345 9/26/2011 FireMonkey
Description: Steps:
[QC Short Description]
Changes to TForm.Cursor are not rendered correctly

[QC Description]
If you make a change to TForm.Cursor, the new cursor is not rendered correctly. As you move the cursor around the field, it will occasionally flash back to its original value.

Added by Sysop
<<<<<
For example, when I click the client area of Form, Cursor becomes crDefault.
>>>>>
QC Entry 99345
Steps to reproduce ------------------ - Create a new FireMonkey HD application - Set the TForm.Cursor property to crHourglass - Run - Move the cursor around the form. Expected: The cursor is rendered as crHourglass as it is moved around the form Actual: The cursor is mostly rendered as crHourglass as it moved around the form, but is occasionally rendered as crDefault Added by Sysop <<<<< For example, when I click the client area of Form, Cursor becomes crDefault. >>>>>

QC #: Date Reported: Area:
99545 10/3/2011 FireMonkey
Description: Steps:
[QC Short Description]
Modal Windows in background

[QC Description]
A window shown with .ShowModal goes to background(behind Mainwindow) if you select the Application in taskbar.

This also happen to Messagedialogs.

On Mac its ok.
QC Entry 99545


This is a comment from QC
<<<<<<<<
I confirmed this on Windows 7, which shows both the main and modal form in the TaskBar and it defaults to the main form.
>>>>>>>>
Just create a Project with two FireMonkey Forms. In a ButtonClick event hanlder: Form2.ShowModal; Run it on Windows. Now you can select Form1 in Taskbar and the modal window, Form2, is behind Form1.

QC #: Date Reported: Area:
99508 10/1/2011 FireMonkey
Description: Steps:
[QC Short Description]
Drag and Drop Events are fired when inappropriate

QC Entry 99508


This is a comment from QC
<<<<<<<
Someone on one of the forums reported this problem and said they traced part of the problem to FMX.Platform.Win

line 2067: Winapi.Windows.ScreenToClient(Form.Handle, pt);
line 2101: Winapi.Windows.ScreenToClient(Form.Handle, pt);

Form.Handle is not a windows handle. The lines should read

Winapi.Windows.ScreenToClient(FmxHandleToHWND(Form.Handle), pt);

This is only part of the problem, I have not located the rest of
the problem.
>>>>>>>
1) Create a New FireMonkey HD Project 2) Add a TPanel to the very top of the form, leaving most of it blank 3) Add a TLabel on the form 4) Create an OnDragOverEvent with the following code: Label1.Text:='Mouse Pos X:'+FloatToStr(Point.X)+' Y:'+FloatToStr(Point.Y); 5) Compile and run 6) Drag something onto the form itself but NOT onto the Panel ISSUE #1 -- You will see that the OnDragOver Event is firing REGARDLESS as to where the mouse is on the form ISSUE #2 -- The Mouse Coordinates are completely crazy numbers Interestingly OnMouseMove only fires when appropriate and the Mouse Coordinates are as expected... NOTE: When you get the mouse coordinates reporting correctly, if necessary, then I believe a simple modification of TControl's DragOver, DragDrop routines as follows would fix Issue #1 procedure TControl.DragOver(const Data: TDragObject; const Point: TPointF; var Accept: Boolean); begin if Assigned(OnDragOver) {KJS 10-1-11} and PointInObject(Point.X,Point.Y) {END ADD}then OnDragOver(Self, Data, Point, Accept); end;

QC #: Date Reported: Area:
100415 10/24/2011 FireMonkey
Description: Steps:
[QC Short Description]
TStringGrid ReadOnly property has no effect when bound to TClientDataSet

[QC Description]
When binding a TStringGrid to a TClientDataset with LiveBinding, setting the TStringGrid's ReadOnly property does not prevent the user from changing the field values.

In addition, setting the column ReadOnly property via the Columns Editor has no effect.

There doesn't seem to be a way to set the ReadOnly property of a visual data control without setting the ReadOnly property on the underlying dataset.

Setting the ReadOnly property on a TStringGrid that is not bound to a dataset with LiveBinding works as expected.
QC Entry 100415
Create a new FireMonkey HD application project. Drop a TStringGrid onto the form. Drop a TClientDataset onto the form. Drop a TDataSource onto the form. On the TClientDataSet, add two new String fields, named Field1 and Field2. Right-click the TClientDataSet and click Create DataSet. Set the TDataSource's DataSet property to TClientDataSet1. Right-click the TStringGrid and select Link to DB DataSource. Select BindScopeDB1 and click OK. Set the TStringGrid's ReadOnly property. Drop a TButton onto the Form. In the Button's OnClick event, enter the following code: procedure TForm1.Button1Click(Sender: TObject); begin ClientDataSet1.Append; ClientDataSet1.FieldByName('Field1').Value := 'This'; ClientDataSet1.FieldByName('Field2').Value := 'That'; ClientDataSet1.Post; ClientDataSet1.Active := False; ClientDataSet1.Active := True; end; Run the application and click the button twice to add two records. Edit the first record in the TStringGrid and move the cursor to the second record. The StrinGrid allows you to edit the field values, even though it's set to ReadOnly.

QC #: Date Reported: Area:
99997 10/13/2011 FireMonkey
Description: Steps:
[QC Short Description]
[iOS] Image Bitmap Canvas doesn't work

[QC Description]
Writing onto a TImage.Bitmap.Canvas renders no effect under iOS.
QC Entry 99997
1. Create a Firemonkey iOS HD application. 2. Drop a TImage component onto the form and size it to ~200x200 3. In the FormCreate event, insert the following code: Image1.Bitmap := TBitmap.Create(trunc(Image1.Width), trunc(Image1.Height)); 3. Drop a button on the form 4. In the button's OnClick event, insert the following code: var c : TAlphaColor; begin with Image1.Bitmap.Canvas do begin c := Random(High(TColor))-High(TColor); Stroke.Kind := TBrushKind.bkSolid; Stroke.Color := c; StrokeThickness := 4; DrawRect(RectF(10,10,50,50), 2, 2, AllCorners, 1.0); end; Image1.Repaint; 5. Run the Application in the IDE. 6. Click the button: Each time it is clicked, a rectangle of random color will show in the TImage as intended. 7. Export to Xcode using dpr2code 8. Open the project with Xcode on mac and compile 6. Click the button: Nothing happens

QC #: Date Reported: Area:
97191 8/5/2011 FireMonkey
Description: Steps:
[QC Short Description]
Combobox text drawn with an offset during mouse move on the items.

[QC Description]
When moving the mouse from any item (except the first one) in the list box of a combo box above the first item, the text of the combo box will be drawn with an offset.
QC Entry 97191
- Create an Firemonkey HD application
- Drop a combo box to the form
- Resize the combobox so that it is about twice the height of the default combobox
- Create 10 items for the combo box.
- Run the application
- Open the combo box.
- Move your mouse to the 3 item
- Now move the mouse above the 1st item and
you will see the text in the combo box moving.

QC #: Date Reported: Area:
98289 8/29/2011 FireMonkey
Description: Steps:
[QC Short Description]
mouse cursor flickers when moving over TEdit

[QC Description]
When moving the mouse over a TEdit control, the mouse pointer flickers between the crIBeam and crArrow. This does not look good.
QC Entry 98289
1. File | New FireMonkey HD application 2. Put a TEdit on the form 3. Run the application (on windows) 4. Keep moving the mouse pointer on the edit the mouse pointer flickers between the crIBeam and crArrow

QC #: Date Reported: Area:
98295 8/29/2011 FireMonkey
Description: Steps:
[QC Short Description]
TEdit: SelectAll should not be called when clicking on an edit

[QC Description]
When clicking in a TEdit using the mouse the entire text in the edit is selected. This should not be the case. The text should be selected only if the focus was moved to the edit using the tab key, but not when using the mouse.

When the edit is focused using the keyboard (tab key) I typically have to use the arrow keys to move the caret to the chars I want to change. So SelectAll is good, because the text is deselected when I pressing left or right or I can overwrite the entire text by typing a new text.
When using the mouse I typically click near the chars I want to change. If I then type a key I don't expect that the text in the edit is replaced with the key I just pressed.

If I want to have the autoselection when using the mouse, I could easily call "Select All" in the OnEnter event.
QC Entry 98295
1. File | New Firemonkey application 2. Place a TEdit and TButton on the form 3. Run the application 4. Type "This should noot be autoselected" into the edit 5. Click on the button 6. Click into the edit near the "noot" in order to delete one "o". expected: The cursor is near the "o", no autoselection of the text act: the text is autoselected, I have to click again in order to remove the selection

QC #: Date Reported: Area:
98085 8/24/2011 FireMonkey
Description: Steps:
[QC Short Description]
TCheckbox should check on Mouse Up

[QC Description]
Under Windows and OS X (Lion) check boxes are checked when the mouse is released.

Currently TCheckBox is checked when the mouse is pressed down. This is wrong.
QC Entry 98085
 

QC #: Date Reported: Area:
100722 11/3/2011 FireMonkey
Description: Steps:
[QC Short Description]
[iOS] Bitmap.Canvas.DrawBitmap bug in ios

[QC Description]
[iOS]
procedure TForm2.CornerButton3Click(Sender: TObject);
var myrect:TRectF;
begin
myrect.Create(0,0,50,50);
Image2.Bitmap.Create(50,50);

Image2.Bitmap.Clear(claGreen);
Image2.Bitmap.Canvas.BeginScene;
Image2.Bitmap.Canvas.DrawBitmap(Image1.Bitmap,myrect,myrect,50,true);
Image2.Bitmap.Canvas.EndScene ;
Image2.Bitmap.BitmapChanged;
end;

in MAC AND WINDOWS this code was succeed;but in ios(ipad & xcode) ,DrawBitmap not copy image.bitmap to image2.bitmap,the image2 show only greencolor( clear(clagreen) ),the canvas.DrawBitmap not action
QC Entry 100722
 

QC #: Date Reported: Area:
97674 8/16/2011 FireMonkey
Description: Steps:
[QC Short Description]
FMI: bad quality of loading image on iPad

[QC Description]
Compiling an app for iPad still uses the loading image used for iPhone, which has just to low resolution for iPad and looks just bad.
QC Entry 97674
 

QC #: Date Reported: Area:
99676 10/6/2011 FireMonkey\Dialogs
Description: Steps:
[QC Short Description]
TPrinterSetupDialog shows wrong printer if Orientation is changed

[QC Description]
When a TPrinter property is changed (ie: Orientation), the PrinterWin index is set back to 0, so PrintSetupDialog will not show the correct "active printer".

QC Entry 99676
(make sure your windows system has at least 2 printers configured) -New FMX HD app -Drop a button, add OnClick code below -Add uses FMX.Printer (and FMX.Dialogs) -Run, click button Exp: Setup dialog shows with 2n printer selected Act: Setup dialog shows 1st printer selected procedure TForm73.Button1Click(Sender: TObject); begin // Set current printer device to 1 (2nd printer installed) Printer.ActivePrinter:=Printer.Printers[1]; // Bug: this resets ActivePrinter to 0 Printer.Orientation:=TPrinterOrientation.poLandscape; // <-- comment to workaround with TPrinterSetupDialog.Create(Self) do try Execute; finally Free; end; end;

QC #: Date Reported: Area:
99896 10/11/2011 FireMonkey\Dialogs
Description: Steps:
[QC Short Description]
Firemonkey ShowMessage partially unreadable

[QC Description]
Having a ShowMessage with short text containing spaces, the text is wrapped but height is not adjusted.
QC Entry 99896
1. Create Firemonkey application 2. Add a button 3. In the button's onclick event, write the following: ShowMessage(Format('H %d W %d', [Height, Width])); 4. Output is garbled (Two lines live in the space for on, centered vertically). See attached.

QC #: Date Reported: Area:
100871 11/8/2011 FireMonkey\Dialogs
Description: Steps:
[QC Short Description]
TPageSetupDialog exchanges values for Height and Width

[QC Description]
The PageHeight propery of TPageSetupDialog returns PaperSize.X and the PageWidth propery returns PaperSize.Y which should the other way around (Height = Y and Width = X)
QC Entry 100871
Not needed; view FMX.Dialogs.pas

QC #: Date Reported: Area:
98151 8/25/2011 FireMonkey\Dialogs
Description: Steps:
[QC Short Description]
Showmessage dialog box width is too wide when displaying an empty string

[QC Description]
Showmessage dialog box width is too wide when displaying an empty string
QC Entry 98151
Create a new Firemonkey HD application On the form oncreate event add this : ShowMessage(''); Compile and run project Act : displayed dialog box width is about 80% of the screen Expt : displayed dialog box width should be "standard"

QC #: Date Reported: Area:
100550 10/28/2011 FireMonkey\Form Designer
Description: Steps:
[QC Short Description]
TBitmap saved to form causes image data loss

[QC Description]
When loading an image into the Bitmap property of a TImage control at design time, the IDE will save the image stream to the form.

If the image has alpha channel information, then the image is stored as a PNG image, otherwise it is stored as a JPEG image.

JPEG is a lossy format and the image will lose data during the quantization process.

Therefore, when the image has no alpha channel, the image that is stored suffers from data loss and image degradation.

In addition, each time the form is loaded in the IDE, the form is changed, and then resaved, the image goes through another generation of loss as it is converted again to JPEG from memory. Eventually, the image will have degraded enough that it is no longer suitable in quality.

I recommend that for desktop platforms all images are stored as PNG, regardless of whether they have alpha channel in them, or be given the option of format. Also, if stored as a JPEG, the quality should be an option, as a quality of 100 is not used very often in practice since the file size difference between 100 and 90 are large, whereas visually, they're practically identical.

If you are doing simple color replacement on a bitmap for a single color, you expect to not have to deal with tolerances and artifacts.
QC Entry 100550
Create a new FireMonkey HD application. Drop a TImage control onto the form. Load a bitmap without an alpha channel into the TImage Bitmap property. Repeatedly move the image position, save the form, close the form, and reopen the form. You'll notice that if you view the form in text mode, the image data for the TBitmap changes each time, and is saved as a JPEG, even though it says TBitmap.PNG. The image quality will degrade each time. Using the sample project, clicking Button1 will attempt to replace white with red of the stored image. You'll get artifacts because the image has been quantized. If you load the image at runtime by clicking Button2, then clicking Button1, the color replacement works since the full bitmap information is still in memory. Also, if you load the alpha version of the image into the form at design time, it works.

QC #: Date Reported: Area:
100767 11/5/2011 FireMonkey\Form Designer
Description: Steps:
[QC Short Description]
ALT-F12 shows wrong form data in FMX application

[QC Description]
When typing ALT-F12 in one form, and back, then switching to another form, then typing ALT-F12 again, the active unit switches back to the first one and the text for the first form is shown.

Happens only in FMX application.
QC Entry 100767
- create a new FMX HD app - File | New | FireMonkey HD form - ALT+F12 on first form - ALT+F12 on first form's FMX source - switch to second form - ALT+F12 expected: FMX source for second form is shown actual: FMX source for first form is shown and active (edited) unit switches to first one

QC #: Date Reported: Area:
99634 10/5/2011 FireMonkey\Form Designer
Description: Steps:
[QC Short Description]
ItemIndex = 0 on TComboEdit doesn't work at design time

[QC Description]
Setting the ItemIndex property of TComboEdit doesn't display the correct item in the editable portion of the control.
QC Entry 99634
new FMX app add a TComboEdit to the form add a couple of items to the TComboEdit set the ItemIndex property to 0 exp: the first item is visible in the editable portion of the control act: nothing is displayed in the editable portion of the control

QC #: Date Reported: Area:
100103 10/16/2011 FireMonkey\Form Designer
Description: Steps:
[QC Short Description]
Label size problem

[QC Description]
Empty autosized bottom aligned label always attempt to fill the parent container.
QC Entry 100103
Create an fm project add some container(e.g., TPanel) to a form and put a TLabel into it. Set label's Alignment to bottom and Autosize to true. Clear it's Text The label will almost fill the container.

QC #: Date Reported: Area:
99468 9/30/2011 FireMonkey\Form Designer
Description: Steps:
[QC Short Description]
Switching back any control's align from alClient flips Height and Width

[QC Description]
After any control's Align property has been set to alClient and then back to alNone, width and height properties are exchanged.
QC Entry 99468
1. Create a Firemonkey HD app - Standard Form normally has 600x400 size 2. Place a Listbox on the form 3. Change Listbox align to alClient 4. Change Listbox align to alNone 5. Listbox now has size 400x600

QC #: Date Reported: Area:
100112 10/16/2011 FireMonkey\Form Designer
Description: Steps:
[QC Short Description]
Tab control painting issue - Resize a tab header wider then a second header. First item will cover the second one.

[QC Description]
See steps for details

Added by Sysop
<<<<<<<<
This issue is about design time when editing TTabControl in FireMonkey Form Designer.
>>>>>>>>
QC Entry 100112
Resize a tab header wider then a second header. First item will cover the second one.

QC #: Date Reported: Area:
100006 10/13/2011 FireMonkey\Form Designer
Description: Steps:
[QC Short Description]
Brush designer dialog should be cleaned up

[QC Description]
The brush designer dialog looks weird in the update Two beta.

- The stroke / fill selector has is squeezed process which make it look strange.
- There is a lot of extra space at the bottom
- The layout and spacing of the controls is less than elegant
QC Entry 100006
- Open the brush designer dialog - Observe squezed stroke fill selector - Observe extra space at bottom - Observe lack of elegance in layout

QC #: Date Reported: Area:
100737 11/4/2011 FireMonkey\Menu Designer
Description: Steps:
[QC Short Description]
Unhandled exceptions in menu item's OnClick handler lead to SIGSEGV(11) loop

[QC Description]
Default exception handler is not called in procedure TFMXOSMenuItem.DispatchMenuClick(Sender: Pointer)

Call of the handler should be wrapped in a try..except block like:

procedure TFMXOSMenuItem.DispatchMenuClick(Sender: Pointer);
begin
try
if Assigned(FMXMenuItem.OnClick) then
FMXMenuItem.OnClick(Self);
except
Application.HandleException(Self);
end;
end;

Note that currently OnClick is called with a nil Sender, which has to be fixed as well.

There are more places were unhandled exceptions are not caught hence crash the application, at least one another is TCocoaTimer.timerEvent.


QC Entry 100737
Drop a TMainMenu, add one item and a child item. Assign this handler to child item's OnClick event: procedure TForm1.MenuItem2Click(Sender: TObject); begin raise Exception.Create('Error Message'); end; Also note that Sender is nil.

QC #: Date Reported: Area:
95149 6/15/2011 FireMonkey\Menu Designer
Description: Steps:
[QC Short Description]
TMenuItem Visible not working (showing / hiding menu items)

[QC Description]
Setting Visible property of TMenuItem has no effect.

MenuItem2.Visible:=False;

On TMainMenu, items aren't hidden.
On TMenuBar, items are hidden but space is not trimmed.

Workaround (menubar only) : MenuItem2.Free;

QC Entry 95149
-New FMX 2D app -Add MenuBar or MainMenu -Add several items and/or child-items -Add dummy button with this OnClick: procedure TForm37.Button1Click(Sender: TObject); begin MenuItem2.Visible:=False; // MenuItem2.Free; end; -Run, click button Exp: Menu item hidden, menu realigned Act: Menu item still visible, or empty

QC #: Date Reported: Area:
98083 8/24/2011 FireMonkey\Menu Designer
Description: Steps:
[QC Short Description]
Selection bounds doesn't update when Text is updated for menu item

[QC Description]
When changing the Text property for an item on the TMenuBar component, the selection in the designer doesn't change to select the modified bounds of the item.

Refer to screen capture of before and after images.
QC Entry 98083
 

QC #: Date Reported: Area:
99033 9/18/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
AV (div by zero) at Types3D.RayCastCuboidIntersect when width, depth, height are zero

[QC Description]
When a TControl3D has width,depth and height = zero, mouse hittest raises an AV.

It can be reproduced using a TViewPort3D on a FMX HD app.
QC Entry 99033
-New FMX HD app -Drop a Viewport3D -Drop a Cube at Viewport3D FormCreate: procedure TForm66.FormCreate(Sender: TObject); begin Cube1.SetSize(0,0,0); end; -Run Act: AV as soon you move the mouse inside the form. Suggested fix: function TryEllipsoidShortcut(const W, H, D: Single): Boolean; var LMax, LMin: Single; begin LMin := W; LMin := Min(LMin, H); LMin := Min(LMin, D); LMax := W; LMax := Max(LMax, H); LMax := Max(LMax, D); // WAS: Result := (LMin/LMax) > 0.1; Result := (LMax<>0) and ((LMin/LMax) > 0.1); end;

QC #: Date Reported: Area:
98641 9/7/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
NSWindow(Super).setDelegate(nil) not called

[QC Description]
NSWindow(Super).setDelegate(nil) is never called in TFMXWindow.Destroy because Wnd.Handle is always zero. TPlatformCocoa.DestroyWindow zeroes the handle.


if FDelegate <> nil then
begin
FDelegate := nil;
if Wnd.Handle <> 0 then // <<< this line should be removed
NSWindow(Super).setDelegate(nil);
end;
QC Entry 98641
- create a new FMX HD app - use this dpr: program Project1; uses FMX.Forms, FMX.Dialogs, System.UITypes, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; MessageDlg('You need to...', TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOK], 0); Application.CreateForm(TForm1, Form1); Application.Run; end. - run on mac - close the dialog Now an error occurs. This doesn't happen if " if Wnd.Handle <> 0 then" is removed from TFMXWindow.Destroy.

QC #: Date Reported: Area:
95761 7/1/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
TTimer leaks memory

[QC Description]
see steps.

Looks like 48 bytes are leaked via Malloc everytime the timer is recreated.
QC Entry 95761
[andreano]
- create a new FMX 2D app with this code: TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private procedure TimerProc(Sender: TObject); end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); var timer: TTimer; begin timer := TTimer.Create(self); timer.Interval := 100; timer.OnTimer := TimerProc; end; procedure TForm1.TimerProc(Sender: TObject); begin TTimer(Sender).Enabled := false; TTimer(Sender).Enabled := true; end; - press F9 and close the app when it runs (to move it to the Mac) - run the app in Instruments, available in the /Developer/Applications/ folders. Use the Object Allocatoins template. Note that the "Malloc 48 Bytes" live counter goes up by 10 per second.

QC #: Date Reported: Area:
97690 8/16/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
FMI: TForm.Show and TForm.ShowModal and other form-handling stuff completly broken.

[QC Description]
* ShowModal does nothing.
* Show, will Show the form (sometimes even only a black rectangle) on the wrong position with the wrong size. If its partly shown, its contents are not selectable...

* BringToFront won't do anything.

See attached sample project
QC Entry 97690
* Export attached Project to XCode * Compile it * Play with the buttons

QC #: Date Reported: Area:
99900 10/11/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
[iOS] FM Renders fonts and objects wrong

[QC Description]
When using fonts and 3D objects in a Firemonkey 3D application, the results are unsatisfying on an iOS device.
QC Entry 99900
1. Create a FM 3D for iOS application 2. Put a TCube with any color on it and slant, so that diagonal lines are visible 3. Put a Text3D on it and set the color to RGB(255,0,0) - Red 4. Run the application within the IDE - Everyhing looks fine, animations fluid. 5. Create XCode project using Dpr2XCode 6. Open the project on Mac and run on simulator 7. Animation is not fluid, diagonal lines (edges) are pixelated, font is almost unreadable, font's color is different 8. Provision to physical iOS device. Result is the same. See attached, with direct comparison.

QC #: Date Reported: Area:
93690 5/8/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
form activation issue

[QC Description]
see steps
QC Entry 93690
- create a new FMX 2D app - drop a TMemo on the form - add a TMemo.OnDblClick event with this code: procedure TForm1.Memo1DblClick(Sender: TObject); begin TForm1.Create(nil).Show; end; - run the app - doubleclick the memo - close the form that appeared exp: the form border appears active and it responds to key presses obs: it's not active //USc: it works as expected when setting Action to caFree in the Form's OnClose event

QC #: Date Reported: Area:
96985 8/1/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
Scroll wheel doesn't navigate TComboBox

[QC Description]
A TComboBox ignores the scrollwheel for changing item selection unless the mouse cursor is hoverred over the portion of the combo box rendered when closed.

Expected behavior would be that when the TComboBox is closed but focused, the scroll wheel would remain closed but change item selection and visibly update the text of the combo box with the text of the selected item. Also when open, the scroll wheel would move the highlight up or down through selected items and move scrollbars as necessary

It should be noted that when the mouse is hovered over the originally drawn portion of the combobox, the scrollwheel works when closed or open, but when open, the item selection rendering is corrupted.
QC Entry 96985
1. Drop multiple focusable components on the form, one of which being a TComboBox. 2. Add several items to the TComboBox 3. run 4. Tab into the combo box. 5. Without hovering the mouse over the combo box, attempt to use the scroll wheel. Nothing happens. It should scroll through items. 6. Using your mouse, expand the combo box. 7. Hover the mouse over the list (not the originally drawn portion of the dropdown) 8. Attempt to use the scroll wheel. Nothing happens. It should move the highlight through items for selection.

QC #: Date Reported: Area:
99966 10/12/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
TControl.GetAbsoluteHasEffect result undefined

[QC Description]
The result of TControl.GetAbsoluteHasEffect can be undefined, which can cause random unnecessary repaints when controls are added.


function TControl.GetAbsoluteHasEffect: Boolean;
var
I: Integer;
NeedUpdate: Boolean;
begin
if FRecalcHasEffect then
begin
FAbsoluteHasEffect := False;
FAbsoluteHasDisablePaintEffect := False;
FAbsoluteHasAfterPaintEffect := False;
result := false; //<--- this line is missing
if FDisableEffect then
Exit;



QC Entry 99966
 

QC #: Date Reported: Area:
98552 9/5/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
bitmap variant can fail for x64

[QC Description]
This code from FMX.Filter.pas will fail if compiled for x64 if the bitmap address > 4GB:

function VarFromBitmap(AObject: TBitmap): Variant;
begin
Result := 'fxobject' + IntToStr(Integer(AObject));
end;

function VarToBitmap(V: Variant): TBitmap;
begin
if VarIsBitmap(V) then
begin
Result := TBitmap(Pointer(StrToInt(Copy(V, 9, MaxInt))));
end
else
Result := nil;
end;


QC Entry 98552
 

QC #: Date Reported: Area:
100929 11/10/2011 FireMonkey\Runtime
Description: Steps:
[QC Short Description]
TCommonCustomForm.DragEnter misses FTarget.ScreenToLocal(Point)

[QC Description]
TCommonCustomForm.DragDrop/DragOver now pass local coordinates to the FTarget. DragEnter should do that as well, so all control drag events use the same coordinates.

procedure TCommonCustomForm.DragEnter(const Data: TDragObject; const Point: TPointF);
var
NewTarget: IControl;
begin
NewTarget := FindTarget(Point, Data);
if (NewTarget <> FTarget) then
begin
if FTarget <> nil then
begin
FTarget.DragLeave;
FTarget.RemoveFreeNotify(Self);
end;
FTarget := NewTarget;
if FTarget <> nil then
begin
FTarget.AddFreeNotify(Self);
FTarget.DragEnter(Data, Point); //<--- should be FTarget.ScreenToLocal(Point)
end;
end;
end;

QC Entry 100929
 

QC #: Date Reported: Area:
100481 10/26/2011 FireMonkey\3D Components
Description: Steps:
[QC Short Description]
Path Parsing Failure

[QC Description]
TPath Data with no spaces or commas between numbers where the second starts with a minus sign do not parse correctly. For example, the following path data will stop parsing at the 152.736 and the -103.266 is ignored.

M722.822,12.282c0,152.736-103.266

Paths with this format are very common in the wild due to support of it in SVG.
QC Entry 100481
Add a TPath to a Firemonkey form. Add the following to the path data: M722.822,12.282c0,152.736-103.266 Save Open Path data and see the -103.266 has been truncated from the data.

QC #: Date Reported: Area:
100478 10/26/2011 FireMonkey\3D Components
Description: Steps:
[QC Short Description]
Paths do not render correctly in TPath

[QC Description]
Paths are not rendering correctly. For example, the following path:

M 722.822,12.282 c 0,152.736,-103.266,276.553,-230.65,276.553 S 261.523,165.018,261.523,12.282 c 0,-152.736,103.265,-276.553,230.649,-276.553 S 722.822,-140.454,722.822,12.282 L 722.822,12.282 z

renders a crooked rounded rectangle when it should instead render an egg shape.

Follows is the exact same path to be rendered by an SVG file. To compare, save to text file and open in your browser.

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">
<svg version="1.1" baseProfile="basic"
id="svg2" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="5000px" height="5000px"
xml:space="preserve">
<g transform="translate(0,300)">
<path d="M 722.822,12.282 c 0,152.736,-103.266,276.553,-230.65,276.553 S 261.523,165.018,261.523,12.282 c 0,-152.736,103.265,-276.553,230.649,-276.553 S 722.822,-140.454,722.822,12.282 L 722.822,12.282 z"/>
</g>
</svg>
QC Entry 100478
Add a TPath to a firemonkey form. Add path data of: M 722.822,12.282 c 0,152.736,-103.266,276.553,-230.65,276.553 S 261.523,165.018,261.523,12.282 c 0,-152.736,103.265,-276.553,230.649,-276.553 S 722.822,-140.454,722.822,12.282 L 722.822,12.282 z The preview and rendered path look like the attached bad.jpg image but it should be the same shape as seen in the good.jpg image.

QC #: Date Reported: Area:
98193 8/26/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
AV on TStylebook designer

[QC Description]
Attempting to change some properties causes access violations in the style book designer and crashes the IDE
QC Entry 98193
New FMX HD app Drop a TStyleBook Double click on it. Drag a TStyleBook from the Tool Pallete to the Create Style dropzone On the OI click the Ellipsis for the Resource property Click it again //Access violation at address 1064A0D2 in module 'dclfmxstd160.bpl'. Read of address 00000000. Double click the stylebook component //IDE crashes //stack for the first AV: --------------------------- Error --------------------------- Access violation at address 1064A0D2 in module 'dclfmxstd160.bpl'. Read of address 00000000. --------------------------- OK Details << --------------------------- [1064A0D2]{dclfmxstd160.bpl} FMX.Design.Style.TStyleDesigner.LoadFromStrings (Line 672, "FMX.Design.Style.pas" + 8) + $5 [1064A0C8]{dclfmxstd160.bpl} FMX.Design.Style.TStyleDesigner.LoadFromStrings (Line 670, "FMX.Design.Style.pas" + 6) + $0 [10661566]{dclfmxstd160.bpl} FmxReg.DesignStyleBook (Line 167, "FmxReg.pas" + 39) + $A [1066167D]{dclfmxstd160.bpl} FmxReg.TResourceProperty.Edit (Line 202, "FmxReg.pas" + 1) + $E [2089832A]{coreide160.bpl} PropInsp.TPropertyInspector.PropListEditDblClick (Line 871, "PropInsp.pas" + 18) + $E [2113D7BD]{vclide160.bpl} IDEInspListBox.TInspListBox.DoEditDblClick (Line 620, "IDEInspListBox.pas" + 2) + $A [2113F597]{vclide160.bpl} IDEInspListBox.TInspListBox.ListButtonClick (Line 1311, "IDEInspListBox.pas" + 2) + $2 [50332D7B]{vcl160.bpl } Vcl.Controls.TControl.Click (Line 7320, "Vcl.Controls.pas" + 9) + $8 [21134FC6]{vclide160.bpl} IDEListBtns.TListButton.WMLButtonUp (Line 584, "IDEListBtns.pas" + 8) + $11 [50332820]{vcl160.bpl } Vcl.Controls.TControl.WndProc (Line 7204, "Vcl.Controls.pas" + 91) + $6 [503369B3]{vcl160.bpl } Vcl.Controls.TWinControl.IsControlMouseMsg (Line 9745, "Vcl.Controls.pas" + 1) + $9 [5033716B]{vcl160.bpl } Vcl.Controls.TWinControl.WndProc (Line 9976, "Vcl.Controls.pas" + 152) + $6 [503367C0]{vcl160.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 9689, "Vcl.Controls.pas" + 3) + $6 [500B5FFC]{rtl160.bpl } System.Classes.StdWndProc (Line 13878, "System.Classes.pas" + 8) + $0 [50451C0F]{vcl160.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 10162, "Vcl.Forms.pas" + 23) + $1 [50451C52]{vcl160.bpl } Vcl.Forms.TApplication.HandleMessage (Line 10192, "Vcl.Forms.pas" + 1) + $4 [50451F85]{vcl160.bpl } Vcl.Forms.TApplication.Run (Line 10329, "Vcl.Forms.pas" + 26) + $3

QC #: Date Reported: Area:
96972 8/1/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
[FMX] Adding items to TListbox extremly slow

[QC Description]
It's extremely slow to add items to a TListbox. Adding 1000 items
takes 13 seconds without BeginUpdate/EndUpdate and within BeginUpdate/EndUpdate it takes 180ms.

Time growth is exponentially:
1000 180ms
2000 650ms
4000 3seconds
8000 13seconds
QC Entry 96972
procedure TForm1.Button1Click(Sender: TObject); var i: integer; T1,T2: TDateTime; begin T1 := Now; ListBox1.BeginUpdate; ListBox1.Items.BeginUpdate; for i := 1 to 8000 do ListBox1.Items.Add('Item ' + IntToStr(i)); ListBox1.Items.EndUpdate; ListBox1.EndUpdate; T2 := Now; ShowMessage(FormatDateTime('nn:ss z',T2 - T1)); end;

QC #: Date Reported: Area:
98582 9/5/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
Poor performance after adding many items to TComboEdit on a modal form

[QC Description]
Adding many items to a TComboEdit on a modal form has a significant performance impact when showing the form.

This performance impact seems to worsen each time the form is shown again. When testing by adding 250 items to a TComboEdit, I found it would initially take 5 seconds before the form is shown and the user can interact with it. Each time the form is shown again, this time would increase by another 2 seconds.
QC Entry 98582
- Download and unzip ComboEditTest
- Open in XE2, compile and run
- Click the 'Show Modal' button
Expected: The modal form is rendered and usable almost instantly
Actual: It takes approximately 5 seconds before the modal form is rendered and the user can interact with it

- Close the form
- Click the 'Show Modal' button
Expected: The modal form is rendered and usable almost instantly
Actual: It takes approximately 7 seconds before the modal form is rendered and the user can interact with it

- Close the form
- Click the 'Show Modal' button
Expected: The modal form is rendered and usable almost instantly
Actual: It takes approximately 9 seconds before the modal form is rendered and the user can interact with it


[The same happens with TListBox]

QC #: Date Reported: Area:
98705 9/8/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
Assigning a popup menu to a TMemo instance does not deactivate the default popup menu for the control

[QC Description]
If you assign a popup menu to a TMemo instance, whenever you right-click on the TMemo control, the assigned popup menu will pop up, but as soon as the popup menu is closed (either by selecting one of the menu items or by cancelling the menu), the default popup menu (containing default copy\cut\paste\select all items) will be shown.
QC Entry 98705
1- Drop a TMemo control on a FireMonkey form. 2- Drop a Popup menu instance on the form. 3- Add some menu items to the popup menu. 4- Assign the popup menu to PopupMenu property of the TMemo instance. 5- Run the application, and right-click on the TMemo control. 6- Select one of the menu items from the popup menu or cancel the menu by pressing Esc.

QC #: Date Reported: Area:
99507 10/1/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
DropTarget never Accepts Files

QC Entry 99507
Start a FireMonkey HD Project Add A TDropTarget to a FireMonkey HD Form Add a TLabel on the On the DropTarget's OnDragOver Event put in the following code: if High(Data.Files) > 0 then begin Label1.Text:='Accepted: '+ExtractFileName(Data.Files[0]); Accept:=true; end else begin Label1.Text:='Drag Over Rejected'; Accept:=false; end; Compile and run this and drag something onto the drop target. You will see that although Accept gets set to true, the slashed circle (cannot drop here) cursor remains in effect and OnDragDrop is never called.

QC #: Date Reported: Area:
100507 10/27/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
changing FontFill.Color property does not work at runtime

[QC Description]
With TLable, TButton, TMemo etc...
changing FontFill.Color property does not work at runtime

procedure TForm2.Button2Click(Sender: TObject);
begin
Label1.FontFill.Color := claRed;
Button1.FontFill.Color := claRed;
Memo1.FontFill.Color := claRed;
end;
QC Entry 100507
1. Create new FireMonkey HD Applcation
2. Drop on form TLabel
3.1 Change Font Color from inplace editor
3.2 Change Font Color in OnCreate for main form

See additional comments

QC #: Date Reported: Area:
98195 8/26/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
ComboBox text alignment changes

[QC Description]
When you have centered text in comboboxes items, they often lose their center alignment and get left justified

(this is seem in multiple IDE dialogs that use this component as well)
QC Entry 98195
New FMX HD app Drop a TCombobox Right click on it and add an item Right click on it and add another item. For each item, select it in the Structure View and set TextAlign to taCenter Run Click the combo to drop it down Move the mouse over the first item. Click somewhere else in the form Click the combo to drop it down again exp: item is centered act: item is left aligned

QC #: Date Reported: Area:
97486 8/11/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
TComboEdit dropdown list has no vertical scrollbar

[QC Description]
When a TComboEdit control has more Items than its DropDownCount value, the extra items can't displayed as there is no vertical scrollbar.
QC Entry 97486
-New FMX HD app -Drop a TComboEdit control -Form OnCreateEvent below -Run -Click the dropdown arrow, can't go to items past 7. procedure TForm45.FormCreate(Sender: TObject); var t: Integer; begin for t := 0 to 20 do ComboEdit1.Items.Add(IntToStr(t)); // ComboEdit1.DropDownCount:=25; <---- uncomment to see all items end;

QC #: Date Reported: Area:
100662 11/2/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
TMemo OnChange event fires diring form construction

[QC Description]
The TMemo OnChange event fires during form construction and before all other components are created, if the memo includes text at designtime.

If in the onchange event hander you reference other components on the form, they will be nil and you will get an AV.

The expected behavior is that the OnChange event would fire only after all components on the form have been created before firing any events.

QC Entry 100662
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, FMX.Layouts, FMX.Memo; type TForm1 = class(TForm) Memo1: TMemo; Rectangle1: TRectangle; procedure Memo1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Memo1Change(Sender: TObject); begin Rectangle1.Repaint; << AV HERE AS Rectangle1 is nil end; end. object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 400 ClientWidth = 600 Visible = False StyleLookup = 'backgroundstyle' object Memo1: TMemo Position.Point = '(16,16)' Width = 185.000000000000000000 Height = 193.000000000000000000 OnMouseUp = Memo1MouseUp TabOrder = 1 OnChange = Memo1Change Text = 'test' KeyboardType = vktDefault end object Rectangle1: TRectangle Position.Point = '(296,16)' Width = 225.000000000000000000 Height = 185.000000000000000000 Fill.Kind = bkGrab Fill.Grab.Control = Memo1 end end

QC #: Date Reported: Area:
101043 11/15/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
TAlphaColor property editor is missing on TPersistent based components.

[QC Description]
When a component is derived from TPersistent (for example a collection item) it should have a default property editor for any properties of type TAlphaColor.
QC Entry 101043
Install the attached package. New Firemonkey HD form. Drop TMYControl. Bring up property editor for GradientPoints property and add a point. Note the property inspectory shows a drop down list for the color property of the TGradientPoint. Now do the same thing with the MyGradientPoints property and you'll see that the color property has no editor.

QC #: Date Reported: Area:
99469 9/30/2011 FireMonkey\Components
Description: Steps:
[QC Short Description]
ComboBox inside VertScroller acting weird

[QC Description]
I have a Combobox inside a VertScroller. When I click on the combo a list of the available options pops up, I have a wide set of values there so the combo also shows a scrollbar to scroll through the values.

In this situation, if I use the mouse wheel to scroll the combo list, also the VertScroller gets those messages and starts scrolling. The result is ugly because the compo popup menu starts moving leaving the combobox and, if I continue scrolling, also the screen!

I will try to attach two screenshots I took to better explain the bug.

QC Entry 99469
 

QC #: Date Reported: Area:
100969 11/11/2011 FireMonkey\Style Designer
Description: Steps:
[QC Short Description]
Style Designer loses focus of selected after any change

[QC Description]
Every change I make in the style designer, whatever I had selected is no longer selected and the object i was modifying disappears. Do a new Firemonkey HD application. Add a button to the form. Right click and "Edit Custom Style". Choose anything on the right, for example I choose the TInnerGlowEffect. In the Object Inspector check the "Enabled", the bug happens.... Now on the right TRectangle is selected and the button picture in the middle of screen is gone.

It doesn't matter what I change, every change causes the selection in the tree on the right, to bounce to something else, and the object in middle disppears.
QC Entry 100969
Do a new Firemonkey HD application. Add a button to the form. Right click and "Edit Custom Style". Choose anything on the right, for example I choose the TInnerGlowEffect. In the Object Inspector, check the "Enabled", the bug happens.... Now on the right TRectangle is selected and the button picture in the middle of screen is gone. It doesn't matter what I change, every change causes the selection in the tree on the right, to bounce to something else, and the object in middle disppears.

QC #: Date Reported: Area:
100428 10/25/2011 Databinding
Description: Steps:
[QC Short Description]
TBindGridLink design time editor keyboard navigation is broken

[QC Description]
When navigating through the tree of Expressions or the List of expressions using the arrow keys, the SourceExpression and ControlExpressions do not update.
QC Entry 100428

Note : It seems that TBindGridList has the same problem
1. Start Delphi XE2 2. Load the OneOfEachBindCompVCL demo 3. View the Main Form (Form39) 4. Double click on the BindingList1 5. Double click on BindGridLink1 6. Use the arrow keys to navigate through the tree on the left //exp: the Control Expression and Source Expression to get updated //act: you need to mouse-click on the selected node to get Control Expression and Source Expression to update 7. Click on ClearControl 8. Click on ClearControl[0] 9. Use the arrow keys to navigate through the ClearControl[*] items //exp: the Control Expression and Source Expression to get updated //act: you need to mouse-click on the selected item to get Control Expression and Source Expression to update 10. In the Control Expressions and Source Expressions, press Ctrl-A to select all text //exp: all text to be selected //act: no selection change

QC #: Date Reported: Area:
99601 10/4/2011 Install\Files
Description: Steps:
[QC Short Description]
Missing Lib TeeResou.res and TeeFonts.res when installing C++ Builder XE2 only

[QC Description]
(Customer post at public FireMonkey forums)

When installing C++ XE2 only, these resource files are not in Lib\osx32\release, Lib\win32\release.

TeeFonts.res
TeeResou.res

(these files are part of TeeChart VCL/FMX)
QC Entry 99601


\\Note: TeeFonts.res and TeeResou.res are present in lib\osx32\release and are missing from lib\win32\release in build 16.0.4294.44347 ~Ina
 

QC #: Date Reported: Area:
100728 11/4/2011 VCL
Description: Steps:
[QC Short Description]
An AccessViolation occurs when starting the VCL form application('Link with runtime packages' option is turned off(set to false))

[QC Description]
Try to run the attached sample project.

The project contains simple pascal Units.

An AccessViolation occurs when starting the VCL form application('Link with runtime packages' option is turn off(set to false)).
QC Entry 100728
Run the attached sample project

The project contains simple pascal Units.

An AccessViolation occurs when starting the VCL form application('Link with runtime packages' option is turn off(set to false)).

[NOTE]
This is probably related to RAID:287507 (Unit Order initialization)

QC #: Date Reported: Area:
100749 11/4/2011 VCL\Core VCL Classes\TApplicationEvents
Description: Steps:
[QC Short Description]
Exception when using TApplicationEvents

[QC Description]
When using a TApplicationEvents in C++Builder XE2 and the "Link with runtime packages" option is set to false. I get this message:

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class $C0000005 with message 'access violation at 0x00575b61: read of address 0x000000b0'.
---------------------------
Break Continue Help
---------------------------

When I click Continue I get this one:

---------------------------
Debugger Fault Notification
---------------------------
Project ...\Documents\RAD Studio\Projects\.\Win32\Debug\Project1.exe faulted with message: 'access violation at 0x00575b61: read of address 0x000000b0'. Process Stopped. Use Step or Run to continue.
---------------------------
OK
---------------------------

After that it breaks in the code at this place:

procedure TScreen.DeleteCursor(Index: Integer);
var
P, Q: TCursorRecType;
begin
{$IF DEFINED(CLR)}
if FCursorList = nil then Exit;
P := FCursorList.FList; // HERE
{$ELSE}
P := FCu

The value for Index is -23
QC Entry 100749
Create a new C++Builder VCL Forms Application.
Add a TApplicationEvents component.
Set "Packages" / "Runtime Packages" / "Link with runtime packages" to false.
Run

[NOTE]
This is probably related to RAID:287507 (Unit Order initialization)

QC #: Date Reported: Area:
99555 10/3/2011 Compatibility\Previous -> Current
Description: Steps:
[QC Short Description]
An AV is raised when executing an existing application made in C++Builder XE with a TActionList in a DataModule

[QC Description]
This is a migration issue.
Please see [Steps] and attached project.
QC Entry 99555


[UPDATE Oct 19, 2011]
Further research showed that this does not seem to be a migration issue. We have managed to replicate it with a brand new project. See updated [Steps].
An AV is raised when executing an existing application made in C++Builder XE with a TActionList in a DataModule if the DataModule is saved in a folder different from the project folder. See the attached sample.


[UPDATE Oct 19, 2011]
New steps to reproduce the problem in a fresh project:
1) Create a new VCL Forms Application in C++Builder and save it.
2) Create a new DataModule (set its ClassGroup = Vcl.Controls.TControl) and save it to ANOTHER folder.
3) Reopen the project.
4) Put a TActionList onto our DataModule.
5) RunTimePackages = False
6) Run the project --> An AV is raised

[NOTE]
This is probably related to RAID:287507 (Unit Order initialization)

QC #: Date Reported: Area:
100661 11/2/2011 Linker\ILINK32
Description: Steps:
[QC Short Description]
[MacOS] Update 2 breaks OS X Builds

[QC Description]
Installing update 2, new applications give a linker error

"ilink32" existed with code 3
QC Entry 100661
Ensure you have update 2 and a OS X profile - create a new firemonkey application - build for OS X (F9) expected: build and link and run on OS X actual: builds ok, link fails. I did a complete reinstall from ISO of XE2 update 2 when I saw this error on an upgrade. did not fix anything.

QC #: Date Reported: Area:
100288 10/20/2011 Compiler\C++
Description: Steps:
[QC Short Description]
bcc32 forgets constness

[QC Description]
For constant variables defined on an "if", bcc32 won't honor their constness.
QC Entry 100288
void foo() { if (const bool bar = int(Date())>0) { // some dummy assign bar = false; // allowed? gcc 4.6.1: "error: assignment of read-only variable 'bar'" } } // Expected: Error about changing a const variable // Actual: Compiles ok without any warning or error

QC #: Date Reported: Area:
87992 9/12/2010 Compiler\C++
Description: Steps:
[QC Short Description]
Custom message is not displayed for entities marked as deprecated with message

[QC Description]
When a C++ function has been marked as deprecated with a custom message that custom message is not displayed by the compiler. Rather, the standard deprecated message is shown. This does not always happen with a freshly started IDE.

Added by Sysop
<<<<<
This issue occurs in XE and XE2.
Please see [Comments] of QC for more details.
>>>>>
QC Entry 87992
1. Create a new C++Builder VCL Forms Application (capp.cbproj) 2. Add the following code: void Test [[deprecated("use Test2 instead")]]() { } 3. Make use of that code somewhere (such as the form constructor) Test(); 4. "Project | Build capp" 5. "Project | Clean capp" Repeat steps 4 and 5 until the deprecated warning looks like "actual" rather than "expected". On my system I usually can get into this state on the fourth build. expected: [BCC32 Warning] W8111 Accessing deprecated entity 'Test()' use Test 2 instead actual: [BCC32 Warning] W8111 Accessing deprecated entity 'Test()'

QC #: Date Reported: Area:
89420 11/3/2010 Compiler\C++
Description: Steps:
[QC Short Description]
bcc32 fails to compile code when "expand inline functions" is not disabled

[QC Description]
The attached cpp file (generated by cpp32) compiles fine with the following command line:

bcc32.exe -c -w-par -vi- mainform.cpp

BUT fails with the following:

bcc32.exe -c -w-par mainform.cpp

with this error message:

Error E2027 mainform.cpp 850028: Must take address of a memory location in function _fastcall CleanupUpdateProj(TfrmMain *,Server,const
UnicodeString)
*** 1 errors in Compile ***
QC Entry 89420
Compile the attached mainform.cpp file as per description.

QC #: Date Reported: Area:
100272 10/20/2011 Compiler\C++
Description: Steps:
[QC Short Description]
[REGRESION] path with c:\program files\mydirectory fail in [compilater c++] [directory and conditions]

[QC Description]

[BCC32 Avertissement] W8123 Le chemin '\"C:\Progra' est introuvable - chemin ignor?dans l'option '-I'
QC Entry 100272
create a vcl application add an exiting path with c:\program files\ in [compilater c++] [directory and conditions] here is the message error [BCC32 Avertissement] W8123 Le chemin '\"C:\Progra' est introuvable - chemin ignor?dans l'option '-I'

QC #: Date Reported: Area:
98744 9/9/2011 Compiler\C++\Front End\Exception Handling
Description: Steps:
[QC Short Description]
Use of boost::shared_ptr breaks exception unwinding in constructors

[QC Description]
QC#89260(Internal #280971) is NOT fixed yet.

boost::shared_ptr provides one useful way of hiding a class's implementation. The header file for the class can be something like

#include <boost/shared_ptr.hpp>

class X {
public:
X();
private:
struct Impl;
boost::shared_ptr<Impl> impl;
};

By using boost::shared_ptr, the Impl structure does not need to be defined in the header file. However, in C++Builder XE2, an exception thrown in the constructor of X will result in an exception unwinding assertion, and program termination. This did not occur in C++ Builder 2010.
QC Entry 98744
unzip narowed.zip

bcc32 -w- test.cpp x.cpp && test

exp:
no assert in xx.xpp, as with:
bcc32 -w- -DWORKS test.cpp x.cpp && test
act:
Assertion failed: varType->tpClass.tpcDtorAddr, file xx.cpp, line 3285
Abnormal program termination

===== old steps ====
The attached project files demonstrate the problem. The main function is in test.cpp.
The class X is defined in the header x.h.
The implementation is in x.cpp.

Building and running this program with C++Builder 2010 generates the (correct) output:

> X::Impl ctor
> X ctor
> X::Impl dtor
> could not construct X

But with C++Builder XE2 the output is:

> X::Impl ctor
> X ctor

> Assertion failed: varType->tpClass.tpcDtorAddr, file xx.cpp, line 3285

> Abnormal program termination

Some other points:

1. If all the code is placed in a single file (e.g. test.cpp), the assertion disappears. (But, of course, this is not very useful for hiding the implementation!)

2. If the exception is not thrown in the constructor, but in some other member function, there is no problem. This can be demonstrated by commenting out the constructor exception throw in the example.

3. The same exception unwinding assertion is raised if the Impl class is left totally undefined, and the X constructor is changed to

X::X()
{
std::cout << "X ctor\n";
throw std::runtime_error("could not construct X");
}

Once again, this causes no such problem in C++Builder 2010.

QC #: Date Reported: Area:
100642 11/1/2011 Compiler\C++\CLANG\Audits and Metrics
Description: Steps:
[QC Short Description]
C++ Code Audit: Accessing protected member via template shows error

[QC Description]
Using a template to access the 'c' member in a stack to allow the stack to be emptied, gives the audit error:

use of undeclared identifier 'c'.

The code compiles correctly.
QC Entry 100642
Create a form. Add the following code to the .h file // ----------------------------------------------------------------------------- /// \tparam T the stack that protects clear /// /// \brief bring the clear method out from protected to public in a stack // ----------------------------------------------------------------------------- template<class T> class clearable_stack:public std::stack<T> { public: //----------------------------------------------------------------------------- /// \return nothing /// /// \brief clear the stack //----------------------------------------------------------------------------- void clear( ) { // the container 'c' in queues is intentionally left protected c.clear( ); } }; Audit Code Expected: no issues Actual: use of undeclared identifier 'c' This code compiles cleanly. to test add clearable_stack< int> x to a method in the cpp file.

Server Response from: ETNASC03