Delphi 2009 and C++Builder 2009 Update 1 Bug Fix List

By: Calvin Tang

Abstract: List of 60 Bugs fixed by Update 1 for Delphi 2009 and C++Builder 2009

QC #: Date Reported: Area:
2007-02-02 IDE\ToDoList
Description: Steps:
Reopening a project that has to do items and then adding a new VCL project on top, produces an AV in todoide100.bpl.
+ Download attached .zip (
+ Extract project and open project1.dproj
+ Click Project | Remove from Project
+ Click Unit2 to remove
+ Click OK
+ Click View | To Do (to bring up ToDo List in lower pane)
+ In the ToDo List, select the item that is bold (which should be from Unit1 since Unit1 is open - Unit 3 should be closed).
+ Leaving the item in ToDo selected, right click on the project group
+ Click Add New Project
+ Select VCL Form Application
+ Click OK
//exp: project adds with no error
Access violation at address 03A75E9E in module 'todoide100.bpl'. Read of address 00000021.
OK Details >>
<details attached)
QC #: Date Reported: Area:
2008-02-08 Modeling
Description: Steps:
C++ Builder: Provide a hot key for navigating to method definition, e.g. Shift+Double Click. Now there is only simple double click, that navigates to method declaration.
QC #: Date Reported: Area:
2008-03-12 Modeling\Class Diagram
Description: Steps:
C++ Builder: It should be possible to rename attribute via inplace editor. Now no changes are applied.

[vz] 17.06.08 Now this request is actual for enum values only.
tested on rev# 11616

[saa]: verified on build 12.0.3189.17256 for Update1
QC #: Date Reported: Area:
2008-05-01 Modeling\Inspector
Description: Steps:
Unexpected behaviour of object inspector when used by modeling. In isn't the same as when used with form designer.

Part A:
1. Create a new win32 VCL forms application
2. Select the form in design mode
3. Show the object inspector and make the object inspector so that only half of the of form properties are visbile.
4. Make sure the list is sorted by names
5. Move the vertical scroll bar down to the bottom. You should see the "visible" property which is near the end and you should not see "Action" which is the first property.
6. Click on the "visible" property value and drop down the list, select "false".
7. Note that the "visible" property is still selected and the OI doesn't scroll at all. That's fine.

Part B:
2. Add an OLE Automation object to your project, use "MyClass" as class name
3. Show model view, accept modeling
4. Add a new method to IMyClass. Name it "Func".
5. Select "Func" in modeling (actually it should already been selected since you just created)
6. Look at the object inspector.
7. Move the vertical scroll bar down to the bottom. You should see the "UI default" property which is near the end and you should not see "Alias" which is the first property. Adjust the height do that you don't see both properties !
8. Select "UI default" property, drop down the list bow and select "fasle"
9. You see the object inspector scrolling to the first property
Expected: same behaviour as in step A.1: the OI doesn't scroll and simply show the value you changed where you changed it.
QC #: Date Reported: Area:
2008-06-06 Modeling
Description: Steps:
Delphi Win32, .Net: Subrange types: show subrange type definition in the diagram instead of System.Integer. enum E1 = (a, b, c, d, e, f);
MySubrange = b..e;

In this case MySubrange type is shown on the diagram (1) as typedef, (2) with System.Integer as a type.
Object Inspector shows correct value "b..e".
QC #: Date Reported: Area:
2008-06-16 Modeling\Inspector
Description: Steps:
C++ Builder: Add visibility property for nested structs, unions, enumerations. It should be behaviour as for classes.
QC #: Date Reported: Area:
2008-06-26 Modeling\Inspector
Description: Steps:
C++ Builder: Inspector: It should be possible to set multiple inheritance for classes and structs via extends property in OI Since classes can have more than one parent- it should be possible to set parents via Extends property in OI
like Implements property for Classes in Delphi (Select Interfaces to Implement dialog)
QC #: Date Reported: Area:
2008-06-26 11:11:51 AM VCL\Ribbon Controls
Description: Steps:
Resizing of Ribbon causes a lot of flicker Create a new VCL App
Add a ActionManager, set Style = Ribbon - Luna
Add a Ribbon
Add a Tab, add a group

Resize the form in the designer

//flicker re-painting the bar

Run the app
resize the form
//flicker occurs at runtime as well.
QC #: Date Reported: Area:
2008-07-31 4:48:46 PM IDE\Translation Tools\Repository
Description: Steps:
Translation Repository must opens empty and have no information in default.tmx file at first time after install RAD. install RAD
open Translation repository from ETM or RAD
\\ or see default.tmx on disk

see that there is two unnecessary translation strings:
Japanese: UTF-7
German: UTF-7

UPD. On 12.0.3139.16067.1 build:
there is related problem with refresh in Translation repository: so, if user try to add several strings in default repository(that contains Jap and Germ translations as described above) - only part of strings is visible, re-save and re-open tmx file needed.
if repository is non-default - any other tmx or default was clear and save before adding - there is no refresh problems
QC #: Date Reported: Area:
65345 2008-08-06 RTL\Delphi\Format + Float
Description: Steps:
[QC Short Description]
CurrToStrF incorrectly works with international CurrencyString

QC Entry 65345
Compile and run the attached application below.

See the following program output indicating failure.

Expected =0?. #48#64#4
Actual =0@? #48#1088#46

program BTS263667;



function StringToOrd(const Value: String): String;
C: Char;
Result := '';
for C in Value do
Result := Result + Format('#%d',[Ord(C)]);

procedure DoIt;
a: currency;
f: TFormatSettings;
s,s1: string;
RetVal: String;
f.CurrencyString:=#1088#46 ;// '?.';
f.CurrencyFormat := 1; // 1 = '1$'
a := 0;
s := CurrToStrF(a,ffCurrency,0,f);
if S <> S1 then
WriteLn(' Expected =', S1, ' ', StringToOrd(S));
WriteLn(' Actual =', S, ' ', StringToOrd(S1));

on E: Exception do
WriteLN('FAIL Exception=', E.ClassName, '/', E.Message);
QC #: Date Reported: Area:
2008-08-12 5:45:31 PM Modeling
Description: Steps:
Delphi Win32. Remove fields from globals entries completely. Now if all fields of one type are removed, keywords are kept. 1. add e.g. code:


as globals to any namespace

2. Go to Model view or Class Explorer> expand globals entry for this NS > RClick on A or B > Delete.

var/resourcestring keywords are not removed from source code.

Note: if add field e.g. by Model View and then use Undo - field would remove completely

QC #: Date Reported: Area:
2008-08-22 8:25:03 AM VCL\Ribbon Controls
Description: Steps:
Changing TRibbon.Font does not change Font of TRibbonApplicationMenuBar. Moreover, TRibbonApplicationMenuBar does not have Font property and ParentFont property. So it cannot show Surrogate Pair or Combining Characters on its items. 1. Create new VCL Form Application.
2. Drop a Ribbon on Form
3. Create an ApplicatiomMenuBar and an item on it.
4. Set "Meiryo" to Ribbon.Font.Name.
5. Set #$D842#$DFB7 to the caption of item.
6. Display the item of ApplicatiomMenuBar.

You will find that Surrogate Pair is displayed as rectangle.
QC #: Date Reported: Area:
2008-08-22 2:11:53 PM VCL\Ribbon Controls
Description: Steps:
Quick Access Toolbar doesn't have a caption in the ActionManager customize dialog box at Runtime. 1. New vcl forms app.
2. Add an action manager.
3. Add a Ribbon.
4. Add a Quick Access Toolbar to the Ribbon.
5. Run
6. Click the Arrow on the QAT, select More Commands...
7. Switch to the Toolbars tab.

//exp: The "Quick Access Toolbar" is one of the available toolbars.
//act: There is one option in the list, but it has no text label.
QC #: Date Reported: Area:
2008-08-22 2:54:23 PM VCL\Ribbon Controls
Description: Steps:
A group cannot have one csText and two csControls with TRibbonSpinEdit if the csControl items have images. 1. Load the attached Project.
2. Select "Row 2" on the Group.
3. Set Image Index to 0.
//exp & act: the image is displayed to the left of "Row 2"
4. Select "Row 3" on the group.
5. Set Image Index to 1.
//exp & act: the image is displayed to the left of "Row 3"
6. Run.
//exp: The Runtime form is displayed the same as the designtime.
//act: Row Three was forced to a new column

(same thing happens if you set the image for Row 1 & 2, or 1 and 3)
QC #: Date Reported: Area:
2008-08-27 4:18:13 PM Modeling\Class Diagram
Description: Steps:
Delphi:Class Diagram: Make unified behaviour for rerouting generalization and implementation links now the following beviour for reroute target of generalization link:

1. change target to:
- from class to class-> it is done normally
- from class to interface -> generalization link transforms to implementation link

beviour for reroute target of implementation link:

2. change target to:
- from class to interface -> it is done normally
- from class to class-> implementation link is disappeared

exp: It should be unified behaviour for both types of links:

1. it should be not allowed to reroute generalization link from class to interface
2. it should be not allowed to reroute implementation link from interface to class
QC #: Date Reported: Area:
2008-08-28 6:11:36 PM Modeling\Class Diagram
Description: Steps:
Delphi:Class Diagram: Remove generalization link from previous location after reroute action to other class 1. create following code

unit ns;


C = class

A = class(C)

I1 = interface

B = class(TInterfacedObject, I1)


2. go to diagram -> select generalization link between A and C classes
3. change source of generalization link to B class

act: generalization link beetween Aand C is not disappeared.
Go to source code - Code is correct. Reload action helps.
QC #: Date Reported: Area:
2008-08-29 10:25:48 AM VCL\Ribbon Controls
Description: Steps:
When a Ribbon form is designed to be small on startup, the half of the ApplicationMenu button is erroneously shown on the titlebar. 1. New VCL Forms App.
2. Add an ActionManger.
3. Add a Ribbon.
4. Add a Application Menu to the ribbon.
5. Set the form's width to less than 300 pixels or the height to less than 250 pixels.
6. Run
//exp: The Ribbon is not shown, leaving more room for the document.
//act: The ribbon isn't shown, but half of the Appliaction menu is showing, overlapping the default system icon and part of the window caption.
QC #: Date Reported: Area:
2008-08-29 11:15:25 AM IDE\Code Completion
Description: Steps:
Code completion shows enumeration members in the list of available symbols for VCL classes that have enumeration properties. File | New | C++ VCL Application.
Drop a TEdit on the form.
Double click the form to get FormCreate event handler.
// code completion window comes up
These choices appear under the Align property:
alNone, alTop, alBottom, alLeft, alRight, alClient, alCustom
and scoped versions underneath that:
TAlign::alNone, TAlign::alTop, etc.

Notice there are a LOT of them...

Select TAlign::alNone
// [BCC32 Error] Unit1.cpp(20): E2312 'alNone' is not an unambiguous base class of 'TEdit'
QC #: Date Reported: Area:
2008-09-02 VCL\Ribbon Controls
Description: Steps:
AV when select "Delete Help Tip" in Edit Screen Tips dialog if the Category node is focused.

Access violation at address 117155E0 in module 'vclribbon120.bpl'. Read of address 00000008.
OK Details >>
[117155E0]{vclribbon120.bpl} ScreenTips.TCustomScreenTipsManager.RemoveScreenTip (Line 868, "ScreenTips.pas" + 4) + $5
[0F3C4C23]{dclribbon120.bpl} ScreenTipsEditForm.TfrmScreenTipsEdit.aEditDeleteExecute (Line 280, "screentipseditform.pas" + 3) + $8
[5005710B]{rtl120.bpl } Classes.TBasicAction.Execute (Line 12221, "Classes.pas" + 3) + $7
[501E84A5]{vcl120.bpl } ActnList.TContainedAction.Execute (Line 448, "ActnList.pas" + 8) + $2C
[501E9288]{vcl120.bpl } ActnList.TCustomAction.Execute (Line 1094, "ActnList.pas" + 7) + $8
[50056FCF]{rtl120.bpl } Classes.TBasicActionLink.Execute (Line 12150, "Classes.pas" + 2) + $7
[211D9635]{vclactnband120.bpl} ActnMenus.TCustomActionMenuBar.ExecAction (Line 1064, "ActnMenus.pas" + 6) + $D
[211DAAEB]{vclactnband120.bpl} ActnMenus.TCustomActionMenuBar.TrackMenu (Line 1746, "ActnMenus.pas" + 15) + $15
[211DE044]{vclactnband120.bpl} ActnMenus.TCustomActionMainMenuBar.TrackMenu (Line 3472, "ActnMenus.pas" + 3) + $3
[211D91FD]{vclactnband120.bpl} ActnMenus.TCustomActionMenuBar.CMItemClicked (Line 943, "ActnMenus.pas" + 3) + $4
[501D0BFA]{vcl120.bpl } Controls.TControl.WndProc (Line 6640, "Controls.pas" + 91) + $6
1. File | New | VCL Application
2. drop a TScreenTipsManager and TActionList
3. double click ActionList1, Add 3 category standard action : Edit, Format, Window
4. in OI, click [...] ScreenTipManager.LinkActionList
5. click Add button in Colloction dialog
6. in OI, set ScreenTipsManager1.LinkedActionList[0].ActionList as ActionList1
7. double click TScreenTipsManager to popup Edit Screen Tips dialog
8. click Generate button
9. on left side TreeView, Expand Edit node
10. click menu Edit
// "Delete Help Tips" submenu should be disabled
11. on Treeview, select EditCut1
12. click menu Edit:
// "Delete Help Tips" submenu is enabled.
13. on Treeview, select "Edit" node
14. click menu Edit:
// "Delete Help Tips" should be disabled when Treeview is focus on a category node? It is not disabled right now.

15. select "Delete Help Tip"
// AV
Access violation at address 117155E0 in module 'vclribbon120.bpl'. Read of address 00000008.

QC #: Date Reported: Area:
2008-09-02 6:39:05 PM VCL\Ribbon Controls
Description: Steps:
Copying and pasting a ribbon group gives it the same GroupIndex as the original group. It should be (if possible) a unique to Index to the page it was pasted into. 1. New VCL Forms app.
2. Add a Ribbon.
3. Add a Tab
4. Add a Group.
5. Copy the Group.
6. Paste it onto RibbonPage1.
//exp: The new Group has a new GroupIndex ( GroupIndex = 1)
//act: the new Group's GroupIndex = 0, the same as the original
QC #: Date Reported: Area:
2008-09-04 3:36:52 PM Modeling\Class Explorer
Description: Steps:
Class Explorer fails to show any info for large units

Attached to this bug are 2 units that show this. One is a contrived unit (LongUnit.pas). The other is an actual IDE source file (WinMsg.pas)

Looks like any file whose size is greater than 65535 fails to show up
Create a new Delphi project
Add both of the attached units to the project
View | Delphi class Explorer

Note that it only shows a node for Project1

If you start removing large chunks of code from either unit, eventually that unit will show up in the explorer

In dev build, create a new delphi project
Project | Add to project
Navigate to $(TP)\app\debugger directory
Select every .PAS file and click Open
Ignore any errors that appear (for form loading)
Look at the delphi class explorer
Any unit whose size is greater than 65535 fails to show up:

4/29/08 14:53 68,849 dbk.pas
3/25/08 16:23 74,834 DebuggerMgr.pas
8/07/08 13:59 78,670 Win32Debug.pas
8/19/08 15:37 87,692 DbkDebugOpts.pas
7/09/08 11:16 94,523 DbgInsp.pas
11/30/07 9:33 110,545 WinMsg.pas
8/19/08 15:57 391,569 Debug.pas
QC #: Date Reported: Area:
2008-09-04 VCL\Ribbon Controls
Description: Steps:
When TScreenTipsManager.LinkedActionLists do not have any items, or has items, but the item's ActionList property did not assign any value, application will crash at close if the "Quick Access menu" has been drop down.

Application Error
Exception EAccessViolation in module Project2.exe at 00021D10.Access violation at address 00421D10 in module 'Project2.exe'. Read of address 00000008.
1. File | New | Delphi | VCL Application
2. drop TActionManager, and TRibbon, and TScreenTipManager
3. right click Ribbon1, select Add Quick Access Toolbar
4. Run
5. click Quick Access arrow.
6. either you let drop down menu close or not, click [X] of the window
// application crash.

Application Error
Exception EAccessViolation in module Project2.exe at 00021D10.Access violation at address 00421D10 in module 'Project2.exe'. Read of address 00000008.
QC #: Date Reported: Area:
2008-09-05 2:55:07 PM Modeling\UML Diagrams
Description: Steps:
Delphi:UML Diagrams: It should be possible to add UML diagram in following case

I have two projects. The first one defines class diagrams and their
> code counterparts (VCL application : JSetup). The second project
> (Console application [*]: JSetupDesign) defines sequence and activity
> diagrams. However if I add a new diagram into my second project (using
> a namespace btw) - it doesn't matter what type - I can see the working
> area of the new diagram. Furthermore the currently added diagram has
> no name in the model view tree. It is just a blank name. If I try to
> change the name, it is denied : "Property value cannot be set"

> Eventually if I try to add any UML component (say a little man symbol
> for use cases) the diagram item is removed from the model view tree
> view and is replaced with the UML symbol that I just added.
> I must say that I did not encounter this behaviour in the first
> project - yet.
> Saving and reopening the project leads to the fact that the diagram
> isn't shown anymore but the file in the project folder still exists.

[saa]: The first problem is reproduced with the similar results.
1. problem is reproduced if only project group JSetupProjectGroup is opened 2. attempt to add design diagram to JSetupDesign(contains only diagrams, no source code elements) -> work area is opened but no added diagram in model view tree(files in project folder are created)

1) Reload has no action.
2) If we add new namespace - diagrams is added to this namespace correctly.
3) If we open JSetupDesign separately from project group- diagrams are added normally
4) for JSetup project - diagrams are created normally
I found that project is corrupted after add modeling action to JSetup project, that is
1 case: run project group: JSetup project- modeling is off (Model support files are removed), JSetupDesign project- modeling is on(Model support files are original) in this case UML diagrams are added correctly

2 case: if switch on Modeling on JSetup - project fails
QC #: Date Reported: Area:
2008-09-08 10:39:42 AM RTL\Delphi\Other Classes\TEncoding
Description: Steps:
Unicode and BigEndianUnicode encodings return incorrect result from GetChars if length of CharArray is longer than the minimum required length. program Project105;



B: TBytes;
C: TCharArray;
I: Integer;
LEncoding: TEncoding;
LEncoding := TEncoding.Unicode;
B := LEncoding.GetBytes('Hello');
SetLength(C, 100);
I := LEncoding.GetChars(B, 0, Length(B), C, 0);
Writeln('Exp: ', LEncoding.GetCharCount(B), ' Act: ', I);
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
QC #: Date Reported: Area:
2008-09-08 4:04:04 PM RTL\Delphi\Other Classes\TEncoding
Description: Steps:
TCharArray overload of TEncoding.GetByteCount doesn't perform bounds checking on the parameters. Compare TEncoding.GetByteCount(TCharArray) with Compare TEncoding.GetByteCount(string)

(JJS: as seen below.)

No checks made in the first overload of GetByteCount using TCharArray, but three bounds checks made on the GetByteCount using string.

<From SysUtils.pas>

function TEncoding.GetByteCount(const Chars: TCharArray; CharIndex,
CharCount: Integer): Integer;
Result := GetByteCount(@Chars[CharIndex], CharCount);

function TEncoding.GetByteCount(const S: string; CharIndex, CharCount: Integer): Integer;
if CharIndex < 1 then
raise EEncodingError.CreateResFmt(@SCharIndexOutOfBounds, [CharIndex]);
if CharCount < 0 then
raise EEncodingError.CreateResFmt(@SInvalidCharCount, [CharCount]);
if (Length(S) - CharIndex + 1) < CharCount then
raise EEncodingError.CreateResFmt(@SInvalidCharCount, [CharCount]);

Result := GetByteCount(PChar(@S[CharIndex]), CharCount);
QC #: Date Reported: Area:
2008-09-08 9:40:20 PM VCL\Additional Controls\Action Bar Controls
Description: Steps:
Resizing the IDE smaller causes the main menu to become narrow hiding most of the menu, while making it wider and it doesn't come back. 1. Run bds.
2. Restore the window so it is not maximized.
3. Resize the window so it is very narrow (drag the right handle horizontally to the left).
//The bar containing the menu resizes horizontally, obscuring most of the menu items.
4. Resize the window so it is wide again.
//exp: the menu becomes visible again.
//act: the parts of the menu that were hidden remain hidden.

** OR **

- Same steps with attached test case
QC #: Date Reported: Area:
2008-09-10 10:34:52 AM Internet\XML\Data Binding
Description: Steps:
XML Databinding wizard hangs when trying to create a binding for bdsconfig.xml Run the wizard and try to create a binding for template\bdsconfig.xml (attached).
QC #: Date Reported: Area:
2008-09-10 3:32:28 PM Internet\XML\Data Binding
Description: Steps:
The backspace key and some other editing keys are not being allowed in the XML Databinding Wizard options dialog. Bring up the wizard.
Click the options button.
Select the InitfPrefix entry.
Press backspace to try and delete the XML letters.
QC #: Date Reported: Area:
2008-09-11 11:03:09 AM RTL\Delphi\Format + Float
Description: Steps:
FloatToText fails with CurrencyString longer than 1 character because the Ansi version of the function is called from the "Unicode" version.

The Ansi version of FloatToText needs to convert the CurrencyString to an Ansi string before using it.


After assigning CurrencyString, add this line:

AnsiString(Pointer(CurrencyString)) := AnsiString(CurrencyString);

Original description:
FloatToStrF fails with ffCurrency on some locales

Add to an event handler:

CurrencyString := 'R$';
ShowMessage(FloatToStrF(42, ffCurrency, 15, 2));

It displays "R" (string is truncated). In a DbGrid you get squares/random unicode chars.
QC #: Date Reported: Area:
66687 2008-09-12 Compiler\Delphi
Description: Steps:
[QC Short Description]
IDE hangs when trying to compile certain files

[QC Description]
This is an error from the newsgroups. The files that come with this report as attachment will hang the IDE (it ismply does not respond anymore, and will remain in this state until you kill it) if you do a Build project. But only if the file msg_dat.pas is NOT open in the editor.
QC Entry 66687
- Unzip attached project to its own directory - Start Delphi 2009 - Open the .dpr or .dproj file of the project - DO NOT open any of the units - Unit6 will be displayed automatically, but do not open the others - Do a Project / Build Exp: compiles with a few warnings Act: shows a few warnings, and then IDE stops reacting. The error does not happen if msg_dat.pas is open in a tab in the IDE!
QC #: Date Reported: Area:
65342 2008-08-06 IDE\ToDoList
Description: Steps:
[QC Short Description]
Automated Incident Report

[QC Description]
System Error. Code: 288.
Attempt to release mutex not owned by caller.

IDE froze while editing.
QC Entry 65342
1) IDE froze while editing. 2) I used Process Explorer to kill the following two threads (stack dump): ntdll.dll!KiFastSystemCallRet USER32.dll!GetLastInputInfo+0x105 ole32.dll!CoUnmarshalInterface+0x13e2 ole32.dll!CoWaitForMultipleHandles+0xe6 rtl120.bpl!$xp$29Syncobjs+0x28f rtl120.bpl!Syncobjs+0x20 todoide120.bpl!Idetodolist+0x25 coreide120.bpl!Docmodul+0x2f ntkrnlpa.exe+0x6dbeb ntkrnlpa.exe+0x2b462 ntkrnlpa.exe+0x2bd44 ntkrnlpa.exe+0x13d8a3 ntkrnlpa.exe+0x6986c ntdll.dll!KiFastSystemCallRet kernel32.dll!Sleep+0xf bordbk120N.dll!isDbkLoggingOn$qv+0x2d3cc bordbk120N.dll!POSTEDHOOKPROC+0xe4cd bordbk120N.dll!POSTEDHOOKPROC+0xe507 kernel32.dll!GetModuleFileNameA+0x1b4 3) IDE awoke with the reported error. I assume I can now save my work and restart the IDE.
QC #: Date Reported: Area:
66782 2008-09-15 IDE\Project Management\Project Source
Description: Steps:
[QC Short Description]
Dot (.) is not allow in LIB Prefix

[QC Description]
In Delphi 2007, I use LIB Prefix in Project Option setting to let compiler compile package library file with prefix added to the file name.

I used to put a dot (.) to split the prefix and package name. (e.g.: SQL.MyPackage.bpl where SQL. is prefix)

However, Delphi 2009 does not allow me to do so.
QC Entry 66782
1. Open Delphi 2009 IDE 2. Click File | New Package 3. Click Project | Options... 4. Select "Description" page, enter "SQL." in LIB Prefix and press OK 5. A dialog prompt "Name cannot contain any of the following characters: < > : * | ? * . \ /"
QC #: Date Reported: Area:
2008-09-15 2:17:37 PM Compiler\Delphi\Anonymous Methods
Description: Steps:
Overload resolution involving anonymous methods fails to compile certain code constructs. Try to build this:

program Test;

uses SysUtils;

TInvoke = class
class function BeginInvoke(Proc: TProc; Context: TObject = nil): Integer; overload; static;
class function BeginInvoke<T>(Func: TFunc<T>; Context: TObject = nil): Integer; overload; static;

{ TInvoke }

class function TInvoke.BeginInvoke(Proc: TProc; Context: TObject): Integer;
Result := 1;

class function TInvoke.BeginInvoke<T>(Func: TFunc<T>; Context: TObject): Integer;
R: T;
R := Func;
Result := 1;

TInvoke.BeginInvoke<string>(function: string
Result := 'Test';
end); //<-- E2250 There is no overloaded version of
// 'TInvoke.BeginInvoke<System.string>' that can be
// called with these arguments
QC #: Date Reported: Area:
2008-09-18 10:31:06 AM Compiler\Delphi\Generics
Description: Steps:
When a generic type declares a private const, using that const within the body of a method on the generic type, causes the compiler to crash when instantiating the type. Compile the following:

See the following compile output indicating failure.

Fatal: F2084 Internal Error: AV00000000-R00000000-0

program Project4;



TFoo<T> = record
strict private const
FData: record
FField1: Word;
FField2: Word;
FField3: Integer;
end = (
FField1: SizeOf(Char);
FField2: 0;
FField3: -1);
strict private
FValue: T;
FDataField: Pointer;
constructor Create(const AValue: T);

{ TFoo<T> }

constructor TFoo<T>.Create(const AValue: T);
FValue := AValue;
FDataField := @FData;

Foo: TFoo<Integer>;

Foo := TFoo<Integer>.Create(10);
{ TODO -oUser -cConsole Main : Insert code here }
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
QC #: Date Reported: Area:
2008-09-18 10:43:39 AM VCL\Emulation Classes
Description: Steps:
This is a follow-up t_str() issue. UnicodeString::c_str() must return wchar_t* ===== ALWAYS =====

So you should be able to execute code like this:

UnicodeString str("This is a test");
wchar_t buffer[1024];

wcscpy(buffer, ustr.c_str());

And when TCHAR mapping is set to wchar_t, the wcscpy can be changed to _tcscpy instead, as in:

_tcspy(buffer, ustr.c_str());
QC #: Date Reported: Area:
2008-09-18 2:32:19 PM RTL\Delphi\Format + Float
Description: Steps:
FloatToText and FloatToTextFmt don't support Unicode (calls Ansi version of the function). This causes Unciode characters in CurrencyString, DecimalSeparator or ThousandSeparator to fail. Add to an event handler:

CurrencyString := #$20A0;
ShowMessage(FloatToStrF(42, ffCurrency, 15, 2));


ShowMessage(FormatFloat(#$20A0'##.00#############', 42.0));

It displays "?42.00" instead of the proper Unicode character.
QC #: Date Reported: Area:
66919 2008-09-18 Compiler\Delphi
Description: Steps:
[QC Short Description]
Generics : compilation failure with const parameters

[QC Description]
I encountered several cases of compilation failure of otherwise completely valid code when trying to port my list "templates" (using include tricks) to generics.

I managed to write some minimal code to reproduce the problem, the compiler fails with error E2037.

"[DCC Erreur] Crash.pas(33): E2037 La d�claration de 'DoNotCompile' diff�re de la d�claration pr�c�dente"

Note that changing "const" to "var" or removing the empty procedure or removing the a or b field will allow the code to compile.

For my full project I did not found an appropriate workaround (don't want to pass the argument as VAR and want to avoid a copy).
QC Entry 66919
UNIT Failure; INTERFACE TYPE Failure<T> = RECORD {----------------------} PUBLIC TYPE TAux = CLASS PRIVATE FInt : integer; PUBLIC PROCEDURE Empty; END; PRIVATE A, B : INTEGER; PUBLIC PROCEDURE DoNotCompile (CONST AVal : Failure<T>); END; IMPLEMENTATION PROCEDURE Failure<T>.TAux.Empty; BEGIN FInt := 3; END; PROCEDURE Failure<T>.DoNotCompile(CONST AVal : Failure<T>); BEGIN A:=0; B:=0; END; END.
QC #: Date Reported: Area:
67043 2008-09-22 ActiveX
Description: Steps:
[QC Short Description]
Events of TCppWebBrowser are invoked with bogus parameters

[QC Description]
When events of the TCppWebBrowser are invoked, all passed parameters except for the this pointer (which is included in the closure pointer and not gathered by the invoke mechanism) contain bogus.

Following the stack trace down to TOleControl.InvokeEvent reveals that Params.cArgs is 0.

My system is Windows Server 2003 SP2, IE6, but the problem occurs on Windows XP SP3, IE6 as well.

(I placed it in the ActiveX area as I don't know whether it is a code generator or a framework issue.)
QC Entry 67043
- Create a new C++Builder project - Drop a TCppWebBrowser component on the form. - Use the object inspector to generate an OnTitleChange event. - Change your source code to this: ... __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { CppWebBrowser1->Navigate (WideString (L"").c_bstr ()); } //--------------------------------------------------------------------------- void __fastcall TForm1::CppWebBrowser1TitleChange(TObject *Sender, BSTR Text) { Caption = Text; } ... - Now run the application. Exp.: The form caption changes to "CodeGear Home Page". Act.: The form caption changes to a random string. When setting a breakpoint in the OnTitleChange event, the stack trace/locals view shows that TOleControl.InvokeEvent assumes that the event has zero parameters and therefore passes no arguments. Interestingly, everything works well when using the Delphi equivalent, the TWebBrowser component. Re-importing TCppWebBrowser, however, results in the same problem.
QC #: Date Reported: Area:
2008-09-22 10:06:24 AM IDE\Build Tools
Description: Steps:
From the public forums:

VCL applications built with C++ Builder 2009 don't seem to run on
Windows 98 (SE), at least on the one system I tested. A new VCL
application with a single blank form crashes before the form is
displayed. However, applications built with C++ Builder 2007 do run
without problem on Windows 98.
I did a quick test with Win98. Sure enough, running a BCB2009 .exe produces
3 exceptions at startup (2 0xeedfadeH in the .exe 1 0xc0000026H in
kernel32.dll). That is not how it is supposed to work.
New VCL application
Copy to a system with win98 / NT 4 or earlier version of windows.
Run the app.
// exp: message from the loader indicating the application does not run on this version of windows.
// Act: AV.
QC #: Date Reported: Area:
2008-09-23 6:35:31 PM IDE\Translation Tools\Repository
Description: Steps:
ITE can not look up a translated string from repository if the original string is multi-line text.

Replace default.tmx with an attached .ZIP file.
This repository contains four languages (EN/JP/DE/FR) resource string from our RTL source codes by RTM version.

Create VCL/W32 application, then Add Japane localized resource.

Almost string resources are translated automatically using Default.TMX, but three strings are not translated. ITE does not find these strings from repository.

QC #: Date Reported: Area:
66804 2008-09-15 IDE\Build Tools
Description: Steps:
[ Actual problem ]
Adding a build event to a Delphi or C++Builder project corrupts the ordering of data in the project file - MD

[QC Short Description]
IDE does not respect per-project unit search path configuration

[QC Description]
When build scripts are used, the IDE seems to ignore per-project custom unit search path, and does not pass them to the compiler.

When a set of units is present in the default search path, but a project depends on a different version of those units that are located in a different directory, because unit search path override does not function correctly, compilation will fail.
QC Entry 66804
Create a new project; Go to [Project Options] - [Delphi Compiler]; In the "Base" build configuration, type a custom directory in the "Search path" field; Try to build the project; In the "Output" window, locate the dcc32 compilation commandline; Check the -U parameter clause, you will not see the custom directory you just typed in. Updated steps (please read my comment): ** Before building the project, add something in the conditional defines and build script. For example, define ABCD; and in pre-build script, add: echo $(DEFINES) In addition, sometimes this problem seems to occur on the second+ build attempt, not the first. i.e. Load the project, build it once and everything works, but then build again, you get error. If it functions OK, the compilation commandline looks like: ...dcc32.exe ... --no-config ... -U "costum path"; ... But when it malfuntions, the compilation commandline looks like: ...dcc32.exe ... --platform:x86 ... -U ... (the custom path defined for the project is missing)
QC #: Date Reported: Area:
2008-09-24 11:15:33 AM ActiveX\Code Generators\TLibImp frontend
Description: Steps:
When importing the ER Studio type library the CoClass Shape is wrapped in TShape which conflicts with the VCL component TShape.

Test with both Delphi and C++
1. Component | Import Component
2. Choose ER Studio (C:\Program Files (x86)\Embarcadero\ERStudio7.6DE\ERSTUDIODE.exe)
(.tlb can be found under testdata of automation)
3. Install into new package

//exp: For the install to work
//act: Error that a comment isn't commented and that TShape conflicts with TShape
QC #: Date Reported: Area:
2008-09-24 5:48:53 PM IDE\Code Browsing
Description: Steps:
Code navigation does not work in headers that aren't part of the project. File | New C++ App
Double click the new form to get to source.
Add "#include <iostream>"
Add "istream is;"
Ctrl-Click on "istream"
//Exp & Act: navigate to root definition of istream (basic_istream) in iosfwd.
Ctrl-Click on "char_traits<char>" in that definition
// Exp: navigates to definition of char_traits
// Act: Nothing happens.
QC #: Date Reported: Area:
67227 2008-09-26 12:55:14 PM ActiveX\IDE\Wizards\Transactional Object
Description: Steps:
Transactional Model and Generate Event support code doesn't work on the Transactional Object.

Another bug logged for C++ edition of this bug
1. File | New ActiveX Library
2. File | New Transactional Object
3. Set Transactional Model to something other than the default
4. Check Generate Event Support code

//exp:Event code is generated and a custom guid is added to the Transactional Object's CoClass in the type library
//act: nothing
QC #: Date Reported: Area:
2008-09-27 1:24:12 AM Modeling
Description: Steps:
Restore DesignPatterns functionality after fix rev.17266 1) Most DesignPatters tests failed
2) - Create C++ project with Namespece1, Class1 in this namespace, Attribute1 in this class
- change using Inspector Attribute1 type to Class1*
Result: Error dialog apperas - cannot set ... - this is bug

fixed in rev.17292 in the branch
In the trunk - buggy revision rev.17267, fixed 17306
QC #: Date Reported: Area:
2008-09-26 9:00:43 PM Internet\XML\Data Binding
Description: Steps:
Accesing the options for the XML Databinding Wizard on a second use will result in a list index out of bounds error. 1) New Delphi VCL Forms app.

2) File | New | Other | Delphi Projectes | XML | XML Data Binding
3) Click the "Options" button
4) Click Cancel
5) Click Cancel

repeat from step 2.

At step 3 a "list index out of bounds error" is raised.
QC #: Date Reported: Area:
2008-09-28 10:06:53 AM CodeGuard
Description: Steps:
Japanese / Patch 3190.17285.1

Cannot start CodeGuard configuration, result in below error, see also attached screen shot.
DE/EN/FR are OK.

abnormal program termination

Note: US (and other localized version) has a problem in caption of CgCOnfig.
The caption should be "- Global options" as default.
But Tiburon Patch version may display "- options". "Global" is lacked!

- install Tiburon patch (Setup.3190.17285.1.exe) over RTM (3170.16989.1b.iso) JA version.
- launch the IDE
- Tools | CodeGuard configuration

Exp: show configuration dialog
Act: abnormal program termination

QC #: Date Reported: Area:
67284 2008-09-29 Compiler\Delphi
Description: Steps:
[QC Short Description]
F2084 Internal Error: URW6343 (Generics/Anonymous methods)

[QC Description]
The Delphi compiler fails with an "Internal Error: URW6343" if you use "Make Project". "Build Project" compiles without any error.
QC Entry 67284
1. Extract the attached project 2. Open it in the Delphi 2009 IDE 3. Do a "Build Project" 4. Do a "Make Project" Expected: Both compilation finish without any error Actual: The "Make Project" fails with "F2084 Internal Error: URW6343" Smaller test case and command line steps by Uwe Schuster: unit AsyncCalls; interface type TMultiArgProcCall<TProc, T1, T2, T3> = class(TObject); TAsyncCalls = class(TObject) private type TAsyncCallArgGenericMethod<T1, T2, T3> = function(Arg1: T1; Arg2: T2; Arg3: T3): Integer of object; TAsyncCallArgMethod<T1, T2, T3> = class(TMultiArgProcCall<TAsyncCallArgGenericMethod<T1, T2, T3>, T1, T2, T3>); public end; implementation end. program GenericsURW6343; {$APPTYPE CONSOLE} uses AsyncCalls; begin WriteLn('PASS'); end. Steps: - dcc32 -B GenericsURW6343.dpr - dcc32 -M GenericsURW6343.dpr expected: it compiles actual: GenericsURW6343.dpr(6) Fatal: F2084 Internal Error: URW6343
QC #: Date Reported: Area:
2008-10-01 6:35:36 PM Install
Description: Steps:
Installer set boost_setup.exe for \\HLM\Software\CodeGear\BDS\6.0\AutoRun\UpdateCheck\ProgramToRun instead of setup.exe and result in always be invoked Modify/Repair/Uninstall dialog of boost_setup.exe when launching the IDE, see attached screen shots.

Issue occured on EN/JA/DE version, it may also happen on FR although did not checked it.

NOTE: it seems to same problem happen during FT period, see QC#66490
- on clean XP SP3 EN/JA VM
- run 12.0.3195.17340.1\Setup.exe with all default as using Architect key
- after finish installation, launch the IDE
// act: bring up Modify/Repair/Uninstall dialog of boost_setup.exe
QC #: Date Reported: Area:
2008-10-01 3:58:54 PM Modeling\Class Explorer
Description: Steps:
Delphi. Remove must work neatly when several globals variable in Namespace are placed in one line in code:
A, B, C: integer
and then User removes one of them through CE.
1. add variables as globals into any namespace:
A, B, C : integer;

2. open Class Explorer, select 'globals Namespace', select e.g B variable form attributes list, RClick> Delete.

Exp. Result: B variable only is removed from source code and CE attributes list

Act Result:
a) All three variables are removed from source code
b) All three varables aren't removed from CE attributes list
c) after double click on any of them in CE attributes list Unhandled exception returns. See details in attached file please.

QC #: Date Reported: Area:
2008-10-01 4:15:49 PM Modeling\Model Tree View
Description: Steps:
Delphi. Remove must work correctly when several globals variable in Namespace are placed as one line in code:
A, B, C: integer
and then User removes one of them through Model View.

Now all variables are removed from source code.
1. add variables as globals into any namespace:
A, B, C : integer;

2. open Model View, select 'globals Namespace', select e.g B variable, RClick> Delete.

EXP: B variable only is removed from Model View and from source code

ACT: looks as only B variable is removed from Model View, Ok - but all three variables are removed from source code in fact
QC #: Date Reported: Area:
2008-10-06 3:39:26 PM IDE\Project Management
Description: Steps:
Package import libraries (.bpi's) added to a non-package project are not linked.

This is especially a problem since changes were made to the runtime package list such that uninstalled packages in it are not explicitly added to the link list.
Create a new C++ package.
Add a unit to it (assume Unit1)
Add the following to the unit header:
#include <System.hpp>
String PACKAGE Echo(String Str);

Add the following to the unit .cpp:
String Echo(String Str)
return Str;

Build the package, but do not install it.

Create a new C++ VCL Forms application
Add "#include Unit1.h" (the previously created unit)
Double-click the form to get an event handler.
Add this code to it:
ShowMessage(Echo("Hello World"));

// Exp and Act: Unresolved external "Echo" referenced from Unit2
Add the package's .bpi to the VCL Forms project.
// Exp: Links correctly
// Act: Same unresolved external because the link line doesn't contain "package.bpi"
QC #: Date Reported: Area:
2008-10-07 VCL
Description: Steps:
reorder group do not work any more 1. File | New | VCL Application
2. drop TRibbon
3. right click select Add "Add Tab"
4. add 3 group
5. right click Ribbon, select "re-order group"
6. select "group2", click Up button, // group2 move up
7. click OK
//exp: group2 first, group1 second
//act : no change
QC #: Date Reported: Area:
2008-10-08 4:05:19 PM VCL\Ribbon Controls
Description: Steps:
Reorder groups shows a "lcomp not found" dialog if the any Group's name doesn't match it's caption. 1. New VCL Forms App.
2. Add a TRibbon.
3. Add a Tab to the ribbon.
4. Add a two Groups to the tab.
5. Set the captions of the groups to "One" and "Two"
6. Right click the page to the right of the groups and select "Reorder groups"
7. Swap the two groups position.
8. Hit OK.
//exp: The Group's order is swapped.
//act: Two dialogs come up, "lcomp not found" The groups are not reordered.
QC #: Date Reported: Area:
2008-10-08 4:10:07 PM VCL\Ribbon Controls
Description: Steps:
Groups moved to other tabs still show up on the Reorder groups page. 1. New VCL Forms app
2. Add a Ribbon.
3. Add three tabs to the ribbon.
4. On the First tab, add two groups.
5. Right click the RibbonPage and select "Move Group"
6. Select RibbonGroup2 and RibbonPage2. Click OK.
//act&exp: The Group is moved to the second tab.
7. With RibbonPage1 activated, right click it and select "Reorder Groups"
//exp: RibbonGroup1 and RibbonGroup3 are the only groups listed.
//act: RibbonGroup2 is listed still as well.
QC #: Date Reported: Area:
67632 2008-10-07 RTL\Delphi\Format + Float
Description: Steps:
[QC Short Description]
Format "%e" fails for large values

[QC Description]
It looks like the bug is connected with new modifications of
QC Entry 67632
Try to execute this code, for example str := Format( 'Test %14.6e', [Pi*1.0e9] ); or use any other large enough values. There are #0 symbols embedded into resulting string and it causes obvious problems!
QC #: Date Reported: Area:
67876 2008-10-14 RTL\Delphi\Format + Float
Description: Steps:
[QC Short Description]
AnsiStrings.Format can't handle floating-point values

QC Entry 67876
AnsiStrings.Format can't handle floating-point values correctly; SysUtils.Format can. Here is an example: procedure TForm1.Button1Click(Sender: TObject); var s1: AnsiString; s2: String; begin // BAD: s1 := AnsiStrings.Format('%g_',[3.14]); // value of s1: '3'#0','#0'_' // GOOD: s2 := SysUtils.Format('%g_',[3.14]); // value of s2: '3,14_' end;
QC #: Date Reported: Area:
2008-10-14 10:22:33 AM RTL\Delphi\Format + Float
Description: Steps:
Format(%g) fails with floating point number when using the TFormatSettings overload.

procedure TForm1.Button1Click(Sender: TObject);
s2: String;
Fmt: TFormatSettings;
GetLocaleFormatSettings(GetThreadLocale, Fmt);
s2 := SysUtils.Format('%g_',[3.14], Fmt);

//Exp: value of s2: '3.14_'
//Act: value of s2: '3'#0','#0'_'
QC #: Date Reported: Area:
67934 2008-10-15 RTL\Delphi\RTL Exceptions
Description: Steps:
[QC Short Description]
format with formatsettings problem

[QC Description]
When using the SysUtils.Format command with a TFormatSetting parameter,
it gives an exception for strings of length >= 4095.

This also affects Indy.

s : string;
fs : tformatsettings;
GetLocaleFormatSettings(0, fs);

setlength(s, 4094);
s := sysutils.format('%s', [s], fs ); //OK

setlength(s, 4095);
s := sysutils.format('%s', [s], fs ); //PROBLEM

//Exception message:
//Project Project1.exe raised exception class EConvertError with message
// 'Format '%s' invalid or incompatible with argument'.

QC Entry 67934
QC #: Date Reported: Area:
2008-10-16 2:59:22 PM Linker\ILINK32
Description: Steps:
Linker version is currently 5.95. Needs to be updated to newer version for update.

Server Response from: ETNASC03