Delphi 2009 Quality Central Reported Bug Fixes

By: Chris Pattinson

Abstract: List of 343 Quality Central reports fixed in Delphi 2009 since RAD Studio 2007, Update 3

3290 fixes total were completed for Delphi 2009.

The 343 listed here are fixes to reports made by customers into the public bug tracking system, Quality Central , since the release of RAD Studio 200 Update 3 as part of the drive to improve the RAD Studio product quality.

A dynamic link to this list can be found here:

http://qc.codegear.com/wc/qcmain.aspx?search=1&stat=30&res=10&proj=10&rib=12

The reports are sorted by Area alphabetically.

These older publicly reported bugs fixed in D2009 include:

  • 21 ActiveX
  • 24 Compiler
  • 11 Database
  • 8 Debugger
  • 41 Documentation
  • 81 IDE
  • 12 Install
  • 62 RTL
  • 63 VCL

From the set of 3290 fixes total, here are a few areas and number of bugs fixed:

  • 173 Active X
  • 198 Compiler
  • 249 Database
  • 91 Debugger
  • 25 Demos
  • 148 Documentation
  • 952 IDE
  • 385 Install
  • 259 RTL
  • 411 VCL

QC #:

Date Reported:

Area:

23325

1/10/2006

Documentation

Description:

Steps:

[QC Short Description]
TTcpClient not documented

[QC Description]
TTcpClient is not documented. TClientSocket is, but is not on the component palette.
QC Entry 23325


[Internet\Controls\TTcpClient]

QC #:

Date Reported:

Area:

34855

10/5/2006

Documentation

Description:

Steps:

[QC Short Description]
Windows and SysUtils - description of Sleep procedure issue

[QC Description]
In documentation is:

Delay program execution for a specified number of microseconds.

but should be:

Delay program execution for a specified number of milliseconds.
QC Entry 34855

in help look for sleep and choose some of this topics: SysUtils.Sleep Routine Windows.Sleep Routine Borland.Vcl.SysUtils.Sleep Routine Borland.Vcl.Windows.Sleep Routine

QC #:

Date Reported:

Area:

25754

3/5/2006

Documentation

Description:

Steps:

[QC Short Description]
File | New | DataModule menu item no longer exists but it is mentioned in documentation

[QC Description]
You can no longer select File | New | Datamodule from the default File | New menu in Delphi 2006. However this is the method mentioned when creating a new datamodule for a project.

ms-help://borland.bds4/bds4win32devguide/html/idh_useop_creatingandeditingdatamodules.htm
QC Entry 25754

QC #:

Date Reported:

Area:

23550

1/14/2006

Documentation

Description:

Steps:

[QC Short Description]
TNotifyEvent type help topic missing

[QC Description]
I wanted to lookup the events associated with TMenuItem. I eventually found TNotifyEvent. There's no link to TNotifyEvent in the topic, and if I search for it via the index there's a very general description of it, but not the actual definition of TNotifyEvent.

In Delphi 7 there is the same text, but an extra topic called TNotifyEvent type which has all the documentation I was expecting. So why is this removed in Delphi 2006?

TNotifyEvent is used for events that do not require parameters.

Unit

Classes

Delphi syntax:

type TNotifyEvent = procedure (Sender: TObject) of object;

C++ syntax:

typedef void __fastcall (__closure *TNotifyEvent)(System::TObjectTObject* Sender);

Description

The TNotifyEvent type is the type for events that have no event-specific parameters. These events simply notify the component that a specific event occurred. For example, OnClick, which is of type TNotifyEvent, notifies the control that a click event occurred on the control.

The Sender parameter is the object whose event handler is called. For example,.with the OnClick event of a button, the Sender parameter is the button component that is clicked.
QC Entry 23550

Lookup help for TNotifyEvent

QC #:

Date Reported:

Area:

36640

11/16/2006

Documentation

Description:

Steps:

[QC Short Description]
TrueBoolStrs and FalseBoolStrs have incorrect declaration

[QC Description]
The help topic for SysUtils.TrueBoolStrs claims it is declared as

var TrueBoolStrs: .74

see ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_SysUtilsTrueBoolStrsVariable.htm

The same applies to FalseBoolsStrs:

var FalseBoolStrs: .84

see ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_SysUtilsFalseBoolStrsVariable.htm

The same issues applies to the .NET help topics!
QC Entry 36640

QC #:

Date Reported:

Area:

23811

1/19/2006

Documentation

Description:

Steps:

[QC Short Description]
Build Control help items are incorrectly formatted

QC Entry 23811

1. Enter the following link into the help window ms-help://borland.bds4/bds4ref/html/description_package.htm 2. Check out the Build control topic. Rebuild as needed text is very close to the explanation text and the Explicit Rebuild explanation should be under the Rebuild as needed topic as it is also a Build control topic.

QC #:

Date Reported:

Area:

55306

11/27/2007

Documentation

Description:

Steps:

[QC Short Description]
No documentation for builtin functions like "Copy"

QC Entry 55306

This is with Delphi 2007 Win32 patch 3, plus online help patch 1. 1. Open online help. 2. Set the filter to "Language: Delphi" 3. Go to the help index (not fulltext search) and type "Copy" 4. Nothing is found. 5. Search for _Copy 6. It exists, but the auto-generated documentation is worthless. I'm happy to note that *most* global functions, however (like StrToInt), are now findable in the index, where they weren't before because they were only indexed under their unit, like SysUtils.StrToInt.

QC #:

Date Reported:

Area:

53780

10/22/2007

Documentation

Description:

Steps:

[QC Short Description]
Help says Image Editor is included, when it is not

[QC Description]
The following link in the docs:

ms-help://borland.bds5/devcommon/toolsoverview_xml.html

says that Image Editor is included in the tools supplied with CodeGear RAD Studio.

It hasn't been provided for some time.



QC Entry 53780

See description

QC #:

Date Reported:

Area:

22568

12/20/2005

Documentation

Description:

Steps:

[QC Short Description]
Documentation for the TButton wordwrap property refers to Label instead of Button

[QC Description]
The documentation for the TButton wordwrap property refers to Label instead of Button.

ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_StdCtrlsTButtonControlWordWrapProperty.htm
QC Entry 22568

ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_StdCtrlsTButtonControlWordWrapProperty.htm Open the following link to the help and read the text. Several times the text refers to Label instead of Text.

QC #:

Date Reported:

Area:

25415

2/25/2006

Documentation

Description:

Steps:

[QC Short Description]
Critical Funtions Not Documented

[QC Description]
The following routines cannot be found in help file. Also their parameters are not shown in code editor's symbol lookup popup box. (Their parameter are partially shown in the tool-tip that appears when developer opens a parenthesis.) All of them belong to System unit.
1. Addr
2. Append
3. Assert
4. Assigned
5. AssignFile
6. BlockRead
7. BlockWrite
8. Break
9. Chr
10. Close
11. CloseFile
12. Continue
13. Copy
14. Date
15. Dec
16. Delete
17. Dispose
18. Eof
19. Eoln
20. Erase (Only Win32 version is missing)
21. Exit
22. FillChar
23. Finalize
24. FreeMem
25. GetMem
26. Halt
27. Hi
28. High
29. Inc
30. Initialize
31. Insert
32. Length
33. Lo
34. Low
35. New
36. Ord
37. Pred
38. Ptr
39. Random
40. ReallocMem
41. Round
42. SetLength
43. SetString
44. SizeOf
45. Str
46. Succ
47. Trunc
48. VarCast
49. VarClear (Only Win32 version is missing)
50. VarCopy
51. Writeln
QC Entry 25415

N/A

QC #:

Date Reported:

Area:

45914

5/14/2007

Documentation

Description:

Steps:

[QC Short Description]
Compiler directives missing for Delphi and C++
ref:250426
[QC Description]
Searching on help for compiler directives comes back with 2 options, which are both useless.

// Holger Flick: holds true for German as well

QC Entry 45914

1. Start RAD Studio, Spacely, Cogswell 2. Go to ? / Help... Searching on help for compiler directives comes back with 2 options ms-help://borland.bds5/devcommon/delphicompdirectiveslist_xml.html which is empty and ms-help://borland.bds5/devcommon/fhxr10869_xml.html which mentions how to use them and to look at the empty one, no directives are listed there is nothing for C++ specifically

QC #:

Date Reported:

Area:

43935

4/6/2007

Documentation

Description:

Steps:

Reference for Copy/System.Copy missing.

[QC Short Description]
Help takes some time to load for references to "Copy", and System.Copy is missing

[QC Description]
As per short description:

The help takes some time to load for references to "Copy", and System.Copy is missing from the list.
QC Entry 43935

1. Start D2007
2. File->New->VCL Forms Application
3. Double click the form to create a FormCreate handler
4. Type Copy into the handler.
5. Put the cursor at the beginning of Copy and press F1

Act: The help takes at least 30 seconds to display any results, and the IDE is unusable during this time. System.Copy is not listed in the results.
Exp: The response should be only a few seconds and System.Copy should be in the list.

----Hi Chris, the performance issue is the main problem. Pls reassign as appropriate. -Dee

QC #:

Date Reported:

Area:

41524

2/28/2007

Documentation

Description:

Steps:

[QC Short Description]
Installing a Debugger on a Remote Machine

[QC Description]
[BETA]

Documentation incorrect.

Locate the following files on the local machine:
rmtdbg100.exe => Should be rmtdbg105.exe
bccide.dll
bordbk100.dll => Should be bordbk105.dll
bordbk100N.dll => Should be bordbk105N.dll
comp32x.dll
dbkpro100.dll => Should be dbkpro105.dll
DCC100.DLL
DCC100IL.DLL => File does not exist
Borland.dbkasp.dll => File does not exist
By default, all of these files are in C:\Program Files\Borland\BDS\4.0\Bin. => Should be C:\Program Files\CodeGear\RAD Studio\5.0\bin

Copy the files from your local machine to the directory you created on the remote machine.
On the remote computer,

register bordbk100.dll and bordbk100n.dll

==> Should be register bordbk105.dll and bordbk105n.dll


by running the regsvr32.exe registration utility. For example, on Windows XP, enter C:\Windows\System32\regsvr32.exe bordbk100.dll at the command prompt, then enter C:\Windows\System32\regsvr32.exe bordbk100n.dll.

==> Should be

C:\Windows\System32\regsvr32.exe bordbk105.dll at the command prompt, then enter C:\Windows\System32\regsvr32.exe bordbk105n.dll.


QC Entry 41524

QC #:

Date Reported:

Area:

53038

10/5/2007

Documentation

Description:

Steps:

[QC Short Description]
TApplication.MainFormOnTaskBar property

[QC Description]
1.
For current paragraph
"MainFormOnTaskBar is intended to be set at startup and persist throughout
the duration of the application. Changing this property at runtime could
result in unexpected behavior. "

suggest alternative:

If a change to default behavior is required, MainFormOnTaskBar should be set
in the dpr file after Application.Initialize and before main form creation.
The MainFormOnTaskBar setting is intended to persist for the life of the
application; later runtime changes of this property could result in
unexpected behavior.

Rationale: This is consistent with the following example, and the contrast
between setting the property "at startup" vs. "at runtime" is unnecessarily
vague. Startup is a runtime process.

2.
F1 on the property results in
---------------------------
Error
---------------------------
No help found for Forms.MainFormOnTaskBar.
---------------------------
OK Details >>
---------------------------
QC Entry 53038

none

QC #:

Date Reported:

Area:

42835

3/19/2007

Documentation

Description:

Steps:

The search result from delphi help is not displayed when the keyword has a reference other than delphi help.

[QC Short Description]
No help-topic linked to "procedure" index-enry

[QC Description]
try to type procedure into index
QC Entry 42835

see 247441 also

try to type procedure into index (e.g. Length, SetLength, Dec etc..)

act: no topic linked for the first line of the entry find

QC #:

Date Reported:

Area:

51500

9/3/2007

Documentation

Description:

Steps:

[QC Short Description]
Help pages with HTML entities

[QC Description]
Several pages contain HTML entities (for example "&apos;", "<", ">", "&") instead of the chars the represent.

see steps
QC Entry 51500

- open the (german) Highlander help - search for "&apos;" - this returns two pages and the first result contains HTML entities page: ms-help://borland.bds5/devcommon/bcc32_c++compatibility_xml.html one example from that page expected: "-Vbs Behandelt String-Literale nicht als 'const'." actual: "-Vbs Behandelt String-Literale nicht als &apos;const&apos;." - search for "<" - this returns 98 pages examples (search result 5, 6 and 7) page: ms-help://borland.bds5/devwin32/invalididentifier_xml.html expected: "<name> ist kein gueltiger Bezeichner" actual: "<name> ist kein gueltiger Bezeichner" page: ms-help://borland.bds5/delphivclwin32/MidProd_TCustomInetXPageProducer_Content.html one example from that page expected: "<#INCLUDES> generiert Anweisungen, die die Javascript-Bibliotheken an der in IncludePathURL angegebenen Adresse einbinden." actual: "<#INCLUDES> generiert Anweisungen, die die Javascript-Bibliotheken an der in IncludePathURL angegebenen Adresse einbinden." page: ms-help://borland.bds5/delphivclwin32/SiteProd_TAdapterPageProducer_HTMLDoc.html one example from that page expected: "Das Tag beginnt mit einer spitzen Klammer (<) und einem Nummernzeichen (#)." actual: "Das Tag beginnt mit einer spitzen Klammer (<) und einem Nummernzeichen (#)." - search for ">" - this returns 85 pages examples (search results 5, 6, 7) page: ms-help://borland.bds5/delphivclwin32/MidItems_IHTMLField.html one example from that page expected: "Schnittstellen der Klasse IHTMLField m ssen in Web-Elementen implementiert werden, die HTML-Eingabekomponenten <INPUT> generieren." actual: "Schnittstellen der Klasse IHTMLField m ssen in Web-Elementen implementiert werden, die HTML-Eingabekomponenten <INPUT> generieren." page: ms-help://borland.bds5/delphivclwin32/SiteProd_TBaseAdapterPageProducer.html one example from that page expected: "<#STYLES> - Dieses Tag wird durch die in der Eigenschaft Styles oder StylesFile angegebene Formatvorlage ersetzt." actual: "<#STYLES> - Dieses Tag wird durch die in der Eigenschaft Styles oder StylesFile angegebene Formatvorlage ersetzt." page: ms-help://borland.bds5/delphivclwin32/SiteProd_TBaseAdapterPageProducer_GetRequiredTags.html expected: "GetRequiredTags gibt einen String mit den speziellen Tags zur ck, die vom Seitengenerator zum Erstellen des HTML-Dokuments ben tigt werden ('<#STYLES> <#WARNINGS> <#SERVERSCRIPT>')." actual: "GetRequiredTags gibt einen String mit den speziellen Tags zur ck, die vom Seitengenerator zum Erstellen des HTML-Dokuments ben tigt werden ('<#STYLES> <#WARNINGS> <#SERVERSCRIPT>')." - search for "&" - this returns 9 pages example ms-help://borland.bds5/devwin32/ref_deref_ops_xml.html expected: "T *ptr = &t1 wird behandelt als" actual: "T *ptr = &t1 wird behandelt als"

QC #:

Date Reported:

Area:

25440

2/26/2006

Documentation

Description:

Steps:

[QC Short Description]
TFont.Orientation

[QC Description]
TFont.Orientation is not described in the help file at all
QC Entry 25440

1. Open the help for TFont 2. Notice that the Orientation property is nowhere documented

QC #:

Date Reported:

Area:

31315

7/16/2006

Documentation

Description:

Steps:

[QC Short Description]
Not all TControlStyle set members are documented

[QC Description]
The following TControlStyle set members are not documented:

csNeedsBorderPaint
csParentBackground
csAlignWithMargins
QC Entry 31315

Run Help (within Delphi 2006 Help | Borland Help) Search for TControlStyle and select the Win32 topic Direct Link is: ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_ControlsTControlStyleType.htm

QC #:

Date Reported:

Area:

49366

7/20/2007

Documentation

Description:

Steps:

[QC Short Description]
Help index is completely broken

[QC Description]
Example

Filter: (No filter)
Select the Index tab, scroll to "Currency data type" and click the entry.

Actual behavior:
Help for
Visual Basic Scripting Edition CCur Function
is shown.

Expected behavior:
Help about the Currency data type should be shown.


Also

Filter: Language: Delphi
The index entry for "Currency data type" is missing.

clicking CurrencyDecimals or CurrencyFormat shows completely unrelated topics.


Also

Create a new empty VCL forms project and add a Currency variable liek this:
type
TForm1 = class(TForm)
private
{ Private declarations }
abc: Currency; // add this line
public
Place the cursor on the Currency text and press F1.
13 topics is shown in a list, all is wrong.
When you close the list there is a message saying "The keyword is not defined".
QC Entry 49366

QC #:

Date Reported:

Area:

48785

7/9/2007

Documentation

Description:

Steps:

[QC Short Description]
The TToolButton.Index Property page has an incorrect link

[QC Description]
On the TToolButton.Index property page there is supposed to be a link to the TToolbar Buttons property. The problem is that the Buttons link navigates to the Buttons namespace (unit) help page.
QC Entry 48785

Karyn,
The link in the Description goes to Buttons namespace and that is auto-generated by DocOMatic and I don't believe it can be changed. However the "See Also" link goes to TToolbar.Buttons as the customer wants. Is it possible to update the text under See Also so that it is obvious that the link points to TToolbar.Buttons?
-Dee

1. Open the documentation 2. Enter in the URL: ms-help://borland.bds5/delphivclwin32/ComCtrls_TToolButton_Index.html 3. In the description see that there is a link to Buttons. 4. Click on this link exp: Navigate to the help page for the TToolbar.Buttons property (ms-help://borland.bds5/delphivclwin32/ComCtrls_TToolBar_Buttons.html) act: You navigate to the Buttons namespace page (ms-help://borland.bds5/delphivclwin32/Buttons.html) The link listed under See Also is correct

QC #:

Date Reported:

Area:

32582

8/10/2006

Documentation

Description:

Steps:

[QC Short Description]
MessageDlg help topic incorrect

[QC Description]
The description is mentioning parameters that MessageDlg actually doesn't take!
QC Entry 32582

Open help page for MessageDlg: ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_DialogsMessageDlgRoutine.htm The description describes the parameter Caption which is used if DlgType is mtCustom. This is wrong: - because there is no Caption parameter for MessageDlg - if DlgType is mtCustom Application.Title is used as the caption of the message dialog Additionally the Parameters X and Y are described. These are not part of MessageDlg, but MessageDlgPos! The Parameter Bitmap is also described but nowhere to be found.

QC #:

Date Reported:

Area:

23083

1/4/2006

Documentation\Online Help

Description:

Steps:

[QC Short Description]
Delphi "Paths & Directories" help brings up C++ "Paths and Directories" help page

[QC Description]
Online help for Tools/Options/Environment Options/Delphi Options/Library - Win32 brings up the wrong page.
QC Entry 23083

1: From IDE "Tools" menu, select Options... 2: Under Environment Options, choose "Delphi Options". 3: "Library - Win32" shows a Paths and Directories dialog. 4: Select this page, and press "Help". 5:This page (only relevant for C++) is displayed. ms-help://borland.bds4/bds4ref/html/cpppathsanddirectories.htm

QC #:

Date Reported:

Area:

34675

10/1/2006

Documentation\Online Help

Description:

Steps:

[QC Short Description]
Description of PeekMessage function in Delphi Help and MSDN differ

[QC Description]
Compare description of hWnd parameter:

in Delphi Help
ms-help://borland.bds4/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/peekmessage.htm

<<skiped>>
If hWnd is NULL, PeekMessage retrieves messages for any window that belongs to the current thread.
<<skiped>>

in MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/peekmessage.asp

<<skiped>>
If hWnd is NULL, PeekMessage retrieves messages for any window that belongs to the current thread, and any messages on the current thread's message queue whose hwnd value is NULL (see the MSG structure). Therefore if hWnd is NULL, both window messages and thread messages are processed.
<<skiped>>

============
The important difference is MSDN says that "...and any messages on the current thread's message queue whose hwnd value is NULL. Therefore if hWnd is NULL, both window messages and thread messages are processed.",

but Delphi Help doesn't say this.




QC Entry 34675

n/a this is documentation problem

QC #:

Date Reported:

Area:

22118

1/8/2007

Documentation\Online Help

Description:

Steps:

[short description]
No information about Live Templates in the help file


// for more information about Live templates, do some google search.

http://blogs.teamb.com/deborahpate/articles/22331.aspx

QC #:

Date Reported:

Area:

52205

9/18/2007

Documentation\Online Help

Description:

Steps:

[QC Short Description]
Documentation missing

[QC Description]
Documentation for the Interbase Express and Interbase admin components is missing.

For example where is the description of the methods for TIBTransaction?
QC Entry 52205

Look in the help

QC #:

Date Reported:

Area:

39864

2/3/2007

Documentation\Online Help\Object Pascal

Description:

Steps:

[QC Short Description]
The topic "Conditional compilation (Delphi)" needs to be extended, and linked from various places

[QC Description]
Back in the D2-D7 era, there used to be a "See also" link in many topics.
Most of these have gone now, and they should be re-introduced.

One of them is a link to "Conditional compilation (Delphi)" (aka "conditional compilation, compiler directives, Delphi").

It should at least be linked from:
" IFDEF directive (Delphi)" (aka "$IFDEF, compiler directives, Delphi")
"IF directive (Delphi)" (aka "$IF, compiler directives, Delphi")

This saves a ton of NG questions about findout out the right compiler and class library versions.

In addition, this topic needs some information like below (it is the topmost question for 3rd party vendors how to cover multiple Delphi versions):

<<
Since Delphi 6, to find out which compiler and run-time library you are compiled with, the easiest and preferred way is to use $IF and CompilerVersion, RTLVersion and other constants.
An example:

{$IFDEF CONDITIONALEXPRESSIONS}
{$IF CompilerVersion >= 17.0}
{$DEFINE HAS_INLINE}
{$IFEND}
{$IF RTLVersion >= 14.0}
{$DEFINE HAS_ERROUTPUT}
{$IFEND}
{$ENDIF}
>>

In addition, these defines must end up in the index and point to "Conditional compilation (Delphi)" (aka "conditional compilation, compiler directives, Delphi").

CompilerVersion
RTLVersion
VER140
VERxxx
MSWINDOWS
WIN32
CLR
CLX
LINUX
CPU386
CONSOLE
CONDITIONALEXPRESSIONS

QC Entry 39864

QC #:

Date Reported:

Area:

31615

7/23/2006

Documentation\Online Help\Programmers guide

Description:

Steps:

[QC Short Description]
Compiler Directives Help typos

[QC Description]
The help for compiler directives has some typos and things that could be clarified. See Steps.
QC Entry 31615

Under "compiler directives" in the index is a line that says ", delphi". This probably doesn't belong there (seems to be part of the next entry "hinting directives"). The page ms-help://borland.bds4/bds4ref/html/DelphiCompDirectivesList.htm lists "$MEHTODINFO directive (Delphi)". I believe the "$" shouldn't be included (it isn't for the other directives). The page ms-help://borland.bds4/bds4ref/html/DelphiCompDirectivesList.htm doesn't list the $inline directive. Nor is the $inline directive listed in the index. The page ms-help://borland.bds4/bds4ref/html/compdirswarningmsg.htm says, "The $WARN directive lets control the display of groups of warning messages." The word "you" needs to be inserted after "lets". Is there some way to get directly to the page ms-help://borland.bds4/bds4ref/html/DelphiCompDirectivesList.htm from the index? On the page ms-help://borland.bds4/bds4ref/html/DelphiCompDirectivesList.htm under the heading "In This Section", there is a link "Compiler Directives". Clicking this goes to another page that is also titled "Compiler Directives" (like the first page). This one has only a single link: back to the first page.

QC #:

Date Reported:

Area:

52333

9/21/2007

Documentation\Online Help\VCL

Description:

Steps:

[QC Short Description]
Help of Length function is not found

[QC Description]
Length function in System namespace is not found.

BDS2006 is
ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_SystemLengthRoutine.htm
QC Entry 52333


This report is from newsgroup. borland.public.delphi.japanese

QC #:

Date Reported:

Area:

25788

3/6/2006

Documentation\Online Help\VCL

Description:

Steps:

[QC Short Description]
TForm member list is missing Caption

[QC Description]
The help for TForm does not list the Caption property.
The Caption property is not listed in either the Properties list,
or the All Members list

ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_FormsTFormClass.htm
QC Entry 25788

QC #:

Date Reported:

Area:

31393

7/18/2006

Documentation\Online Help\VCL

Description:

Steps:

[QC Short Description]
TPenStyle description is incomplete

[QC Description]
The description for TPenStyle in the Online Help
(ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_GraphicsTPenStyleType.htm)

is incomplete, it does not describe the meaning of psUserStyle and psAlternate.
QC Entry 31393

* open OLH * search for TPenStyle * look hard ;-)

QC #:

Date Reported:

Area:

51775

9/10/2007

Documentation\Online Help\VCL

Description:

Steps:

[QC Short Description]
TPadding documentation scarce

[QC Description]
The documentation for TPadding just says that it handles the padding of a control.

What does that mean? How does padding work? How is it different from TMargins?

Update 20080307 -

There was a comment asking that I add my suggested doc text changes to the main description, so here it is.

"Padding adds space along the edge the control. Child controls that are aligned to the parent, are positioned inside the control according to this spacing. It does not affect child controls which are not aligned to the parent control, nor does it affect the size of the ClientArea.

Padding is the opposite of Margins, in that where Margins affects the positioning of the control itself inside the parent control, Padding affects how all aligned child controls are positioned with respect to the parent control."
QC Entry 51775

QC #:

Date Reported:

Area:

35355

10/17/2006

Documentation\Online Help\VCL

Description:

Steps:

[QC Short Description]
TCustomIniFile.ReadSections documentation is incomplete

[QC Description]
TCustomIniFile has got two overloaded ReadSections methods:

procedure ReadSections(Strings: TStrings); abstract; overload; virtual;

and

procedure ReadSections(const Section: string; Strings: TStrings); overload; virtual;

The documentation in ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_IniFilesTCustomIniFileReadSectionsMethod.htm only documents the version that takes only a TStrings parameter. It lists both versions only describes one.

<sysop>
The same issue applies to VCL.NET and C++ Builder too:
ms-help://borland.bds4/bds4dnetapi_dnet/html/DelphiNET_BorlandVclIniFilesTCustomIniFileReadSectionsMethod.htm
ms-help://borland.bds4/bds4win32api_cpp/html/CPPWin32_IniFilesTCustomIniFileReadSectionsMethod.htm

Additionally, the documentation for TMemIniFile and TIniFile (VCL and VCL.NET) doesn't mention the second overloaded version:
ms-help://borland.bds4/bds4dnetapi_dnet/html/DelphiNET_BorlandVclIniFilesTMemIniFileReadSectionsMethod.htm
</sysop>
QC Entry 35355

lookup TCustomIniFile.ReadSections in the online help, search for a description of the second form.

QC #:

Date Reported:

Area:

24833

2/13/2006

Documentation\Online Help\Main help

Description:

Steps:

[QC Short Description]
TSearchRec record fields not documented properly.

[QC Description]
The help entry for TSearchRec ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_SysUtilsTSearchRecType.htm
does not show and explain the fields of the record, which makes the help entry pretty useless.

<sysop>This page suffers from very poor formatting. The fields Time,Size,Name, etc. are actually described - briefly - at the foot of the page, but they are not shown in the record description at the head of the page.
</sysop>
QC Entry 24833

look at the help for TSearchRec: <ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_SysUtilsTSearchRecType.htm> The types of the fields are not shown.

QC #:

Date Reported:

Area:

39854

2/2/2007

Documentation\IDE Help Contexts

Description:

Steps:

[QC Short Description]
Help topic missing for the following TDBGrid.Margins properties

[QC Description]
No help for "TPersistent.Bottom"
No help for "TPersistent.Right"
QC Entry 39854

5/3/07: The Help dialog displays when you press F1. However, the wrong topic gets displayed. When you press F1 on Bottom or Right, it properly displays a dialog listing various items with a Bottom property, including TMargins, which is what you want. When you press F1 on Left or Top, however, you get TControl.Left Property or TControl.Top Property, which is wrong--it doesn't give you a list of options.
--Gary Staas

1) Place a TDBGrid component on a form. 2) Place cursor on the property editor for "Bottom". 3) Press "F1" for help. Expected result - Help topic for TDBGrid.Bottom Observed result - No help for "TPersistent.Bottom" Repeat steps 2 and 3 for the remaining properties

QC #:

Date Reported:

Area:

49043

7/14/2007

Documentation\IDE Help Contexts

Description:

Steps:

[QC Short Description]
Install Shield mentioned instead of InstallAware

[QC Description]
The following help topic:

ms-help://borland.bds5/devcommon/deployov_xml.html

mentiones Install Shield to be present on the Install CDs instead of Install Aware. This is in the german translation.
QC Entry 49043

1. install the german help 2. open the URL above in the help

QC #:

Date Reported:

Area:

39347

1/25/2007

Documentation\Help Output

Description:

Steps:

[QC Short Description]
Missing topic: WordRec

[QC Description]
WordRec, defined in SysUtils, is missing from the help. Here is the content from the D5 help:

----

WordRec declares a utility record to store high and low order bytes of a variable.

Unit

Sysutils

type

WordRec = packed record
Lo, Hi: Byte;
end;

Description

The WordRec type declares a utility record that stores the high and low order bytes of the specified variable as type Byte. WordRec is used primarily for typecasting.
QC Entry 39347

QC #:

Date Reported:

Area:

39346

1/25/2007

Documentation\Help Output

Description:

Steps:

[QC Short Description]
Missing topic: LongRec

[QC Description]
Help topic for LongRec (defined in SysUtils). Here is the content from the D5 help:

-----

LongRec stores high- and low-order bytes of a specified variable as a Word.

Unit

Sysutils

type

LongRec = packed record
Lo, Hi: Word;
end;

Description

LongRec declares a utility record that stores the high- and low-order bytes of the specified variable as type Word.

LongRec is useful for typecasting four-byte datatypes (pointers, integers, and so on) to access their low and high words separately.
QC Entry 39346

QC #:

Date Reported:

Area:

39030

1/19/2007

Documentation\Help Output

Description:

Steps:

[QC Short Description]
Invalid Declaration for System.TDateTime

[QC Description]
The syntax declaration for System.TDateTime
(ms-help://borland.bds5/bds5win32api_win32/html/DelphiWin32_SystemTDateTimeType.htm) is invalid.

Help contains:

[Delphi] type TDateTime = TDateTime;

Source contains:

TDateTime = type Double;
QC Entry 39030

QC #:

Date Reported:

Area:

53093

10/6/2007

Documentation\Help Output

Description:

Steps:

[QC Short Description]
Wrong description in TActionLink.IsImageIndexLinked

[QC Description]
In the French help file, the short description of TActionLink.IsImageIndexLinked is wrong.
"Indique si les propri t s Hint de l'action et du client sont li es.
"
It talks about Hint but IsImageIndexLinked is the description for an ImageIndex

This wrong description is also in the methods section of TActionLink.
QC Entry 53093

Launch the help (F1) and type "IsImageIndexLinked" See the first description

QC #:

Date Reported:

Area:

43763

4/3/2007

Documentation\Help Output

Description:

Steps:

[QC Short Description]
No documentation on command line compiler

[QC Description]
I could not find any documentation on the dcc32.exe command line compiler or how it uses dcc32.cfg in the bin directory and in the project directory, and how it uses the <projectname>.cfg files.

Also, there is no documentation on what VERXXXX compiler define to use with Delphi 2007.
QC Entry 43763

QC #:

Date Reported:

Area:

41546

2/28/2007

Documentation\Help Output

Description:

Steps:

[QC Short Description]
Help topics Missing

[QC Description]
Dialogs.pas items missing form context help nor is in the index.

Dialogs.MessageDlg
Dialogs.MessageDlgPos
Dialogs.TMsgDlgButtons
Dialogs.MessageDlgPosHelp
Dialogs.TaskMessageDlg
Dialogs.TaskMessageDlgPos
Dialogs.TaskMessageDlgPosHelp
Dialogs.ShowMessage
Dialogs.ShowMessageFmt
Dialogs.ShowMessagePos
Dialogs.InputQuery
Dialogs.PromptForFileName
TMsgDlgType
TMsgDlgBtn
TMsgDlgButtons
QC Entry 41546

In an empty project added the items and selected and pressed F1 or searched the help file. Also opened Dialogs.PAS and selected each and F1'd.

QC #:

Date Reported:

Area:

54191

10/30/2007

IDE

Description:

Steps:

[QC Short Description]
Invalid IDE repaint on 64 bit Windows platforms

[QC Description]
Invalid IDE repaint on 64 bit Windows platforms

The IDE repaints itself totally incorrect when restoring after a minimize. This occurs on 64 bit versions of XP and Vista. The "Classic Undocked" seems unaffected but all other layouts show this bug.

This happens on all installations in our company, and all of them are 64 bit Vista Businesses running on AMD dual cores. The bug is also confirmed on a 64 bit XP.
QC Entry 54191

// Francois Piette
This looks similar as 249198 but I don't think it is. The issue is reproductible in all installation in the company (3 systems) which are all 64 bit XP and Vista with AMD dual-core processor. It looks much related to AMD and 64 bits than to Vista.

1) Open up Delphi 2007 and maximize it 2) Minimize Delphi 3) Click on the application on the taskbar to restore it 4) Voila, the IDE is messed up. Parts of the Welcome page usually appers in the middle of the code. Large areas of gray exist, that are not repainted at all. The upper left corner of the coding tab is missing the "Select/Close view" buttons.

QC #:

Date Reported:

Area:

49072

7/15/2007

IDE

Description:

Steps:

[QC Short Description]
About box: Wrong name for the JEDI Code Library in the Quality Insite(tm) product information in the german version

[QC Description]
In the german about box the name of the JEDI Code Library in the Quality Insite(tm) product information is wrong - it is "JEDI Component Library" instead of "JEDI Code Library". In the english version it is "JEDI Code Library".

I've attached an image of the german version and an image of the english version.
QC Entry 49072

- start the german Highlander version - open the About box (main menu path is "Hilfe"\ "Info ueber...") - select "CodeGear Quality Insite(tm)" in the product listbox - have a look at the credits in the listbox below expected: CodeGear Quality Insite(tm) automatisiertes Senden von Problemreports CodeGear Quality Insite(tm) enth lt Exception- und Stack-Verfolgungscode aus der JEDI Code Library (JCL). Unter http://www.delphi-jedi.org erhalten Sie weitere Informationen. actual (build 2763): CodeGear Quality Insite(tm) automatisiertes Senden von ProblemreportsCodeGear Quality Insite(tm) enth lt Exception- und Stack-Verfolgungscode aus der JEDI Component Library (JCL). Unter http://www.delphi-jedi.org erhalten Sie weitere Informationen. actual english version: CodeGear Quality Insite(tm) automated incident reporting CodeGear Quality Insite(tm) contains exception and stack tracing code from the JEDI Code Library (JCL). Visit http://www.delphi-jedi.org for more information.

QC #:

Date Reported:

Area:

239382

12/16/2005

IDE

Description:

Steps:

CodeGuard Configuration - Global options
Preferences tab

Truncation // Fixed
Repeated Error ( �J��Ԃ��G���[�̋L )
Read debug info ( �f�o�b�O���̓ǂ�) [fixed #10]

Missing accelerator key // Not Fixed
Limit number of error message (N)
�G���[���b�Z�[�W�����̍ő�l [not fixed #10]

Read debug info (D)
�f�o�b�O���̓ǂݍ���[fixed #10]

[update1 : 10.0.2166.28377.6 ]

Can not retest it since bts#239382 is not fixed on Japanese build [10.0.2266.37482.2].

[2006/5/19 by mmatsuchika]
Missing acceralator key is not fixed in 10.0.2288.42451.4 Update 2

1) File | Close All
2) Tool | CodeGurad Configuration
// Preferences tab

QC #:

Date Reported:

Area:

48061

6/25/2007

IDE

Description:

Steps:

[QC Short Description]
Control Enter to open file requires addition of ".pas"

[QC Description]
When using Control + Enter to open the file under the cursor, if Delphi can't find the file it pops up the File Open dialog.

In the file open dialog you need to manually add the ".pas" to the file name for it to open the file, otherwise you get an error "FileNameWithoutExt" File not found.

Also, because of this problem Delphi generally fails to find the filename under the cursor. Even if the file is in the project or is in the current folder, Delphi still brings up the file open dialog and you need to add ".pas" onto the file name.

I haven't worked out when Delphi does manage to find the file by itself but sometimes it does.
QC Entry 48061

1. Open a pas file which uses another pas file, e.g. "Used". 2. Put the cursor in the middle of the word "Used". 3. Hit Control+Enter 4. File open dialog comes up. Navigate to the folder containing "Used.pas" 5. Hit Open in the dialog 6. You get an error message 7. Add ".pas" in the filename edit box. 8. Hit Open in the dialog 9. It now opens the file.

QC #:

Date Reported:

Area:

47609

6/15/2007

IDE

Description:

Steps:

[QC Short Description]
If Welcome Page is closed, IDE crashes when creating/opening a second project

[QC Description]
This is a newly introduced bug in Delphi 2007 Update 1.
It does *not* exist in the original release of Delphi 2007, or in Delphi 2006.

If the Welcome page is closed* when the IDE is configured to use the classic undocked/non-embedded layout, the IDE will get stuck in an error message loop if you attempt to open or create more than one project in a single session.

This is 100% reproducible on a fresh install of Windows (2000 or Vista) with a fresh install of Delphi 2007 Update 1.

*or disabled entirely by hacking startpageide100.bpl out of the registry.

------------------

[20031735]{rtl100.bpl } Classes.TList.Get (Line 2992, "common\Classes.pas" + 2) + $A
[20031685]{rtl100.bpl } Classes.TList.Error (Line 2961, "common\Classes.pas" + 1) + $14
[20031735]{rtl100.bpl } Classes.TList.Get (Line 2992, "common\Classes.pas" + 2) + $A
[20031716]{rtl100.bpl } Classes.TList.First (Line 2986, "common\Classes.pas" + 0) + $2
[20A450E3]{coreide100.bpl} EditorForm.TEditWindow.WindowActivate (Line 2487, "EditorForm.pas" + 3) + $5
[20A44E72]{coreide100.bpl} EditorForm.TEditWindow.WMActivate (Line 2411, "EditorForm.pas" + 2) + $B
[2013B20B]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6
[20D69752]{designide100.bpl} DeskUtil.SetFocusHook (Line 435, "DeskUtil.pas" + 4) + $C
[2013F38A]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6
[20158AA3]{vcl100.bpl } Forms.TCustomForm.WndProc (Line 3512, "Forms.pas" + 136) + $5
[2013EAB4]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6
[20040DD4]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0
[21DEBD8A]{delphivclide100.bpl} VCLFormDesigner.THostFormWrapper.HideWindow (Line 1645, "VCLFormDesigner.pas" + 1) + $B
[21DE9C8D]{delphivclide100.bpl} VCLFormDesigner.TVCLRootDesigner.Hide (Line 564, "VCLFormDesigner.pas" + 1) + $8
[216EE03F]{delphicoreide100.bpl} DelphiModule.TPascalCodeMgrModHandler.HideForm (Line 960, "DelphiModule.pas" + 1) + $5
[20A05E7C]{coreide100.bpl} SourceModule.TCodeISourceModule.HideForm (Line 1383, "SourceModule.pas" + 3) + $5
[20A04997]{coreide100.bpl} SourceModule.TSourceModule.HideForm (Line 936, "SourceModule.pas" + 2) + $5
[20A6B8AE]{coreide100.bpl} DocModul.TDocModule.Hide (Line 1199, "DocModul.pas" + 0) + $2
[20A04C6F]{coreide100.bpl} SourceModule.TSourceModule.Hide (Line 977, "SourceModule.pas" + 1) + $2
[20A6B5AF]{coreide100.bpl} DocModul.TDocModule.Close (Line 1048, "DocModul.pas" + 10) + $4
[20A6D391]{coreide100.bpl} DocModul.TCodeIDocModule.Close (Line 1926, "DocModul.pas" + 0) + $5
[20A5EF81]{coreide100.bpl} EditorBuffer.TEditBuffer.Close (Line 1989, "EditorBuffer.pas" + 0) + $11
[20A63783]{coreide100.bpl} EditorBuffer.TEditView.Close (Line 4579, "EditorBuffer.pas" + 4) + $3
[20A44993]{coreide100.bpl} EditorForm.TEditWindow.FormDestroy (Line 2304, "EditorForm.pas" + 51) + $4
[20157769]{vcl100.bpl } Forms.TCustomForm.DoDestroy (Line 2959, "Forms.pas" + 3) + $C
[20157597]{vcl100.bpl } Forms.TCustomForm.BeforeDestruction (Line 2919, "Forms.pas" + 7) + $D
[20006BE5]{rtl100.bpl } System.@BeforeDestruction (Line 9548, "sys\system.pas" + 7) + $0
[20D6C606]{designide100.bpl} DeskForm.TDesktopForm.Destroy (Line 817, "DeskForm.pas" + 0) + $2
[2000679C]{rtl100.bpl } System.TObject.Free (Line 8832, "sys\system.pas" + 1) + $4
[2015CA48]{vcl100.bpl } Forms.TCustomForm.CMRelease (Line 5546, "Forms.pas" + 0) + $0
[2013B20B]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6
[20D69752]{designide100.bpl} DeskUtil.SetFocusHook (Line 435, "DeskUtil.pas" + 4) + $C
[2013EBAA]{vcl100.bpl } Controls.GetControlAtPos (Line 7095, "Controls.pas" + 4) + $73
[2013F38A]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6
[20031FC4]{rtl100.bpl } Classes.TThreadList.UnlockList (Line 3359, "common\Classes.pas" + 0) + $4
[200EBA24]{vcl100.bpl } Graphics.FreeMemoryContexts (Line 5031, "Graphics.pas" + 12) + $5
[20158AA3]{vcl100.bpl } Forms.TCustomForm.WndProc (Line 3512, "Forms.pas" + 136) + $5
[2013EAB4]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6
[20040DD4]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0
[201611EC]{vcl100.bpl } Forms.TApplication.ProcessMessage (Line 8102, "Forms.pas" + 23) + $1
[20161226]{vcl100.bpl } Forms.TApplication.HandleMessage (Line 8121, "Forms.pas" + 1) + $4
[20161537]{vcl100.bpl } Forms.TApplication.Run (Line 8219, "Forms.pas" + 20) + $3
[0042298E]{bds.exe } bds.bds (Line 196, "" + 7) + $7
QC Entry 47609

1. Select the "Classic Undocked" desktop layout. 2. Uncheck the "Embedded designer" option (under Tools | Options | Environment Options \ VCL Designer). 3. Close and restart the IDE so the changes take effect. 4. Close the "bds:/default.htm" window (the Welcome page). 5. Click File | New | VCL Forms Application - Delphi for Win32. 6. Click File | New | VCL Forms Application - Delphi for Win32 again. Error: "List index out of bounds (0)" (See Description for the backtrace.) Clicking OK doesn't help; the message just returns. Note: This isn't limited to creating new projects. The same error occurs if you substitute steps 7 and 8 with File | Open Project.

QC #:

Date Reported:

Area:

34289

9/21/2006

IDE

Description:

Steps:

[QC Short Description]
Component icons poorly rendered on form in IDE

[QC Description]
Several VCL non-visual component icons are poorly rendered (pixelated, blurry) when the component is added to a form in the IDE, because the bpl doesn't contain component icons for all 3 different sizes (24, 16 and 32 pixels)

The icons look sharp in the component pallette (they're a smaller size) but the "ugly" icons can be seen in the Component > Install Packages > Components dialog.

This does not impact how the component runs but the poor rendering of the icon in the IDE does make it harder to recognize the icon and know what the component is.

The following component packages display this problem (not an exhaustive list, and not all icons in the package are bad):
- DataSnap connection
- dbExpress
- Interbase Express
- MyBase DataAccess
- SOAP

These same icons look fine in Delphi 7. I jumped from D7 to BDS 2006 so I can't say if this occurred in D8 or BDS 2005.
QC Entry 34289

1. Create a new Win32 project. 2. Add a form to the project. 3. Add a TDataSetProvider component to the form. 4. Add a TDataSource component to the form. The DataSetProvider icon will look ugly compared to the TDataSource icon and compared to its icon in the component pallette. See attached screenshot showing component icons from the dbExpress page in D7 and BDS2006.

QC #:

Date Reported:

Area:

54081

10/29/2007

IDE

Description:

Steps:

[QC Short Description]
IDE crashes hangs (pherhaps Endless loop)

[QC Description]
The IDE hangs if one implements code like this and tries to
save (or compile) the project and accidently having
a property multiple times defined (as it occures through
copy and paste -> then renaming)


This happends with Delphi 2006 and Delphi 2007
QC Entry 54081

Just a note, it does not hang with an Integer property but it does with an Event property.

// Francois Piette
Can reproduce with 2804 and 2854.9859.1

1. Create a new blank VCL project. 2. Change TForm1 to type TForm1 = class(TForm) private fTest : TNotifyEvent; public property OnTest : TNotifyEvent read fTest write fTest; property OnTest : TNotifyEvent read fTest write fTest; property OnTest : TNotifyEvent read fTest write fTest; property OnTest : TNotifyEvent read fTest write fTest; end; 3. Save the project. -> IDE hangs

QC #:

Date Reported:

Area:

41352

2/26/2007

IDE\Dialogs

Description:

Steps:

[QC Short Description]
Use Unit has status bar, not used

[QC Description]
The Use Unit dialog has a status bar that doesn't seem to serve any function, makes the UI
look very odd under Vista.


Sebastian Modersohn - 27/02/2007 03:43:58
-----------------------------------------
It's probably also supposed to show you the path of the selected unit like View Form and
View Unit do (it's the same form). See .ide.dialogs as well.
QC Entry 41352

Under Vista, non-Aero Steps: 1. Start Spacely 2603 2. Create new VCL Form Project 3. In Unit1 invoke Use Unit dialog 4. Look at status bar area Behavior: exp: A status bar with resize handle is visible, with no apparent use act: No status bar

QC #:

Date Reported:

Area:

23155

1/5/2006

IDE\Dialogs

Description:

Steps:

[QC Short Description]
Bad dialog caption

QC Entry 23155

This should really be listed under IDE\Dialogs\Configure Tools but there is no such area in QC. Steps: 1. Tools -> Configure Tools 2. Edit any existing entry 3. Click the Browse button to choose a program Note that the dialog has a caption of "Select Transfer Item" instead of something more logical like "Select Program"

QC #:

Date Reported:

Area:

48532

7/4/2007

IDE\Dialogs

Description:

Steps:

[QC Short Description]
German translation of the Options/Tool pallette section the "Designer Elemente immer anzeigen" Text is too long

[QC Description]
The german translation of the Options/Tools dialogue's pallette section the "Designer Elemente immer anzeigen" Text is to long.
QC Entry 48532

QC #:

Date Reported:

Area:

2578

10/3/2002

IDE\Dialogs

Description:

Steps:

[QC Short Description]
Verbose and Exportable Compile Report in IDE

[QC Description]

The "Compiler Progress" dialogue should (optionally) be more detailed and also allow to export the compile statistics to text file or clipboard.

For example, I'd like the build report to (optionally) provide a full list of all source modules that were compiled, all switches that were used (and where; globally/locally), all conditional symbols, characteristics of the built executables/dlls/packages [size, timestamp, file version], all compiler hints/warnings, etc.

I'd want this list to be visible as an extension to the "Compile" dialogue when it is finished, and with a single keystroke copy its data (Ctrl+C) to the clipboard or save it (Ctrl+S) to a text file.
QC Entry 2578

UPDATE from QA:
Go to Tools | Options | Environment Options | Verbosity
Currently it's set to Normal but set to Detailed should give you what you want.
Details will be output to the output tab (not the build tab)

QC #:

Date Reported:

Area:

42245

3/9/2007

IDE\Dialogs\Project Options

Description:

Steps:

[QC Short Description]
Build Events Memos are Too Small

[QC Description]
The Project, Options, Build Events Pre/Post command memos do not fill the available space and make this options page requite more scrolling than necessary.
QC Entry 42245

File, New VCL Forms Application for Win32
Look at the Project, Options, Build Events settings, note the empty space

{ See resolution comment - MD }

QC #:

Date Reported:

Area:

46714

5/28/2007

IDE\Dialogs\Project Options

Description:

Steps:

[QC Short Description]
Compile options lost/not saved when build configuration is changed.

[QC Description]
When you change the build configuration, some of the options are not saved and revert to default values.

In particular Linker Options/Image Base, Min Stack Size, Max Stack size And also Unit aliases on the Directories/Conditionals page.

These options should either be saved in the build configuration, or should not change/be reset when the build configuration is changed.
QC Entry 46714

Similar steps for unit aliases:

1. Open project options.
2. Delete Unit aliases
3. Press okay to save.
4. Ctrl-F11 to reopen project options.
5. Change build configuration from current (release) to debug
6. Notice that the unit aliases is now reset to the default
WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
7. Change build configuration back to prior entry - e.g release.

Exp: Unit aliases remains empty - as set.
Act: Unit aliases changes to the default for a new project

***FIXED in December update:***
1. Open the project in D2007.
2. Open the project options - goto the linker page.
3. Change Image base to $48000000
4. Press okay to save.
5. Ctrl-F11 to reopen project options.
5. Change build configuration to debug
7. Notice the image base is now reset to the default $00400000
8. Change build configuration back to prior entry - e.g release.

Exp: Image base remains as $4800000 as originally set
Act: Image base changed to $0040000 - (defaiult/new project value)
******

QC #:

Date Reported:

Area:

42975

3/21/2007

IDE\Dialogs\Project Options

Description:

Steps:

[QC Short Description]
Improve Delphi Win32 Project Options UI (allow dialog to resize or other UI changes)

[QC Description]
I've listed all of the options areas of the Delphi Project dialog that I consider more difficult to use because the UI seems cramped inside the existing smallish dialog. I believe an alternate UI for those areas of the settings, or allowing this dialog to resize would make this dialog more usable.

The first 3(*) items in the list would give a significant benefit if they rezsized or had an alternate UI, because I believe developers use them more frequently.

Project Options (Delphi Win32)
---------------------------------------------------
Significant Benefit (central portion could resize, less scrolling, etc.):
- Directories/Conditionals (all paths/combos)*
- Packages (package list)*
- Compiler Messages (message list)*
- Version Info (version info grid)
- Debugger (paths)
- Symbol Tables (module list)
- Environment Block (environment lists)
- Build Events (script memos)
- Forms (available forms)

Minor Benefit:
- Application (title, help file path)

Little/No Benefit:
- Compiler (build config name only)
- Linker (exe description + build config name only)

I'm happy to accept a better/alternate UI instead of resizing, if CodeGear can come up with one that performs the same function in less space, but resizing is the bet option I've imagined so far. QC 42245 is related, but specific to the build events.
QC Entry 42975

Start Delphi 2007 File, New Delphi Win32 Project Project Options Click around in the options tree and notice some ot the options screens seem cramped in the existing small dialog (see the list in the Description for details) I've attached screenshots of how this dialog looks once it is made resizable, and I think the results are nicer

QC #:

Date Reported:

Area:

40648

3/3/2007

IDE\Dialogs\Environment Options

Description:

Steps:

List Index out of bounds -1 received after you have deleted a path off and then click onto the white space left at the bottom of the dialog.

QC Entry 40648

+ Click Tools | Options | Library - Win32
+ Click the ... of either the Library or Browsing Path
+ Scroll to the bottom and delete an item off the list
+ Click in the white space below that was left over when the delete occurred.
//exp: no problems
//act:
---------------------------
Error
---------------------------
List index out of bounds (-1)
---------------------------
OK Details <<
---------------------------
[20B17ED4]{coreide100.bpl} OrderedListEditDialog.DirListDialog (Line 106, "OrderedListEditDialog.pas" + 41) + $15
[200FCDB5]{vcl100.bpl } StdCtrls.TListBoxStrings.Get (Line 4096, "StdCtrls.pas" + 6) + $19
[20B17ED4]{coreide100.bpl} OrderedListEditDialog.DirListDialog (Line 106, "OrderedListEditDialog.pas" + 41) + $15
[2013FAF4]{vcl100.bpl } Controls.TControl.Click (Line 5229, "Controls.pas" + 9) + $8
[200FE421]{vcl100.bpl } StdCtrls.TCustomListBox.CNCommand (Line 4808, "StdCtrls.pas" + 5) + $6
[2013F5EF]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6
[201435CD]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7249, "Controls.pas" + 105) + $6
[200FE343]{vcl100.bpl } StdCtrls.TCustomListBox.WndProc (Line 4775, "StdCtrls.pas" + 43) + $6
[2013F27C]{vcl100.bpl } Controls.TControl.Perform (Line 5021, "Controls.pas" + 5) + $C
[2014371B]{vcl100.bpl } Controls.DoControlMsg (Line 7298, "Controls.pas" + 6) + $11
[2014412B]{vcl100.bpl } Controls.TWinControl.WMCommand (Line 7561, "Controls.pas" + 1) + $5
[2015B364]{vcl100.bpl } Forms.TCustomForm.WMCommand (Line 4863, "Forms.pas" + 3) + $4
[2013F5EF]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6
[201436C7]{vcl100.bpl } Controls.TWinControl.DefaultHandler (Line 7279, "Controls.pas" + 23) + $17
[2013F5EF]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6
[201435CD]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7249, "Controls.pas" + 105) + $6
[20D894FE]{designide100.bpl} DeskUtil.SetFocusHook (Line 435, "DeskUtil.pas" + 4) + $C
[20

QC #:

Date Reported:

Area:

41040

2/21/2007

IDE\Dialogs\Editor Options

Description:

Steps:

[QC Short Description]
Unselection of enhancement modules in Key Mappings not saved

[QC Description]
If I remove the check from "Buffer List" and restart Delphi the check will have returned when going back to this dialog. The same problem exists in BDE 2006, btw.
QC Entry 41040

1. Open Tools | Options 2. Select Editor Options | Key Mappings 3. Select IDE Classic as mapping module and de-select Buffer list from Enhancement modules 4. Close Delphi 5. Start Delphi 6. Open Tools | Options 7. Select Editor Options | Key Mappings 8. See that Buffer List is now selected again

QC #:

Date Reported:

Area:

40311

2/12/2007

IDE\Dialogs\Editor Options

Description:

Steps:

[QC Short Description]
Color options dialog defaults to HTML

[QC Description]
When opening the BDS Color Options dialog, there are 4 tabs: html, c#, c++, delphi.

However, BDS always opens with the leftmost tab open = html.
Since I'm busy testing Delphi color settings, I'm forced to reselect the Delphi tab every time I open the dialog to continue configuring the colors.

I suggest BDS remembers which tab was last open.
QC Entry 40311

==Updated==
1. Tools->Options->Editor Options->Colors
2. Click on the Delphi tab.
3. Close the options dialog.
4. Reopen the options dialog. See that the HTML tab is selected instead of the last used Delphi tab.
==Original==
1. Open BDS Color options dialog.
2. Click on the Delphi tab.
3. Close the opetions dialog.
4. Reopen the options dialog. See that the Htlm tab is selected instead of the last used Delphi tab.

QC #:

Date Reported:

Area:

55149

11/22/2007

IDE\Project Management

Description:

Steps:

[QC Short Description]
Using MSBuild to compile a .groupprj will compile first project only

[QC Description]
Using MSBuild to compile a project group will compile only the first project in the project group.

The only way to have other projects compiled is to set an explicit depencendy to the first project in the group.

This hinder me to use CCNet to automate build unless I manually configure it to compile each project (four services, two excutables, thirty-three DLLs, one resource only DLL, and four test applications).
QC Entry 55149

1) Create a project group containing some projects 2) Open RADStudio command prompt 3) Type MSBuild <group project name> Expected: the whole project group is compiled Actual: only the first project in the group is compiled.

QC #:

Date Reported:

Area:

20044

10/12/2005

IDE\Project Management

Description:

Steps:

[QC Short Description]
Easy option to disable together

[QC Description]
It would be really nice if you could go into the options and click on the together tab and just disable all that is together, there seems to be a few places you say "no" and it still does it..such as default vs project and project group.

"disable sublevels" seems to do the trick, but this is omitted from the documentation.. and applies only to the node you're in.
QC Entry 20044

Update from QA:
SOLUTION:
============
+ Tools | options | Together | Default | General
+ Automatically Enable Together support for new projects: set to False.

Alternative:
+ Right click on project name in project manager,
+ Select Together
+ Uncheck Togerther support
+ Click OK
NOTE: The model file isn't removed. It should be on unchecking this. This should be fixed. RAID 257673

QC #:

Date Reported:

Area:

40128

2/8/2007

IDE\Project Management\Project Manager

Description:

Steps:

[QC Short Description]
Project group does not handle inclusion of read-only files

QC Entry 40128

[also related: FR for marking RO -> RW: 245956]

Create new project group Add bunch of read-only .dpk packages Save project group //exp: A neatly saved project group //act: BDS refuses to continue before it can successfully write to the read-only .dpk files

QC #:

Date Reported:

Area:

33732

9/9/2006

IDE\Project Management\Project Manager

Description:

Steps:

[QC Short Description]
Ability to set options for multiple projects

[QC Description]
I would like to be able to select multiple projects in the project manager and change options for all selected at once. For example, adding a directory in the search path, or selecting compiler options. Much like we can select multiple components on a form and use the object inspector to change properties and events to all selected components at once.

The multiselect could also be applyed to the right-click popup menu for example to remove all selected projects from the project group.
QC Entry 33732

{ Named Option Sets solves this problem - MD }

QC #:

Date Reported:

Area:

51825

9/11/2007

IDE\Project Management\Project Manager

Description:

Steps:

[QC Short Description]
Catastrophic failure: the IDE fails when working with huge project group

[QC Description]
I have a project group containing all my third party components, it has 225 packages, run time and design time, ordered in a very precise way so that building all will not fail because of dependancies.

After I open this group in the lastest IDE build (however it never worked in the past for me) and *try* to Build all, the IDE fails, compiling first project in the group, with [DCC Error] Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))

After this failure the IDE is unstable and you can not close the group and open a single project or application, it will always give back the same failure.

Here's the complet output text:

Build started 9/11/2007 09:33:08.
__________________________________________________
Project "P:\LIBS\SOURCES\ZLIB123\ZLIB_D11.dproj" (Build target(s)):
Target CoreCompile:
c:\codegear\bds\5.0\bin\dcc32.exe -B -IR:\LIBS\11;c:\codegear\bds\5.0\lib;P:\LIBS\VCL11;P:\LIBS\RESOURCES -LER:\LIBS\RTL -LNR:\LIBS\11 -N0R:\LIBS\11 -NHR:\LIBS\11 -NOR:\LIBS\11 -OR:\LIBS\11;c:\codegear\bds\5.0\lib;P:\LIBS\VCL11;P:\LIBS\RESOURCES -RR:\LIBS\11;c:\codegear\bds\5.0\lib;P:\LIBS\VCL11;P:\LIBS\RESOURCES -UR:\LIBS\11;c:\codegear\bds\5.0\lib;P:\LIBS\VCL11;P:\LIBS\RESOURCES --no-config -$C- -$D- -$J+ -$L- -$V- -$Y- ZLIB_D11.dpk
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Borland.Delphi.Targets(113,3): error : Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
Done building target "CoreCompile" in project "ZLIB_D11.dproj" -- FAILED.
Done building project "ZLIB_D11.dproj" -- FAILED.
Build FAILED.
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Borland.Delphi.Targets(113,3): error : Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.57
QC Entry 51825

Unzip 101packages.zip, and open ProjectGroup2.groupproj.
Project | Build All.

>> Original Report
1. Create a really large project group. In my case, it fails when I have a group with probably more than 100-150 packages
2. Open the group in the IDE
3. Build All

Exp: the IDE builds all packages
Act: the IDE fails with error [DCC Error] Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))

My package group includes: 5 personal packages, a runtime dpk for ZLIB, a runtime with LanMan units, Virtualtrees, TeeChart, Decision Cube, DBISAM, ReportBuilder, Gnostice PDF, Indy, ExtraDEV, Abbrevia, Essence, Orpheus, ShellShock, SysTools, XMLPro, TNT, ODBCExpress, ProfGrid, FlashFiler, MSI, kbMem, MAX, TBX, TMS, Twain, LMD Tools, FastReprot, DevEx suite

All packages have custom settings for output paths (dcp, dcu, bpl); all are in "release" mode, i.e. no debugging.

Practically, I have an application that can generate .groupproj files for me, to build all from the IDE I would first generate a project group with half of the packages and another one with the other half.

I suppose this bug happens because of some limits in the IDE.
Please analyze the IDE code and publish these limits, if the problem can't be fixed, so at least people won't try this kind of stuff.

QC #:

Date Reported:

Area:

53236

10/9/2007

IDE\Project Management\Project Manager

Description:

Steps:

[QC Short Description]
"Save All" not enabled after changes made through the Build Configuration Manager

[QC Description]
the descritpion field says it all, anyway there are some steps
QC Entry 53236

1. Create a project group containing a bunch of projects (or open a project group if available) 2. In the Project Manager, right click on top node (that's the group node, not a project node) and select from the popupmenu Configuration Manger 3. Click Select All button 4. Change the configuration name from whatever it was to a different one. 5. Click Apply button 6. Click Close button exp: toolbar SaveAll button becomes enabled act: SaveAll not enabled Thus, if you click Close All now, you will not be asked to save anything and when you'll reopen this project group your selection made through the Configuration Manger is lost. BTW, now that I found this problem, it became very annoying, when I have work to do in a large project group :-)

QC #:

Date Reported:

Area:

20979

11/3/2005

IDE\Project Management\Project Manager

Description:

Steps:

[QC Short Description]
Project Readme option

[QC Description]
It would be *Perfect* if it were possible to attach a text/html file as a read me to a project, whether it's to remind of a todo list, client details, general help when making a project generally available etc.
QC Entry 20979

Have an additional project option that allows you to open a html/txt file when opening a project to display information important to remind you of details of maybe clients, build criteria, or just notes to hand to someone else once you've moved on.

UPDATE from QA:
Have a look at Project | Project Page Options. This allows you to create a file that will come up as a "Welcome Page" for that particular project. It supposed to be a .html but .txt should work.

QC #:

Date Reported:

Area:

46597

5/25/2007

IDE\Project Management\Project Manager

Description:

Steps:

[QC Short Description]
Expand/Colapse All in the project manager

[QC Description]
Adding Expand/Collapse all button in the project manager is a good idea.
QC Entry 46597

Add Expand/Colapse All in the project manager.

QC #:

Date Reported:

Area:

50605

9/30/2007

IDE\Project Management\Project Manager

Description:

Steps:

The IDE select the wrong project to open a unit included in several projects when a compilation error occurs.

This is specially annoying when you have a lot of projects with lots of units. For example, if the unit with syntax error is used in the first and last project, when you recompile the last project (having it active), you see the first project tree expanded and you don't see the last project tree because in is far away. This is very inefficent cecause usually you have to navigate into the active (and last here) project's files. This is a common situation (at least in the way I work with Delphi) and is really a nuisance.

When an error occur, the IDE should only search for units in the current project and open it from that context.

Currently the IDE open the unit in the context of the first project where the unit is found.

If the offending unit is not part of any of the projects, the IDE currently open it without touching the project manager tree which is fine.

1. Run RAD Studio
2. Close all
3. Create Win32.VCL forms project, save as Projet1 / Unit1
4. Save project group as ProjectGroup1
5. Add a new Win32.VCL forms project in the project group, save as Projet2 / Unit2
6. File / New / Unit into project2. Save it as Unit3
7. Add unit3 to Project1
8. Add Unit3 in the uses clause of unit1
9. Add Unit3 in the uses clause of unit2
10. Save all
11. Build all project. Shouldn't have any error :-)
13. Make Project2 the active project
12. Open unit3 in the code editor
13. Write any syntax error
14. Save All
15. Close All
16. In project manager, collapse project1 and project 2 tree.
17. In project manager, Project2 is still the current project (because of step 12). Right click and build project.
=> The compiler hit the syntax error introduced in step 13 and open Unit3 and show unit3 as part of project1 whose tree is expanded.
Expected: Open unit3 as part of project 2.
See screen dump.

QC #:

Date Reported:

Area:

22034

12/7/2005

IDE\Project Management\Project Manager

Description:

Steps:

[QC Short Description]
Can't drag and drop files from Winzip onto editor

[QC Description]
This has stopped working in recent builds - it used to work!
QC Entry 22034

[borland.private.fieldtest.dexter.ide]
[QC22034 - can't drop files from winzip to editor]

Open a zip file that contains pascal or C++ source files. Try to drag them from winzip into Dexter IDE. The IDE won't allow them to be dropped. Used to work in all IDEs prior to BDS 2006

QC #:

Date Reported:

Area:

51288

8/29/2007

IDE\Project Management\Project Source

Description:

Steps:

[QC Short Description]
Build configuration incompatible with packages

[QC Description]
When you create a package, compiler switches, conditional defines and more are coded into the .dpk file.
These switches are replaced if you switch Build Configuration from the Project | Options dialog, but not if you swicth Build Configuration from the Build Configuration manager.

These switches does not belong in the .dpk file at all. Because if you select the Debug Build configuration from within the IDE and build the Release Build configuration from the command line using msbuild, the .dpk file still contains the switches from the Debug Build configuration.
It seems the settings from the .dpk file superseeds the command-line switches.
QC Entry 51288

Create a Package, view the source. Go to Project | Options | Compiler and select Release Build Configuration. Press OK and watch package source. The line {$DEFINE RELEASE} is added. If you switch back to Debug, the $DEFINE is deleted. If you switch Build configuration through Project | Configuration Manager the package source is not modified. The co

QC #:

Date Reported:

Area:

29097

5/15/2006

IDE\Code Editor

Description:

Steps:

[STRING CORRUPTION]

[DATA LOSS!]

[QC Short Description]
German "Umlaute" get crunched

[QC Description]
When I type in German Umlaute (������) in a pascal unit, switch back and forth to the text view of the corresponding dfm file, all the Umlaute get crunched.

// report edited by Holger Flick 07-04-21

QC Entry 29097

WORKAROUND: enter the umlauted string into the Caption property in the OBject Inspector. it works fine.

- Start Delphi - Create a new project [ using File / New / VCL App ] - Add a unit, which implies a dfm file - Switch to the text view of the dfm file - Type in the German Umlaute " " for the caption of the form - Switch to the original view of the dfm file - Look at your Umlaute exp: caption shows umlaute act: caption shows corrupted text

QC #:

Date Reported:

Area:

51977

9/13/2007

IDE\Code Editor

Description:

Steps:

[QC Short Description]
Open File at Cursor not working after openning project

[QC Description]
After openning a Project, the first time you use Ctrl+Enter to open file at cursor, it doesn t open the file, but shows the File Open Dialog.

After selecting the file, the IDE opens it, and Ctrl+Enter works well the next time it s used
QC Entry 51977

// New steps
1. Unzip attached project into a new folder such as "c:\test" (Any new folder will do actually)
You get a win32.VCL.Forms project in c:\test\main which uses two units stored in "c:\test\units".
2. Run RAD Studio 2007 (If it matters, I'm using undocked layout with not-embedded VCL form designer)
3. File / Open project / Browse to c:\Test\Main\Project1.dproj
4. Compile and run the project. It should work as is.
5. Select welcome page, right click to close all other pages
6. File / Close all
7. File / Open project / Browse to c:\Test\Main\Project1.dproj (Do /not/ open project from recent files !)
8. In project manager, double click on UnitMain to see in in code editor
9. In the uses clause, put cursor on "UnitUtils" and type ctrl+enter
=> You have a file open dialog box to search for UnitUtils
Expected: The IDE should find the unit since it is locatable from the project search path (remeber step 4 where it perfectly compile)
=> The file type in the dialog box is "*.grouproj"
Expected: The file type should be "*.pas"
10. In the open file dialog box, go to parent folder, then down to "Units" folder and double click on "UnitUtils.pas"
The unit is correctly shown
11. Select "UnitMain" tab in the code editor
12. In the uses clause, put cursor on "UnitFct" and type ctrl+enter
=> This time the IDE find the unit correctly

Where are the bugs ? (Yes, there are TWO bugs)
1) The first bug is that the IDE doesn't search the search path in the project options and can't find the units the compiler easily find
2) The second bug is that the selected file type in the open file dialog box is "*.groupproj" instead of "*.pas"


// Original steps from QC
Select File - Open Project
Select a project to open
Place cursor above a Unit name (in the Uses clause) in an open Source File
Press Ctrl+Enter or Right click - Open File at cursor
The Open File Dialog appears instead of oppening the file

(After selecting a file and repeating the steps, it works well)

QC #:

Date Reported:

Area:

24528

2/5/2006

IDE\Code Editor

Description:

Steps:

[QC Short Description]
Binary DFM opened in text mode cause IDE to ask for reloading file

[QC Description]
If you drag&drop a binary .dfm file to the Code Editor and then switch to another program and back to BDS, the IDE asks for reloading the dfm. This can be repeated as long as the file was not switched to design mode (Alt+F12). After being in design mode you can switch back to text mode and this bug doesn't appear anymore for this file.

This does not happen with text dfm files.
QC Entry 24528

1. Create a new VCL project 2. Right click on the form and uncheck the "Text-DFM" menu item. 3. Save the project and close the form. 4. Start the Window Explorer and drag&drop the .dfm file to the BDS Welcome Page. 5. Switch back to the Windows Explorer 6. Switch to BDS. Expected: Nothing happens (except that BDS is in foreground) Actually: The IDE asks for reloading the dfm.

QC #:

Date Reported:

Area:

10711

1/31/2005

IDE\Code Editor

Description:

Steps:

[QC Short Description]
Editor's bug

[QC Description]
I am using the Japanese version.
If Japanese is used on an editor, the position of a tab may shift.

Expected display state
> ' '> > ;
> '?'> > ;

Actual display state
> ' '> > ;
> '?'> > ;

* '>' is a tab character.
* Tab size is 4.

The display of the 2nd line shifts. Immediate correction is desired.
QC Entry 10711

[Web Update Candidate]

Dup.
171154
179467
211788
219402
224514
227994
229042
232136
226994
230319
240352

QC #:

Date Reported:

Area:

35440

10/18/2006

IDE\Code Editor

Description:

Steps:


[QC Short Description]
Selection behaviour inconsistent with Optimal Fill and Use Tab Character

[QC Description]
When the editor options "Optimal fill" and "Use tab character" are both enabled, the line selection behaviour becomes inconsistent.

This causes me a great deal of grief since it is inconsistent with the standard behaviour and there is no "work-around" other than repositioning the cursor every time.

I think the "Use tab..." and "Optimal fill" options are important for well-formatted code.

I know that the tabs weren't handled well in the past but surely this was not intended?
QC Entry 35440

1. Enable both "Use tab character" and "Optimal fill" 2. Add some code, indented 3. Press the Home key. 4. Hold Shift key and press Down Arrow key to select line. 5. Notice that the selection start point is the first not whitespace character, not the start of the line. 6. Disable one or both of "User tab character" and "Optimal fill" 7. Repeat steps 2 through 4. 8. Notice the selection start point is the beginning of the line.

QC #:

Date Reported:

Area:

26111

3/15/2006

IDE\Code Editor

Description:

Steps:

[QC Short Description]
Preserve line ends does not work as expected

[QC Description]
When I turn off the option "Preserve line ends" in the editor options, I would expect Delphi to remove any trailing spaces the next time I save the file, but this does not happen.
QC Entry 26111

1. Create a file with several lines of text with trailing spaces (e.g. using notepad). 2. Load it into Delphi 3. Make sure the Editor option "preserver line ends" is turned off 4. Save the file 5. Open the file in notepad and check, whether the trailing spaces are gone (they are not)

QC #:

Date Reported:

Area:

51062

8/25/2007

IDE\Code Editor

Description:

Steps:

[QC Short Description]
Trailing spaces aren't removed when saving

[QC Description]
When saving a file, the trailing spaces of the current selected line aren't removed (TrimRight) even if the editor option "Keep trailing spaces" is disabled.

This trailing spaces have an impact on version control systems like SubVersion. It causes files to be commited even if there were no actual changes.
QC Entry 51062

1. Create a new VCL Application 2. Confirm that the editor option "Keep trailing spaces" is disabled 3. Append some spaces to the "unit Unit1;" (without pressing ENTER) 4. Save the file. 5. Start notepad.exe and open the file 6. Press the [END]-key Expected: The caret is behind the ';' char Actual: The caret is behind the last space that was added.

QC #:

Date Reported:

Area:

54027

10/26/2007

IDE\Code Editor

Description:

Steps:

[QC Short Description]
Code insight doesn't show protected methods in class declaration

[QC Description]
If the caret is in the class declaration and you press Ctrl+Space, the code insight list will not show any inherited method that is protected and almost all public methods aren't shown either.
QC Entry 54027


// Francois Piette
I see it in 2854.9859.1.
I don't understand what include the list shown in the popup !

// Francois Piette
Still see it in 11.0.2902.10471.33 (feb upd) see attached screen dump.

1. Create a new VCL Application 2. Move the caret into the "public" section of the form class 3. Press Ctrl+Space 4. Try to select the "Notification" method. Expected: The Notification method is in the list and pressing ENTER will add the override to the class declaration Actual: The Notification method isn't in the list.

QC #:

Date Reported:

Area:

47905

6/21/2007

IDE\Code Editor

Description:

Steps:

[QC Short Description]
Space button does clear selected text conistently

[QC Description]
When you have text selected and you click the space bar it should remove the text and replace it with a space (as is standard elsewhere in Windows).

About 70% of the time I have a selection and click the space in Delphi nothing happens (the text remains and the space click ignored).

Is this supposed to be a feature???
QC Entry 47905

As you are typing use the cursors to select a few lines of text then click the Space button.

Expected result: The selected text is cleared and replaced by a space

Actual result: Nothing happens

- New unit, replace the code with the following:

unit Unit3;

interface

uses
Classes;

type
TFoo = class
FWindowHandle: HWND;
procedure Start;
end;

implementation

{ TFoo }

procedure TFoo.Start;
begin
FWindowHandle := AllocateHWnd(WndProc);
end;

end.

- Place cursor at beginning of line 11
- Shift-Down twice to select lines 11 and 12.
- Press Space.

It seems to be significant to use the keyboard to select the code, not the mouse.

QC #:

Date Reported:

Area:

53440

10/14/2007

IDE\Code Editor

Description:

Steps:

[QC Short Description]
Code editor has missing translation for 'declarations'

[QC Description]
Code editor has missing translation.
'declarations' were shown in Japanese in Delphi6.
Please see attached screenshot.
QC Entry 53440

1. Preparation of form 2. See code editor 'type'

QC #:

Date Reported:

Area:

54847

11/14/2007

IDE\Code Editor\Sync Edit

Description:

Steps:

[QC Short Description]
Overwrite/overtype mode overwrites only one letter

[QC Description]
When using syncedit and writing in overwrite mode (oposite of insert mode) it is not possible to overwrite selected text.
QC Entry 54847

a) 1. press insert (to turn on the overwrite mode) 2. type if 3. press spacebar to invoke template 4. note that 'True' is selected 4. type 'test' 5. 'True' is deleted and only 't' is typed and it is not possible to type further. b) 1. type text: Procedure TObject.MyFunctionA(AParam: integer) Procedure TObject.MyFunctionB(AParam: integer) 2. turn on the overwrite mode (by pressing ins) 3. select both lines 4. invoke sync-edit ctrl+shit+j or click icon 5. first 'TObject' is selected 6. type anything - 'TObject' is deleted and only first letter is typed 7. press backspace 8. now backspace and typing does nothing

QC #:

Date Reported:

Area:

27033

4/5/2006

IDE\Code Editor\Error Insight

Description:

Steps:

[QC Short Description]
Error Insight wrongly flags "=" after "in" operation as error

[QC Description]
See Steps.
QC Entry 27033

Paste this code: procedure TForm1.FormCreate(Sender: TObject); begin if biSystemMenu in BorderIcons = False then Beep; end; The code compiles OK, but the "=" operator gets underlined in red. If parentheses are added around the "in" operation: if (biSystemMenu in BorderIcons) = False then then the underline goes away. But they shouldn't be needed.

QC #:

Date Reported:

Area:

26959

4/4/2006

IDE\Code Editor\Error Insight

Description:

Steps:

[QC Short Description]
ErrorInsight doesn't recognize enumeration members declared in a class

[QC Description]
From time to time I see red underlined strings in my code.
In Structure view I see description of the error.

BUT code can be compiled without any compile errors.

QC Entry 26959

See this code program Project1; {$APPTYPE CONSOLE} uses SysUtils, Dialogs; type TOuterClass = class private type TInnerClass = class private type TEnum = (eOne, eTwo); private fEnum: TEnum; public property Enum: TEnum read fEnum; end; public constructor Create(); end; constructor TOuterClass.Create(); var IC: TInnerClass; begin IC := TInnerClass.Create(); if IC.Enum = eOne (*THERE IS RED UNDERLINE*) then begin ShowMessage('1'); end; end; begin end. You can compile it without any errors. But "eOne" is red underlined. This is caused by the fact the TEnum is declared privately in the class. If you move it out of the class to a global type, ErrorInsight stops complaining. ErrorInsight doesn't recognize enumeration members declared in a class

QC #:

Date Reported:

Area:

46713

5/28/2007

IDE\Code Editor\Error Insight

Description:

Steps:

[QC Short Description]
Error insight gives incorrect error on correct code.

[QC Description]
Does not appear to like namespace/unit prefixes on identifiers.

In a real unit - it does not recover 100% from this error and then reports several other errors incorrectly in my case reports about 10 other errors. If i remove the "Windows" namespace prefix, then no errors are reported by error insight.
QC Entry 46713

1. Create a new console application. 2. Replace with the code given below. 3. Look at the errors reported by error insight - it complains about "Windows.user32" - and underlines ".user32" in red - which is incorrect. This code is fine and compiles/runs. program Project1; {$APPTYPE CONSOLE} uses SysUtils, Windows; function MsgWaitForMultipleObjectsEx(nCount: DWORD; pHandles: Pointer; dwMilliseconds, dwWakeMask, dwFlags: DWORD): DWORD; stdcall; external Windows.user32 name 'MsgWaitForMultipleObjectsEx'; begin try { TODO -oUser -cConsole Main : Insert code here } except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end.

QC #:

Date Reported:

Area:

51446

9/2/2007

IDE\Code Editor\Help Insight

Description:

Steps:

[QC Short Description]
Generics - Code insight window flashes repeatedly

[QC Description]
Code insight window flashes repeatedly and CPU usage goes to 100% if the mouse hovers above one of the concrete class declaration type parameters, that relates to a Generic class declaration.

QC Entry 51446

//see also 253573

Open a new VCL for .NET project, and paste the following under the "type" clause in the main form .pas file. //---------------------------------------------------- TPair<TKey,TValue> = class // declares TPair type with two type parameters private FKey: TKey; FValue: TValue; public function GetKey: TKey; procedure SetKey(Key: TKey); function GetValue: TValue; procedure SetValue(Value: TValue); property Key: TKey read GetKey write SetKey; property Value: TValue read GetValue write SetValue; end; TSIPair = TPair<String,Integer>; // declares instantiated type TSSPair = TPair<String,String>; // declares with other data types TISPair = TPair<Integer,String>; TIIPair = TPair<Integer,Integer>; //---------------------------------------------------- Code insight window flashes repeatedly and CPU usage goes to 100% if the mouse hovers above one of the concrete class declaration type parameters. eg. the "Integer" parameter in "TISPair = TPair<Integer,String>;"

QC #:

Date Reported:

Area:

43564

3/31/2007

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
Option for disabling Hints on Tool Palette

[QC Description]
It would be nice if the Hints on Tools palette could be disabled as it was in Delphi6&7 (see Show hints check on the context menu of Component Palette)

In D2006 and D2007 when you expand a category, or just stop a while with the mouse, the Hint pops up, and does not want to disappear until you move out the cursor from Tool Palette.
The Hint window disturbs me traversing the set of icons, and annoys me constantly.
QC Entry 43564

QC #:

Date Reported:

Area:

11042

2/21/2005

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
Adding a component when filtered resets all categories to be expanded

[QC Description]
When you enter in a filter string to filter the Tool Palette. Then select a component and drop the component on a form. The tool palette is reset and instead of the Tool Palette returning to it's previous state (expanded and collapsed categories), all categories are expanded.
QC Entry 11042

1. New VCL.NET Application 2. Click on Tool Palette 3. Right click and select the Collapse All context menu item 4. Type in d 5. Select a component that is listed (TDrawGrid for example) 6. Drop component on the form exp: Tool Palette categories are now all collapsed act: Tool Palette categories are now expanded and collapsed (perhaps from the previous saved state and not the state before the filter occurred). This appears to only happen incorrectly the first time or if you collapse all categories prior to applying the filter. If you expand all categories prior to filtering, once the component is dropped - all categories are expanded as expected.

QC #:

Date Reported:

Area:

37381

12/6/2006

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
Filter is cleared when Shift+Doubleclicking the Tool Palette

[QC Description]
Using Shift+Doubleclicking allows dropping several controls at once on the form. This works fine when the Tool Palette is *not* filtered. If it is filtered however, the filter is cleared which it shouldn't.
QC Entry 37381

1. New VCL Delphi project 2. Shift+Double click on TLabel for example and observe that the TLabel tool palette item gets an extra border and you can drop more components (even using cursor keys and enter) 3. Press Ctrl+Alt+P and filter with "Button" 4. Shift+Double-click TButton exp: filter should remain active, so you could navigate to TButtonGroup and press Enter to drop a button group act: filter is cleared

QC #:

Date Reported:

Area:

42758

3/18/2007

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
IDE Lock up when reordering items in Tools Palette

[QC Description]
When repositioning items in the Tools Palette, the IDE can lock up and has to be closed. Windows reports a Program is not Responding error.

The problem only occurs when the computer has been running for over 25 days (including hibernation).

The problem can be found in CategoryButtons.pas, line 2044:
and ButtonGroup, line 1163:

CurrentTime, StartTime, ElapsedTime: Longint;

These should be declared as DWORD. (See Forms.pas line 2052).
CurrentTime, StartTime, ElapsedTime: DWORD;

If the computer has been running for over 25 days Elapsed time will be negative. What you will get is a huge value for the sleep command:
Sleep(Delay - ElapsedTime);
QC Entry 42758

1. Let the computer run for at least 25 days including hibernation 2. Start repositioning items in the Tools Palette exp: reordering should work fine act: IDE seems to hang because of a call to Sleep with a huge number of ms

QC #:

Date Reported:

Area:

33286

8/30/2006

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
Give the categories the same or at least a distinct color when they are highlighted with the keyboard

[QC Description]
The fix for QC#26227 now allows keyboard navigation to the category group headers as well. As it is in the current build of Highlander, the foreground or background color does not actually change when focus lands on these items. JAWS cannot track the highlight in this case.
QC Entry 33286

1. Start Highlander. 2. If you have the "Show project wizards" option enabled, simply press Conrol+Alt+P now to go to the tool palette. If you have this unchecked, create, for example, a Delphi Win32 Forms app, or any app that can receive components from the tool palette. 3. Arrow up and down. Notice that for each wizard/component, a distinct combination of foreground and background colors is assigned. Notice that, however, when you land on one category header, that item is not given a unique combination of foreground and background colors. The colors stay the same regardless of whether keyboard focus is on the item or an item below it. Suggested resolution: Give the category button the same, or at least a distinct foreground or background color to allow JAWS to identify it when it has keyboard focus. A slightly different shade of grey for the background would be great.

QC #:

Date Reported:

Area:

32952

8/21/2006

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
Fast clicking on different tool items invokes double click

[QC Description]
The Tool Palette doesn't distinguish between double clicking on one item and fast clicking on two different items.
QC Entry 32952

1. Start BDS 2006 2. Create a new VCL Win32 Application 3. Click in the Tool Palette on one item of your choice and then fast (in the DblClick-Time) on another item. Expected: The second item is selected and nothing else happens Actual: The second item thinks it was double clicked and adds the component to the form.

QC #:

Date Reported:

Area:

41851

3/5/2007

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
Tool Palette: Left Arrow does not focus parent node

[QC Description]
The new treeview organization of the Tool Palette doesn't handle the Left Arrow Key correctly.
Instead of setting focus on the parent node, the left arrow key focuses the Previous Sibling.
QC Entry 41851

Open a node and select an item in the list (not the first one though). Press the Left Arrow-key on the keyboard. The focus isn't moved to the Parent Node, but to the previous sibling.

QC #:

Date Reported:

Area:

56387

12/26/2007

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
The choosen category should be on the top of the list

[QC Description]
Hi,

When one chooses a category from the drop-down menu which appears when we press on the 1st button on the tool palette, the choosen category is, in deed, made visible but it's on the bottom of the list, so one must scroll in order to see all the components. Of course, this is happening when the category is hidden and is close to the end of category list.
QC Entry 56387


SEE ALSO 214362

1. Open the drop-down menu with categories from the 1st button of tool palette 2. Choose a category near to the end of the category list (make sure that the tool palette is somewhere at the beginning so the choosen category is hidden). Result: The choosen category is indeed made visible but is the last line on the tool palette, so the components from that category are hidden. Expected: The choosen category to be made visible at the top of the list, so the category's content (the components) to be fully visible.

QC #:

Date Reported:

Area:

41756

3/3/2007

IDE\Tool Palette

Description:

Steps:

[QC Short Description]
Option Vertical category captions repeated twice

[QC Description]
Option Vertical Category captions in Environment Options is repeated twice.
QC Entry 41756

1. Start Spacely 2. go to Option Vertical Category captions using Tools/Options, Environment Options|Tool Palette; 3. it is repeated in Envirnment Options|Tool Palette|Color. Both options change at the same time and reflect the same value exp: only one widget for the option act: there are two

QC #:

Date Reported:

Area:

28017

4/25/2006

IDE\Object Inspector

Description:

Steps:

[QC Short Description]
Have drop downs in OI show at least 20 items

[QC Description]
Since Delphi 1, the drop downs inside the OI have shown 8 items. With my amazing new IBM laptop at the
time, I could view 800x600!

Fast forward to today, with screens of 1920x1200 and beyond, and what a frustration to be stuck with that
8 item limit!

If the drop down count cannot be made larger for everyone, then at least provide a preference where a user
can change it.

I beg, plead, humbly ask that this feature be implemented.

Thank you, gracias, vielen dank, baie dankie, merci beau coup, spasibo, gracie, dzienkuje, hvala,
koszonom, arigato, shukriya, etc.
QC Entry 28017

QC #:

Date Reported:

Area:

24958

2/15/2006

IDE\Object Inspector

Description:

Steps:

[QC Short Description]
Center Divider Line Shifts to Far Left

[QC Description]
Using Embedded Designer, Object Inspector docked to far left, always showing; Tool Palette docked on left side, just to the right of the Object Inspector; and Project Manager docked to far right side.

The code editor/designer sits between the Tool Palette and the Project Manager.

When I run my Win32 app, the debug desktop takes over, which is really cool and well thought out. However, when I close my program, my desktop comes back and the divider in the Object Inspector (that separates the Properties from their Values) -- is moved to the extreme left side. I then have to move it back to the approximate middle to make it usable again.

Granted, this is a minor problem, but it sure is annoying, and it really does affect my productivity.
QC Entry 24958

see description the divider does not shift. When I run my app, then close it to immediately go back to design mode, it stays in place. But when I have a break point, or encounter an error while running my app in the IDE, it happens.

QC #:

Date Reported:

Area:

49922

8/1/2007

IDE\Object Inspector

Description:

Steps:

[QC Short Description]
Object inspector jumps to wrong property while typing

[QC Description]
While editing the caption property of a checkbox, the focus jumps to the caption property of the associated action when the action subtree is expanded. This only occurs when the object inspector is in "order ba name" mode.
QC Entry 49922

- start Highlander - create VCL Form application (Win32 or .NET) - place a checkbox on the form - place an action list on the form - add a new action to the action list - connect the action to the checkbox - select object inspector "order by name" - expand the action subtree of the checkbox in object inspector - select the caption property of the checkbox - type a character (e.g. "T") exp: focus stays at caption property of checkbox act: focus moves to caption property of action

QC #:

Date Reported:

Area:

43816

4/4/2007

IDE\File Handling

Description:

Steps:

[QC Short Description]
Ctrl+Enter fails to open files in projects search path

[QC Description]
Ctrl+Enter doesn't search for files in the project options' search path. See Steps.

[Regression]: this used to work in BDS2006
QC Entry 43816

1. Start IDE and create new VCL Forms project 2. Invoke Project Options dialog (Ctrl+Shift+F11) 3. On the directories/conditions page add "$(BDS)\source\Win32\Samples\Source" to the search path 4. In the code of unit1.pas, add Calendar to the uses clause 5. press Ctrl+Enter while the cursor is on "Calendar" exp: IDE should open the file Calendar.pas from the Samples\Source directory which we added to the project's search path act: file open dialog is shown since the IDE couldn't find the file

QC #:

Date Reported:

Area:

41659

3/2/2007

IDE\Toolbars/Status Line

Description:

Steps:

[QC Short Description]
Some buttons flicker and cause excessive CPU usage

[QC Description]
If you customize your toolbars to include a Project default options button, it is disabled (which it should not be) and flickers constantly when no project is open, and CPU usage rises to 99%.

If you customize your toolbars to include a File | Use unit button, it flickers constantly when viewing the project source, and CPU usage rises to 99%.
QC Entry 41659

Open Windows Task manager File |Close all Right click on the toolbars and select Customize Find the Commands | Project | Default options... button and drag it to a toolbar Find the Commands| File | Use unit button and drag it to a toolbar Click on the Close button // Exp: the project default options button will be enabled on the toolbar // Act: it is disabled and flickering Notice that CPU usage for bds.exe is and stays high (usually 99%) File | New | VCL forms application - Delphi for Win32 The Default options button disappears Wait a few seconds and notice that CPU usage for bds.exe drops Project | View source // Exp: the Use unit button will be disabled on the toolbar // Act: it is flickers, and CPU usage for bds.exe goes back up to 99%

QC #:

Date Reported:

Area:

42320

3/11/2007

IDE\Open Tools API

Description:

Steps:

[QC Short Description]
SplashScreenServices.AddProductBitmap does nothing

[QC Description]
Calling SplashScreenServices.AddProductBitmap does nothing whereas SplashScreenServices.AddPluginBitmap adds an entry in the splash screen as expected.

QC Entry 42320

1 open attached package 2 compile and install it 3 close the IDE and restart it exp: an entry in the splash screen act: nothing 5 reopen package 6 comment line 15 and activate line 18 7 compile and install the package 8 restart the IDE exp and act: an entry in the splash screen

QC #:

Date Reported:

Area:

43952

4/6/2007

IDE\Open Tools API

Description:

Steps:

[QC Short Description]
Several Aboutbox issues related to Addons (IOTAAboutBoxServices.AddProductInfo)

[QC Description]
There are several issues in the Aboutbox which are related to Addons. These issues seams to be related to IOTAAboutBoxServices.AddProductInfo.

First Issue:
With an installed addon (package or DLL wizard) the product name in the caption, top label, the "Product Information:" of the Aboutbox and the centurion helmet image in the Aboutbox does change. Even the menu entry for the Aboutbox is different.
(see page 1 and 2 in the QC_43952_OTA_Aboutbox.PDF in 43952.ZIP in the attachment)

Second Issue:
The long name for the JCL in the "Product Information:" of "CodeGear Quality Insite(tm)" in the Aboutbox in the german version is "JEDI Component Library" and not "JEDI Code Library" as it should be.
(see page 3 in the QC_43952_OTA_Aboutbox.PDF in 43952.ZIP in the attachment)

Third Issue:
The licence status label in the Aboutbox stays red after a product with a red label (an unregistered product) was selected.
(see page 4 in the QC_43952_OTA_Aboutbox.PDF in 43952.ZIP in the attachment)
QC Entry 43952


[USchuster 2008/06/22]
The second and third issue are still solved.

Open is the first issue.
Since April 2007 the JCL, JVCL and JVCS do use AddPluginInfo instead of AddProductInfo. You should consider adding a further comment to AddProductInfo that only personalities should
use it.

First Issue:
- start Delphi 2007 for Win32 (or start RAD Studio 2007 with -pDelphi)
- compile and install the package QC43952Package.dpk from QC43952.ZIP
- open the Aboutbox

expected: ...Delphi... in the caption and labels
actual: ...RAD Studio... in the caption and labels

Second Issue: (meanwhile solved [between Delphi 2007 Update 1 and Delphi 2007 December 2007 Update])
- open the Aboutbox in the german version
- select the "CodeGear Quality Insite(tm)" entry

Third Issue: (meanwhile solved [between Delphi 2007 Update 1 and Delphi 2007 December 2007 Update])
- reinstall Delphi and do *not* register it (installing a wizard which calls IOTAAboutBoxServices.AddProductInfo with AIsUnRegistered = True might be an alternative option)
- open the Aboutbox
- select a registered product
- select a not registered product
- select again a registered product

QC #:

Date Reported:

Area:

41817

3/4/2007

IDE\Open Tools API

Description:

Steps:

[QC Short Description]
Support accessing compiler build configurations (Debug, Release, etc.) using the OTA

[QC Description]
Please add an interface for accessing the compiler build configurations (Debug, Release, etc.).

What I would find useful would be to be able to retrieve the defined build configurations so I could build an add-in that adds them to a menu or combobox for easier access. The menu or dropbox would then be used to select a configuration and set it as the active one for the current project.

The following would be needed from the interface:

- Get a list of the defined build configurations
- Get the name of the active build configuration
- Set a build configuration as the active one for a project
QC Entry 41817

QC #:

Date Reported:

Area:

24513

2/4/2006

IDE\Open Tools API

Description:

Steps:

[QC Short Description]
IOTAFormEditor.Modified returns True for opened forms

[QC Description]
If you open an existing Delphi or C++ VCL project, the IOTAFormEditor.Modified property returns True even if you have not changed anything on the form. The SaveAll tool button and menu item are disabled, indicating that nothing is modified. After changing something and saving, the modified flag turns to False as it should be after opening a .dfm file.

SYSOP:
I've changed the Severity/Type of this report because for Open Tools developers and VCS addins this is a pretty big issue.
QC Entry 24513

[occurs in Nov 2007 patch]

1. Compile and install the attached designtime package (build.bat) 2. Start BDS 2006 3. Open an exising VCL application 4. Look at the "Modified files" tool form Expected: All files are not modified. Actually: The .dfm files are all modified.

QC #:

Date Reported:

Area:

26425

3/23/2006

IDE\Open Tools API

Description:

Steps:

[QC Short Description]
Error Msg after IOTACodeInsightServices.SetQueryContext(nil, nil)

[QC Description]
Some IDE expert like GExpert or CnWizard report this problem in source code, but as I didn't find any QC report I write one.

Every time after call of IOTACodeInsightServices.SetQueryContext with nil parameters there is an error message. This works fine in D7 or D2005.

Is there any workaround to reset Query Context without a call to SetQueryContext(nil,nil) ?
QC Entry 26425

Open the attached test case and compile into a design package and install it into the IDE Open any project Help, Text Expert Try to execute code completion in the editor (Ctrl+Space) Result: --------------------------- Error --------------------------- Access violation at address 209BF1EF in module 'coreide100.bpl'. Read of address 00000000. --------------------------- OK Details >> --------------------------- [209BF1EF]{coreide100.bpl} CodCmplt.TCodeCompletionManager.Invoke (Line 816, "CodCmplt.pas" + 34) + $17 [209BF26D]{coreide100.bpl} CodCmplt.TCodeCompletionManager.Invoke (Line 831, "CodCmplt.pas" + 49) + $10 [209AD44D]{coreide100.bpl} EditorControl.TCustomEditControl.CodeCompletion (Line 1807, "EditorControl.pas" + 2) + $E [209AD78D]{coreide100.bpl} EditorControl.TCustomEditControl.CMControlCommand (Line 1884, "EditorControl.pas" + 13) + $6 [209B8262]{coreide100.bpl} EditorControl.TEditControl.CMControlCommand (Line 7319, "EditorControl.pas" + 14) + $0 [2013C527]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6 [2132827C]{vclactnband100.bpl} ActnMenus.CallWndHook (Line 703, "ActnMenus.pas" + 12) + $F [201406A7]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6 [2003203C]{rtl100.bpl } Classes.TThreadList.UnlockList (Line 3359, "common\Classes.pas" + 0) + $4 [200EBAA8]{vcl100.bpl } Graphics.FreeMemoryContexts (Line 5060, "Graphics.pas" + 12) + $5 [2013FDD0]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6 [2013FDE5]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7076, "Controls.pas" + 6) + $0 [20040E4C]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0 [201406A7]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6 [0B24D985]{cxLibraryD11.bpl} Cxcontainer.TcxCustomInnerListBox.CNDrawItem + $695 [2013FDD0]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6 [20040E4C]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0 [20137642]{vcl100.bpl } Controls.FindControl (Line 2104, "Controls.pas" + 6) + $9 [201625E8]{vcl100.bpl } Forms.TApplication.ProcessMessage (Line 8103, "Forms.pas" + 21) + $1 [2016262A]{vcl100.bpl } Forms.TApplication.HandleMessage (Line 8124, "Forms.pas" + 1) + $4 [2016291F]{vcl100.bpl } Forms.TApplication.Run (Line 8223, "Forms.pas" + 20) + $3 [0042297A]{bds.exe } bds.bds (Line 195, "" + 7) + $7

QC #:

Date Reported:

Area:

47442

6/12/2007

IDE\Message View

Description:

Steps:

[QC Short Description]
Slower compilation with "Verbosity = Normal" (and Much Faster with Hints Disabled)

[QC Description]
For some reason with Tools -> Options -> Environment Options -> Verbosity
set to "Normal" or "Minimal" compilation is much slower than when it is set
to "Quiet", "Detailed" or "Diagnostic".

We have an application that is just over 1 million lines long that generates
539 hints and 153 warnings when built (don't ask!). With Verbosity set to
"Detailed" it builds in 23 seconds, but with Verbosity set to "Normal" (the
default setting) it takes 82 seconds!

It appears that the problem is related to the processing of hint and warning
messages. Attached is an example that illustrates the problem.
QC Entry 47442

Steps: 1) Open the attached console application in D2007 2) Set Tools -> Options -> Environment Options -> Verbosity to "Normal" 3) Perform a Project -> Build Expected: Fast compilation Actual: The warning messages are generated very slowly and the compilation takes quite long for such a small file 4) Set Tools -> Options -> Environment Options -> Verbosity to "Detailed" 5) Perform a Project -> Build Expected: Fast compilation Actual: Much faster compilation than in step 3 (but still not as fast as earlier Delphi versions) Turning off hint generation under the project options, compiler node makes compilation very fast for a similar small project with 500 hints (from 6 seconds down to less than 1).

QC #:

Date Reported:

Area:

55080

11/20/2007

IDE\Performance

Description:

Steps:

[QC Short Description]
Compiler delay

[QC Description]
Once you have a number of units open, especially large units and units with either forms or datamodules, a noticeable delay occurs between pressing F9 and the compiler dialog appearing.

The delay becomes noticeable at about 20 units. I see delays of about 10-15 seconds at this time.

In my testing I can duplicate delays of over 90 seconds with about 100 forms that causes the IDE to be busy. CPU goes to 100% and their is no IO activity (either reads or writes when using task manager).

This is on a Intel dual core E6600, 2GB Ram, > 160GB disk free. No other applications running.

This application has 1013 units in total (including all VCL units).

I wonder if this is related to the difference in speed of closing a editor window via Ctrl-F4 (which is slow) compared to using the unit tab context menu which is noticablly faster.
QC Entry 55080

1. Open IDE.
2. Install design time packages.
3. Turn of the desktop and project autosave features. Turn off all the code insight features. Remove any *.dsk files from the project.
4. Close the IDE.
5. Open the the IDE and the project group.
6. Press F9 to compile - delay is as expected < 1 second.
7. Open all units starting with "Data" - these are all data module based.
8. Open all forms and frames in the range "FrmAbouts" to "FrmeTransfers".
9. Press F9 to compile.

Actual: Wait 90 seconds for compiler dialog to appear.
Expected: Wait < 10 seconds.

Notes: I have constructed this test case to highlight the issue.
In reality I would not expect to have quite this many forms open, but having 20% to 50% of these numbers does happen.

Testing with constructed projects with large numbers of units eg 1000 (using the provided codegear unit/project generator), but of only a few lines each and no designtime components, does take the IDE a while to open the units (eg open 700 in one hit), but shows no noticeable compiler delay.

QC #:

Date Reported:

Area:

29604

5/29/2006

IDE\Performance

Description:

Steps:

[QC Short Description]
Noticeable delay when compiling in IDE

[QC Description]
This one has bugged me for a while - and in the interests of having Delphi 1
speed ..

On large projects (Delphi Win32 personality) - eg Ours has about 972 units
(at last count) spread over about 30 folders.

If you have the compiler dialog set to display and then press F9 to compile
(or shift-F9 to build), there is a 10-15 second delay before the compile
dialog appears.

On small projects e.g. less < 50 units - there is no noticeable delay.

It would be nice to have this < 1 second!

Myles.
QC Entry 29604

Case (a) - as expected (fast/no delay) 1. Have a large Win32 project handy to compile. Suggest > 500 units (all up). 2. Compiler it. 3. Close IDE. 2. Start IDE. 3. Turn on show compiler progress dialog. 4. Open project/project group - ensure have no forms visible - all in code editor state instead. 5. Compile using Ctrl-F9 6. Wait is about 1 second or less. Case (b) - Slow 1. Have a large Win32 project handy to compile. Suggest > 500 units (all up). 2. Start IDE. 3. Turn on show compiler progress dialog. 4. Open project/project group. 5. Make changes to about 20 units in a variety of folders e.g spend 1/2 an hour editing - esp those not directly included in the project file. It seems esp dependent on having the Form designer active or having being used in the session - the more it is used, or the more frames/forms active, the slower the time to show the compile dialog. 6. Compile using Ctrl-F9 7. Wait for upto 10-15 seconds for dialog to appear (CPU is typically at 100%)

QC #:

Date Reported:

Area:

54509

11/7/2007

IDE\Performance

Description:

Steps:

[QC Short Description]
Compiler concatenates relative paths twice (code insight speed issue)

[QC Description]
The kibiz compiler generates these I/O operations:

QueryOpen C:\Source\Print\FrmPrintSuperTeamRoundMatches.pas
SUCCESS
... [open, read, close DCU file] ...
QueryOpen C:\Source\Print\Print\FrmPrintSuperTeamRoundMatches.pas
PATH NOT FOUND

The last QueryOpen is a concatination of
"C:\RCJAdmin\Source\Print"
and the
"Print\FrmPrintSuperTeamRoundMatches.pas" which is in the dpr file.

Because "C:\RCJAdmin\Source\Print" is not in any path list this looks
like a compiler bug that accidentally concatenates the relative filename to
the already concatenated project path + relative path.


The compiler code seems to do this:

Somewhere:
Path := ProjectPath + ExtractFilePath(UnitFilename);
Somewhere else:
Path := Path + UnitFilename;

The causes one I/O operation more for each unit in the project what
increases the code insight time.
QC Entry 54509

1. Open the attached project in Delphi 2007 personality 2. Compile the project the first time 3. Load ProcessMonitor and restrict it to show bds.exe only 4. Invoke Code Insight in the FormCreate method (Ctrl+Space) 5. Stop ProcessMonitor's event recording 6. Search for "subdir\subdir" in ProcessMonitor's log Expected: There is nothing found Actual: QueryOpen C:\Tests\TestKibizIO\subdir\subdir\Unit2.pas PATH NOT FOUND Stacktrace of the "PATH NOT FOUND" item: kernel32.dll GetFileAttributesExA + 0x1f coreide100.bpl CominoutCFileNameDate$qqrr17SystemAnsiString + 0x160 coreide100.bpl CominoutCFileNameDate$qqrr17SystemAnsiString + 0x247 coreide100.bpl COMINOUTBCFILENAMEDATE$QPC + 0x33

QC #:

Date Reported:

Area:

34940

10/6/2006

IDE\Code Completion

Description:

Steps:

[QC Short Description]
CC doesn't contain custom type privates

[QC Description]
Working with new class, private variable is hidden in CC-list
QC Entry 34940

Start IDE
Open VCL-a project

Insert this snippet into implementation of its Form's source, and try to use CC:

Type


TAnArray = array of String;


TAA = Class(TPersistent)
private
FValueArray : TAnArray;
public
function ValueOfIndex (AnIndex : Integer): String;
End;



{ TAA }


function TAA.ValueOfIndex(AnIndex: Integer): String;
begin
Result := FV [ctrl+Space]

exp: Present a CC List contain FValueArray in it
act: Doesn't

QC #:

Date Reported:

Area:

51658

9/6/2007

IDE\Code Explorer

Description:

Steps:

[QC Short Description]
Code Insight Repeatedly Attempts to Bring up Dialog Box

[QC Description]
While trying to define another problem, I had the code in Steps in the IDE and found an reproducable example of a long standing problem I've seen.

When I hover over the word String where the generic List<String> is used in the code, I get a rapid fire clicking sound and see a dialog box trying to come up to give me type information about String.

I've seen this come and go in various Delphi releases, Win32 and .Net, but this example seems to fail all the time. At least it failed everytime so far, including after a reboot.

2799 + latest DCCIL
QC Entry 51658

program IntErr; {$APPTYPE CONSOLE} uses System.Collections.Generic; type TResult = record Categories: List<String>; end; var MyCats: TResult; function GetCategories: TResult; var Cats: List<String>; begin Cats := List<String>.Create; Result.Categories := Cats; end; begin MyCats := GetCategories; end. Hover over any of the <String>'s.

QC #:

Date Reported:

Area:

34632

9/29/2006

IDE\Menus

Description:

Steps:

[QC Short Description]
inconsistent translations for build menu items

[QC Description]
The german IDE uses inconsistent translations for all menu items for starting a build:

- in the main project menu, for a single project it is called "<projekt> erzeugen" whereas for all projects it is called "Alle Projekte erstellen"

- in the context menu of the Project Manager, the Build menu item is called "Aktualisierung", but for building all projects from here the menu item is called "Ab hier alle erzeugen"

It would be more convenient if a single translation (like "erzeugen") is used for all build-related menu items!
QC Entry 34632

see discription and attached screenshots

QC #:

Date Reported:

Area:

53712

10/19/2007

IDE\Search\Find in Files

Description:

Steps:

[QC Short Description]
Duplicated result when searching into project group

[QC Description]
When searching across files results may show one match several times
QC Entry 53712

1. Create a new project group 2. Create a new VCL application project into this group 3. Save it's default form as Unique.pas 4. Create another new VCL application into this group 5. Save it's default form as Shared.pas 6. Add shared.pas to the first project 7. Call 'Search for files' (Ctrl-Shift-F) and look for 'Shared' while 'where' set to 'all files in project group' 8. You'll see that 'Shared.pas' mentioned twice (see screenshot in the attach)

QC #:

Date Reported:

Area:

53073

10/5/2007

IDE\Search\Find in Files

Description:

Steps:

[QC Short Description]
Highlights in the search result pane is wrong for DBCS

[QC Description]
When you try to search DBCS in file, the search result does not highlight the string that matches with search string. The highlights are wrongly positioned.

(jpg attached - I have a problem attaching files. files are attached in RAID)
QC Entry 53073

0. Change the system locale to Japanese 1. Save the attached Japanese text file 2. Search | Find in Files to search any of the string in the text file // Notice highlight does not match with the search string.

QC #:

Date Reported:

Area:

46549

5/25/2007

IDE\Packages

Description:

Steps:

[QC Short Description]
Packages are displayed without their description

[QC Description]
All Codegear packages are displayed without their description
QC Entry 46549

From the Main menu select - Componants - Install componants... Act : All Codegear packages are displayed without their description Exp : Description should be displayed instead

QC #:

Date Reported:

Area:

54357

11/3/2007

IDE\Desktop Layouts

Description:

Steps:

[QC Short Description]
Closing last page in editor window leaves behind empty window and one more Ctrl-F4 = AV.

[QC Description]
This is a newly introduced issue in RAD Studio 2007. It did not exist in Delphi 2007 Update 1.

When the Classic Undocked desktop layout is active, closing the last remaining page in the editor window via Ctrl+F4 does not cause the editor window to disappear from the screen. Instead, it remains with no caption or visible content. If Ctrl+F4 is pressed again with the window in this state, an Access Violation occurs.

In all previous versions of the IDE, pressing Ctrl+F4 on the last remaining page closed the editor window, and moved the focus to the previous IDE window in the z-order.
QC Entry 54357

1. Start the IDE with the Classic Undocked desktop layout selected. 2. Click File | New | VCL Forms Application - Delphi for Win32. 3. Activate the editor window, and press Ctrl+F4 to close the Unit1 page. (Answer No when asked to save changes.) 4. Press Ctrl+F4 a second time to close the Welcome Page. Actual results: The window remains on the screen with no caption or visible content. Expected results: The window should be hidden, and the focus should move to the previous IDE window in the z-order. Bonus step: 5. Press Ctrl+F4 once more. This results in an Access Violation: --------------------------- Error --------------------------- Access violation at address 20A2247E in module 'coreide100.bpl'. Read of address 00000000. --------------------------- OK Details << --------------------------- [20A2247E]{coreide100.bpl} EditorForm.TEditWindow.ecClosePageClick (Line 4513, "EditorForm.pas" + 2) + $7 [2003FBDD]{rtl100.bpl } Classes.TComponent.UpdateAction (Line 10761, "common\Classes.pas" + 1) + $6 [2015EAA5]{vcl100.bpl } Forms.TraverseClients (Line 5965, "Forms.pas" + 2) + $3 [2015EAED]{vcl100.bpl } Forms.TraverseClients (Line 5968, "Forms.pas" + 5) + $2D [2015EB42]{vcl100.bpl } Forms.TCustomForm.CMActionUpdate (Line 5981, "Forms.pas" + 3) + $21 [20A22479]{coreide100.bpl} EditorForm.TEditWindow.ecClosePageClick (Line 4513, "EditorForm.pas" + 2) + $2 ...

QC #:

Date Reported:

Area:

37086

11/28/2006

IDE\Translation Tools

Description:

Steps:

[QC Short Description]
impossible to add new forms to language projects

[QC Description]
It's not possible to add a new form and creating the resource files, after adding the language support. See steps.
QC Entry 37086

dexter and highlander

1. create a new Delphi Win32 VCL project with a form 2. add language support for any additional language 3. add a new form to the main project 4. Choose Project, Language, Update Localized projects exp: the new form should get added to the language project act: the new form is not added to the language project

QC #:

Date Reported:

Area:

55304

11/27/2007

IDE\Help

Description:

Steps:

[QC Short Description]
Online help entries do not properly hyperlink to unit file

QC Entry 55304

This is with Delphi 2007 Win32 patch 3, plus online help patch 1. 1. Open online help for TComponent 2. Skim down to the "File" section. 3. The file listed is "Classes", but it is not a hyperlink. 4. Go to the help index (not search) and search for "Classes" 5. Click on the first link found: it's the (perfectly fine) file information for Classes. The filename in (3) should be hyperlinked. It used to be in earlier versions, but now it's not.

QC #:

Date Reported:

Area:

43850

4/4/2007

IDE\Help

Description:

Steps:

[QC Short Description]
F1 fails on PosEx method when required unit not in uses clause

[QC Description]
I've upgraded from D7 to D2007. Unfortunately the help system is still way below par.

In the steps panel there's an illustration of what is so wrong about the help - using the ever so useful PosEx function as an example.

QC Entry 43850

Start a new app, double click the form to create an event handler. Into the code editor type PosEx, click onto the function name (PosEx) and click F1 Up pops an error box "No help found for (none)" Hmmm. I'm sure there's a function called PosEx and why doesn't the help system show a helpful message such as "Can't find PosEX" instead of breaking the IDE. Ok let's try it a different way since context sensitive help is broken. Open the help system manually by clicking on the help toolbar button. Click the Index tab in help, type in "PosEx" (or even just "Pos"). Nope nothing to report. I'm sure there's a PosEx function and I absolutely know there is a Pos function. Try the same thing in D7. The help system pops up, displays what I need and I get back to work. No errors, no frustration, just some help and great productivity. It also tells me that the PosEx function lives in the StrUtils unit. Ok, back to D2007 and add StrUtils to the uses clause. Try clicking F1 in D2007 again and this time it works. So now I investigate why the Help search will not find PosEx or even Pos from a manual search. Answer, you have to know that Pos lives in the System unit and PosEx lives in the StrUtils unit, so you can search on "S Y S T E M . P O S" or "S T R U T I L S . P O S E X". (BTW the new help system has an index entry for "System.Pos" and "System.Pos function", ditto for PosEx. Both entries point to the same page providing 2 unhelpful ways to get to the same info). But the reason I pressed F1 back at the beginning is because I didn't know where PosEx was declared, or quite how to use it. !! SYSOP: Callstack for error. [04528684]{htmlhelp2100.bpl} PasHelp.TBasePascalHelpTraits.ShowEditorHelp + $668 [2000A455]{rtl100.bpl } System.@CheckAutoResult + $11 [04528684]{htmlhelp2100.bpl} PasHelp.TBasePascalHelpTraits.ShowEditorHelp + $668 [209F31E1]{coreide100.bpl} EditorControl.TCustomEditControl.HelpKeyword + $145 [209F9048]{coreide100.bpl} EditorControl.TEditControl.CMControlCommand + $80 [4005F6A7]{vcl100.bpl } Controls.TControl.WndProc + $2BB [40063736]{vcl100.bpl } Controls.TWinControl.WndProc + $4FA [40062E60]{vcl100.bpl } Controls.TWinControl.MainWndProc + $2C [20040DE4]{rtl100.bpl } Classes.StdWndProc + $14 [209E3B9E]{coreide100.bpl} VClient.SendWindowMsg + $1A [209E2834]{coreide100.bpl} VClient.SendWindowMsgProc + $10 [209B885E]{coreide100.bpl} IDEKbd.@interpret_bmi_macro$qqrp5BMI_tpcp11CmdMapTableppc + $96 [209B745A]{coreide100.bpl} IDEKbd... + $16A [209E12A8]{coreide100.bpl} VClient.CmdStringProc + $30 [2003FBED]{rtl100.bpl } Classes.TComponent.UpdateAction + $D [4007D475]{vcl100.bpl } Forms.TCustomForm.CMActionExecute + $9D [4007D4BD]{vcl100.bpl } Forms.TCustomForm.CMActionExecute + $E5 [209B8FBB]{coreide100.bpl} IDEKbd.@LookUpKey$qqrp11KeyMapTableul + $1F [20A9455C]{coreide100.bpl} KbClient.TIDEKBDFrameAPI.MapAndEvalInternal + $64 [20A93FE1]{coreide100.bpl} KbClient.HandleKey + $59 [20A94053]{coreide100.bpl} KbClient.HandleKey + $CB [20A942F1]{coreide100.bpl} KbClient.TIDEKBDFrameAPI.ProcessKeyStroke + $289 [20A95024]{coreide100.bpl} KbClient.TIDEKBDChildAPI.ProcessKeyStroke + $A0 [209F7C5C]{coreide100.bpl} EditorControl.TCustomEditControl.DoKeyDown + $54 [209EE872]{coreide100.bpl} EditorControl.TCustomEditControl.CNKeyDown + $9A [4005F6A7]{vcl100.bpl } Controls.TControl.WndProc + $2BB [40080504]{vcl100.bpl } Forms.TApplication.WndProc + $3F0 [40063736]{vcl100.bpl } Controls.TWinControl.WndProc + $4FA [40062E60]{vcl100.bpl } Controls.TWinControl.MainWndProc + $2C [20040DE4]{rtl100.bpl } Classes.StdWndProc + $14 [40080CA4]{vcl100.bpl } Forms.TApplication.IsKeyMsg + $84 [40080D3A]{vcl100.bpl } Forms.TApplication.IsHintMsg + $26 [40080F21]{vcl100.bpl } Forms.TApplication.ProcessMessage + $D1 [40080F86]{vcl100.bpl } Forms.TApplication.HandleMessage + $A [40081210]{vcl100.bpl } Forms.TApplication.Run + $CC [00422971]{bds.exe } bds.bds (Line 196, "" + 7) + $2

QC #:

Date Reported:

Area:

20401

10/20/2005

IDE\Help

Description:

Steps:

[QC Short Description]
F1 is no longer sensitive to variable types

[QC Description]
F1 no longer seems aware of variable types as it was, so doesnt bring up the right method or property but a list of anything with the word in
QC Entry 20401

example Load delphi w32 only Make new empty vcl project first example : click on your forms visible property value, press F1, see Win32 and c++ builder listed... in your form.show var mylist : tlist; begin mylist:=tlist.create; mylist.error('empty list',0); mylist.free; end; Now place your cursor on the word error press F1, rather than being taken to Tlist.error like you used to.. it gives a list of 32 options, tlist.error way way down.. Not condusive to productive coding.. It always used to be better than this.

QC #:

Date Reported:

Area:

39247

1/24/2007

IDE\Help

Description:

Steps:

Index missing for "Modeling Overview"

[QC Short Description]
Misslinked "Modeling Overview"

[QC Description]
Type "project" into Index's look for. "Modeling Overview" will show
QC Entry 39247

Start documentation type "project" into Index's look for click on project ---- act: topics of "Modeling Overview" will show act 2. link to "Modeling Overview" in Index is lost (type this into look-for and it shows nothing)

QC #:

Date Reported:

Area:

41233

2/23/2007

IDE\Help

Description:

Steps:

[QC Short Description]
F1 help not available for Object Inspector pane

[QC Description]
F1 does not show help for Object Inspector
QC Entry 41233

Open Spacely with no files or project open Undock OI from any other windows Click to make sure OI is active window F1 Act - nothing at all happens Exp - help for OI for comparison: Click empty Project Manager window F1 - shows help for PM

QC #:

Date Reported:

Area:

24267

1/30/2006

IDE\Help

Description:

Steps:

[QC Short Description]
"No help found for context" error on Help button click in Project Dependencies

[QC Description]
1) Open a project
2) Click Project->Dependencies
3) Click the help button on the Project Dependencies dialog that opens

Expected: Help page on project dependency dialog is shown.
Actual: Message Box "No help found for context" appears".

Error dump below:

+ $11[51F5CC7B]{rtl100.bpl } HelpIntfs.HelpIntfs.THelpManager.ShowContextHelp (Line 628, "HelpIntfs.pas" + 30) + $11
+ $14[52059AC2]{vcl100.bpl } Forms.Forms.TApplication.HelpContext (Line 7947, "Forms.pas" + 8) + $14
+ $F[20BCDD7B]{coreide100.bpl} ProjectDependencyForm.ProjectDependencyForm.TDependencyForm.HelpButtonClick (Line 150, "ProjectDependencyForm.pas" + 0) + $F
+ $6[5203C998]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7242, "Controls.pas" + 101) + $6
+ $4[51FFB928]{vcl100.bpl } StdCtrls.StdCtrls.TButtonControl.WndProc (Line 3513, "StdCtrls.pas" + 13) + $4
+ $11[5203CACF]{vcl100.bpl } Controls.Controls.DoControlMsg (Line 7288, "Controls.pas" + 6) + $11
+ $6[5203C998]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7242, "Controls.pas" + 101) + $6
+ $5[520511CD]{vcl100.bpl } Forms.Forms.TCustomForm.WndProc (Line 3284, "Forms.pas" + 125) + $5
+ $6[5203C150]{vcl100.bpl } Controls.Controls.TWinControl.MainWndProc (Line 7021, "Controls.pas" + 3) + $6
+ $0[51F40BB0]{rtl100.bpl } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0
+ $6A[77D48731]{USER32.dll } GetDC + $6A
+ $14A[77D48811]{USER32.dll } GetDC + $14A
+ $17F[77D4B4BB]{USER32.dll } DefWindowProcW + $17F
+ $1CD[77D4B509]{USER32.dll } DefWindowProcW + $1CD
+ $10[7C90EAE0]{ntdll.dll } KiUserCallbackDispatcher + $10
+ $44[77D4B8FE]{USER32.dll } SendMessageW + $44
+ $1B8[77D7FC78]{USER32.dll } CreateMDIWindowA + $1B8
+ $624B[77D764E3]{USER32.dll } DeregisterShellHookWindow + $624B
+ $1160[77D577D9]{USER32.dll } GetCursorFrameInfo + $1160
+ $D9E[77D6B055]{USER32.dll } SoftModalMessageBox + $D9E
+ $6A[77D48731]{USER32.dll } GetDC + $6A
+ $14A[77D48811]{USER32.dll } GetDC + $14A
+ $9C[77D4C63A]{USER32.dll } IsWindowUnicode + $9C
+ $16[77D4E900]{USER32.dll } CallWindowProcA + $16
+ $17[5203CA7B]{vcl100.bpl } Controls.Controls.TWinControl.DefaultHandler (Line 7269, "Controls.pas" + 23) + $17
+ $6[5203C998]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7242, "Controls.pas" + 101) + $6
+ $4[51FFB928]{vcl100.bpl } StdCtrls.StdCtrls.TButtonControl.WndProc (Line 3513, "StdCtrls.pas" + 13) + $4
+ $0[51F40BB0]{rtl100.bpl } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0
+ $6A[77D48731]{USER32.dll } GetDC + $6A
+ $14A[77D48811]{USER32.dll } GetDC + $14A
+ $122[77D489C8]{USER32.dll } GetWindowLongW + $122
+ $A[77D496C2]{USER32.dll } DispatchMessageA + $A
QC Entry 24267

1) Open or create a project group with two or more projects. 2) Click Project->Dependencies 3) Click the help button on the Project Dependencies dialog that opens

QC #:

Date Reported:

Area:

40348

2/12/2007

IDE\Help

Description:

Steps:

[QC Short Description]
Suggestion: F1 help on whitespace should open index

[QC Description]
When Pressing F1 = Help in the Code Editor on white space, the Help Window does not open. I feel it should open with the Index.
QC Entry 40348

QC #:

Date Reported:

Area:

47744

6/19/2007

IDE\Refactoring\Change Parameters

Description:

Steps:

[QC Short Description]
Change params will strip off with existing default values when adding a new parameter

[QC Description]
Given this unit:

unit Unit2;

interface
type
desc2 = class(TOBject)
function Add(const AText: string = ''): tobject;
end;

implementation

function desc2.Add(const AText: string = ''): tobject;
begin
end;

end.

When refactoring function Add() - change params
1. when another param is added (eg. test: integer), the resulting code is as follows:

Function Add(const AText: string = ; test: Integer): tobject;
QC Entry 47744

+ File | New | Other | Console Application - Delphi Win32
+ Copy the Following code:
---------------
unit Unit2;

interface
type
desc2 = class(TOBject)
function Add(const AText: string = ''): tobject;
end;

implementation

function desc2.Add(const AText: string = ''): tobject;
begin
end;

end.
-----------
+ Right Click on Add Function
+ Select Refactoring | Change Params
+ Set name = test
+ Set Type = integer
+ Click OK
+ Click Refactoring Button on window
//exp: Function Add(const AText: string = '' ; test: Integer): tobject
//act:
Function Add(const AText: string = ; test: Integer):

----------- ORIGINAL ------------------
1. refactor - add params to funciton Add()
2. add a new parameter
3. Click the refactor button to make refactoring occur
results: default value of existing parameter is deleted. Project wil no longer compile.

QC #:

Date Reported:

Area:

42248

3/9/2007

Install

Description:

Steps:

[QC Short Description]
The installer backup files should not be placed under Documents and Settings

[QC Description]
The {34A3E1C5-E6E5-4CBE-A5FC-787A0B6C2E0A} directory that stores a copy of all of the entire installation files should be put in Program Files\CodeGear\Studio\ (or wherever the IDE is installed).

Many corporate (and personal) environments backup the Documents and Settings stuff, and there generally isn't any reason to backup hundreds of megabytes of an IDE installer.
QC Entry 42248

Install Delphi 2007 Check for a huge GUID named folder under: C:\Documents and Settings\<UserName>\Local Settings\Application Data\ containing files like these: Setup.msi and lots of subdirectories and 470 MB of files

QC #:

Date Reported:

Area:

54730

11/12/2007

Install

Description:

Steps:

[QC Short Description]
Access violation at ntdll.dll after Update 3 install

[QC Description]
I have recently downloaded and installed Update #3 for Delphi 2007. After the installation was successfully completed I tried running Delphi 2007 and it no longer started. Shortly after the program is initiated and before any initializations screens are displayed I get the following error:

Exception EacessViolation in module ntdll.dll at 00010C3F
Access violation at address 7C910C3F in module ntdll.dll

And the program will simply not start. I ve done a lot of research on the CodeGear website especially on Chris Pattinson s website and have tried nearly everything.
I have downloaded the installation zip file: http://cc.codegear.com/item/25014
Extracted it to a new clean folder and done the installation process from there.

When the first time around didn t work I tried using the repair option from the same installation file. In order to be able to do that I had to remove all my cglm.ini files. Even after the repair installation has been completed I still get the ntdll.dll access violation error. I also tried the modify option and nothing.

After many trials I decided to completely uninstall Delphi from my computer, then I installed from scratch using the Update #3 file that I downloaded and the same issues came up.
I was extremely frustrated and this is my work computer so it is very important that I can use Delphi on it! So I finally decided to FORMAT my computer and install Delphi 2007 from scratch using the Update #3 installation. That also didn t work and I still get exactly the same ntdll.dll access violation error!

I have no idea what to do and it s been 3 days now that I can t do my work because Delphi is not running. This is extremely frustrating and I simply cannot understand something like this can happen specially since Delphi 2007 was working perfectly on my computer before I made the mistake of installing Update #3.
QC Entry 54730

QC #:

Date Reported:

Area:

51358

8/30/2007

Install

Description:

Steps:

[QC Short Description]
German Uninstaller contains English strings

[QC Description]
The uninstaller of the german Highlander Build 11.0.2791.8981.1 contains some english strings. This should be translated into german.

1. Cleaning up GAC. This could be translated to "GAC wird bereinigt".

2. Processing Help System: Help is being uninstalled. This may take an
extanded period of time. This could be translated to this: "Verarbeite Hilfe: Die Hilfe wird gerade deinstalliert. Dies kann einige Zeit dauern."
QC Entry 51358

Just uninstall the german Version and you can see the strings.

QC #:

Date Reported:

Area:

54409

11/5/2007

Install

Description:

Steps:

Install is not putting framework files in the proper directory if the OS is 64 bit. Should be putting all Microsoft.NET\Framework files in to Microsoft.NET\Framework64 in this case.

--------------ORIGINAL -------------------------------
[QC Short Description]
Project compiles fine under IDE, but not using MSBuild

[QC Description]
A project that compiles fine under the IDE doesn't compile at all when using MSBuild (under Vista x64).
QC Entry 54409

------------- QA NOTES ------------
Happens also on Windows XP 64. It appears to be a 64 bit machine that causes this.
The issue is that the framework is put under Framework64 and not Framework as under a 32 bit system.

--------------- ORIGINAL ------------------
I am developing under Windows Vista Ultimate x64 with UAC enabled and using an 'admin' account created for me during the installation process (of Windows Vista).

- Unzip the attached project;
- Open the "Test" folder;
- Double click on "MSBuild Test.bat".

On my system, I get a message that reads:

---------------------------------------
Setting environment for using CodeGear RAD Studio tools
Microsoft (R) Build Engine Version 2.0.50727.312
[Microsoft .NET Framework, Version 2.0.50727.312]
Copyright (C) Microsoft Corporation 2005. All rights reserved.

C:\Users\Alan Garny\Desktop\Test\Project1.dproj(71,11): error MSB4019: The imported project "C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Borland.
Delphi.Targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Press any key to continue . . .
---------------------------------------

Now, if I open "Test.dproj" in D2007.3, I have no problem: it compiles fine. For information, I don't remember ever experiencing that problem under Vista x86 or XP x86.

QC #:

Date Reported:

Area:

41024

2/21/2007

Install

Description:

Steps:

[QC Short Description]
7zip files should not be in the same folder as setup.exe

[QC Description]
In the field test downloadable install, there are a huge number of .7zip files in the install folder where the setup.exe file is. This is somewhat ugly / messy, and leaves a slightly unprofessional, almost "warez-y" feeling. 7zip itself is already a rather strange and warez-y format to use.

I would suggest the following:

- At the very least make a subfolder that holds all the 7zip files, and leave only the setup.exe, readme and eula files (+ any other crucial files) in the main folder. This way at least the setup is easy to find.

- Since the 7zip files are password protected, and not meant for the end user to open, why not change the extension to something that doesn't make everyone want to open them? Something like .bin for example is really neutral and, at least IMO much less suspectible.

Also, note that on some systems password protected compressed files are not allowed at all! This is because compressed files are a common method of viruses and other nasties to spread, and when the archive is password protected virusscanners cannot scan them. I personally know at least two companies where these files would not be allowed on the users computer at all, although I don't think that that would be very common for developer's machines.
QC Entry 41024

since R2 there is a dialog to define the locaten of the 7zip files.

QC #:

Date Reported:

Area:

45687

5/9/2007

Install

Description:

Steps:

[QC Short Description]
Text truncated on German "Setup finished" Dialog

[QC Description]
The text "Automatically search for updates" is too long in the German version: "Bei der Ausf hrung von RAD Studio automatisch nach Aktualisierungen| suchen" ("|" = Cut)
QC Entry 45687

Install German version

QC #:

Date Reported:

Area:

39998

2/6/2007

Install

Description:

Steps:

[QC Short Description]
File -> New menu items should be extended

[QC Description]

Currently, the contents of the menu "File -> New" is this (in this order as
well):

- Package - Delphi for Win32
- Unit - Delphi for Win32
- VCL Forms Application - Delphi for Win32
- Form - Delphi for Win32
This should be redesigned, both in the order of items, and the items that
are visible.

Especially the "Package" as the first item bugs me: a lot of users
(especially first time users) are never going to create packages...




QC Entry 39998



I'd much rather see this:

- VCL Forms Application - Delphi for Win32
- Console Application - Delphi for Win32
- Package - Delphi for Win32
- Separator
- DataModule - Delphi for Win32
- Form - Delphi for Win32
- Frame - Delphi for Win32
- Unit - Delphi for Win32
- Separator
- Customize
- Separator
- Other


The idea behind this:
- 3 groups (projects, files, special)
- within a group it is alphabetically ordered (except for project)

QC #:

Date Reported:

Area:

40054

2/6/2007

Install

Description:

Steps:

[QC Short Description]
Slim Installation fails

[QC Description]
I did a slim installation (without DB components, etc.). In the IDE I can still see DB, soap components. See attachments.
QC Entry 40054

1. Install OS 2. download setup.exe stub 3. install 4. in the package selection mark any db related components as "do not install" 5. accept default values note: initial reporter has included screenshots of the installer. exp: installation does exclude db related components act: installation is full with all packages

QC #:

Date Reported:

Area:

51960

9/13/2007

Install

Description:

Steps:

[QC Short Description]
CodeGear RAD Studio 2007 BDS2006 IDE conflict

[QC Description]
OS Vista
BDS2006 + Castalia 5 IDE enhancer 1 + MyDac MySQL components addons
2 GB memory, nVidia 8800 display
After installing RAD Studio 2007 in different directory running BDS2006 results in error :-
Exception EPackageRegistrationException in module coreidel00.bpl at 000DCB21.
Registration procedure, Cppproject.IDERegister in package C:\Program
Files\Borland\BDS\4.0\Bin\bcbide100.bpl
raised exception class EOleSysError: OLE error 80131040, ClassID:
{F8FEDD39-E3CE-4B8D-A657-9CA24686881F}.
Do you want to attempt to load this IDE package the next time Borland Developer Studio
2006 is run?


BDS2006 is unable to run.
QC Entry 51960

QC #:

Date Reported:

Area:

48531

7/4/2007

Install\User Interface

Description:

Steps:

[QC Short Description]
Some dbXpress related items have no description

[QC Description]
Some of the dbXpress components which can be deselected in the installer's feature tree do not have any german description. All other items do at least have one.
QC Entry 48531

1. start the installer with german language (don't know if english is affected as well) 2. go to the main feature tree 3. look at the dbXpress section 4. find items without description

QC #:

Date Reported:

Area:

43804

4/4/2007

Install\Launcher

Description:

Steps:

[QC Short Description]
Installer completely ignores option to "Automatically check for updates when RAD Studio is run"

[QC Description]

[Sysop: Changed Descriptions and performed additional tests]

Regardless of OS, regardless of choice for "Shortcuts", and regardless of choice for "Automatically check for updates when RAD Studio is run", the installer *always* sets up RAD Studio to check for updates on run.
QC Entry 43804

Install Delphi 2007 At the last screen, uncheck "Automatically check for updates when RAD Studio is run". Exp.: Setup.exe would not be launched by BDS when it runs. Act.: BDS *always* launches setup.exe to check for updates.

QC #:

Date Reported:

Area:

46930

6/1/2007

Install\Files

Description:

Steps:

[QC Short Description]
When updating RTM, the installer copies files to a wrong folder

[QC Description]
Steps describing the problem.
QC Entry 46930

1. I installed Delphi 2007 RTM to a custom foder, say C:\BORLAND\BDS 2. Than I installed 2694 (was that update 1?) expected: files should be copied to the folder RTM was initially installed. actual: I got all the installation foder under C:\Program Files\RAD Studio

QC #:

Date Reported:

Area:

47208

6/7/2007

Database\Data Aware Controls\TDBLookupComboBox

Description:

Steps:

[QC Short Description]
Object Inspector

[QC Description]
A combobox of available fields is not there when setting listfield and keyfield properties of a TDBLookupComboBox after setting the listsource property.

IOW: User expects a drop down list when clicking on listfield, or on keyfield after setting the listsource.
QC Entry 47208

1. New VCL forms App - Delphi for Win 32 2. Add an TADOConnection (ADOConnection1), a TADOQuery (ADOQuery1) and a TDatasource (DataSource1). 3. Set ADOConnection1's ConnectionString to point to the Northwind database of MSSQL 2000 or 2005. 4. Set ADOQuery1's Connection property to the ADOConnection1. 5. Set the DataSet property of the DataSource1 component to ADOQuery1. 6. Set the SQL text of the ADOQuery1 to select * from Employees 7. Add a DBLookupComboBox to the form. 8. Set the DBLookupComboBox1's ListSource property to DataSource1. 9a Click on ListField OR 9b Click on KeyField ACT: No dropdown list box on either ListField or KeyField listing possible fields. EXP: Dropdown listbox on 9a or 9b.

QC #:

Date Reported:

Area:

52511

9/25/2007

Database\Data Access Controls

Description:

Steps:

[QC Short Description]
Problem with TClientDataSet.Locate

[QC Description]
When I tried to execute
ClientDataSet.Locate(FieldName, Str, []);


where Str is any string with length more then 256 symbols I recieved full application crash.

The problem is in following code

procedure TExprParser.NextToken;
var
...
StrBuf: array[0..255] of WideChar;
...
begin
...
if L < SizeOf(StrBuf) then
begin
StrBuf[L] := P^;
Inc(L);
end;

/////////
SizeOf(StrBuf) = 512 so we have buffer overflow when Length(Str) > 256
This also applies to ClientDataSet. Filter :=
and some other places.

QC Entry 52511


// Francois Piette
I see this in build 2857.9907.4

Several repeated calls to SetLength(Str, 512); ClientDataSet.Locate(FieldName, Str, []);

QC #:

Date Reported:

Area:

46268

5/20/2007

Database\TField\TNumericField

Description:

Steps:

[QC Short Description]
TFMTBCDField's DisplayFormat does not display correct format

[QC Description]
again problem in displayFormat

my DisplayFormat = #,###,##0.00

Field value = 1 display 1,00 ( OK )
Field value = 1.01 display 1,01 ( OK )
Field value = .01 display ,01 ( error )

correct it would be display 0,01

what it can be?
QC Entry 46268

TFMTBCDField.GetText depends on FormatBCD which produces the expected result. Seen here in the source for DB.pas.

procedure TFMTBCDField.GetText(var Text: string; DisplayText: Boolean);
var
Format: TFloatFormat;
Digits: Integer;
FmtStr: string;
Bcd: TBcd;
begin
try
if GetData(@Bcd, False) then
begin
if DisplayText or (EditFormat = '') then
FmtStr := DisplayFormat else
FmtStr := EditFormat;
if FmtStr = '' then
begin
if FCurrency then
begin
if DisplayText then Format := ffCurrency else Format := ffFixed;
Digits := CurrencyDecimals;
end
else begin
Format := ffGeneral;
Digits := 0;
end;
Text := BcdToStrF(Bcd, Format, FPrecision, Digits);
end else
Text := FormatBcd(FmtStr, Bcd);
end else
Text := '';
except
on E: Exception do
Text := SBCDOverflow;
end;
end;

(This test presumes "," is the thousands separator and "." is the decimal point)

program BTS263754;
{ TFMTBCDField's DisplayFormat does not display correct format
}
{$APPTYPE CONSOLE}

uses
FMTBcd,
SysUtils;

var
Value: TBCD;
RetVal: String;
begin
try
Value := StrToBCD('.01');
RetVal := FormatBCD('#,###,##0.00', Value);
if RetVal = '0.01' then
WriteLn('PASS')
else
WriteLn('FAIL RetVal=', RetVal);
except
on E: Exception do
WriteLn('FAIL - Exception=', E.ClassName, '/', E.Message);
end;
end.

QC #:

Date Reported:

Area:

29889

6/7/2006

Database\Core VCL

Description:

Steps:

[QC Short Description]
ftFixedWideChar type checking is missing in many places

[QC Description]
In db.pas, ftFixedWideChar has been added to the TFieldType array. However, searching through db.pas shows that it is missing from all places where there are CASE fieldtype OF ... constructs. This affects methods like TParam.GetDataSize, TParam.GetData... etc etc.

no test program should be necessary; it is obvious from db.pas that the new fieldtype is not fully implemented yet.
QC Entry 29889

If, like NexusDB, you implement your TDataset descendant with support for this new fieldtype, you will get a nasty surprise when trying to use it with parameters etc.

QC #:

Date Reported:

Area:

33936

9/14/2006

Database\ADO

Description:

Steps:

[QC Short Description]
When using SQL Server Decimal data type Delphi uses TBCDField instead of TFMTBcdField

[QC Description]
When using SQL Server Decimal data type, Delphi uses TBCDField instead of TFMTBcdField. TBCDField accepts only 4 digits to the right of the decimal place.

Changing TADOQuery.EnableBCD to False, Delphi uses TFloatField, but it accepts only 15 digits to the right and
left of the decimal place.

The solution is to use TFMTBCDField.
QC Entry 33936

Using Delphi 2006: create a TDBGrid linked in a TDataSource linked in a TClientDataSet linked in a TDataSetProvider linked in a TADOQuery linked in TADOConnection. Insert the following SQL command in TADOQuery: SELECT * FROM TestTable After execute TClientDataSet.Open, the value that is shown is 123456789012345.1392 instead of 123456789012345.123456789012 If TADOQuery.EnableBCD will set to False, the value that is shown is 123456789012345 instead of 123456789012345.123456789012 If a TFMTBCDField will be created manually, an error occurs. All the images are attached below.

QC #:

Date Reported:

Area:

50327

8/10/2007

Database\ADO

Description:

Steps:

[QC Short Description]
TADODataSet throws "invalid variant operation" exception

[QC Description]
Technical stuff

OS.........: Windows XP SP2 and Windows Vista Business
MDAC.......: 2.81.1117.0
Compiler...: Delphi 2007 for Win32 (11.0.2709.7128)
Database...: MS-SQL Server 2005 Developer and Express with SP2 (9.0.3042)
QC Entry 50327

Take a look at the example source code (attachment) and you can see everything works fine with an access database/tables. Try the same thing with MS-SQL 2005 tables where the primary keys are BIGINT and the foreign key ADDR_ID in the second table is also an BIGINT. Debugging --> ADODB.PAS Failure in procedure TCustomADODataSet.RefreshParams; in sub function function MasterFieldsChanged: boolean; { .. } if Parameters.ParamByName(MasterField.FieldName).Value <> MasterField.Value then // <-- This creates the "invalid variant operation" { ... } How to solve? Seems to be a problem with trying to compare an varDecimal with varInt64?

QC #:

Date Reported:

Area:

41818

3/4/2007

Database\DBExpress

Description:

Steps:

[QC Short Description]
Dragging and dropping from the dataexplorer window is not hooking up the components correctly.

QC Entry 41818


[QA Update]
The real issue here is if you have a DBXConnection name that shares the same name as a table within the database you are connecting too, then you will get this error if you drag THAT table name onto the form and try activate it. (It's ugly then but works the rest of the time.)

1) Create a DbxExpress connection in the dataexplorer window to the Employee Interbase database. Name the connection "Employee".
//Note*

2) Create a new vcl forms application
3) In the data explorer browse down to the tables list
4) Drag the employee table from the data explorer onto the form design surface
5) 2 components are created. A tsqlconnection and a tsqldataset.

Expected: sqlconnection property for sqldataset should be "Employee"
actual: sqlconnection property for sqldataset is "SqlDataSet1"

So its pointing at itself.

If I attempt to change the sqlconnection property via the dropdown an access violation occurs. It appears all i can do is terminate the IDE by force.

QC #:

Date Reported:

Area:

45645

5/8/2007

Database\DBExpress

Description:

Steps:

[QC Short Description]
dbExpress-MySql: Query-Connections do not get closed

[QC Description]
I use a tSqlConnection to connect to a local MySql 5.0 Server.
If I fire two different querys (tSqlQuery) alternativly several times, I get the message that there are too many connections. Opening the MySql-Administrator, I found that for every query a connection is opened, but it does not get closed again.
QC Entry 45645



Note from Tomohiro Takahashi:
Use of transaction explicitly at every query is a possible workaround like this.
---------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
t: TDBXTransaction;
begin
t := SQLConnection1.BeginTransaction;
SQLQuery1.Open;
SQLQuery1.Close;
SQLConnection1.CommitFreeAndNil(t);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
t: TDBXTransaction;
begin
t := SQLConnection1.BeginTransaction;
SQLQuery2.Open;
SQLQuery2.Close;
SQLConnection1.CommitFreeAndNil(t);
end;
--------------------------------------

See
TDBXBugsSuite.Native.DB.Test.exe -s:TestRaid_250570

-or-
object SQLConnection1: TSQLConnection
ConnectionName = 'MySQLConnection'
DriverName = 'MySQL'
GetDriverFunc = 'getSQLDriverMYSQL'
LibraryName = 'dbxmys30.dll'
LoginPrompt = False
Params.Strings = (
'DriverName=MySQL'
'HostName=localhost'
'Database=world'
'User_Name=root'
'Password=????'
'BlobSize=-1'
'ErrorResourceFile='
'LocaleCode=0000'
'Compressed=False'
'Encrypted=False')
VendorLib = 'libmysql.dll'
Left = 24
Top = 24
end
object SQLQuery1: TSQLQuery
MaxBlobSize = -1
Params = <>
SQL.Strings = (
'select * from country')
SQLConnection = SQLConnection1
Left = 96
Top = 24
end
object SQLQuery2: TSQLQuery
MaxBlobSize = -1
Params = <>
SQL.Strings = (
'delete from country where id=13;')
SQLConnection = SQLConnection1
Left = 144
Top = 24
end
object SQLDataSet1: TSQLDataSet
DbxCommandType = 'Dbx.SQL'
MaxBlobSize = -1
Params = <>
SQLConnection = SQLConnection1
Left = 240
Top = 48
end
end
******************************************
procedure TForm1.Button1Click(Sender: TObject);
begin
sqlQuery1.Open;
sqlQuery1.Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
sqlQuery2.ExecSQL;
sqlQuery2.close;
end;

QC #:

Date Reported:

Area:

23024

1/2/2006

Database\DBExpress\TSQLConnection

Description:

Steps:

[QC Short Description]
can't correctly set transaction isolation level in MSSQL 2000

[QC Description]
When using this component with MSSQL 2000 Server,transaction isolation level cannot be set with it's TTransactionDesc.IsolationLevel.
Example:
var
t: TTransactionDesc;
begin
t.TransactionID:=1;
t.IsolationLevel:=xilDIRTYREAD;
SQLConnection1.StartTransaction(t);
//SQLConnection1.Execute('...');
SQLConnection1.Commit(t);
end;
This should set transaction isolation level to "Read Uncommitted",but instead it set to "Read Committed"!!!
After several times of testing,I found out that to change the isolation level,I have to:
1.Close and reopen SQLConnection1
2.Set SQLConnection1.Params.Values['MSSQL TransIsolation']:=DIRTYREAD
3.Start the transaction

This looks like a bug,because I have to do these 3 steps everytime I want to change the transaction isolation level in MSSQL 2000.Please Fix this problem!!!
QC Entry 23024

TDBXTiburonBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:oTestRaid_238263

Example:
var
t: TTransactionDesc;
begin
t.TransactionID:=1;
t.IsolationLevel:=xilDIRTYREAD;
SQLConnection1.StartTransaction(t);
//SQLConnection1.Execute('...');
SQLConnection1.Commit(t);
end;
This should set transaction isolation level to "Read Uncommitted",but instead it set to "Read Committed"!!!
After several times of testing,I found out that to change the isolation level,I have to:
1.Close and reopen SQLConnection1
2.Set SQLConnection1.Params.Values['MSSQL TransIsolation']:=DIRTYREAD
3.Start the transaction


QA Update:
Here's the output from SQLMonitor w/ RTM build:
OLEDB - IDBInitialize
OLEDB - IDBCreateSession
OLEDB - IDBCreateCommand
OLEDB - ITransactionLocal
OLEDB - StartTransaction
OLEDB - ICommandText
select * from orders
OLEDB - SetCommandText
OLEDB - Execute
OLEDB - GetResult
OLEDB - IColumnsInfo
OLEDB - GetColumnInfo
OLEDB - Release
OLEDB - IAccessor
OLEDB - CreateAccessor
OLEDB - ReleaseAccessor
OLEDB - Release
OLEDB - Release
OLEDB - Release
OLEDB - Commit

QC #:

Date Reported:

Area:

6903

1/13/2004

Database\DBExpress\TSQLQuery

Description:

Steps:

Hi,

Take a look at the source below, it comes from the Delphi 7
dbExpress component TSQLQuery.

Despite "ParamCheck = False", it still parses the text for
parameters when the text is set at design time. This modifies
the original SQL to include "?" instead of ":<something>".

When you are, for example, trying to create an InterBase
stored procedure, the text can contain ":<something>" that
should not be replaced by "?" cause it will fail. Setting
it at run-time fixes the problem, but this is a workaround.

Comments?

procedure TSQLQuery.QueryChanged(Sender: TObject);
var
List: TSQLParams;
begin
if not (csReading in ComponentState) then
begin
Close;
SetPrepared(False);
if ParamCheck or (csDesigning in ComponentState) then
begin
List := TSQLParams.Create(Self);
try
FText := SQL.Text;
List.Parse(FText, True);
List.AssignValues(FParams);
FParams.Clear;
FParams.Assign(List);
finally
List.Free;
end;
end else
FText := SQL.Text;
DataEvent(dePropertyChange, 0);
end else
FText := FParams.ParseSQL(SQL.Text, False);
SetFCommandText(FText);
end;

QC Entry 6903

Drop a TSQLQuery on your form, set "ParamCheck" to false and enter a text for the "SQL" property that contains ":" characters

QC #:

Date Reported:

Area:

54673

11/10/2007

Database\dbExpressCore

Description:

Steps:

[QC Short Description]
Incorrect String for the TDBXErrorCodes.NotImplemented const

[QC Description]
The class TDBXErrorCodes has an incorrect string for the TDBXErrorCodes.NotImplemented const:

...
TDBXErrorCodes.MissingParameterMarker: Result := 'MissingParameterMarker';
TDBXErrorCodes.NotImplemented: Result := 'MissingParameterMarker'; <<<<<---
TDBXErrorCodes.DriverIncompatible: Result := 'DriverIncompatible';
...
QC Entry 54673

// Francois Piette
Still in 2902.10471

Open DBXCommon.pas source file
Go to line 4239
You see this:
TDBXErrorCodes.NotImplemented: Result := 'MissingParameterMarker';
Expected:
TDBXErrorCodes.NotImplemented: Result := 'NotImplemented';

QC #:

Date Reported:

Area:

30682

6/28/2006

International\Translation

Description:

Steps:

[WRONG TRANSLATION]

Still present in Spacely

[QC Short Description]
French translation for H2365 is incorrect

[QC Description]
The English message for H2365 reads like this

The overloaded TForm1.create method should have the same case as the ancestor TCustomForm.Create

In French, the word "case" has been left as is, which does not mean the way a word is written with respect to Upper/Lower case. It means "box" which is a bit weird ;-)
The valid translation would be "casse" with two s' so that the final message reads

H2365 La m thode TForm1.create red finie devrait avoir la m me casse que l'anc tre TCustomForm.Create
QC Entry 30682

SEE Jean-claude comment

Create a new VCL forms application
Declare an overriden create constructor, with a lower case c
Compile.

The source is closely:

type
TForm1 = class(TForm)
private
{ Private declarations }
public
constructor create(AOwner: TComponent); override;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

constructor TForm1.create(AOwner: TComponent);
begin
inherited;
end;

Warning text: is [DCC Avertissement] Unit1.pas(14): H2365 La m�thode TForm1.create red�finie devrait avoir le m�me case que l'anc�tre TCustomForm.Create

QC #:

Date Reported:

Area:

45688

5/9/2007

International\Truncation

Description:

Steps:

[QC Short Description]
Truncated option in German Options-Dialog

[QC Description]
On the Tool Palette options page, a string is truncated.
QC Entry 45688

In the german version, go to Tools->Optionen->Tool-Palette

QC #:

Date Reported:

Area:

11132

3/1/2005

VCL

Description:

Steps:

[QC Short Description]
Syncronize component between personalities - TLinkLabel

[QC Description]
Syncronize component sets between personalities - TLinkLabel
.

Each personality should have components which are present in another (where applicable)...

Diffeences results are available here:
http://www.dragonsoftru.com%?go=d7d2005

I am looking mostly for WinForms -> VCL.Net -> VCL.win32 sync.
QC Entry 11132

QC #:

Date Reported:

Area:

3166

8/16/2005

VCL

Description:

Steps:

Delphi Win32 VCL has been requested by numerous customers to support Unicode strings.

See NETFR13910

QC #:

Date Reported:

Area:

45828

5/11/2007

VCL

Description:

Steps:

[QC Short Description]
Control-Scaling fails if AlignWithMargin / Padding is used

[QC Description]
The vcl-internal scaling is broken or at least produces unexpected (incorrect?) results if aligning is used, AlignWithMargin and/or Padding is set and the form/controls are scaled (e.g. due to a changed system-font/size or some other call to ScaleBy).
QC Entry 45828

.) create a new vcl-project and change to its new empty form .) place a TLabel at position 0/0, enter some text .) place a TPanel at the form, set - Panel1.Align to alTop - Panel1.AlignWithMargin to True - Panel1.Margin.Top to 13 (so that it is positioned exactly below the Label .) place a Button on the form, set its OnClick to procedure TForm3.Button1Click(Sender: TObject); begin ScaleBy(2, 1); end; run the app. > In the beginning the form looks fine (TPanel is located BELOW the label) > Press the Button > Form is scaled to double the size (including Fontsizes), however > Layout is BROKEN (Panel1 is positioned over the label, not anymore below it) Reason is that aligning takes into account Panel1.Margin, however TControl.Margin is not correctly scaled (it isn't scaled at all!) The same problem can be seen if padding is used... Effectively this makes using Padding/AlignWithMargin useless/impossible if the forms might be scaled (Form.Scaled is set to True).

QC #:

Date Reported:

Area:

11139

3/1/2005

VCL

Description:

Steps:

Promote TTrayIcon from demo to palette.

[QC Short Description]
Syncronize component sets between personalities - NotifyIcon

[QC Description]
Syncronize component sets between personalities - NotifyIcon

Each personality should have components which are present in another (where applicable)...

Diffeences results are available here:
http://www.dragonsoftru.com%?go=d7d2005

I am looking mostly for WinForms -> VCL.Net -> VCL.win32 sync.
QC Entry 11139

QC #:

Date Reported:

Area:

44990

4/25/2007

VCL

Description:

Steps:

[QC Short Description]
hidden MessageDlg/InputQuery spawn from stayontop forms

[QC Description]
MessageDlg and InputQuery dialogs are "hidden" when called from StayOnTop forms if the form covers the desctop center. I'm running WinXPSP2. See belove code sample to reproduce the code. The same code works fine in Delphi 2006
QC Entry 44990

//DMF object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 222 ClientWidth = 325 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False Position = poDesktopCenter PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 130 Top = 8 Width = 75 Height = 25 Caption = 'CreateForm' TabOrder = 0 OnClick = Button1Click end object Button2: TButton Left = 49 Top = 72 Width = 75 Height = 25 Caption = 'MessageBox' TabOrder = 1 OnClick = Button2Click end object Button3: TButton Left = 130 Top = 72 Width = 75 Height = 25 Caption = 'MessageDlg' TabOrder = 2 OnClick = Button3Click end object Button4: TButton Left = 208 Top = 72 Width = 75 Height = 25 Caption = 'InputQuery' TabOrder = 3 OnClick = Button4Click end end //CODE unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private FFrm:TForm1; public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if Assigned(FFrm) then FreeAndNil(FFrm) else begin FFrm:=TForm1.Create(Self); FFrm.FormStyle:=fsStayOnTop; FFrm.PopupParent:=Self; FFrm.Caption:=Self.Caption+'.Form1'; FFrm.Show; end; end; procedure TForm1.Button2Click(Sender: TObject); begin Windows.MessageBox(Handle,PChar(Application.Title),PChar('Msg'),MB_OK or MB_ICONQUESTION); end; procedure TForm1.Button3Click(Sender: TObject); begin MessageDlg('Msg',mtInformation,[mbOK],0); end; procedure TForm1.Button4Click(Sender: TObject); var s0:string; begin InputQuery('ACaption','AMessage',s0); end; end.

QC #:

Date Reported:

Area:

46982

6/3/2007

VCL

Description:

Steps:

[QC Short Description]
Commonly Get Extra Taskbar Item

[QC Description]
Very commonly, after launching the IDE on Vista Ultimate with compositing (Glass) enabled, I end up with two taskbar entries for the IDE. One (the first) is blank. The second has the proper caption. This happens frequently if the system is being taxed while loading the IDE.
QC Entry 46982

Tap your cores. Easiest way for me to duplicate this: 1) Download and install WinRAR 2) Select the entire setup folder for the IDE and start compressing it. This taps both cores for me Now, after assuring all cores are tapped: 1) Launch the IDE 2) While the splash screen is visible, click repeatedly until Vista says that the program is not responding - AT THIS POINT you should get a taskbar entry with a blank caption 3) Click to Wait for the program to respond on the Vista dialog 4) Wait for the IDE to load After loading, another taskbar entry (the "proper" one) is added to the blank one.

QC #:

Date Reported:

Area:

47918

6/21/2007

VCL

Description:

Steps:

[QC Short Description]
IDE Menu Toolbar painting and performances issues under Windows Vista

[QC Description]
Customizing the IDE menu is a real pain under Windows Vista
Note that the IDE imust be maximized

- lelft clicking on the Grip will make the toolbar's border vanishing



- draging one menu Toolbar over another menu toolbar make the IDE unreponsive (60 % CPU time)
- draging one menu Toolbar over the IDE form caption make the IDE unreponsive (90% CPU time)

On all dragging cases, main menu, toolsbars are vanishing during all the draging time.
When toolbar is dropped, it is badlby sized (heigth is bigger for about 2 pixels)
QC Entry 47918

Customizing the IDE menu is a real pain under Windows Vista

When the IDE is maximized or not :
- lelft clicking on the Grip will make the toolbar's border vanishing


When the IDE is maximized
- draging one menu Toolbar over another menu toolbar make the IDE unreponsive (60 % CPU time)
- draging one menu Toolbar over the IDE form caption make the IDE unreponsive (90% CPU time)

On all dragging cases, main menu, toolsbars are vanishing during all the draging time.
When toolbar is dropped, it is badlby sized (heigth is bigger for about 2 pixels)


------ TG: 8/25/08
The border vanishing reproduces only occurs for me when maximzed now.
Attached is a simple case that reproduces this bug with a TControlBar and a TToolbar.

QC #:

Date Reported:

Area:

52971

10/4/2007

VCL

Description:

Steps:

[QC Short Description]
Setting TUpDown position to zero is ignored

[QC Description]
Setting the value of the Position property of an UpDown control to 0 is sometimes ignored.
QC Entry 52971

Add a Edit box to a form Add an updown control to the form set the Associated property of the UpDown control to the edit box Add a button to the form Add the code 'updown1.position := 0;' to the OnClick event of the button Run the application. enter a non-zero value into the edit box using the keyboard. Click the button - The value does not change. Change the value using the updown control Click the button - The value is changed to zero.

QC #:

Date Reported:

Area:

29073

5/13/2006

VCL

Description:

Steps:

[QC Short Description]
Add mbClose to MessageDlg (needed for Vista UI Guidelines)

[QC Description]
It should be possible to display an OK button in a Message Dialog.

In Windows Vista User Experience Guidelines it says:

"Don t use OK buttons for errors or warnings. Problems are never OK. Use Close instead."

There is no mbClose in TMsgDlgBtn so I suggest that it be added.

More Info:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/UxGuide/UXGuide/Windows/DialogBoxes/DialogBoxes.asp
(Search for "Use Close instead" on that page)
QC Entry 29073

MessageDlg('Network is unavailable.', mtError, [mbClose], -1);

QC #:

Date Reported:

Area:

39743

2/1/2007

VCL

Description:

Steps:

[QC Short Description]
Update TTokenInformationClass in Windows.pas

[QC Description]
The TTokenInformationClass in Windows.pas needs an update to match the new enum values added for Windows Vista. There are a lot of new information classes, and most of them also need added types for the token data.

Why it this needed so bad?
In order to be able to check if a process is elevated in the Vista UAC you need to check the new information classes "TokenElevationType" and "TokenElevation".

Windows.pas should contain the following declarations.

TTokenInformationClass = (
TokenUser = 1,
TokenGroups,
TokenPrivileges,
TokenOwner,
TokenPrimaryGroup,
TokenDefaultDacl,
TokenSource,
TokenType,
TokenImpersonationLevel,
TokenStatistics,
TokenRestrictedSids, //<- New ones from here
TokenSessionId,
TokenGroupsAndPrivileges,
TokenSessionReference,
TokenSandBoxInert,
TokenAuditPolicy,
TokenOrigin,
TokenElevationType,
TokenLinkedToken,
TokenElevation,
TokenHasRestrictions,
TokenAccessInformation,
TokenVirtualizationAllowed,
TokenVirtualizationEnabled,
TokenIntegrityLevel,
TokenUIAccess,
TokenMandatoryPolicy,
TokenLogonSid,
vMaxTokenInfoClass
);
{$EXTERNALSYM TTokenInformationClass}

TTokenElevetionType = (
TokenElevetionTypeDefault = 1,
TokenElevationTypeFull,
TokenElevationTypeLimited
);
PTokenElevetionType = ^TTokenElevetionType;

_TOKEN_ELEVATION = packed record
TokenIsElevated : DWord;
end;
TTokenElevation = _TOKEN_ELEVATION;
PTokenElevation = ^TTokenElevation;

Note that more class token declarations needs to be added for all the other new information classes. I have however only focused on the parts needed for Vistas UAC and Elevation check.
QC Entry 39743

Windows.pas contains the following setup for TTokenInformationClass: TTokenInformationClass = (TokenICPad, TokenUser, TokenGroups, TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl, TokenSource, TokenType, TokenImpersonationLevel, TokenStatistics); {$EXTERNALSYM TTokenInformationClass} The updated code should look like this: TTokenInformationClass = ( TokenUser = 1, TokenGroups, TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl, TokenSource, TokenType, TokenImpersonationLevel, TokenStatistics, TokenRestrictedSids, TokenSessionId, TokenGroupsAndPrivileges, TokenSessionReference, TokenSandBoxInert, TokenAuditPolicy, TokenOrigin, TokenElevationType, TokenLinkedToken, TokenElevation, TokenHasRestrictions, TokenAccessInformation, TokenVirtualizationAllowed, TokenVirtualizationEnabled, TokenIntegrityLevel, TokenUIAccess, TokenMandatoryPolicy, TokenLogonSid, vMaxTokenInfoClass ); {$EXTERNALSYM TTokenInformationClass}

QC #:

Date Reported:

Area:

26909

4/2/2006

VCL

Description:

Steps:

[QC Short Description]
Provide an overload for RoundRect that has a TRect parameter

[QC Description]
Consider providing an overload to the RoundRect method on theTCanvas class that accepts a TRect parameter.

Possible declaration
procedure RoundRect(const aRect: TRect; const aCX, aCY: Integer);

where aCX and aCY parameters are the curve for the corners.
QC Entry 26909

QC #:

Date Reported:

Area:

53424

10/14/2007

VCL

Description:

Steps:

[QC Short Description]
Assigning to TStringList.Capacity can raise AV or corrupt memory

[QC Description]
If you're not careful, assigning to TStringList.Capacity can cause an access violation, or in worse cases, memory corruption.

Unlike TList.SetCapacity, TStringList.SetCapacity does not verify that the requested capacity is >= the current Count.
In addition, it does not verify that the requested capacity is <= MaxListSize, which can lead to an integer overflow on the ReallocMem line.

To fix both of these problems, TStringList.SetCapacity should be changed to read as follows:

procedure TStringList.SetCapacity(NewCapacity: Integer);
begin
if (NewCapacity < FCount) or (NewCapacity > MaxListSize) then
Error(@SListCapacityError, NewCapacity);
if NewCapacity <> FCapacity then
begin
ReallocMem(FList, NewCapacity * SizeOf(TStringItem));
FCapacity := NewCapacity;
end;
end;

(I simply copied & pasted the relevant lines from TList.SetCapacity.)
QC Entry 53424

1. To reproduce the first problem, run: var SL: TStringList; begin SL := TStringList.Create; SL.Add('test'); SL.Capacity := 0; if SL[0] = 'test' then // crashes with access violation here -- bad Beep; end; 2. To reproduce the second problem (integer overflow on ReallocMem line), run: var SL: TStringList; begin SL := TStringList.Create; SL.Capacity := $40000000; // should raise exception, but doesn't! SL.Add('testing'); // crashes with access violation here -- bad end; The results are better when we test with TList: var L: TList; begin L := TList.Create; L.Add(nil); L.Capacity := 0; // "List capacity out of bounds" exception -- good if L[0] = nil then Beep; end; var L: TList; begin L := TList.Create; L.Capacity := $40000000; // "List capacity out of bounds" exception -- good L.Add(nil); end;

QC #:

Date Reported:

Area:

955

4/22/2002

VCL

Description:

Steps:

[QC Short Description]
Native PNG image support

[QC Description]
Would sure be nice to support PNG images out of the box.
QC Entry 955

QC #:

Date Reported:

Area:

25811

3/7/2006

VCL

Description:

Steps:

*QA update, this is not just adoQuery.SQL, any TWideStrings load from file will cause this.*

[QC Short Description]
ADOQuery.SQL.LoadFromFile() corrupts text file contents

[QC Description]
When ADOQuery.SQL.LoadFromFile() is used, it incorrectly loads the Text and turns into trash.
QC Entry 25811

1) Create an application with a TAdoQuery
2) Create a text file with a simple SQL statement like "Select * From Customers"
3) Run the app and load the text file using ADOQuery.SQL.LoadFromFile('SQL.txt') and then examine the contents of the SQL.

My results:

'SELECT * FROM customers'

was turned into:

'???'#$2A20'???????sM customers'


/--- OR --/
wStrs := TWideStrings.Create;
wStrs .LoadFromFile( 'file.txt' );

QC #:

Date Reported:

Area:

23607

1/16/2006

VCL

Description:

Steps:

[QC Short Description]
HTML Help: keywords don't work

[QC Description]
The keywords of the new introduced HTML help don't work. The help calls the file specified but doesn't open the right keyword.
QC Entry 23607

1. build some simple app. with a text edit who should get a help topic
2. set the helptype property of the edit to htKeyword
3. set helpkeyword to the word 'foo' or 'bar' or 'baz'
4. set under form helpfile a valid html-helpfile (chm format) with the keyword 'foo' or 'bar' or 'baz' included
5. under uses in the program add HTMLHelpViever
6. compile and run it
7. go to the edit and press F1

The right file will be opened, but the topic is not called.

CWhite : I have added a project that duplicates this bug. Just simply open it and press F1 on the edit.

QC #:

Date Reported:

Area:

55759

12/10/2007

VCL

Description:

Steps:

[QC Short Description]
Setting Form.PopupMode to pmAuto causes undesirable consequences

[QC Description]
Changing Form.PopupMode to pmAuto is the recommended solution to solve the Z-order bug and one of the reasons for many people to buy Delphi2006, but doing so causes some components like comboboxes not to work as they should.
QC Entry 55759

1. Run the attached program exp: Items in the combobox act: No items appear in the combobox 2. Change the PopupMode property of the applications main form to pmNone 3. Recompile and run the application again exp: Items in the combobox act: Items in the combobox

QC #:

Date Reported:

Area:

36603

11/15/2006

VCL\Additional Controls

Description:

Steps:

[QC Short Description]
TCategoryButtons Memory leaks ActionLinks

[QC Description]
ReportMemoryLeaksOnShutdown reports small block leaks:-

TButtonItemActionLink x the number of buttons you have linked to an action

TBaseButtonItem in CategoryButtons.pas is missing a destructor which releases FActionLink.
QC Entry 36603

1. Download and run the attached test case exp: no memory leaks should be reported act: one class TButtonItemActionLink is leaked

QC #:

Date Reported:

Area:

9323

10/13/2004

VCL\Additional Controls\Action Bar Controls

Description:

Steps:

[QC Short Description]
ColorMap frequently reverts to defaults

[QC Description]
I randomly get the same problem in the IDE or at application execution runtime

----------------------------------
Original message from jeremy@ninprodata.com in borland.public.delphi.vcl.components.using

I have instantiated a color map & modified the colors, which I use for my actionbar. Unfortunately, it periodically reverts to the defaults & I have to re-set everything.
QC Entry 9323

Put "any" colormap on a new form. Change the Color value to a non default one. If you make any change to Windows settings (like appareance of the desktop), the colormap resets to the default colors. --- Analyzing the source, I noticed that the following piece of code in ActnMan.pas does reset colors to default (resetting ALL modifications - design or runtime) procedure TCustomActionBar.CMWinINIChange(var Message: TMessage); begin inherited; ColorMap.UpdateColors; end; ----- suppressing the WinIniChange message processing by TCustomActionBar does solve the problem. The change of color set for the windows desktop is correctly handled by the inherited routines and reflected in the toolbar.

QC #:

Date Reported:

Area:

34744

10/2/2006

VCL\Additional Controls\Action Bar Controls

Description:

Steps:

[QC Short Description]
Add DropDownButtonWidth as a virtual method on the TCustomDropDownBtn class

[QC Description]
Add DropDownButtonWidth as a virtual method on the TCustomDropDownBtn class. This is the base class responsible for drawing the drop down buttons when using the Action Manager.

Currently the width of the drop down portion of the button is set using the cDropDownButtonWidth constant. This is not good when you want to change the width of the button because you then have to override all methods that access the cDropDownButtonWidth constant.

I suggest add a new virtual function called DropDownButtonWidth and returning the default width of 9.

People enhancing the action manager styles can then override DropDownButtonWidth if they require the drop down portion of the button for their style to be larger.
QC Entry 34744

QC #:

Date Reported:

Area:

26576

3/27/2006

VCL\Additional Controls\Action Bar Controls

Description:

Steps:

[QC Short Description]
TActionManager access violation on delete

[QC Description]
Deleting an Action from a linked Action Main Menu or Action Tool Bar gives an Access Violation, occasionally killing Delphi.
QC Entry 26576

Open the Actionbar demo supplied by Borland (it's called wordpad.dpr) At design time, click on the Format menu, then select one of the sub items such as Align Left, hit the delete key on the keyboard Delphi pops up an access violation. By Serge + $0[5205F7B8]{vcl100.bpl } Controls.Controls.TWinControl.HandleAllocated (Line 8936, "Controls.pas" + 0) + $0 + $0[51F26B4B]{rtl100.bpl } System.System.@HandleAnyException (Line 9980, "system.pas" + 13) + $0 + $41[7C903786]{ntdll.dll } RtlConvertUlongToLargeInteger + $41 + $9[7C90EAF5]{ntdll.dll } KiUserExceptionDispatcher + $9 + $2[5205B05A]{vcl100.bpl } Controls.Controls.TWinControl.Realign (Line 6460, "Controls.pas" + 0) + $2 + $18[04BFA59D]{vcldesigner100.bpl} VCLSurface.VCLSurface.TVclDesignSurface.IsDesignMsg (Line 3028, "vclsurface.pas" + 12) + $18 + $21[520587C3]{vcl100.bpl } Controls.Controls.TControl.WndProc (Line 5064, "Controls.pas" + 4) + $21 + $6[5205CA19]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7246, "Controls.pas" + 105) + $6 + $5[5207124D]{vcl100.bpl } Forms.Forms.TCustomForm.WndProc (Line 3284, "Forms.pas" + 125) + $5 + $C[22193DF7]{delphivclide100.bpl} VCLFormContainer.VCLFormContainer.TControlSizer.ControlWndProc (Line 305, "VCLFormContainer.pas" + 33) + $C + $6[5205C1A4]{vcl100.bpl } Controls.Controls.TWinControl.MainWndProc (Line 7021, "Controls.pas" + 3) + $6 + $0[51F60BC0]{rtl100.bpl } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0 + $6A[77D48731]{USER32.dll } GetDC + $6A + $14A[77D48811]{USER32.dll } GetDC + $14A + $122[77D489C8]{USER32.dll } GetWindowLongW + $122 + $A[77D496C2]{USER32.dll } DispatchMessageA + $A + $1[218B98EB]{vclactnband100.bpl} ActnMenus.ActnMenus.TCustomActionMenuBar.ProcessMenuLoop (Line 1338, "ActnMenus.pas" + 18) + $1 + $5[218B9FE0]{vclactnband100.bpl} ActnMenus.ActnMenus.TCustomActionMenuBar.TrackMenu (Line 1538, "ActnMenus.pas" + 8) + $5 + $3[218BD460]{vclactnband100.bpl} ActnMenus.ActnMenus.TCustomActionMainMenuBar.TrackMe

QC #:

Date Reported:

Area:

34578

9/28/2006

VCL\Additional Controls\Action Bar Controls

Description:

Steps:

[QC Short Description]
Make the drawing of the arrow in TCustomDropDownButton a virtual method

[QC Description]
Currently in the Paint method for ActnCtrls.TCustomDropDownButton.Paint there is code to draw the drop down arrow.

The problem is that if you want to draw the arrow differently in a descendant you need to include all of the Paint code from TCustomButtonControl and TCustomActionControl as well as your new arrow drawing code.

My suggestion is to provide a DrawArrow virtual method for TCustomDropDownButton and move the code from the Paint override into the DrawArrow method.

eg:

procedure TCustomDropDownButton.DrawArrow;
begin
if Enabled then
Canvas.Pen.Color := ActionBar.ColorMap.FontColor
else
Canvas.Pen.Color := ActionBar.ColorMap.DisabledFontColor;
DrawArrow(Canvas, sdDown, Point((ClientWidth - cDropDownButtonWidth div 2) - 3,
ClientHeight div 2 - 1), 2);
end;
QC Entry 34578

QC #:

Date Reported:

Area:

32858

8/18/2006

VCL\Additional Controls\Action Bar Controls\TActionManager

Description:

Steps:

[QC Short Description]
TCustomToolScrollBtn override of CalcBounds should be public

[QC Description]
The TCustomToolScrollBtn class overrides the CalcBounds method but incorrectly declares the method as protected, when it should be public.
QC Entry 32858

From ActnCtrls.pas Currently ======= TCustomToolScrollBtn = class(TCustomUtilityButton) protected procedure DrawArrows; override; procedure CalcBounds; override; public constructor Create(AOwner: TComponent); override; end; Should Be ======== TCustomToolScrollBtn = class(TCustomUtilityButton) protected procedure DrawArrows; override; public constructor Create(AOwner: TComponent); override; procedure CalcBounds; override; end;

QC #:

Date Reported:

Area:

26285

3/19/2006

VCL\Additional Controls\Action Bar Controls\TActionManager

Description:

Steps:

[QC Short Description]
The AddRemoveMenu Item class for the Standard and XP Style allows the highlighting of the separator

[QC Description]
When the Add or Remove buttons menu is displayed the separators are listed in the menu as well. These seperators are then highlighted like the buttons although clicking on them doesn't select or unselect them.
QC Entry 26285

(add attachement and step)
1. Open demo project : \BDS\5.0\Demos\DelphiWin32\VCLWin32\ActionBands
2. run application
3. in running applicaiton, click down arrow button at right side of ActionToolbar, select "Add or Remove Button"
4. mouse hover on seperator
// exp : it is not highlighted
// act : it is highlighted

QC #:

Date Reported:

Area:

31683

7/24/2006

VCL\Additional Controls\Action Bar Controls\TActionManager

Description:

Steps:

[QC Short Description]
ActionManager Memory issue with FastMM4 installed

[QC Description]
When using full debug mode with FastMM4 installed (from sourceforge)
there is an error in the Action Manager control.

It is easy to reproduce but does require downloading and configuring
fastmm (http://fastmm.sourceforge.net)


I consider this a serious bug because I can not use the FullDebug capabilities of FastMM until this issue is resolved.
QC Entry 31683

1. Open the WordPad demo in the ActionBands folder under demos (for win32) 2. Add FastMM4 to the project file. It must be the first file in the uses clause 3. Set the FileName property of the TActionManager control to some valid location (file will be created). Example "c:\toolbars.dat" 4. Run application 5. Close application 6. Run application again (this will then load the toolbars saved in the toolbars.dat file) 7. Shutdown application If you have FastMM configured correctly you will get a memory error when freeing FDefaultActionBars in the destructor of TActionManager (sorry I didn't debug further into this). Make sure you copy the FastMM_FullDebugMode.dll to the same folder that has the executable or to a folder on your path variable (so it can be found). Turn FullDebugMode on in the FastMM4Options.inc file.

QC #:

Date Reported:

Area:

45096

4/26/2007

VCL\Additional Controls\Action Bar Controls\TMainMenuActionBar

Description:

Steps:

[QC Short Description]
TMainMenuActionBar MDI Window

[QC Description]
The MDI windowlist menu specified in the TMainMenuActionBar.WindowMenu property does not fill correctly.

No matter how you specify the menu name in this property, at runtime the Window menu does not get populated with a list of MDI child windows.

The only way I could get it to work was to

A) Set the property at runtime.
B) At design time set the property to a nonsense setting (i.e. a menu item that does not exist).

This was tested on a Dev machine running windows VISTA Ultimate in Basic Areo mode
QC Entry 45096

1. Unzip attached file to an empty directory, you get MenuDemo app
2. Run Delphi 2007, close all
3. Open MenuDemo project
4. Compile and run
5. In MenuDemo : Menu / File / Open child
6. In MenuDemo : Menu / File / Windows
=> You don't see "Form2" added to the menu. This is the bug.
7. Click button "Fix it"
8. In MenuDemo : Menu / File / Windows
=> Now you see "Form2"

Do steps 3 to 8 using D7 and it works as expected.

QC #:

Date Reported:

Area:

15502

8/29/2005

VCL\Additional Controls\Action Bar Controls\TPopupMenuActionBar

Description:

Steps:

[QC Short Description]
The PopupActionBar doesn't support drawing Default items in bold

[QC Description]
The PopupActionBar doesn't support drawing Default menu items in bold.

Setting the Default property to True when adding menu items to the PopupActionBar doesn't mean that the items are then drawn as bold at runtime. When the TPopupMenu's items have the default property set, the menu item correctly draws as Bold.
QC Entry 15502

QC #:

Date Reported:

Area:

9851

12/9/2004

VCL\Additional Controls\Action Bar Controls\TPopupMenuActionBar

Description:

Steps:

[QC Short Description]
ColorMap property missing from PopupActionBar component

[QC Description]
The PopupActionBar component does not have a ColorMap property. Consequently, when using action menus, it is not possible to synchronise the colours of popup menus with the main menu.
QC Entry 9851

Note:
A Style property has been added instead of a ColorMap property.

QC #:

Date Reported:

Area:

23527

1/13/2006

VCL\Additional Controls\Action Bar Controls\TToolActionBar

Description:

Steps:

[QC Short Description]
Make FTallest of TCustomActionBar accessable

[QC Description]
Please make TCustomActionBar.FTallest accesible by a protected property, just like FWidest already is
QC Entry 23527

line 647 of ActnMan.pas please make FTallest of TCustomActionBar, like FWidest, accessable by a protected property.

QC #:

Date Reported:

Area:

23524

1/13/2006

VCL\Additional Controls\Action Bar Controls\TToolActionBar

Description:

Steps:

[QC Short Description]
TCustomActionToolBar.GetScrollBtnClass declaration is missing virtual directive

[QC Description]
TCustomActionToolBar.GetScrollBtnClass is obvisouly designed to allow descendants to override this method (similar to GetPopupClass), but it isn't declared as virtual.
QC Entry 23524

line 216 in ActnCltrs.pas: function GetScrollBtnClass: TCustomToolScrollBtnClass; please make this method virtual, in contrast this method makes no sense

QC #:

Date Reported:

Area:

43452

3/29/2007

VCL\Core VCL Classes

Description:

Steps:

[QC Short Description]
THintWindow should support native Win Style

[QC Description]
I have been searching for a way how to change the look of Delphi Hints within Application to native style (especially under Vista: Hints are yellow instead of blue gradient).

I ve tried several ways (HintWindowClass, VCL patch and OnHint Events).

Why did Borland use own windows for hints instead of Tooltips_Class?

Has anybody a solution or could confirm this is fixed in D2007?

Regards
Arvid
QC Entry 43452

Example: Run any Delphi Application with Hints under Vista. The hints are yellow (even with clInfoBk set as Application.HintColor) not blue gradient.

QC #:

Date Reported:

Area:

5950

9/14/2003

VCL\Core VCL Classes

Description:

Steps:

[QC Short Description]
Twincontrol.WMKillFocus wrong Message

[QC Description]
Wrong implementation of TWinControl.WMKillFocus

in control.pas you have:

procedure TWinControl.WMKillFocus(var Message: TWMSetFocus);

instead of

procedure TWinControl.WMKillFocus(var Message: TWMkillFocus);

If you check dbcgrids.pas you have the good implementation:
procedure TDBCtrlGrid.WMKillFocus(var Message: TWMKillFocus);

QC Entry 5950

1. Open Controls.pas 2. Go to declaration for WMKillFocus procedure in TWinControl. 3. Note that Message is declared as type TWMSetFocus instead of TWMKillFocus

QC #:

Date Reported:

Area:

56256

12/20/2007

VCL\Core VCL Classes\TForm

Description:

Steps:

[QC Short Description]
poScreenCenter does not work with multiple monitors

[QC Description]
When you set the Position property of a form to poScreenCenter, it is supposed to center the form on the screen where the active form is located.

This works as long as the active form is on the primary monitor. But when the active form is on a secondary monitor, the form will center on the active form instead of on that monitor.

I think the bug is in TCustomForm.SetWindowToMonitor. The form position is never adjusted in this case (the inner loop in SetWindowToMonitor is never executed).
QC Entry 56256

1. Create an application with 2 forms 2. Leave the main form alone 3. Set the Position property of the other form to poScreenCenter 4. Add a button to the main form, and show the other form in its OnClick event: procedure TMainForm.ButtonClick(Sender: TObject); var F: TSubForm; begin F := TSubForm.Create(Self); F.ShowModal; F.Free; end; 5. Run the application 6. Drag the application form to a secondary monitor 7. Click the button The sub form is centered on the main form now. It should be centered on the secondary monitor. 8. Drag the application form to the primary monitor 9. Click the button The sub form is now correctly centered on the primary monitor

QC #:

Date Reported:

Area:

55660

12/6/2007

VCL\Core VCL Classes\TForm

Description:

Steps:

[QC Short Description]
Application.CreateForm corrupts memory if the form constructor raises an exception

[QC Description]
If a form is created via Application.CreateForm, but an exception is raised during execution of the form's constructor then the memory pool is corrupted.

The problem lies in the following code snippit taken from Application.CreateForm (around line 8200 in forms.pas):

try
...
Instance.Create(Self);
...
finally
if IsCreatingMainForm(TControl(Instance)) then
ClearCreatingMainForm(TControl(Instance));
end;

In this try...finally section the "Instance" variable is modified by the ClearCreatingMainForm procedure. However, if an exception was raised during the form's constructor the memory for "Instance" is automatically freed, so when the finally section is executed "Instance" no longer points to a valid memory address. As a consequence the memory pool is corrupted.

This bug is new to Delphi 2007. See the attachment for an example.

The fix is to change the finally section to:

finally
if (TComponent(Reference) <> nil) and IsCreatingMainForm(TControl(Instance)) then
ClearCreatingMainForm(TControl(Instance));
end;
QC Entry 55660

1) Run the attached example 2) Click the button Expected: No error Actual: FastMM reports a memory corruption

QC #:

Date Reported:

Area:

48727

7/8/2007

VCL\Core VCL Classes\TForm

Description:

Steps:

[QC Short Description]
Forms are not positioned correctly when poScreenCenter or poDesktopCenter is used

[QC Description]
When you set a forms position to be either poScreenCenter or poDesktopCenter the resulting position doesn't take into account the taskbar position.

You cannot reproduce this report if your taskbar is set to AutoHide. So you must set AutoHide taskbar to false in the taskbar properties.
QC Entry 48727

1. Load D2007 2. File | New | VCL Forms Application 3. Double click the form to generate an OnCreate event 4. Add the following code to the OnCreate event ShowMessage('Hello World'); MessageBox(0, 'Hello World', 'Project22.exe', 0); exp: The positions of the displayed dialogs are almost the same act: The dialog positions are very different NOTE: 1. I know that the ShowMessage dialogs width is smaller than the MessageBox dialog width. You need to take this into account when comparing the left positions of the attached images. 2. It is hard to tell if your Taskbar is the default height (although this is how I noticed it on Vista). Recommended step ============ Drag your taskbar height (or width if it is left or right aligned) to be really big. It makes it more obvious to see the bug Screen shots are attached

QC #:

Date Reported:

Area:

2913

11/14/2002

VCL\Core VCL Classes\Streaming

Description:

Steps:

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils, classes;

type tmyclass = class( tpersistent);

begin
registerclassalias( tmyclass, 'WillWork');
registerclassalias( tmyclass, 'D7WillRaiseAnException');
registerclassalias( tmyclass, 'D7WillNeverSeeThisLine');
end.


This code works as expected with D5.

It does not work with D7, since RegisterClassAlias calls RegisterClass which is no longer comparing the class pointer before checking the class name, thus raising an exception on the second call.

JensG
QC Entry 2913

QC #:

Date Reported:

Area:

53932

10/24/2007

VCL\Core VCL Classes\TApplication

Description:

Steps:

[QC Short Description]
Pop-up hints cause an exception when controlled via UltraVNC

[QC Description]
When a Delphi (D2007 update3) application runs on a remote machine under the control of UltraVNC, and the viewer has been closed and re-opened, hovering the mouse over a control which has a Hint causes an exception.

This does not happen with other applications and does not happen with applications compiled with Delphi 5 (the only other Delphi version I have tried).
QC Entry 53932

1. Start a new Win32 forms application. 2. Add a button, add Close (or anything else) in its OnClick event. 3. Add a hint text for the button and set ShowHint to True. 4. Compile the program and copy the executable to a machine running UltraVNC server. 5. Using UltraVNC viewer, start the program on the remote machine. Note that hovering the mouse over the button correctly displays the hint. 6. Close UltraVNC viewer and then re-open it. Note that hovering the mouse over the button causes an exception to pop up. Clicking OK on the exception pop-up does not terminate the program, but removes the pop up. Both machines running XP SP2. Using UltraVNC 1.02 (the current stable release). The exception occurs in TMonitor.GetBoundsRect and apparently because the Monitor.Handle is zero. This behaviour has not been seen with any other application and does not occur when the same test application has been built with Delphi 5.

QC #:

Date Reported:

Area:

52256

5/21/2007

VCL\Core VCL Classes\TApplication

Description:

Steps:

Taskbar button is not hidden when the MainForm is hidden and MainFormOnTaskbar is False.

Regression.

* File New VCL Application
* Drop a button on the form
* In the OnClick handler, enter "Hide;"
* View | Project Source
* Set Application.MainFormOnTaskbar := False;
* Run, click on the button
// Exp: The taskbar button is hidden
// Act: The taskbar button is still visible

QC #:

Date Reported:

Area:

51420

8/31/2007

VCL\Core VCL Classes\TApplication

Description:

Steps:

[QC Short Description]
Application.Minimize fails in certain cases when MainFormOnTaskBar = True

[QC Description]
If you are displaying a modal form (which is not the main form) and you call
Application.Minimize, the behaviour is not as expected. The expected
behaviour is for the application to minimize, but what happens is that the
modal form minimizes to the bottom-left corner of the desktop and
subsequently cannot be restored. Closing this minimized form closes the
whole application, instead of just the form.

Tested under XP SP2 and Vista 32-Bit with identical results.

See steps in conjunction with the attachment.


[SB: Fixed on Vista, not on XP]


QC Entry 51420

1) Compile and run the attached application 2) Click "Show Modal Form" 3) Click "Call Application.Minimize" Expected: Application minimizes Actual: "Modal Form" minimizes and cannot be restored. Closing it closes the application.

QC #:

Date Reported:

Area:

34763

10/3/2006

VCL\Core VCL Classes\TApplication

Description:

Steps:

[QC Short Description]
Application.HelpJump does not work with WinHelpViewer

[QC Description]
If the WinHelpViewer unit is added to a VCL for Win32 project, the Application.Helpfile property set to a WinHelp file, and a call to Application.HelpJump is coded to open a help topic nothing happens, the help file is not shown.

The problem is a wrong default returned from the TWinHelpViewer.UnderstandsTopic method. It will always return false since no WinHelpTester is installed by default. It should return true instead.

Proposed fix:
function TWinHelpViewer.UnderstandsTopic(const Topic: String): Boolean;
begin
{ after setting the defaults, if there's a Tester, ask it. }
if Assigned(WinHelpTester) then
Result := WinHelpTester.CanShowTopic(Topic, HelpFile(''))
else
Result := true; // was Result := false;
end;
QC Entry 34763

Create a new VCL for Win32 forms application. Add the WinHelpViewer unit to the Uses clause. Drop a TButton on the form and double-click it to create an OnClick handler. Modify the handler to procedure TForm1.Button1Click(Sender: TObject); begin Application.HelpFile := 'C:\WINDOWS\Help\mspaint.hlp'; Application.HelpJump('TestTopic'); end; You may need to adjust the path for the help file. Any WinHelp help file will do. Build and run the project, click the button. Expected: Winhelp opens the file and presents the "Topic not found" error message. Actual: Nothing happens at all.

QC #:

Date Reported:

Area:

51831

9/11/2007

VCL\Core VCL Classes\TWinControl

Description:

Steps:

[QC Short Description]
Edit, Memo, ComboBox, ... context menus are not displayed anymore

[QC Description]
The fix for QC 42752 broke the default context menus for TEdit, TMemo, TComboBox and all other windows controls with a default popup menu.
QC Entry 51831

1. Create a new VCL application 2. Drop a TEdit on the form 3. Start the application 4. Right click on the edit Expected: The Cut/Copy/Paste/Delete popup menu appears Actual: Nothing happens because the "Exit" in the TWinControl.DefaultHandler stops the processing of WM_CONTEXTMENU

QC #:

Date Reported:

Area:

22657

12/21/2005

VCL\Core VCL Classes\TFrame

Description:

Steps:

[QC Short Description]
Frame layout destroyed after save/load
ref:233600
[QC Description]
See the attached pictures - basically this is a showstopper for me as the frame-layout gets corrupted in a /very/ bad way.

This report is somewhat similar to QC 13681
QC Entry 22657

jt: seems stream a TFrame do not take width and height info if the Frame is set as alClient

hf: confirmed what jt added. it is directly related to alClient.

(1) Make a new DW32 project and include the supplied frame ("Unit8.pas/dfm").
(2) Switch to Unit8 and the forms designer.
(3) change the alignment property of the frame to alClient
(4) save
(5) either close/load the unit or just do 'view as text' followed by 'view as form'
(6) layout totally corrupted

(jt add:)
it also exist in D7, basically reproducable steps is:
1. File | New | VCL Win32 Applicaiton
2. Add New Frame
3. Resize Frame larger, roughly width > 800
4. set Frame.Align as alClient
5. Save
6. right click Frame | View as Text
// see Frame is:
object Frame2: TFrame2
.............
Width = 1151

7. View as Form
// the Frame is resized back

QC #:

Date Reported:

Area:

37436

12/7/2006

VCL\Graphics

Description:

Steps:

[QC Short Description]
rounding issue in ColorRGBToHLS (GraphUtil)

[QC Description]
there seems to be a rounding issue in ColorRGBToHLS. For example RGB - 196.136.248 results in 181-181-214 but shlwapi version (or the common color dialog) convert to 181-181-213.

See Steps and also refer to http://support.microsoft.com/kb/29240

QC Entry 37436

1. Download and run the attached test case 2. Click Button1; the caption of the form shows that RGB 196.136.248 results in HLS 181-181-214 and a color dialog opens 3. expand the color dialog and enter RGB 196, 136, 248, see that it converts to HLS 181-181-213!

QC #:

Date Reported:

Area:

6018

9/19/2003

VCL\Graphics

Description:

Steps:

An icon always reports width and height as 32x32 before drawing it.
QC Entry 6018

QC #:

Date Reported:

Area:

5806

9/2/2003

VCL\Exceptions

Description:

Steps:

Resourcestring 'SDuplicateName' is defined twice:
- in RTLConsts
- in DBConsts

Because of this unit order in DB.pas:

implementation

{$IFDEF MSWINDOWS}
uses DBConsts, RTLConsts, ComObj, ActiveX;
{$ENDIF}
{$IFDEF LINUX}
uses DBConsts, RTLConsts, MaskUtils, Types;
{$ENDIF}

the error text from DBConsts is never used...
If you have a duplicate entry in TFieldDefs or TIndexDefs you get the error message 'Component xyz already exists', which is a bit misleading.

The problem is also present in Delphi 7 / 4.453.
QC Entry 5806

Start a new application, drop a TTable on it. On FormCreate, add the following code: procedure TForm1.FormCreate(Sender: TObject); begin Table1.FieldDefs.Add('Field',ftString, 10); Table1.FieldDefs.Add('Field',ftString, 10); end; Run the application. An exception with the message "A component named Field already exists." will be raised.

QC #:

Date Reported:

Area:

47610

6/24/2002

VCL\Standard Controls\TComboBox

Description:

Steps:

under XP/Luna interface, TComboBox can not handle DBCS character correctly.

BackSpace key delete a data of invalid position.

[note] newsgroup complains about this problem a lot. [QC Entry 47610]

A TComboBox drop on a form.
Create manifest file to use XP/Luna interface.
(See attached files)

1. Run Application under XP.
2. Type some DBCS character into ComboBox.
3. Hit BackSpave key. Last DBCS character is not deleted. (See attached bitmao)

QC #:

Date Reported:

Area:

11017

2/18/2005

VCL\Standard Controls\TLabel

Description:

Steps:

[QC Short Description]
Optimize TCustomLabel.DoDrawText when Text is empty

[QC Description]
TCustomLabel.DoDrawText can be optimized when the label Text is empty, exiting the routine earlier.

See steps.
QC Entry 11017

StdCtrls.TCustomLabel.DoDrawText ... if (Flags and DT_CALCRECT <> 0) and ((Text = '') or FShowAccelChar and (Text[1] = '&') and (Text[2] = #0)) then Text := Text + ' '; if Text = '' then Exit; // <----- stop here when Text is empty ...

QC #:

Date Reported:

Area:

40945

2/20/2007

VCL\Standard Controls\TMainMenu

Description:

Steps:

[QC Short Description]
right Alt key causes expection error in Vista

[QC Description]
Pressing right alt key leads to "Access violation at address 00000000. Read of address 00000000."

This error occurs in Menus.pas: IsAltGRPressed.
"DLLName := R.ReadString('Layout File');" returns empty string, which makes SafeLoadLibary/GetProcAddress fail.

Windows Vista only.

Pressing the right Alt key probably causes the error in the IDE editor as well. (Haven't installed Spacely in Vista, but it does crash BDS 2006, which has the same VCL code).

My keyboard is set to "English (United States) - US" in the Windows Control Panel.

// Francois Piette
Giel told me it is still in 11.0.2902.10471. I can't reproduce on my Vista system.
Giel told me this happend when you remove some keyboard layour which result in deleted registry key which in turn crash the VCL code.
QC Entry 40945

Add TMainMenu to new VCL app. Run it in Vista and press right Alt key. Exception error appears.

This happend when you remove a keyboard layout using control panel.
This result in a registry key being deleted and later used by VCL code.
VCL code is not ready to have key deleted and crashes.

Here is the mail from the original author:
> From: MultitrackStudio Info[SMTP:INFO@MULTITRACKSTUDIO.COM]
> Sent: Friday, January 11, 2008 10:50:02 AM
> To: Francois Piette
> Subject: Re: [CodeGear] QC40945
>
> Hello Francois,
>
> Yes it is specific to my system, but it's very easy to get in this
> situation: I used the Control Panel's "Regional and Language Options". It
> lets you remove "text services", which apparently deletes to the registry
> value. The computer works fine, only Delphi apps cause an exception error
> if
> I press the right Alt key.
>
> It can be solved in Menus.pas: procedure GetAltGRStatus contains these
> lines:
>
> R.OpenKeyReadOnly(LayoutsListRegKey + LayoutName);
> DLLName := R.ReadString('Layout File');
> DLLHandle := SafeLoadLibrary(DLLName);
> try
> fKbdLayerDescriptor := GetProcAddress(DLLHandle,
> 'KbdLayerDescriptor');
> pKbdTable := fKbdLayerDescriptor;
>
> IsAltGRKeyLayout := (LoWord(pKbdTable.fLocaleFlags) and KLLF_ALTGR)
> = KLLF_ALTGR;
> finally
> FreeLibrary(DLLHandle);
> end;
>
> Checking the result of OpenKeyReadOnly solves the problem (and is good
> practice anyway):
>
> if R.OpenKeyReadOnly(LayoutsListRegKey + LayoutName) then
> begin
> DLLName := R.ReadString('Layout File');
> DLLHandle := SafeLoadLibrary(DLLName);
> try
> fKbdLayerDescriptor := GetProcAddress(DLLHandle,
> 'KbdLayerDescriptor');
> pKbdTable := fKbdLayerDescriptor;
>
> IsAltGRKeyLayout := (LoWord(pKbdTable.fLocaleFlags) and
> KLLF_ALTGR) = KLLF_ALTGR;
> finally
> FreeLibrary(DLLHandle);
> end;

QC #:

Date Reported:

Area:

11018

2/18/2005

VCL\Standard Controls\TPanel

Description:

Steps:

[QC Short Description]
TCustomPanel.Paint can be optimized when Caption is empty

[QC Description]
TCustomPanel.Paint method can be optimized when the panel Caption property is empty.

See steps.
QC Entry 11018

ExtCtrls.TCustomPanel.Paint ... with Canvas do begin if not ThemeServices.ThemesEnabled or not ParentBackground then begin Brush.Color := Color; FillRect(Rect); end; if Caption = '' then Exit; // <-- stop here when Caption is empty Brush.Style := bsClear; Font := Self.Font; ....

QC #:

Date Reported:

Area:

9430

10/22/2004

VCL\Standard Controls\TScrollBar

Description:

Steps:

[QC Short Description]
SBM_GETSCROLLBARINFO missing in Messages.pas

[QC Description]
A constant for the numerical value for the message identifier for SBM_GETSCROLLBARINFO is missing. I guess it should be located in Messages.pas right along with the other scroll bar related messages.

WinUser.h includes the following lines:

#if(_WIN32_WINNT >= 0x0501)
#define SBM_GETSCROLLBARINFO 0x00EB
#endif /* _WIN32_WINNT >= 0x0501 */
QC Entry 9430

(Applies to D7 and D2005)

QC #:

Date Reported:

Area:

24359

2/1/2006

VCL\Sample Controls\TTrayIcon

Description:

Steps:

[QC Short Description]
Missing property TTrayIcon.OnBalloonClick

[QC Description]
Missing the property OnBalloonClick no action can be executed by clicking on it. Please insert my suggestion written under Workaround - it's just a tiny job!!!
QC Entry 24359

Set a TTrayIcon component onto a mainform. Configure and run it, application hidde at startup, balloonhint shown with the content to click it to show the application. Click on it: Nothing happens because it could not be implemented.

QC #:

Date Reported:

Area:

686

4/11/2002

VCL\Printing

Description:

Steps:

[QC Short Description]
Changing PrinterIndex doesn't update documentproperties such as Tray, pages per page

[QC Description]
When changing the PrinterIndex from TPrinter the document properties aren't updated.

For example :
When i have copy a Printer in the windows printers configuration en set the Tray to 'Manual' and don't set it as the default printer.
The from delphi Change the PrinterIndex so that the copied printer will be the new printer.
Then the printer settings are used from the default printer !
QC Entry 686
[In Delphi 7]

1. Add two printers to the windows printers confioguration.
2. Change to landscape printing for a non-default printer.
3. New app, drop button, double click, add

procedure TForm1.Button1Click(Sender: TObject);
begin
Printer.PrinterIndex := 1;
Caption := 'or:'+
inttostr(ord(Printer.Orientation))+' for ' + Printer.Printers[1];
end;
4. Add Printers to the uses list.
5. Run, click button - Then the default-settings of this printer aren't loaded, shows "or:0 <name", exp: or:1 for landscape.

---------

An example of a solution :

procedure SetPrinterIndex(Value: Integer);


procedure TPrinter.SetPrinterIndex(Value: Integer);
// ----- Begin NEW PART -----
var
lDevice, lDriver, lPort : Array[0..255] of Char;
lDeviceMode : Cardinal;
// ----- End NEW PART -----
begin
CheckPrinting(False);
if (Value = -1) or (PrinterIndex = -1) then
begin
SetToDefaultPrinter;
end else begin
if (Value < 0) or (Value >= Printers.Count) then RaiseError(SPrinterIndexError);

// ----- Begin NEW PART -----
Printer.GetPrinter(lDevice, lDriver, lPort, lDeviceMode);
GlobalUnlock(lDeviceMode);
GlobalFree(lDeviceMode);
lDeviceMode := 0;
Printer.SetPrinter(lDevice, lDriver, lPort, lDeviceMode);
// ----- End NEW PART -----

end;
FPrinterIndex := Value;
FreeFonts;
SetState(psNoHandle);
end;


// Additional comment (Bruno Sonnino)

This bug is still in Delphi 7 and also affects the Devmode that is passed to CreateDC/CreateIC in TPrinter.SetState (The Devmode for the default printer is always passed). The proposed fix, putting the line:
FPrinterIndex := Value;
before the fix (and not after, as it's shown), fixes also this problem.

QC #:

Date Reported:

Area:

55116

11/21/2007

VCL\Printing

Description:

Steps:

[QC Short Description]
"Printer.PrinterIndex := -1;" raises a "List index out of bounds (-1)" exception

[QC Description]
"Printer.PrinterIndex := -1;" causes a "list index out of bounds" exception instead of selecting the default printer (as previous builds do).

The problem lies in printers.pas on line 769 with the code "Printers.Objects[Value]", since Value = -1 here and -1 is not a valid index into Printers.Objects.

It's new to build 2877 AFAIK.
QC Entry 55116

1) Run the code "Printer.PrinterIndex := -1;" Expected: The default printer is selected Actual: "List index out of bounds (-1)" exception

QC #:

Date Reported:

Area:

25466

2/26/2006

VCL\Multi-Monitor Support

Description:

Steps:

[QC Short Description]
AV in TScreen.FindMonitor

[QC Description]
One of my customers reports that clicking the black drop-down triangle next to the toolbar button (TToolButton) on my application's toolbar frequently causes an Access Violation.

I am unable to reproduce this on my test systems. However, the attached stack trace produced by Eurekalog on the customer's system does point potential sources of the error.

It seems that TToolbar.CheckMenuDropdown calls TScreen.MonitorFromPoint and then calls TMonitor.GetHeight for the returned monitor object. It seems that for some reason, MonitorFromPoint is returning nil, causing an AV when GetHeight is called.

QC Entry 25466

I can't reproduce it on my own systems, but the attached log file from Eurekalog shows the bug is pretty real. Also note that the whole stack trace consists of VCL units and Windows DLLs, so the bug isn't in my own code.

QC #:

Date Reported:

Area:

54077

10/28/2007

VCL\Multi-Monitor Support

Description:

Steps:

[QC Short Description]
Incorrect Multi Monitor behaviour if secondary Monitor is to left or above Primary

[QC Description]
If I arrange my monitors on my computer (WinXP SP2) so that my Secondary monitor is to the left (or above) the Primary monitor, then the following problems occur if I run a program on the secondary monitor:

If a form has a toolbar with buttons that have a dropdownmenu attached, then the DropDown Menu does not appear at the correct location.

Also, sometimes the program crashes when one of these buttons is clicked. I have noticed that after a program is left idle for a while, then, sometimes, Screen.MonitorFromPoint returns nil. Not sure why.

See Workaround for modification to ComCtrls.pas to fix the above problems.

Note that this was first reported in QC 9006 however QC 9006 was only half fixed.

QC Entry 54077

1) Start new Application project in Delphi 2) Add a toolbar to Form1 3) Add a button to Toolbar 4) Add a PopupMenu to Form1 5) Add a menu item to Popup Menu and set its caption to some text 6) Specify the PopupMenu in the toolbar button's DropDownMenu property 7) Arrange your monitors so the second monitor is to the left of the primary monitor 8) Run the program and move it to the secondary monitor. 9) Click the button - the dropdown menu will not appear in the correct location.

QC #:

Date Reported:

Area:

54719

11/12/2007

VCL\Win 3.1 Controls\TTabSet

Description:

Steps:

[QC Short Description]
TTabset: Last character of tab label cut off.

[QC Description]
The last character of a tab label in a TTabset control might get cut off when using certain fonts like the standard "MS Sans Serif".

(Bug appears in Delphi 2007 for Win32 and .NET, but not in Delphi 7.)
QC Entry 54719


// Francois Piette
I see this in 2902.10471

Add a TTabSet to a Form. Add a Tab to it named 'test.xml'. Change the Fontname to "MS Sans Serif". Result: The 'l' from 'test.xml' vanishes.

QC #:

Date Reported:

Area:

4653

6/5/2003

VCL\Win 32 Controls\TImageList

Description:

Steps:

Windows XP icons don't show up correctly in TImageList. They get black outline when displayed. The issue has to do with WinXP's high color icons / alpha blending.
QC Entry 4653

This appears to be a VCL problem with TImageList not supporting 32-bit XP icons. See workaround section for more info. To reproduce the problem, compile and run the attached test application on WinXP. The application loads and displays one of the WinXP standard icons.

QC #:

Date Reported:

Area:

38178

12/29/2006

VCL\Win 32 Controls\TProgressBar

Description:

Steps:

[Fixed in Tiburon]
Progress bars flicker on Windows Vista

[QC Description]
On Windows Vista with TXPManifest, each time you change the Position property on a progress bar, the whole control flickers.

Cause:

Unlike previous versions of Windows, Vista sends a WM_ERASEBKGND message every time a progress bar's position changes. TWinControl's default handling of WM_ERASEBKGND does a FillRect on the entire client area.

Fix:

The solution is simple. A WM_ERASEBKGND handler needs to be added to TProgressBar that calls DefaultHandler. This bypasses TWinControl.WMEraseBkgnd and its FillRect call.

...
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
...
procedure TProgressBar.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
DefaultHandler(Message);
end;

Note: This fix does not harm compatibility with Windows 95/98/Me/NT/2000/XP.
(Yes, I've tested it on all those OSes.)
QC Entry 38178

1. Create a new Delphi for Win32 project. 2. Drop these components on the form: TXPManifest TProgressBar TButton 3. On the TProgressBar component, set the Width property to 300. 4. On the TButton component, create an OnClick handler with the following code: procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin Button1.Enabled := False; for I := 1 to 100 do begin ProgressBar1.Position := I; Application.ProcessMessages; Sleep(75); end; Button1.Enabled := True; end; 5. Run on Vista. Click the button, and watch closely. Notice that the whole control appears to "blink" several times as it's moving.

QC #:

Date Reported:

Area:

11976

4/11/2005

VCL\Win 32 Controls\TTreeView

Description:

Steps:

[QC Short Description]
TTreeNode constructor is not virtual

[QC Description]
Developers cannot use the OnCreateNodeClass event to instantiate custom descendant classes that implement their own constuctors because the TTreeNode constructor is not declared as virtual. TTreeView.CreateNode() calls the TTreeNodeClass.Create() constructor after the OnCreateNodeClass event handler exits.
QC Entry 11976

QC #:

Date Reported:

Area:

717

4/12/2002

VCL\Win 32 Controls\TListView

Description:

Steps:

[QC Short Description]
TListView can not show InfoTip when Checkboxes set to True

[QC Description]
While ViewStyle=vsReport and Checkboxes=False(the default value) and has multiple columns, TListView could show the full text of an item in a tooltip if the column isn't wide enough to display the text, after setting Checkboxes to True, the tooltip never get activated. The cause is as below,starting from line 13614 in ComCtrls.pas (TCustomListView.ResetExStyles):

13614: Styles := LVS_EX_SUBITEMIMAGES or LVS_EX_INFOTIP;
13615: if FCheckboxes then Styles := LVS_EX_CHECKBOXES;

IMO, the second line should be changed to:
if FCheckboxes then Styles := Styles or LVS_EX_CHECKBOXES;
to fixed this problem.
QC Entry 717

QC #:

Date Reported:

Area:

2230

8/29/2002

VCL\Win 32 Controls\TListView

Description:

Steps:

[QC Short Description]
TListView does not expose OnCreateItemClass event

[QC Description]
TCustomListView declares a protected OnCreateItemClass event. But TListView does not expose access to that event at all.

This is different than TTreeView, which does expose the OnCreateNodeClass event inherited from TCustomTreeView.
QC Entry 2230

see ComCtrls.pas line 2559:
property OnCreateItemClass: TLVCreateItemClassEvent read FOnCreateItemClass write FOnCreateItemClass;

This event should be published in TListView

QC #:

Date Reported:

Area:

11977

4/11/2005

VCL\Win 32 Controls\TListView

Description:

Steps:

[QC Short Description]
TListItem constructor is not virtual

[QC Description]
Developers cannot use the OnCreateItemClass event to instantiate custom descendant classes that implement their own constuctors because the TListItem constructor is not declared as virtual. TListView.CreateListItem() calls the TListItemClass.Create() constructor after the OnCreateItemClass event handler exits.
QC Entry 11977

QC #:

Date Reported:

Area:

41329

2/26/2007

VCL\Win 32 Controls\TListView

Description:

Steps:

[QC Short Description]
TLVGroup is added to CommCtrl, but then TLVItem should have iGroupId

[QC Description]
Declarations for the new grouping of the TListView are added to CommCtrl.pas, but TLVItem (TLVItemA/tagLVITEMA) is missing the following fields:

iGroupId: Integer;
cColumns: UINT;
puColumns: PUINT;

So CommCtrls is not yet 100% XP ready in that area.

Maybe this has not been changed for backwards compatibility, but then maybe another TLVItem should be introduced that does have those new fields.
QC Entry 41329

Try to set the GroupID of a TListItem

QC #:

Date Reported:

Area:

21520

11/17/2005

VCL\Action Classes

Description:

Steps:

[QC Short Description]
TActionList and TSpeedButton/TBitBtn

[QC Description]
If you set a speed button (or TBitBtn) to use an action, it will
use the image associated with the action. And now in DeXter if the
imageindex changes on the action, it will also change the button. So far
this is good.

But if I'd like to customize the button's glyph (not use the action's image), I should be able to do so, but I can't. The action will always override the glyph with its image.

This is a problem if I'd like to use a 4-state image for the button so that I can control how the glyph displays in the disabled state. glyFx bitmaps strongly reveal this issue.
QC Entry 21520

Open a new TForm in the Delph IDE. Drop a TActionList, TImageList and TSpeedButton and a TBitBtn onto the form. Load a single 16x16 glyFx button image into the image list. Set the action lists's Images property to the image list. Create a new action (Action1) in the action list. Set its image index to 0. Set the two buttons Action property to Action1. (The image should appear on the buttons.) Now load a 2-state button image (attached) into the Glyph of each button and run the program. (The glyph you just loaded has been ignored in lieu of the action's image.)

QC #:

Date Reported:

Area:

8178

5/15/2004

VCL\Action Classes

Description:

Steps:

[QC Short Description]
TActionToolBar crashes when Action not Assigned to ActionClientItem

[QC Description]
TActionToolBar has XP-style button, for which not assigned property Action in ActionClientItem, but was set ImageIndex >= 0. If Move mouse cursor into button then Application raises as Exception.
QC Entry 8178

1. Create New Application 2. Put ActionManager on the main Form 3. Put ImageList on the Form 4. Load any Icon 16x16 into ImageList1 5. Assign ImageList1 to ActionManager1.Images 6. Put ActionToolBar on the Form, Assign ActionManager1 to ActionToolBar1.ActionManager 7. In ActionManager1 create new ActionBar 8. In ActionManager1.ActionBars[0].Items create new ActionClientItem0 9. Set ActionClientItem0.ImageIndex from (-1) to 0. NOT ASSIGN ANY ACTION TO ActionClientItem0 10. Assign ActionToolBar1 to ActionManager1.ActionBars[0].ActionBar. The button is shown in ActionToolBar1 on the Form 11. Run Application and move mouse cursor into ActionToolBar button. Application raises an Exception in procedure TXPStyleButton.DrawGlyph, because ActionClient.Action is not assigned

QC #:

Date Reported:

Area:

41941

3/5/2007

Debugger

Description:

Steps:

[QC Short Description]
Remote Debugger Environment Variables corruption

[QC Description]
I am attempting to remotely debug applications but several system services fail.

I have tracked this down to what is the most likely cause, environment variables in the remote debugger options (Run | Load Process | Environment Block) are corrupted or simply not functioning.

When I attempt to create a system variable override, the variable shown in the dialog is not the one selected for overriding. Further, if I select one of the last variables in the list, the dialog is not displayed and instead an "index out of range" error is generated.

With no overrides and the "Include System Variables" option enabled, the environment block is still not created for the remote process correctly.

I notice that the first variable (ALLUSERSERPROFILE) is repeated in the system list. This is also the only variable in the remote environment block (other than an invalid "C:" variable).

If I attempt to delete any overrides, I am not successfull. I must delete them from the registry, instead.

I have not been able to get this to work using any combination of configuration options. Both machines are WindowsXP Home.
QC Entry 41941

1. Configure a project, development machine and test machine for remote debugging.

2. Load the project process for remote debugging.

3. With support of the project process, display its environment block.

4. Notice that the environment block is invalid.


Note:
Please see RAID#242966, it is same issue.

QC #:

Date Reported:

Area:

55141

11/22/2007

Debugger

Description:

Steps:

[QC Short Description]
"Go to address" no longer remember previously entered values

[QC Description]
The "Go to address" dialog box no longer remembers values entered, the combobox is empty
QC Entry 55141

1) Start the debugger 2) Pause the application 3) Search -> Go to address 4) Enter a value, press ok 5) Search -> Go to address 6) Open the combo to go to the same value 7) Expected: the combo displays the previous value. Actual: the combo is empty

QC #:

Date Reported:

Area:

29214

5/17/2006

Debugger\Evaluator

Description:

Steps:

This is an evaluator issue. You get the same access violation value when evaluating the expression using Evaluate/Modify or setting a Watch.

[QC Short Description]
Tooltip evaluation access violation

[QC Description]
This is a followup from #28759. I now have details on how to reproduce the problem...

Whenever Delphi does the tooltip evaluation for a dataset.fieldbyname('fieldname').as.... expression I get "access violation at 51F277FC accessing FFFFFFF8". This worked fine for Delphi 10.0.2151.25345 (out of the box) and 10.0.2166.28377 (upgrade #1) but happens after upgrade #2.
It evaluates fine if I replace the expression with the TField name (i.e. datasetnamefieldname).
QC Entry 29214

1. Open attached project (requires DBDemos)
2. Ensure Build with Runtime packages is enabled
3. Set a breakpoint on Edit1.text := Query1.fieldbyname('company').asstring;
4. Run to the breakpoint
5. Evaluate (Debug|Evaluate/Modify) Query1.fieldbyname('company').asstring

[QC Steps]
1. I built a new computer using Win XP Professional + SP2.
2. I installed Delphi 2006 Professional; .Net and Delphi for Win32.
3. I installed Upgrade #1.
4. I then created a new project (UPG2_DEMODB attached) which does no more than run a query
against your DBDEMOS database are sets two fields to the result...
a) the query is "select company from customers".
b) In OnShow I have...
- dbDBDEMOS.Connected := true;
- Query1.open; // SQL = 'select company from customer'
- Edit1.text := Query1.fieldbyname('company').asstring;
- Edit2.text := Query1company.Value;
c) Project Options.Packages.BuildWithRunTimePackages is set to true (i.e. ticked). This is important!
d) I set a breakpoint on the first assign and waited for the tooltip. It runs OK.
Refer 1_1_OK.jpg in the attachment.
5. I then installed Upgrade #2. Rebuilt the project and ran it again...
d) I set a breakpoint on the first assign and waited for the tooltip. It fails.
Refer 2_1_Fail.jpg in the attachment.
e) I then F8 to the next line and waited for the tooltip. It works.
Refer 2_2_OK.jpg in the attachment.

About here I think that I have demonstrated that we have a problem. Now to look for
probable causes and work arounds.

1. If I set Project Options.Packages.BuildWithRunTimePackages is set to false (i.e. not ticked) it works fine.
2. So, I start adding packages one by one. It works with "vcl;rtl;vclx" but with any more the tool tips fail again.

I have zipped the whole project (which includes the jpg files).

Do you need more?

QC #:

Date Reported:

Area:

46860

5/31/2007

Debugger\Remote Debugging

Description:

Steps:

[QC Short Description]
IDE crash when trying to load the remote process

[QC Description]
The IDE crash with an assertion failure when pressing the load process button.

Assert :

Debugger Assertion Failure: "GetLastError() == WSAEINTR"
in ..\win32src\wmcipc.cpp at line 281
Continue execution?
QC Entry 46860

Target Machine Steps: 1. Install the "Remote Debugger" then go in C:\Program Files\RemoteDebugger folder and double click the rmtdbt105 exe On the local Delphi developer machine: 2. Compil the project (be sure that Remote Debugger option is checked in the Linker options in the Project Options). 3. Copy the EXE + RS file on the Target Machine folder (192.168.3..134 > C:\Program Files\DebugApp) 4. in Run menu, select Load Process. Click the Remote item and fill remote path with C:\Program Files\DebugApp\MyApp.exe remote host with 192.168.3.134 5. Click the Load button Act : On the Dev MAchine : assertion failure and Crash of the IDE On the Target Machine : rmtdbt105 crashed too FWIW There is no firewall set on both machines I have disabled A.V. on both Machines.

QC #:

Date Reported:

Area:

50457

8/13/2007

Debugger\Remote Debugging

Description:

Steps:

[QC Short Description]
Delphi 2007 IDE crashes when attempting to connect to Remote Debugger

[QC Description]
While connecting to remote machine running Remote Debugger Delphi 2007 IDE throws this message:

<caption>
bds.exe - bordbk105.dll

<body>
Debugger Assertion Failure: "GetLastError() == WSAEINTR" in ..\win32src\wmcipc.cpp at line 281
Continue execution?

<only OK button is available, no [yes,no/abort] option (is this a feeble joke?)>

After click on [OK], IDE crashes instantly without any further notice. On remote side, Debugger is closed at the very moment.

Both Machines running XP Pro SP2, all Updates installed. Delphi 2007 Pro Update2.
Virscanner and firewalls were deactivated on both sides.
QC Entry 50457

- load "rmtdbg105.exe -listen" on remote side - load Delphi 2007 on local side - select Run/Attach to Process - enter remote machine name or IP - click "Refresh"

QC #:

Date Reported:

Area:

52955

10/4/2007

Debugger\Remote Debugging

Description:

Steps:

[QC Short Description]
Remote debugger doesn't pass command line parameters

[QC Description]
Command line parameters set in the Load Process dialog are not passed to the debugged remote process.
QC Entry 52955


Note from Tomohiro Takahashi
<<<<<<<<<<<<
AFAIK, this issue has been fixed in Tiburon.
Please see RAID#252645.
>>>>>>>>>>>>

Just the usual steps for remote debugging, using also Parameters: 1. In the Load Process dialog - Remote, fill in Remote path, Remote host, Parameters, click Load button to start remote debugging 2. On the remote computer, see that the command line of the debugged process is empty (e.g. using Process Explorer)

QC #:

Date Reported:

Area:

10274

1/11/2005

Debugger\Local Variables View

Description:

Steps:

[QC Short Description]
Crash during debug while viewing local variables

[QC Description]
This happened to me while debugging a program. I managed to recreate it using the steps detailed -->
QC Entry 10274


[BCH]

Create a new VCL Forms Application Place a button on the form Double click on the button to view code Place some code for the button click eg. button1.caption := 'Hi'; Press F5 to set a breakpoint on this line Press F9 to run the application Press the button on the form - this breaks to the debug layout With the debug layout, there is a Local Variables window at the bottom LHS of my screen. In this there is Self and Sender. Moving the mouse over the value beside Self shows a 'tooltip' so I can see the entire text of the value. If the mouse is moved to almost the right most edge of this window (possibly 3 or 4 pixels before it), the tooltip window flashes very fast on and off. After a short time of doing this, the entire IDE just shuts down completely. I will attach a screen shot.

QC #:

Date Reported:

Area:

23434

1/12/2006

Debugger\Event Log View

Description:

Steps:

[QC Short Description]
Event Log Window documentation doesn't mention the methods in which messages can be copied to the clipboard

[QC Description]
Currently messages in the event log window can be copied to the clipboard using either Ctrl+C or the Edit | Copy command in the main IDE window. This is not mentioned in the Help for the Event Log Window.
QC Entry 23434

1. Load the D2006 Help 2. Enter the following URL: ms-help://borland.bds4/bds4ref/html/eventlog.htm

QC #:

Date Reported:

Area:

43091

3/23/2007

AddOn

Description:

Steps:

[QC Short Description]
QC Client does not show on Taskbar

QC Entry 43091

Just launch QC Client and check the task bar...

QC #:

Date Reported:

Area:

42952

3/21/2007

AddOn\TChart

Description:

Steps:

[QC Short Description]
TeeGally.dfm file is missing in \Lib folder

[QC Description]
The file TeeGally.dfm is missing from \Lib folder.
Lib folder contains unit TeeGally.dcu but not it's form dfm file.
QC Entry 42952

Create a new Win32 app, add this to your "uses" clause, and compile. uses TeeGally; Exp: No errors Act: [DCC Error] E1026 File not found: 'TeeGally.DFM'

QC #:

Date Reported:

Area:

25618

3/2/2006

AddOn\Interbase components

Description:

Steps:

[QC Short Description]
can not add embedded users with TIBSecurityService

[QC Description]
When adding embedded users with the TIBSecurityService component, the component is building the sql statement:

CREATE USER xxxx SET PASSWORD xxxxx INACTIVE

The INACTIVE part (or ACTIVE) causes a dynamic SQL error.

adding a user with this component is therefore not possible.
QC Entry 25618

When adding embedded users with the TIBSecurityService component, the component is building the sql statement: CREATE USER xxxx SET PASSWORD xxxxx INACTIVE The INACTIVE part (or ACTIVE) causes a dynamic SQL error. adding a user with this component is therefore not possible.

QC #:

Date Reported:

Area:

45082

4/26/2007

AddOn\Interbase components

Description:

Steps:

[QC Short Description]
AV when closing app with ibx

[QC Description]
when TIBDatabase created in run time, IBSQLMonitor.pas unit finalization is called too soon, before Interface that hold TIBDatabase object go out of context, when IBDatabase.Destroy is called, IBSQLMonitor.MonitorHook is called raising the AV.
QC Entry 45082

Create a Interface and Object, add a field TIBDatabase to object Create a instance of Object, using Interface. let go out of context with app. IBSQLMonitor.finalization is called before the interface go out of context when object is detroyed the IBSQLMonitor.MonitorHook is called. The problem happen again with default IBX transaction behavior, TIBDatabase call the EndTransaction after IBSQLMonitor.MonitorHook destroyed.

QC #:

Date Reported:

Area:

22321

12/14/2005

AddOn\Interbase components

Description:

Steps:

[QC Short Description]
Comparison of boolean columns against parameters fails

[QC Description]
Suppose you have a table containing a column with the bolean datatype. If you create a query using TIBQuery that selects records from the table based on whether the boolean column is true or false using a parameter in the query, and then try to open the query the following error occurs:

Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation

I would expect this to 'just work'(TM).
QC Entry 22321

1. Create a table with a boolean column CREATE TABLE "Lejer18" ( "SelskabNr" INTEGER NOT NULL, "Konto" VARCHAR(35) NOT NULL, "SerieNummer" INTEGER NOT NULL, "NavnTekst" VARCHAR(35), "OpkraevningOK" BOOLEAN, CONSTRAINT "Lejer18Index" PRIMARY KEY ("SelskabNr", "Konto", "SerieNummer") ); 2. Using TIBQuery do a Query like this: Select * From "Lejer18" Where "SelskabNr"=:SelskabNr and "OpkraevningOK"=:OpkOK 3. Fill in the parameters using TIBQuery.ParamByName() 4. Open the query.

QC #:

Date Reported:

Area:

43266

3/26/2007

AddOn\IntraWeb

Description:

Steps:

[QC Short Description]
VCL for the Web Application - Not Licensed Under Delphi Professional

[QC Description]
VCL for the Web Application
- Standalone Version is not Licensed under Delphi Professional even though Feature Matrix published on Codegear website suggests that a 5-user standalone version is available.
(Link: http://www.codegear.com/LinkClick.aspx?fileticket=i0Upr%2fSmdsc%3d&tabid=236&mid=808 Page: 1 Feature: 7)

Steps to reproduce:
- New project "VCL for the Web Application Wizard"
- Select "Standalone Application"
- Compile

Exception Raised - "Application is not licensed to use this feature"

QC Entry 43266

QC #:

Date Reported:

Area:

33631

9/7/2006

AddOn\IntraWeb

Description:

Steps:

[QC Short Description]
Intraweb running in servers with no Delphi installed

[QC Description]
When Intraweb applications built in Delphi 2005 Enterprise is executed, in servers with no Delphi installed, the following error occurs: "use IntraWeb evaluation mode, ..."
QC Entry 33631

QC #:

Date Reported:

Area:

23012

1/2/2006

Internet\Indy

Description:

Steps:

[QC Short Description]
HTTP Transfer-Encoding value should be case insensitive

[QC Description]
There is a bug in method ReadResult of class TIdCustomHTTP (parent of TIdHTTP) in unit IdHTTP.
Indy version 10, coming with the latest Delphi 2006.

Transfer-Encoding value is case insensitive by HTTP standard definition.
The code however makes a case sensitive compare with value 'chunked'.
It fails if the server sends value 'Chunked' instead.

We faced this problem with server Java code running under WebLogic application server in Sun Solaris OS.
The same Java code running under WebLogic in Windows sends 'chunked' as Transfer-Encoding.
Anyway, HTTP standard allows it so this is clearly a bug in Indy code.

I was able to fix the error in ReadResult method by replacing

if IndyPos('chunked', AResponse.RawHeaders.Values['Transfer-Encoding']) > 0 then {do not localize}
begin // Chunked

with

if IndyPos('chunked', LowerCase(AResponse.RawHeaders.Values['Transfer-Encoding'])) > 0 then {do not localize}
begin // Chunked

I suspect there can be other similar bugs in the code but I didn't check it more.

Other notes about Indy HTTP code:

When comparing against 'chunked' you could also use SameText() instead of IndyPos.

There are wrapper functions SBPos and AnsiPos which call Delphi Pos and AnsiPos functions directly.
One of them is called indirectly with IndyPos.
However, both Pos and AnsiPos are inefficient.
Why all this wrapping and indirection for no advantage?
Keep it simple!
QC Entry 23012

Install Weblogic application server on Sun Solaris. Make a Java server program that uses HTTP protocol and "chunked" transfers. Make a client with Indy and read something through HTTP.

QC #:

Date Reported:

Area:

48846

7/10/2007

Internet\Indy

Description:

Steps:

[QC Short Description]
indy transmits a cookie for another domain with a stored cookie.

[QC Description]
indy transmits a cookie for another domain with a stored cookie.

Indy (9, 10)
9.DevSnapshot(dev 9 July 2007)
9.5.0(stable)
10.0.52(stable)
10.1.6(July 2007)

QC Entry 48846

uses IdCookieManager, IdURI, IdAbout; procedure TForm1.FormCreate(Sender: TObject); begin RadioGroup1.Items.Add('http://c.b.a.fishing/'); RadioGroup1.Items.Add('http://fishingc.b.a/'); RadioGroup1.Items.Add('http://a.b.c/'); RadioGroup1.Items.Add('http://c.b.a/'); RadioGroup1.Items.Add('http://q.a/'); RadioGroup1.ItemIndex := 0; end; procedure TForm1.Button1Click(Sender: TObject); var aCookieManager : TIdCookieManager; aURI : TIdURI; s : string; begin aCookieManager := TIdCookieManager.Create(nil); try aURI := TIdURI.Create(''); try aCookieManager.AddCookie('Set-Cookie: name=value(c.b.a); path=/; domain=c.b.a', 'c.b.a'); aCookieManager.AddCookie('Set-Cookie: name=value(a.b.c); path=/; domain=a.b.c', 'a.b.c'); aCookieManager.AddCookie('Set-Cookie: name=value(q.a); path=/; domain=q.a', 'c.b.a'); aURI.URI := RadioGroup1.Items[RadioGroup1.ItemIndex]; s := aCookieManager.GenerateCookieList(aURI, False); ShowMessage(s); finally FreeAndNil(aURI); end; finally FreeAndNil(aCookieManager); end; end; procedure TForm1.Button2Click(Sender: TObject); begin IdAbout.ShowDlg; end;

QC #:

Date Reported:

Area:

50763

8/19/2007

Internet\XML

Description:

Steps:

[QC Short Description]
Open XML Memory Leak

[QC Description]
There is a memory leak in the TOXDOMImplementation class.

The code should read...

destructor TOXDOMImplementation.Destroy;
begin
inherited;
FreeAndNil(FDOMImpl); // added to fix memory leak
FreeAndNil(FXMLAgent);
end;


SYSOP:

Still present in D2007
QC Entry 50763

uses oxmldom procedure TForm15.FormCreate(Sender: TObject); var lclass: TOXDOMImplementation; begin ReportMemoryLeaksOnShutdown := True; lClass := TOXDOMImplementation.Create; lClass.Free; end;

QC #:

Date Reported:

Area:

29661

5/30/2006

ActiveX

Description:

Steps:

[QC Short Description]
TWordApplication: Different behaviour Delphi/C++Builder (WORD closes) [with Sample Projects]

[QC Description]
Different behaviour Delphi/C++Builder
(WORD closes)

Component TWordApplication with settings:
AutoConnect = false
AutoQuit = false
ConnectKind = ckRunningInstance

Word is running.
After calling Version() (and displaying
the result in an edit field) the form is
closed. The following happens:
- Programmed with Delphi:
Nothing, the WORD-instance is still running
(That's the desired, correct behaviour!)
- Programmed with C++Builder:
The WORD-instance is CLOSED
(W H Y, I don't understand this?)

Same behaviour when using Connect() and then
Disconnect().

==> THE DIFFERENT BEHAVIOUR IS MY PROBLEM <==
QC Entry 29661

Pls. run the attached demos, one for C++Builder and one for Delphi. Both demos are the same, C++Builder uses the "Borland C++Builder Office XP Servers Package" and Delphi uses "Microsoft Office XP Sample Automation Server Wrapper Components". There is a memo on each form which explains the steps: 1. Run WORD 2. Determine the version of WORD via button "Version" edVersion->Text = WordApplication->Version ; edVersion.Text := WordApplication.Version ; The version is shown (getting the version-property connects WORD to the server-component). 3. Close the form, press button "Close" (Same behaviour when using buttons "Connect" and "Disconnect".)

QC #:

Date Reported:

Area:

9725

12/2/2004

ActiveX

Description:

Steps:

[QC Short Description]
ActiveX Control Wizard missing

[QC Description]
Delphi 2005 Professional does not have a Wizard for creating ActiveX controls from a VCL.

Help says
"Choose File|New|Other to open the New Items dialog box.
Select the tab labeled ActiveX.
Double-click the ActiveX Control icon."

Only choice is ActiveX Library .
QC Entry 9725

QC #:

Date Reported:

Area:

30495

6/23/2006

ActiveX

Description:

Steps:

[QC Short Description]
_TLB file does not open

[QC Description]
When I double-click on a _TLB file in Project Manager it does not open in the IDE. I have to select "Type Library" from the "View" menu. I find this really annoying, as Delphi 5 opened the file on double-click and allowed to switch to TypeLib Editor with a simple F12 keypress.
QC Entry 30495

1. Create an empty ActiveX Library project 2. Add a COM Object to it 3. Close the TypeLib Editor and the _TLB file 4. Double-click the Project1_TLB.pas file in the Project Manager - the file does not open

QC #:

Date Reported:

Area:

1768

7/9/2002

ActiveX\Framework

Description:

Steps:

[QC Short Description]
COM Local servers fail when starting

[QC Description]
When an EXE starts that is a COM server it attempts to register itself. If the user has no access to the required parts of the registry (HKCR) an exception is raised.

Causes a Dr Watson error.


QC Entry 1768

[Top Ten]

The problem is in COMSERV.PAS in the TComServer.Initialize procedure where it has code to trap an EOleRegistrationError exception. The comment there indicates that this exception handler is supposed to address this issue, but the exception is a EOleSysError.

This exception is being raised by the line
OleCheck(RegisterTypeLib(...
in the RegisterTypeLibrary procedure.

Adding the following code to TComserver.Initialize addresses the issue:

on E: EOleSysError do
if (E.ErrorCode <> TYPE_E_REGISTRYACCESS) or (FStartMode = smRegServer) then
raise;

This was experienced on Windows 2000. Other platforms untested.

The problem seems to be in all versions and patches since D4, up to and including D6U2. (I didn't look in previous versions.)

workaround:
Changing the try...except in TComServer.Initialize to the following addresses the issue:

:
try
UpdateRegistry(FStartMode <> smUnregServer);
except
on E: EOleRegistrationError do
// User may not have write access to the registry.
// Squelch the exception unless we were explicitly told to register.
if FStartMode = smRegServer then raise;

// CHANGE START
on E: EOleSysError do
if (E.ErrorCode <> TYPE_E_REGISTRYACCESS) or (FStartMode = smRegServer) then
raise;
// CHANGE END
end;
:

QC #:

Date Reported:

Area:

3315

1/12/2003

ActiveX\Framework\DAX

Description:

Steps:

A common application used in the broadcast industry loads and unloads third party ActiveX controls in a single workspace as required by the user.

If I build a Delphi ActiveForm for the application, I can load and unload it. It is possible to switch to other ActiveX applicationas, and then back to my Delphi one. However, if I try to switch to another Delphi ActiveX I have a failure.

The problem is caused by the absence of any code to unregister the DAX parking window. When the second Delphi ActiveX loads, it finds that Windows has knowledge of a Window Class with the same name, and because it is loaded in the same way, HInstance is the same. Delphi tries to use the already registered class. If it is a reload of the same item as before, all is well because the Window procedure is at the same location. However, if it is a different ActiveX, we soon have an access violation when windows calls a window procedure at the wrong address.

Note that the problem is only visible if you load a library after previously unloading another library, and therefore the HInstance can be the same for both libraries.

There is probably also be a resource leak from the error.

The fix is relatively simple - see workaround.
QC Entry 3315

A test suite is provided in the attachments section.

There is a host program that can load two instances of ActiveX controls. Three test controls are provided.

With the test controls compiled with a standard version of AxCtrls you will find the following behaviour:

You can load any of the three controls into either or both of the available locations. However, once you have loaded one control, you cannot load any other control. There is some possibility that you can load the control that has been loaded in the other loacation as well as the first one you loaded.

With the modifications, you can switch at will.

With a mixed regime you can switch provided that you use a modified control between selecting a non-modified control. That is, the modifications provide compatibility with existing unmodified controls.

The attached files contain compiled versions of the ocx files with the modifications

----------- UPDATE ------------
Open Test Control 1 - 3 projects registering each as you go
Open AxTestContainer project
Import each of the test controls into the project (ActiveX controls).
Run AxTestcontainer
Press each of the buttons
verify you can load all instances of the Activex Controls without exting the application

QC #:

Date Reported:

Area:

51890

9/12/2007

ActiveX\IDE

Description:

Steps:

[ACCESS VIOLATION]
Type library editor, floating window.

[QC Short Description]
Rapport d'incident automatis�

[QC Description]
Violation d'acc�s � l'adresse 20189DF6 dans le module 'vcl100.bpl'. Lecture de l'adresse 00000024.

Playing with type library.
QC Entry 51890

Create a new VCL.Win32 application
Create a new ActiveX / Automation Object
Add a new method
Add an output parameter without using a pointer type
=> You get an error, click OK
Menu / View / New edit window
=> You have a floating type library editor which doesn't work (I will enter another report for that)
Close the floating type library editor
=> You get again the pointer type error, click OK
=> Bingo ! You have the Access Violation

---------------------------
Error
---------------------------
Access violation at address 20164507 in module 'vcl100.bpl'. Read of address 67616D51.
---------------------------
OK Details >>
---------------------------
<details in .txt file attached>
Click OK and IDE hang and ultimately disappears.

QC #:

Date Reported:

Area:

14280

7/11/2005

ActiveX\IDE\Import ActiveX Control/Type Library

Description:

Steps:

[QC Short Description]
No choice to import component to new package

[QC Description]
Whenever I try to import a Type Library or ActiveX component (with no project open), I never get the option to create the component in a new package.
QC Entry 14280

1. File -> Close All 2. Component -> Import Component... 3. Import a Type Library OR Import ActiveX Control 4. Choose a Type Library or ActiveX control that is not already installed in the Delphi IDE. In my case, I have GIS components I need to install to the IDE. 5. Next >> 6. Leave all Default, or choose new options for Palette Page, Unit dir Name, and/or Search path. 7. Next >> 8. The only radio button option I ever have is Create Unit. This is not enough to install the component or library to the IDE. 9. Finish 10. New Delphi for Win32 Project 11. With the new form active, my Tool Palette does not show the ew category I chose in step 6, or, if the category already existed, then the new component does not show up. The unit, with the _TLB suffix and .pas extension, is created and put in the correct, specified place. But without a package for a home, it's living in a cardboard box on the street.

QC #:

Date Reported:

Area:

41539

2/28/2007

ActiveX\IDE\Wizards\Type Library

Description:

Steps:

[QC Short Description]
List index out of bounds when closing TypeLibrary files

[QC Description]
Using a project which contains a TypeLibrary, executing the "Close All Other pages" causes a List Index out of bounds.
The same exception can also be caused by closing the editor window when using the Classic Undocked Layout.
QC Entry 41539
[same behavior exists in DeXter]

1. New VCL Forms project 2. New TypeLibrary (File, New, Other, ActiveX, TypeLibrary) 3. Switch to Unit1 in the editor 4. Right click the Unit1 editor tab and selected "Close All Other pages" exp: all other pages should be closed act: Exception "List index out of bounds (2)" call stack: [00365101]{rtl100.bpl } Classes.TStringList.GetObject (Line 5060, "common\Classes.pas" + 1) + $13 [003639B5]{rtl100.bpl } Classes.TStrings.Error (Line 4379, "common\Classes.pas" + 1) + $11 [00365101]{rtl100.bpl } Classes.TStringList.GetObject (Line 5060, "common\Classes.pas" + 1) + $13 [20A5EC5D]{coreide100.bpl} EditorForm.TEditWindow.ecPagesActionPopulateSubMenu (Line 4513, "EditorForm.pas" + 17) + $31 [20A5EC98]{coreide100.bpl} EditorForm.TEditWindow.ecPagesActionPopulateSubMenu (Line 4516, "EditorForm.pas" + 20) + $F [00370113]{rtl100.bpl } Classes.TBasicAction.Execute (Line 11081, "common\Classes.pas" + 3) + $7 [0047FAE1]{vcl100.bpl } ActnList.TContainedAction.Execute (Line 389, "ActnList.pas" + 1) + $2C [00480844]{vcl100.bpl } ActnList.TCustomAction.Execute (Line 1001, "ActnList.pas" + 7) + $8 [0036FFDF]{rtl100.bpl } Classes.TBasicActionLink.Execute (Line 11010, "common\Classes.pas" + 2) + $7 [0046365C]{vcl100.bpl } Menus.TMenuItem.Click (Line 1876, "Menus.pas" + 12) + $7 [00464B9B]{vcl100.bpl } Menus.TMenu.DispatchCommand (Line 2603, "Menus.pas" + 5) + $2 [00465CFA]{vcl100.bpl } Menus.TPopupList.WndProc (Line 3393, "Menus.pas" + 4) + $E [00465C49]{vcl100.bpl } Menus.TPopupList.MainWndProc (Line 3374, "Menus.pas" + 2) + $5 [00370DD4]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0 [00490834]{vcl100.bpl } Forms.TApplication.ProcessMessage (Line 7916, "Forms.pas" + 23) + $1 [0049086E]{vcl100.bpl } Forms.TApplication.HandleMessage (Line 7935, "Forms.pas" + 1) + $4 [00490A8E]{vcl100.bpl } Forms.TApplication.Run (Line 8019, "Forms.pas" + 16) + $3 [2002192E]{bds.exe } bds.bds (Line 195, "" + 6) + $7

QC #:

Date Reported:

Area:

54922

9/17/2004

ActiveX\IDE\Project Manager Interaction

Description:

Steps:

It is impossible to open the *_TLB.pas file from the project manager because the type library module is already open and the module name is the *_TLB.pas filename. This needs to be reworked.

Look at bug 209897 for steps and more details also remove the hack from tlbmodul.pas.

File|New|Other|Delphi projects|Application (win32 app)
File|New|Other|Delphi projects|Active X|COM Object
Select Project1_TLB.pas
<Rclick> Open
//Exp: Project1_TLB.pas opened
//Act: Project1_TLB.pas is not opened

QC #:

Date Reported:

Area:

27246

4/11/2006

ActiveX\Code Generators\Pascal

Description:

Steps:

[QC Short Description]
Incorrect padding for VARIANT_BOOL in ActiveX structures

[QC Description]
When using VARIANT_BOOL fields in records/structures, the fields after that boolean field are not accessible anymore. Any attempt will raise an Access Violation. I tested the combinations VB6 DLL consumed by Delphi and Delphi DLL consumed by VB6.

I attached a sample project pair (VB6 consumer for Delphi-ActiveX-Server) which illustrates the server.
QC Entry 27246

Download the attached project.
//Use Import Component on the .tlb file. ?
Compile and register the Delphi DLL
Open the VB6 project (it might be necessary to fix the references at this point)
Run it.
Notice the access violation

*************** OR (from scratch) *****************

Create a new Delphi ActiveX Library
Add a TLB
Add a record having a VARIANT_BOOL field, plus some fields behind (e.g. BSTR)
Add a class having a function that uses the record as parameter
Compile and register the DLL
Write a VB6 consumer
Notice the access violation

QC #:

Date Reported:

Area:

41520

2/28/2007

ActiveX\Type Library Editor

Description:

Steps:

[QC Short Description]
Duplicate procedure names in Type Library editor causes exception

[QC Description]
When changing a procedure/function name in the Type Library editor to a name that already exists initially the renname is reverted but you'll get an exception when trying to save. See steps.
QC Entry 41520

1. New VCL Forms app 2. Create a new ActiveX Library (File - New - Other - ActiveX - ActiveX Library) 2. Create a new Automation Object. (File - New - Other - ActiveX - Automation Object) 3. Add a method to the interface (Method1). 4. Add a second method to the interface (Method2). 5. Rename Method2 to Method1 (Method name is reverted to Method2) 4. Save all. exp: files should be saved act: Exception is raised. "'Method1' already exists" call stack: [05BA0676]{tlib100.bpl } TypeLib.TTypeObject.RaiseSyntaxError (Line 2834, "TypeLib.pas" + 6) + $2 [05BA07EB]{tlib100.bpl } TypeLib.TTypeObject.SyntaxCheck (Line 2898, "TypeLib.pas" + 1) + $2 [05BA0AB0]{tlib100.bpl } TypeLib.TTypeMember.SyntaxCheck (Line 3020, "TypeLib.pas" + 0) + $0 [05BA3D1A]{tlib100.bpl } TypeLib.TFuncMember.SyntaxCheck (Line 4574, "TypeLib.pas" + 25) + $3 [05BA0815]{tlib100.bpl } TypeLib.TTypeObject.SyntaxCheck (Line 2905, "TypeLib.pas" + 8) + $B [05BA5840]{tlib100.bpl } TypeLib.TTypeInfo.AfterSave (Line 5523, "TypeLib.pas" + 0) + $4 [05BA7C93]{tlib100.bpl } TypeLib.TInterfaceInfo.Save (Line 6629, "TypeLib.pas" + 36) + $26 [05BAA728]{tlib100.bpl } TypeLib.TTypeLibrary.SyntaxCheck (Line 7972, "TypeLib.pas" + 2) + $8 [05A05FD8]{comcore100.bpl} TlibEdit.TTypeLibEditForm.CanSave (Line 3587, "TlibEdit.pas" + 8) + $2 [059F7CC8]{comcore100.bpl} TlbModul.TTypeLibModule.SaveFile (Line 1954, "TlbModul.pas" + 23) + $4 [059F793A]{comcore100.bpl} TlbModul.TTypeLibModule.Save (Line 1855, "TlbModul.pas" + 10) + $6 [0038A2B2]{rtl100.bpl } System.@IntfCast (Line 17971, "sys\system.pas" + 9) + $0 [20A9E079]{coreide100.bpl} DocModul.SaveModules (Line 3339, "DocModul.pas" + 7) + $B [0054F8BA]{vcl100.bpl } AppEvnts.TMultiCaster.DoActionExecute (Line 361, "appevnts.pas" + 9) + $3 [20014161]{bds.exe } AppMain.TAppBuilder.FileSaveAll (Line 2337, "ui\AppMain.pas" + 1) + $0 [003C0113]{rtl100.bpl } Classes.TBasicAction.Execute (Line 11081, "common\Classes.pas" + 3) + $7 [004CFAE1]{vcl100.bpl } ActnList.TContainedAction.Execute (Line 389, "ActnList.pas" + 1) + $2C [004D0844]{vcl100.bpl } ActnList.TCustomAction.Execute (Line 1001, "ActnList.pas" + 7) + $8 [003BFFDF]{rtl100.bpl } Classes.TBasicActionLink.Execute (Line 11010, "common\Classes.pas" + 2) + $7 [004BFAA9]{vcl100.bpl } Controls.TControl.Click (Line 5227, "Controls.pas" + 7) + $7 [005199B8]{vcl100.bpl } ComCtrls.TToolButton.Click (Line 16972, "ComCtrls.pas" + 0) + $0 [004BFF3B]{vcl100.bpl } Controls.TControl.WMLButtonUp (Line 5365, "Controls.pas" + 6) + $3E [004BF5BB]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6 [004BF248]{vcl100.bpl } Controls.TControl.Perform (Line 5021, "Controls.pas" + 5) + $C [004C2E1A]{vcl100.bpl } Controls.GetControlAtPos (Line 7046, "Controls.pas" + 4) + $73 [004C2EE2]{vcl100.bpl } Controls.TWinControl.ControlAtPos (Line 7069, "Controls.pas" + 13) + $E [004BF248]{vcl100.bpl } Controls.TControl.Perform (Line 5021, "Controls.pas" + 5) + $C [004C30ED]{vcl100.bpl } Controls.TWinControl.IsControlMouseMsg (Line 7133, "Controls.pas" + 15) + $1F [004C3453]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7214, "Controls.pas" + 70) + $6 [0051B9E9]{vcl100.bpl } ComCtrls.TToolBar.UpdateButtonState (Line 18117, "ComCtrls.pas" + 5) + $25 [0051BA2A]{vcl100.bpl } ComCtrls.TToolBar.UpdateButtonStates (Line 18127, "ComCtrls.pas" + 3) + $4 [0051E35D]{vcl100.bpl } ComCtrls.TToolBar.WndProc (Line 19557, "ComCtrls.pas" + 80) + $6 [004C2D24]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7024, "Controls.pas" + 3) + $6 [003C0DD4]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0 [003CA426]{rtl100.bpl } Contnrs.TComponentList.GetItems (Line 381, "common\Contnrs.pas" + 1) + $4 [004E0834]{vcl100.bpl } Forms.TApplication.ProcessMessage (Line 7916, "Forms.pas" + 23) + $1 [004E086E]{vcl100.bpl } Forms.TApplication.HandleMessage (Line 7935, "Forms.pas" + 1) + $4 [004E0A8E]{vcl100.bpl } Forms.TApplication.Run (Line 8019, "Forms.pas" + 16) + $3 [2002192E]{bds.exe } bds.bds (Line 195, "" + 6) + $7

QC #:

Date Reported:

Area:

27891

4/20/2006

ActiveX\Type Library Editor

Description:

Steps:

[QC Short Description]
Automated Incident Report

[QC Description]
Access violation at address 20B94313 in module 'coreide100.bpl'. Read of address 00000018.

Changing the return result of an Automation Object's method to VARIANT and attempting to close the resulting type library fails.
QC Entry 27891

1. File, New, Other, Delphi Project, ActiveX Library
2. File, New, Other, Delphi Project, ActiveX, Automation Object
3. In Automation Object Wizard, set the following:
CoClass Name: DelphiScripting
Instancing: Multiple Instance
Threading Model: Free
4. In the Type Library Editor, on IDelphiScripting node, right click, New Method
5. Change the name of the new method to GetAXRegistryInstance
6. In Parameters pane / tab, change Return Type from HResult to VARIANT
7. Close the Type Library

Error dialog: Functions of Automation Interfaces must have a return type of HRESULT

8. File, Close All, answering yes / no to Save changes is irrelevant.

Error dialog: Functions of Automation Interfaces must have a return type of HRESULT

Click on any Delphi unit, then click back to the Type Library editor, and click in the edit window.
Repeating every 1 or 2 seconds after that...
Access violation at address 20B94313 in module 'coreide100.bpl'. Reoad of address 00000018.

Now, find a way to close the IDE without terminating it. ;o)

QC #:

Date Reported:

Area:

42151

3/8/2007

ActiveX\Type Library Editor

Description:

Steps:

[QC Short Description]
Opening an old library project doesn't allow to edit TLB

[QC Description]
When I open an existing library project (originally made with D7), Spacely doesn't allow me to edit the TypeLib.
QC Entry 42151

- save the attached project files to an empty folder - start Spacely - open the attached dpr - select "view" expected: "Type library" selectable found: "Type library" is disabled At least this is the case in the Germn version.

QC #:

Date Reported:

Area:

45990

5/15/2007

ActiveX\Type Library Editor

Description:

Steps:

[QC Short Description]
TLE does not save typelibrary

[QC Description]
Any ActiveX project fails to save with error message
Unable to reanme <typelib filename here> to ''
QC Entry 45990

1. Close all including welcome page 2. Create new typelibrary 3. Try to use "Save as" to save it with another name 4. Error message appears: --------------------------- Error --------------------------- An error occurred while saving C:\TEMP\TypeLib133.tlb: Unable to rename 'C:\TEMP\TypeLib133.tlb' to ''. --------------------------- OK ---------------------------

QC #:

Date Reported:

Area:

34904

10/6/2006

ActiveX\Type Library Editor

Description:

Steps:

[QC Short Description]
Type Library Editor changes unit name in _TLB.pas into project name

[QC Description]
When opening an automation project (build with previous version Dephi) in Delphi2006 it will only compile just one time. D2006 changes the unitname in _TLB.pas resulting in the error: E1038 Unit identifier 'xxxx_TLB' does not match file name.
QC Entry 34904

Open de demo-app in ..\Borland\BDS\4.0\Demos\DelphiWin32\VCLWin32\ActiveX\OleAut\AutoServ\MemoEdit.dpr. The Type Library Editor shows TLB-unit name as "Memo". Build for the first time (is ok), build again: E1038 Unit identifier 'memo_TLB' does not match file name. The Type Library Editor shows TLB-unit name as "MemoEdit". Why?

QC #:

Date Reported:

Area:

25930

3/10/2006

ActiveX\Type Library Editor

Description:

Steps:

[QC Short Description]
TLE "forgets" to change the *_TLB.pas unit name

QC Entry 25930

1. File - New - Other - ActiveX - ActiveX Library 2. File - New - Other - ActiveX - Active Form 3. New ActiveX Name : axImageLib_R2 4. Click "Include Version Information" 5. OK 6. File - Save Project As 7. Save the file "axImageLib_R2Impl.pas" (default name) 8. Save the project as "ilaxImageLib_R2.bdsproj" 9. Project - Build 10. Error -> ilaxImageLib_R2_TLB.pas -> it's still saying "unit Project1_TLB;" and not " 11. The same in the uses of "axImageLib_R2Impl.pas"

QC #:

Date Reported:

Area:

3198

12/21/2002

ActiveX\Type Library Editor

Description:

Steps:

[QC Short Description]
Unable to edit IDL text

[QC Description]
While in IDL mode (not Pascal mode), unable to edit the IDL text in the Tyle Library editor. Works in Delphi ver. 5.0
QC Entry 3198

1. Tools | Environment Options | Type Library | Language = IDL
2. Create new application
3. New Other | ActiveX | Type Library
4. Save Type Library to default name
5. On the Type Library editor go to the Text page
6. Unselect "Read Only"
7. Edit the text
8. Select Ctrl-S to attempt to save. Error!

QC #:

Date Reported:

Area:

54579

11/8/2007

ActiveX\Type Library Editor\Attributes page

Description:

Steps:

[QC Short Description]
TypeLib editor corrupts constant values

[QC Description]
TypeLib editor corrupts constant values
QC Entry 54579

1. In freshly started IDE, select File => New => Other => ActiveX => TypeLibrary 2. Add module to the TypeLib1 in the typelib editor (right click on TypeLib1, select New => Module ) 3. Add constant to Module1 ( right click on Module1, select New => Const ) 4. In the Attributes page, set Type to BSTR and Value to "Value1" 5. Add another constant to the same module as described in the step #3. 6. Watch that the first constant suddenly changed its value to 0, instead of "Value1". If that's not enough, add as many constants as you wish, and set their values to something else than default values. Whenever a new constant is added, all previous constants reverts their values back to default.

QC #:

Date Reported:

Area:

28539

4/28/2006

ActiveX\Type Library Editor\Text page

Description:

Steps:

[QC Short Description]
Export to IDL produce incorrect output

[QC Description]
When Type Library editor prodcue IDL text, that text still incompatible with basic IDL preprocessor MIDL

Cause: Unsorted interfaces. If exported type library have more the one interface like



exported output could not be translated by MIDL. To be correct, exported file must have structure like

Inteface2

Interface1

method with parameter type Interface2


Type Library editor does not have embedded abilities to resort interfaces (move Inteface2 above Interface1.
QC Entry 28539

QC #:

Date Reported:

Area:

28546

4/28/2006

ActiveX\Type Library Editor\Text page

Description:

Steps:

[QC Short Description]
Attempt to edit text make IDE unstable and crash

[QC Description]
When I go to text pane in TypeLibrary editor (to common intface text area, not to text area for single method or enum) and edit any character (I try change method name, change parameter name) I can see a many new empty nodes added to treeview area. After that I cannot close editor, I cannot switch to anowther window and I cannot close IDE
QC Entry 28546

-File | New | Other... | Delphi Projects | VCL Forms Application -File | New | Other... | Delphi Projects | ActiveX | Automation Object -Enter <Test> for the name in the Automation Object Wizard and click OK -View | Type Library -Select <ITest> and add two methods -Select <Method1> and, on the Parameters page, change the Return Type to <FOO> -Click on <Method2> in the Type Library Editor tree -Click on the Text tab and uncheck the Read Only checkbox -In the Text pane, type in a new name, e.g. change "Method2" to "MyNewMethod" -Click the Refresh implementation button -Save and Compile -When prompted with the following error, try to correct the error "Functions of Automation Interfaces must have a return type of HRESULT." -At this stage it is not possible to correct the error by editing and it is necessary to "End Task" on bds.exe Might see AV's like: Access violation at address 20B94313 in module 'coreide100.bpl'. Read of address 00000018.

QC #:

Date Reported:

Area:

37063

11/27/2006

ActiveX\Type Library Editor\Open/Save

Description:

Steps:

[QC Short Description]
Problems opening type library

[QC Description]
Opening a type library with a project open doesn't behave as expected. F12 doesn't show the _TLB.pas and exporting to IDL throws an exception.
QC Entry 37063


Fix the demo after fixing the crash

- Create a Delphi win32 project.
- Open a type library. I used one from the Demos directory. (probably memoedit)
- The type library editor is shown as expected.

- Pressing F12 toggles to the application's main form. Close this form and F12 doesn't do anything. I expected to see a _TLB.pas file.

- Clicking "Export to IDL" generates the following exception (submitted automated report: 36896). I expected to see the IDL.

Access violation at address 210401FF in module 'tlib110.bpl'. Read
of address 00000030.

QC #:

Date Reported:

Area:

43210

3/25/2007

Midas\TClientDataSet

Description:

Steps:

[QC Short Description]
Setting StatusFilter Throws AV

[QC Description]
Starting from D7, setting StatusFilter on a Detail CDS on a standard master-detail datasnap application causes an AV in MIDAS.DLL

Although I have encountered this problem on a real world application, but it can also be reproduced on a simple in-memory scenario - which can be found in the attached sample project.

There is a form with 2 CDS attached to DataSources and Grids.

Actually, I have a D6 project which uses MidasLib and keep being challenged by midas issues. I decided to switch to D7 or newer DLLs but hit the mentioned problem. The sample app, complied with D7 gives the following results when run with different DLLs:

1. It works fine with D7's MidasLib
2. It works fine with D6.02's Midas.dll - 6.0.10.157
3. It throws av with all of the other dlls I had in hand:
7.1.1692.668
9.0.1761.24408
10.0.2151.25345

It works fine in D6.
QC Entry 43210

Run the attached project - there are 3 buttons: 1. Populate (makes 1 master and 1 detail record) 2. Delete (deletes detail record) 3. Status Filter...

QC #:

Date Reported:

Area:

20273

10/18/2005

Midas\TClientDataSet

Description:

Steps:

[Regression for D2005]

[QC Short Description]
ClientDataset.Ranged property is published

[QC Description]
This is a read-only property, so it should not be published. It shows up in the OI as disabled.
QC Entry 20273

1. File | New | VCL Forms Application - Win32 2. Drop a TClientDataset on the form 3. Look at OI for the ClientDataset1 //exp: Not to see Ranged property //act: See Ranged property (a read-only property) in the OI as grayed out

QC #:

Date Reported:

Area:

33283

8/30/2006

Compiler

Description:

Steps:

[QC Short Description]
Problem with files with national charcter in name

[QC Description]
Windows XP could support a file contain UTF-cahrs in its name, but compiler result an error on it.
QC Entry 33283

Compile the attached project, ���.dpr

See the following compile time error.

Fatal: F1026 File not found: 'A�A�A-Ac.dcuil'

Compiling the unit, ����.pas, separately results in the following error.

Error: E1038 Unit identifier '����' does not match file name

QC #:

Date Reported:

Area:

48394

7/2/2007

Compiler

Description:

Steps:

[QC Short Description]
Bad dependency on packages with a dot in filename

[QC Description]
if building with runtime packages, and the package has a dot separated name, the compiler/linker produces an invalid dependency
for a filename Dot.Name.Package.bpl the resulting dependency is Dot.Name.bpl
this is also true for all packages/dlls using the 'dot.name' package
QC Entry 48394

create a package that has a name like: Dot.Name.Package.bpl build another package or an app that uses the first package the resulting executable will have an invalid dependency on Dot.Name.bpl

QC #:

Date Reported:

Area:

41088

2/21/2007

Compiler

Description:

Steps:

[QC Short Description]
Add ability to treat warnings as errors

[QC Description]
Add ability to treat warnings as errors. We have a lot of project and they mainteined by different peope. Very often they switched off hints and warnings. It will be nice to to add option to treat warnings as errors (at least in command line compiler).
QC Entry 41088

QC #:

Date Reported:

Area:

48781

7/9/2007

Compiler\Delphi

Description:

Steps:

[QC Short Description]
Delphi flushes file after every Write operato

[QC Description]
Delphi generates call to Flush instead of @Flush on every call to Write.

See steps for example.
QC Entry 48781

Simple code like Var A : TextFile; begin AssignFile(A, 'C:\a'); Rewrite(A); Write(A, 'a'); Write(A, 'a'); will call Win API function WriteFile twice in Delphi 2007 and 0 times in Delphi 6. As result if you code contains a lot of call to Write with one byte it became extremelly slow. It happend because in Delphi 2007 generates following code Unit8.pas.31: Write(A, 'a'); 004543E2 B261 mov dl,$61 004543E4 8BC4 mov eax,esp 004543E6 E869F4FAFF call @Write0Char 004543EB E83CF1FAFF call Flush 004543F0 E8F7EBFAFF call @_IOTest In Delphi 6 the same code generates following code: Unit8.pas.31: Write(A, 'a'); 004543E2 B261 mov dl,$61 004543E4 8BC4 mov eax,esp 004543E6 E869F4FAFF call @Write0Char 004543EB E83CF1FAFF call @Flush 004543F0 E8F7EBFAFF call @_IOTest

QC #:

Date Reported:

Area:

51506

9/3/2007

Compiler\Delphi

Description:

Steps:

[QC Short Description]
Compiler generates invalid code when using UInt64 with Overflow Checking

[QC Description]
Under certain circomstances, the compiler will generate code that produces exceptions when using UInt64 variables with overflow checking enabled. Only UInt64 seems affected as Int64 produces code that executes correctly.
QC Entry 51506

Compile and run the attached application below.

At runtime, see the following runtime exception message.

FAIL - Exception=EAccessViolation/Access violation at address 00408DD0 in module 'BTS255214.exe'. Read of address 00E93E6C)

program bts255214;

{$APPTYPE CONSOLE}

uses
SysUtils;

procedure DoIt;
var
Data: UInt64;
S1: TSearchRec;
begin
{$Q+}
Inc( Data, S1.Size ); // <<--- exception raised here!
if Data > 0 then;
end;


begin
try
DoIt;
WriteLn('PASS');
except
on E: Exception do
WriteLn('FAIL - Exception=', E.Classname, '/', E.Message, ')');
end;
end.

QC #:

Date Reported:

Area:

41092

2/21/2007

Compiler\Delphi

Description:

Steps:

[QC Short Description]
Internal Error: AV21BDC450-R00000018-0 and Internal Error: ST2028

[QC Description]
Probably it is not so critial, because if I remeber correctly Fail must be used with object.
QC Entry 41092

1. Compile following program and get [DCC Error] Project1.dpr(18): F2084 Internal Error: AV21BDC450-R00000018-0 program Project1; uses Classes, Forms; type TForm1 = class(TForm) private public Constructor Create(A : TComponent); override; end; var Form1: TForm1; Constructor TForm1.A(A : TPersistent); begin Fail; end; begin end. -------------------------------------------------------------------------------- 2. Compile following program and get [DCC Error] Project1.dpr(18): F2084 Internal Error: ST2028 program Project1; uses Classes, Forms; type TForm1 = class(TForm) private public Constructor Create(A : TComponent); override; end; var Form1: TForm1; Constructor TForm1.Create(A : TPersistent); begin Fail; end; begin end.

QC #:

Date Reported:

Area:

35935

10/31/2006

Compiler\Delphi\BASM

Description:

Steps:

[QC Short Description]
Add SSSE3 instructions to the BASM

[QC Description]
I would like the assembler to support the Supplemental SSE3 instructionset. This instructionset is available in Core Duo 2 and coming processors.

It is described here

http://www.intel.com/technology/architecture/new_instructions.htm

and here

http://en.wikipedia.org/wiki/SSSE3

Regards
Dennis Christensen
QC Entry 35935

QC #:

Date Reported:

Area:

35938

10/31/2006

Compiler\Delphi\BASM

Description:

Steps:

[QC Short Description]
Add SSE4 instructions to the BASM

[QC Description]
I would like the assembler to support the SSE4 instructionset.

It is described here

http://www.intel.com/technology/architecture/new_instructions.htm

and here

http://en.wikipedia.org/wiki/SSE4

Regards
Dennis Christensen
QC Entry 35938

QC #:

Date Reported:

Area:

26109

3/15/2006

Compiler\Delphi\BASM

Description:

Steps:

[QC Short Description]
imul with 3 operands coded too long

[QC Description]
As an example
imul eax,eax,9
is coded unnecessarily too long as
69 c0 09 00 00 00 00
instead of
6b c0 09

However the same command expressed as
imul eax,9
is coded correctly as
6b c0 09

In Delphi-6 this is the same.
QC Entry 26109

Disassemble the following proc: procedure test; asm imul eax,eax,9 end;

QC #:

Date Reported:

Area:

53632

10/17/2007

Compiler\Delphi\Code Generation/Optimization

Description:

Steps:

[QC Short Description]
function pointer on record functions crashes at run time on exit of the procedure.

[QC Description]
using function pointers on record functions results in crash.
QC Entry 53632


If I set pointer explicitly, then it works:

fkt:= r2.get_X;
TMethod( fkt).Data:= @r2;
res:= fkt;

// Francois Piette
Still in 2857.9907

Compile and run the attached program.

See the following output to the console.

#1
#2
#3
Runtime Error 216

Note that #4 is missing and that an AV error has occured.

program BTS256237;

{$APPTYPE CONSOLE}

type
TRec = record
x:Integer;
function get_X: Integer;
end;

TFkt_Rec = function: Integer of object;

function TRec.get_X: Integer;
begin
Result := x;
end;

procedure a;
var
r2: TRec;
fkt: TFkt_Rec;
res: Integer;
begin
WriteLn('#1');
r2.x := 8;

WriteLn('#2');
fkt := r2.get_X;

WriteLn('#3');
res := fkt;

WriteLn('#4'); // Execution never gets to this line.
end;

begin
a;
end.

QC #:

Date Reported:

Area:

47968

6/23/2007

Compiler\Delphi\Code Generation/Optimization

Description:

Steps:

[QC Short Description]
Operator overloading problems...

[QC Description]
The Implicit and explicit operators are not detected. The typecast in the example is explicit, but implicit operator is called triggering message "FAIL - Implicit conversion in explicit type cast."
QC Entry 47968


(JJS: The .NET compiler handles the test case as expected.)

Compile and run the attached application below.


program BTS251756;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
TDoubleArray = array of double;

TAType = record
class operator Implicit(const AValue: TAType): TDoubleArray;
class operator Explicit(const AValue: TAType): TDoubleArray;
end;

{ TAType }

class operator TAType.Explicit(const AValue: TAType): TDoubleArray;
begin
result := nil;
WriteLn('PASS');
end;

class operator TAType.Implicit(const AValue: TAType): TDoubleArray;
begin
result := nil;
WriteLn('FAIL - Implicit conversion in explicit type cast.');
end;

var a: TAType;
arr: TDoubleArray;

begin
try
arr := TDoubleArray(a);
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.

QC #:

Date Reported:

Area:

54539

11/7/2007

Compiler\Delphi\Code Generation/Optimization

Description:

Steps:

[QC Short Description]
[DCC Error] F2084 Internal Error: U1036

[QC Description]
Building a test project with a couple of packages gives the following error
[DCC Error] MainAppForm_.pas(28): F2084 Internal Error: U1036
I tried to delete all dcu's but nothing changes.
Alway get this error.
QC Entry 54539

Just get the zip file, unpack it.
Open the TestD2007Pkg_.groupproj file and try to build the packages and then the &quot;MainApp&quot;.

(JJS: Because of the way RAID interfaces with QC, TestD2007Pkg_.groupproj does not load as expected. However, the problem is reproducible from the IDE by loading MainAppPrj.dpr and compiling.)

(JJS: Note! I was unable to reproduce this error by compiling using the command line compiler.)

QC #:

Date Reported:

Area:

23649

1/16/2006

Compiler\Delphi\Code Generation/Optimization

Description:

Steps:

(JJS Might be fixed in Tiburon)

[QC Short Description]
inlining codegen error - array element passing to procedure with untyped VAR parameter

[QC Description]
Codegen for inlined procedures with untyped VAR parameter is wrong in case of array element is passed as a parameter. Previous versions of Delphi don't expose this error (only D10).

Wrong code is produced during calculation of value of g_LightControl[i] to pass as address: "movzx (byte) ecx,[eax]" is generated instead of plain "mov ecx,[eax]". Also generated code for some reason is more complex than in previous versions of Delphi.

Below is disassembly of bugged code generated from pascal source:

Unit1.pas.57: for i:= 0 to MAX_LIGHTS-1 do
004520EE BE03000000 mov esi,$00000003
004520F3 BBA4954500 mov ebx,$004595a4
Unit1.pas.58: FreeAndNil(g_LightControl[i]);
004520F8 8BC3 mov eax,ebx
004520FA 0FB608 movzx ecx,[eax] // HERE IT IS !!!
004520FD 8BD1 mov edx,ecx
004520FF 33C0 xor eax,eax
00452101 89C1 mov ecx,eax
00452103 8BC2 mov eax,edx
00452105 E82A17FBFF call TObject.Free
0045210A 83C304 add ebx,$04
QC Entry 23649

Compile and run the attached program below.

See the following output indicating failure.

#1
#2
FAIL - Exception
ClassName=EAccessViolation
Message=Access violation at address 00403A66 in module 'Test.exe'. Read of address 00000050


program BTS257068;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
TCustomClass = class(TOBject)
end;

procedure FreeAndNil(var Obj); inline;
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;

const
MAX_LIGHTS = 3;

var
I: Integer;
g_LightControl: array[0..MAX_LIGHTS-1] of TCustomClass;


begin
try
WriteLn('#1');
for I := 0 to MAX_LIGHTS do
g_LightControl[i]:= TCustomClass.Create;

WriteLn('#2');
for i:= 0 to MAX_LIGHTS-1 do
FreeAndNil(g_LightControl[i]);

WriteLn('PASS');
except
on E: Exception do
begin
WriteLn('FAIL - Exception');
WriteLn(' ClassName=', E.ClassName);
WriteLn(' Message=', E.Message);
end;
end;
end.

QC #:

Date Reported:

Area:

24009

1/23/2006

Compiler\Delphi\Code Generation/Optimization

Description:

Steps:

[QC Short Description]
Passing a PChar to Assign causes incorrect code generation

[QC Description]
When a PChar is passed to the Assign procedure for a file variable the compiler does not generate code to convert the PChar to a long string. As a result Assign treats the PChar like a long string. Depending on the memory contents prior to the null-terminated string it may cause an AV.
QC Entry 24009

1. Compile and run the following program.
2. An AV will occur during the Assign call.

(JJS: I do not get an AV error but the program will output #1 and #2 but not #3 thereby indicating a problem with code generation.)

program BTS257062;

{$APPTYPE CONSOLE}

uses
SysUtils;

var F : File;
Dummy1, Dummy2, Dummy3, Dummy4 : LongInt;
Buf : array [0..255] of Char;
P : PChar;
begin
try
Dummy1 := 0;
Dummy2 := 0;
Dummy3 := 0;
Dummy4 := 100000;
WriteLn('#1');
StrPCopy(Buf,'file.txt');
WriteLn('#2');
P := @Buf;
Assign(F,P);
WriteLn('#3');
WriteLn(Dummy1,Dummy2,Dummy3,Dummy4);
WriteLn('PASS');
except
on E: Exception do
begin
WriteLn('FAIL - Exception');
WriteLn(' ClassName=', E.ClassName);
WriteLn(' Message=', E.Message);
end;
end;
end.

QC #:

Date Reported:

Area:

47332

6/11/2007

Compiler\Delphi\Code Generation/Optimization

Description:

Steps:

[QC Short Description]
type error with inlined function of dereferenced record

[QC Description]
Compiler fails with "E2008 Incompatible types" under the following conditions:
- a record type is defined in another unit
- the record type has an inlined function
- typed address operator is diabled {$T-}
- a (typed) pointer to the record is used
to call the inlined record function

Note that the error does not happen if the function
is indirectly called as a getter of a record property.
QC Entry 47332


(JJS: In addition to incompatible types, I see the following internal error with build 11.0.2753.7830 from the IDE, but not from the command line.)

[DCC Error] BTS252135.dpr(25): F2084 Internal Error: C4310

1) Unzip the attached project - open it with Delphi 2007 - compile it (should fail) 2) Edit Project1.dpr: - change "{$TYPEDADDRESS OFF}" to "{$TYPEDADDRESS ON}" - compile it (shoul work) - change back to {$TYPEDADDRESS OFF} 3) Edit Unit1.pas - remove "inline;" from the decalration of GetDataIsDirectory() - compile it (should work) ps: if attachment doesn't work: http://www.bendlins.de/temp/AddrInlineRecordFunction.zip

QC #:

Date Reported:

Area:

39102

1/21/2007

Compiler\Delphi\Linker

Description:

Steps:

Compiler error - Fatal: F2084 Internal Error: L1708 when applying a class helper to a class with methodinfo enabled.

Try to compile the attached console application.

Expected: No error.
Actual: [Pascal Fatal Error] F2084 Internal Error: L1948

program BTS245298;
uses
Classes;

{$APPTYPE CONSOLE}

type
{$METHODINFO ON}
TMyBaseClass = class(TObject)
end;
{{$METHODINFO OFF}

TMyClass = class(TMyBaseClass)
end;

type
TMyClassHelper = class helper for TMyClass
protected
procedure SetField(Value: Integer);
function GetField: Integer;
published
property Field: Integer read GetField write SetField;
end;


procedure TMyClassHelper.SetField(Value: Integer);
begin
end;

function TMyClassHelper.GetField: Integer;
begin
end;


type
TMyMyClass = class(TMyClass)
end;

var
MyMyClass: TMyMyClass;


begin
MyMyClass := TMyMyClass.Create;
WriteLn('PASS');
end.

QC #:

Date Reported:

Area:

41654

3/2/2007

Compiler\Delphi\Errors - Warnings

Description:

Steps:

[QC Short Description]
Specifying "override" on a helper method that replaces a virtual method in the "helped" class generates the following internal error at compile time.

F2084 Internal Error: ILD12585

[QC Description]
Try to compile the code posted (it gives the same error with the implementation completed)
QC Entry 41654

Compile the attached program below.

See the following error at compile time.

F2084 Internal Error: ILD12585



program BTS246870;

{$APPTYPE CONSOLE}

type
TMyClass = class
procedure AfterConstruction; virtual;
procedure BeforeDestruction; virtual;
end;

THelperGrid = class helper for TMyClass
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
end;


begin
WriteLn('FAIL'); // Compile time error expected
end.

QC #:

Date Reported:

Area:

38403

1/5/2007

Compiler\Delphi\Errors - Warnings

Description:

Steps:

[QC Short Description]
When using include files, the error/warning line number might be wrong

[QC Description]
I'm using a global inc file for all the JVCL and it is included in every unit of the project.
Now, because of QC38402, I sometimes get errors in some of the files. Problem is that the total number of "useful" lines in the inc file is added to the line number where the error occurs, thus ofent giving a line number for the error above the line count in the source file.
It is quite easy to reproduce as you will see in the attached project.
Note that this happens with the QC38402 overlaod ambiguity, but it does not happen with a simple syntax error.
QC Entry 38403

Compile the attached program below.

See the following error message.

BTS243751.dpr(27) Error: E2251 Ambiguous overloaded call to 'Test'
+ BTS243751.dpr(9) Related method: procedure TfrmMain.Test(const Int64);
+ BTS243751.dpr(10) Related method: procedure TfrmMain.Test(const string);
BTS243751.dpr(41)


See that the initial error occurs on line 24 in the source file but is reported as line 27 in the error.

Interestingly, the related methods are declared on lines 13 and 14 but are reported as being on lines 9 and 10.


[Test.inc]
// This is a test
{$IFDEF PROBLEM}
{$DEFINE Woops}
{$ENDIF PROBLEM}

[BTS243751.dpr]

program BTS243751;

{$APPTYPE CONSOLE}

{$I Test.inc}


type
TfrmMain = class
procedure btnTestClick(Sender: TObject);
private
{ Private declarations }
procedure Test(const Value: Int64); overload;
procedure Test(const Value: string); overload;
public
{ Public declarations }
end;


procedure TfrmMain.btnTestClick(Sender: TObject);
var
TmpVar: Variant;
begin
Test(TmpVar); // This is not compiling
end;

// This is where the error is shown because of the inc file content...

procedure TfrmMain.Test(const Value: Int64);
begin

end;

procedure TfrmMain.Test(const Value: string);
begin

end;

begin
end.

QC #:

Date Reported:

Area:

11168

3/2/2005

Compiler\Delphi\Language

Description:

Steps:

[QC Short Description]
Parameterized Types (aka Generics) also for Win32/64 (not only .Net 2.0)

[QC Description]
This report requests that the generics syntax being planned for .NET also be provided for native Win32/Win64. Below is a sample of the generics syntax.
QC Entry 11168

type TList<AnyType> = class FList: TList; procedure Add(Item: AnyType); function Extract(Item: AnyType): AnyType; end; procedure TList<AnyType>.Add(Item: AnyType); begin FList.Add(TObject(Item)); end; function TList<AnyType>.Extract(Item: AnyType): AnyType; begin Result := FList.Extract(TObject(Item)) as AnyType; end; type TComponentList = TList<TComponent>; TIntegerList = TList<Integer>; TFloatList = TList<Extended>; var ComponentList: TComponentList; IntegerList: TIntegerList; FloatList: TFloatList; begin ComponentList := TComponentList.Create; ComponentList.Add(Form1); ... IntegerList := TIntegerList.Create; IntegerList.Add(1234); ... FloatList := TFloatList.Create; FloatList.Add(3.14); ... end.

QC #:

Date Reported:

Area:

9782

8/11/2005

Compiler\Delphi\Language

Description:

Steps:

Compiling a class helper with a virtual method produces strange Pascal Errors.

From QC#9782 by Alexey Vokolov

Original QC report also contains a follow-up runtime error if you do provide the missing IInterface methods.

(JJS: RAID 247058 is a duplicate report)

(JJS: Not reproducible with Tiburon Unicode Rev 10403)

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
TMyTestClass = class
end;

TMyTestClassHelper = class helper for TMyTestClass
procedure Test; virtual;
end;


{ TMyTestClassHelper }

procedure TMyTestClassHelper.Test;
begin
writeln('tested');
end;


begin
{ TODO -oUser -cConsole Main : Insert code here }
end.

exp: clean compile
act:

[Pascal Error] Project4.dpr(14): E2003 Undeclared identifier: 'QueryInterface'
[Pascal Error] Project4.dpr(14): E2003 Undeclared identifier: '_AddRef'
[Pascal Error] Project4.dpr(14): E2003 Undeclared identifier: '_Release'

QC #:

Date Reported:

Area:

46671

5/28/2007

Compiler\Delphi\Execution

Description:

Steps:

[QC Short Description]
Compilation of Integer to UInt64 assignments fails with dcc32.exe and -$R+

[QC Description]
It seams that QC 9411 wasn't completely fixed or even partially reintroduced into the Delphi 2007 (command line) compiler.
If you try to compile with dcc32.exe a project with an unit where an assignment from Integer to UInt64 is made, which contains a unit that uses the "Windows" unit and compile it with -$R+ will produce the error F2051.
First I thought it has something to do with QC 43269, but it hasn't. I am not able to reproduce this problem with the IDE.

The dcc32 output for the example is

CodeGear Delphi for Win32 compiler version 18.5
Copyright (c) 1983,2007 CodeGear
IntToUInt64Unit.pas(17)
ThisUnitUsesWindowsUnit.pas(6) Fatal: F2051 Unit Windows was compiled with a different version of System.UInt64
QC Entry 46671

Compile the attached project with the following command line.

dcc32 -$R+ BTS252125.dpr

See the following compiler output.

uBTS252125B.pas(6) Fatal: F2051 Unit Windows was compiled with a different version of System.UInt64

program BTS252125;

{$APPTYPE CONSOLE}

uses
uBTS252125A, uBTS252125B;

begin
WriteLn('PASS');
end.

QC #:

Date Reported:

Area:

49056

7/15/2007

Compiler\Delphi\Packages

Description:

Steps:

[QC Short Description]
Operator overloading in records does not work across packages

[QC Description]
if a record with overloaded operators is compiled in a package and consumed in an app that is built using this package
the methods being called are for the wrong return type
QC Entry 49056

Compile the attached package TestPkg.dpk using the unit Specifier.
Compile the attached program TestApp, using the following command line.

dcc32 TestApp -LUTestPkg

Run TestApp.exe and see the following output indicating failure.

FAIL - Counter = 1001

In Specifier.pas, not the following record declaration.

type
TSpecifier = record
S: AnsiString;

class operator Implicit(const S: AnsiString): TSpecifier;
class operator Implicit(const I: Integer): TSpecifier;

class operator Implicit(const Spec: TSpecifier): AnsiString;
class operator Implicit(const Spec: TSpecifier): Integer;

case NativeType: Integer of
varInteger: (I: Integer);
end;

In TestApp, see that the wrong implicit operator method is called for the statement "S2 := Spec".

Recompiling without using the package TestPkg.bpl, show the expected result.

var
S1, S2: AnsiString;
Spec: TSpecifier;
begin
S1 := 'test';
Spec := S1;
S2 := Spec; // < here the Implicit(const Spec: TSpecifier): Integer; is called

QC #:

Date Reported:

Area:

51891

9/12/2007

Compiler\Delphi\Exceptions

Description:

Steps:

[QC Short Description]
F2084 Internal Error: URW5369 when using a specific package.

[QC Description]
[DCC Error] P_URW5369.dpr(4): F2084 Internal Error: URW5369
QC Entry 51891

Buiild the included project group.

The example code is chopped down to isolate the offending code from a non packged version that compiles and runs just fine in production code.

Putting the unit in a package compiles just fine.

Using the package in another app fails with the URW5369 error.

I need to be able to call code in the real unit from multiple packages in the same application. If it can't be packaged, then I can't use packages (or this unit). 400+ internal packages we use have eliminated 1.4 gig from the exe sizes distributed to company and client sites. Not using packages is not an option.

This compiler bug was dicovered with D2005 and verified as existing here as well.


(JJS)
On the command line, I'm able to generate the error with the following command line using the attached files.

dcc32 LdAndRunPkg.dpk

unit PkgLoadRun;

interface

uses
SysUtils,
Windows,
Forms;

// Comp000x
Function ShowTComp000x(TheOwner: TForm; Var ModResult: Integer; pModal: Boolean = TRUE): TForm;

implementation

// Comp000x
Function ShowTComp000x(TheOwner: TForm; Var ModResult: Integer; pModal: Boolean = TRUE): TForm;
Type
MyFunc = Function(TheOwner: TForm; Var ModResult: Integer; pModal: Boolean = TRUE): TForm;
Var
Func : MyFunc;
Begin
End;

end.

QC #:

Date Reported:

Area:

54128

10/29/2007

Compiler\Delphi\Procedure Inlining

Description:

Steps:

[QC Short Description]
Unable to debug classes which use Generics

[QC Description]
The internal debugger does not allow me to step into methods which use generics. Furthermore, breakpoints set in methods which use generics get ignored.
Breakpoints in the methods "StringTest" or "IntegerTest" work. But if I want to step into a call like "Stack.Push ..." this does not work. The same happens if I set a breakpoint in "TStack<T>.Push" or "TStack<T>.Pop": the breakpoint gets ignored.

The program compiles and runs O.K, though.
QC Entry 54128

open up attached project.

Place a breakpoing on line 36: NewNode := Node<T>.Create(Value);
Place a breakpoint on line 74: Stack := TStack<string>.Create;

Hit F9 to run the App to the breakpoint.

Hit F8 to step to the next line.

Now, hit F7 to try and trace into the Stack.Push procedure.

Exp: Debugger traces into the Stack.Push procedure
Act: Debugger jumps to the next line of code, not tracing into the procedure.

Also note, the breakpoint that was set on line 36 never gets hit.

QC #:

Date Reported:

Area:

55655

12/6/2007

RTL

Description:

Steps:

[QC Short Description]
Make TStringBuilder.get_Length inline

[QC Description]
The TStringBuilder.Length is accessed is in the StringBuilder class very often. And because the property is implemented with a getter method (get_Length) this causes a lot of unneccessary calls where the compiler must save and restore the CPU registers what makes the StringBuilder slower.

The compiler generates better code if the get_Length method is inlined.
QC Entry 55655

Look at all the "call" opcodes that the compiler generates everytime the code makes a read access to TStringBuilder.Length in the StringBuilder methods.

QC #:

Date Reported:

Area:

43301

3/27/2007

RTL

Description:

Steps:

[QC Short Description]
WinINet.pas: declaration of FindNextUrlCacheEntryW incorrect

[QC Description]
The declaration of FindNextUrlCacheEntryW incorrectly uses TInternetCacheEntryInfo for the lpNextCacheEntryInfo parameter, but TInternetCacheEntryInfoW would be correct
QC Entry 43301

1. Open WinINet.pas in IDE 2. Navigate to declaration of FindNextUrlCacheEntryW (line 2707 with D2007 RTM) exp: lpNextCacheEntryInfo should be of type TInternetCacheEntryInfoW act: lpNextCacheEntryInfo is of type TInternetCacheEntryInfo

QC #:

Date Reported:

Area:

6926

1/14/2004

RTL

Description:

Steps:

Delphi 7 ships with ZLIB 1.0.4. A bug was discovered in ZLIB 1.1.3 that affects all earlier versions of ZLIB as well. The next release and later, 1.1.4, includes a fix for this bug. According to the announcement at--

http://www.gzip.org/zlib/advisory-2002-03-11.txt

The bug can be used to execute arbitrary code within the context of the current user, as well as engage in DoS attacks.

This report requests that the ZLIB library be updated and any dependent Borland supplied executables which rely on ZLIB be updated in a future service pack or release of Delphi.
QC Entry 6926

More info from J. Peter Mugaas.

Version 1.2.x adds many improvements and features to zlib. Here are
some highlights:

inflate is about 20% faster and minimizes memory allocation

crc32 is about 50% faster

New, improved, and supported DLL interface and DLL FAQ

New functions and functionality:

deflate() and inflate() will now optionally encode and decode gzip streams

raw deflate() and inflate() now documented and supported

New inflateBack() functions for call-back interface -- faster than= inflate()

Z_BLOCK flush option and new return information added to inflate tofacilitate appending to deflate streams

raw deflate() now accepts a dictionary -- for appending

deflatePrime() for starting deflate output mid-byte -- for appending Z_RLE

strategy for run-length encoding -- option for PNG compression

gzclearerr() and gzungetc(), analogous to stdio functions

inflateCopy() added, analogous to deflateCopy()

deflateBound() and compressBound() for maximum size of compressed data

zlibCompileFlags() to provide compilation information

More supported architectures and improved shared library support

Many more FAQ entries
Several new and updated contributions in the contrib directory
===
The complete changelog is at http://www.zlib.net/ChangeLog.txt .

Someone else has done a lot of work in getting enhanced ZLib using
ZLib 1.2.3 and submitted it to Code Central (
http://cc.borland.com/Item.aspx?id=23490 ) and that should work with
the standard ZLib .obj files right out of the box (no changes to the
ZLib source-code at all). The inflateBack() functions really are
faster than the older inflate functions. I would also mention that
Indy itself uses that code central entry with just a few
modifications.

If you do decide to go with the 1.2.x series, you should use the 1.2.3
version because earlier versions have cert warnings concerning
security flaws.

QC #:

Date Reported:

Area:

24614

2/7/2006

RTL

Description:

Steps:

[QC Short Description]
varDouble variants are passed as varSingle in Math.Power

[QC Description]
Variants with varType(v) = varDouble are passed as if they were singles on Math.Power().
I don't think this is by design, on previous versions they were passed as doubles.

I don't know if this happens on other Math functions as well.
QC Entry 24614

Compile and run the attached test case below.

See the following program output indicating failure.

FAIL - Single Precision numbers used

program BTS257076;

{$APPTYPE CONSOLE}

uses
Variants,
Math,
SysUtils;

const
X: double = 999100.1;

var
sx, sy, spower: single; //testing singles
dx, dy, dpower: double; //testing doubles
vx, vy, vpower: variant; //testing variants

begin
dx := X;
dy := 1 + 1/dx;
dpower := Power(dy, dx);

sx := X;
sy := 1 + 1/sx;
spower := Power(sy, sx);

vx := X;
vy := 1 + 1/vx; //this is the right line changed as per comment)
vpower := Power(vy, vx);

if abs(vpower - spower) < 0.001 then
WriteLn('FAIL - Single Precision numbers used')
else if abs(vpower - dpower) < 0.001 then
WriteLn('PASS - Double Precision numbers used')
else
WriteLn('FAIL - Value doesn''t compare as expected');
end.

QC #:

Date Reported:

Area:

28943

5/10/2006

RTL

Description:

Steps:

[QC Short Description]
Add SecsPerHour constant to SysUtils

[QC Description]
Just requesting to add a small new constant to SysUtils unit, for completeness:

const
SecsPerHour = SecsPerMin * MinsPerHour;
QC Entry 28943

QC #:

Date Reported:

Area:

35234

10/14/2006

RTL

Description:

Steps:

[QC Short Description]
IniFile.ReadSection(s): buffer too small, incomplete result

[QC Description]
TIniFile.ReadSection and TIniFile.ReadSections use a fixed buffer of 16384 bytes to read the data. INI files can be bigger than that nowadays! This resulted in configuration data loss in my application.
QC Entry 35234

[Top Ten]

Make a big INI file and call these functions.
Or just look at the code - you will see a fixed buffer size and no detection code for the case where the buffer is too small.

Running the attached test case you will see the following output.

Section.Count=0
FAIL - Expected count not seen.

If TIniFile is replaced with TMemIniFile, the program produces PASS as expected.

program BTS242398;

{$APPTYPE CONSOLE}

uses
SysUtils,
Classes,
IniFiles;

var
IniFile: TIniFile;
Section: TStringList;

begin
try
IniFile := TIniFile.Create('BigIni.ini');
Section := TStringList.Create;
try
IniFile.ReadSection('SectionOne', Section);
WriteLn('Section.Count=', Section.Count);
if Section.Count <> 500 then
WriteLn('FAIL - Expected count not seen.')
else
WriteLn('PASS');
finally
IniFile.Free;
Section.Free;
end;
except
on E: Exception do
WriteLn('FAIL Exception=', E.ClassName, ' Msg=', E.Message);
end;
end.

QC #:

Date Reported:

Area:

14394

7/14/2005

RTL\Delphi

Description:

Steps:

Note: Swiss Army - Large European Premium customer have also reported this issue - Case: 644754

[QC Short Description]
Fastcode RoundToEx in the RTL

[QC Description]
I would like Borland to include in the RTL the Fastcode RoundToEx function that it is a winner on the Fastcode RTL replacement target. The current winner is RoundToEX_JOH_IA32_2. It is written by John O'Harrow and it partially solves the problem with the current RTL RoundTo function, by using Extended precision and by setting and resetting the FPU controlword.
It is optimized against a blend of the latest processors, P4 Prescott, P4 Northwood, Pentium M Banias, Pentium M Dothan, AMD 64 and Athlon XP. It is using basic IA32 instructions only and will run on all processors after 486. It has undergone thorough validation.

Source and benchmark results are available here.

http://fastcode.sourceforge.net/challenge_content/RoundToEX.html

The function can be found in the RoundToEX_JOH.pas file in the RoundToEx Validation and Benchmark Tool project.

These QC reports are about the problems with the current RTL RoundTo function.

Replace RoundTo and SimpleRoundTo
http://qc.borland.com/wc/wc.exe/details?ReportID=8143

RoundTo and SimpleRoundTo are very sick
http://qc.borland.com/wc/wc.exe/details?ReportID=8070

Roundto function problem
http://qc.borland.com/wc/wc.exe/details?ReportID=12112

Regards
Dennis
QC Entry 14394

QC #:

Date Reported:

Area:

37717

12/14/2006

RTL\Delphi

Description:

Steps:

[QC Short Description]
Add support for XML based config files similar to TRegistry and TINIFile

[QC Description]
Add support for XML based config files similar to TRegistry and TINIFile

I think as a start common interface could be defined which will cover all 3 types
then generic function(s) could be provided which will return this interface based on the type of the configuration storage requested.

Interface then can be used to manipulate data.

As a subset for implementation XML based config support is exposed.

in .Net it is available out of the box, in Delphi we still luck such option and required to write own.
QC Entry 37717

QC #:

Date Reported:

Area:

11968

4/11/2005

RTL\Delphi

Description:

Steps:

[QC Short Description]
Please add object ownership for TStrings as it is in TObjectList

[QC Description]
Please add object ownership for TStrings as it is in TObjectList

To keep backward compatability a new functionality is enabled only when OwnsObjects is set to True.

By default OwnsObjects is set to False.

OwnsObjects plays a role only in ownership and taking care about releasing an Objects property when string item is removed.
QC Entry 11968

QC #:

Date Reported:

Area:

36578

11/14/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
SysErrorMessage ErrorCode parameter is Integer instead of Cardinal (range check errors)

[QC Description]
SysErrorMessage (in SysUtils) has a parameter of ErrorCode: Integer instead of ErrorCode: Cardinal, causing range check error with some errors.

GetLastError returns a DWORD, and FormatMessage expects ErrorCode to be DWORD as well.
QC Entry 36578

QC #:

Date Reported:

Area:

34062

9/17/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
missing type definitions in Windows.pas

[QC Description]
Windows.pas is missing some type definitions from winnt.h that are used in Windows API calls.

ULONGLONG
DWORDLONG

DWORDLONG is used in WinSpool.
QC Entry 34062

compare with winnt.h

QC #:

Date Reported:

Area:

34474

9/26/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
incorrect definitions in CommCtrl.pas

[QC Description]
CommCtrl contains the following incorrect definitions:

_PROPSHEETPAGEA
_PROPSHEETPAGEW
_PROPSHEETHEADERA
_PROPSHEETHEADERW

Each of these structures contains:
dwSize: Longint;
dwFlags: Longint;

These fields are supposed to be a DWORD.
QC Entry 34474

compare with prsht.h

QC #:

Date Reported:

Area:

16304

9/28/2005

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Newer SM_ constants for GetSystemMetrics are missing from Windows.pas

[QC Description]
Please can these be brought up-to-date by adding the latest set of constants from the SDK -eg.

const
SM_TABLETPC = 86
SM_MEDIACENTER = $87
SM_REMOTESESSION = $1000
SM_SHUTTINGDOWN = $2000
SM_REMOTECONTROL = $2001;
QC Entry 16304

QC #:

Date Reported:

Area:

7766

3/29/2004

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
WinINET missing *UrlCacheGroup functions

[QC Description]
WinINET.pas is missing *UrlCacheGroup functions.

These are
FindFirstUrlCacheGroup
FindNextUrlCacheGroup
CreateUrlCacheGroup
DeleteUrlCacheGroup
GetUrlCacheGroupAttribute
SetUrlCacheEntryGroup
SetUrlCacheGroupAttribute
QC Entry 7766

QC #:

Date Reported:

Area:

10765

2/3/2005

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Request for extra declarations from CommCtrl.h to be added to CommCtrl.pas

[QC Description]
The following items from CommCtrl.h are not declared in CommCtrl.pas for Delphi 2005 up1 (both ):

#if (_WIN32_IE >= 0x0500)
#define LVS_EX_LABELTIP 0x00004000
#define LVS_EX_BORDERSELECT 0x00008000
#endif // End (_WIN32_IE >= 0x0500)
#if (_WIN32_WINNT >= 0x501)
#define LVS_EX_DOUBLEBUFFER 0x00010000
#define LVS_EX_HIDELABELS 0x00020000
#define LVS_EX_SINGLEROW 0x00040000
#define LVS_EX_SNAPTOGRID 0x00080000
#define LVS_EX_SIMPLESELECT 0x00100000
#endif

So could we have the following added in the appropriate location:

{$EXTERNALSYM LVS_EX_LABELTIP}
LVS_EX_LABELTIP = $00004000;
{$EXTERNALSYM LVS_EX_BORDERSELECT}
LVS_EX_BORDERSELECT = $00008000;
{$EXTERNALSYM LVS_EX_DOUBLEBUFFER}
LVS_EX_DOUBLEBUFFER = $00010000;
{$EXTERNALSYM LVS_EX_HIDELABELS}
LVS_EX_HIDELABELS = $00020000;
{$EXTERNALSYM LVS_EX_SINGLEROW}
LVS_EX_SINGLEROW = $00040000;
{$EXTERNALSYM LVS_EX_SNAPTOGRID}
LVS_EX_SNAPTOGRID = $00080000;
{$EXTERNALSYM LVS_EX_SIMPLESELECT}
LVS_EX_SIMPLESELECT = $00100000;


QC Entry 10765

QC #:

Date Reported:

Area:

32585

8/10/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
flag type definitions for ShGetFolder argument are missing from ShFolder unit

[QC Description]
Today I was using the shGetFolderPath function from the ShFolder unit. This unit defines all of the kinds of paths that can be retrieved, but it does not define the flags that are required as the second to last parameter for the function.
In the C++ Source, found in \Borland\bds\4.0\Include\shlobj.h, the types are defined, though:
typedef enum {
SHGFP_TYPE_CURRENT = 0, // current value for user, verify it exists
SHGFP_TYPE_DEFAULT = 1, // default value, may not exist
} SHGFP_TYPE;

In the \Borland\bds\4.0\source\Win32\rtl\Win\SHFolder.pas or ...\shlobj.pas files, these are not defined. The documentation that one gets with F1 on ShGetFolderPath, though, states the two flags SHGF_TYPE_CURRENT and SHGFP_TYPE_DEFAULT as those parameters valid for this parameter.
QC Entry 32585

1. Create a new Delphi VCL for Win32 project. 2. In any handler, use the SHGetFolderPath function, and include the unit SHFolder so the compiler finds it. 3. In the function call, try to use SHGFP_TYPE_CURRENT or SHGFP_TYPE_DEFAULT as the second to last parameter (immediately preceding the pAnsiChar parameter). 4. Try to compile. You'll get an error saying that this is an undeclared identifier. 5. Try also including the unit ShlObj. It will not help. You have to define the values manually for Pascal source to get things going.

QC #:

Date Reported:

Area:

28039

4/26/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
INTERNET_MAX_URL_LENGTH is defined incorrectly

[QC Description]
INTERNET_MAX_URL_LENGTH in Wininet.pas is combined as

NTERNET_MAX_URL_LENGTH = (
(SizeOf(INTERNET_MAX_PROTOCOL_NAME) - 1)
+ SizeOf('://')
+ INTERNET_MAX_PATH_LENGTH);

with a length of 2055.

All functions of the interface IActiveDesktop (unit ShlObj) having a parameter of type TShComponent will fail.

The correct combination of INTERNET_MAX_URL_LENGTH is

INTERNET_MAX_URL_LENGTH = (
INTERNET_MAX_SCHEME_LENGTH
+ SizeOf('://')
+ INTERNET_MAX_PATH_LENGTH);

with a length of 2084.
QC Entry 28039

program Project1; {$APPTYPE CONSOLE} uses SysUtils, ComObj, ActiveX, ShlObj; var ActiveDesktop: IActiveDesktop; ShComponent: TShComponent; DesktopItemCount: Integer; begin CoInitialize(nil); ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop; ShComponent.dwSize := SizeOf(ShComponent); OleCheck(ActiveDesktop.GetDesktopItemCount(DesktopItemCount, 0)); if DesktopItemCount > 0 then // OleCheck raises the exception "wrong // parameter" because of the // wrong length of ShComponent OleCheck(ActiveDesktop.GetDesktopItem(0, ShComponent, 0)); end.

QC #:

Date Reported:

Area:

29547

5/27/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Return type of ImageHlp.SymLoadModule is wrong

[QC Description]
According to the platform SDK documentation and looking at imagehlp.h, the return type of SymLoadModule is a DWORD, in ImageHlp.pas it is a Bool.
QC Entry 29547

Look at the SymLoadModule declaration in ImageHlp.pas (line 630) Look at the Platform SDK header (imagehlp.h) or in the documentation at ms-help://MS.PSDKSVR2003SP1.1033/debug/base/symloadmodule64.htm

QC #:

Date Reported:

Area:

28968

5/10/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Wrong declarations in UxTheme.pas

[QC Description]
In UxTheme.pas the functions GetThemeFont, GetThemeSysFont and GetThemeTextMetrics are declared wrong.

* Type of pFont parameter of function GetThemeFont should be LOGFONTW instead of LOGFONT.
* Type of plf parameter of function GetThemeSysFont should be LOGFONTW instead of LOGFONT.
* Type of ptm parameter of function GetThemeTextMetrics should be TEXTMETRICW instead of TEXTMETRIC.
QC Entry 28968

On a computer with Windows XP, themes enabled: Create a new application, drop a button on the main form and write the following event handler: procedure TForm1.Button1Click(Sender: TObject); var LogFontW: TLogFontW; LogFontA: TLogFontA; Details: TThemedElementDetails; begin Details := ThemeServices.GetElementDetails(tspUserPane); with Details do if GetThemeFont(ThemeServices.Theme[Element], 0, Part, State, TMT_FONT, LogFontA) = S_OK then begin ShowMessage(LogFontA.lfFaceName); end; { EXP: Message displaying 'Franklin Gothic Medium' } { ACT: Message displaying 'F' } with Details do if GetThemeFont(ThemeServices.Theme[Element], 0, Part, State, TMT_FONT, PLogFontA(@LogFontW)^) = S_OK then begin ShowMessage(LogFontW.lfFaceName); end; { ACT: Message displaying 'Franklin Gothic Medium' } end;

QC #:

Date Reported:

Area:

26865

4/1/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Incorrect declaration for ConvertThreadToFiber, SwitchToFiber

[QC Description]
The following functions are declared in Windows.pas with incorrect return types

ConvertThreadToFiber
SwitchToFiber
DeleteFiber


QC Entry 26865

In Windows.pas function ConvertThreadToFiber(lpParameter: Pointer): BOOL; stdcall; function SwitchToFiber(lpFiber: Pointer): BOOL; stdcall; function DeleteFiber(lpFiber: Pointer): BOOL; stdcall; Form the SDK Help: LPVOID ConvertThreadToFiber(LPVOID lpParameter); Return Values If the function succeeds, the return value is the address of the fiber. void SwitchToFiber(LPVOID lpFiber); Return ValuesThis function does not return a value. void DeleteFiber(LPVOID lpFiber); Return ValuesThis function does not return a value. void DeleteFiber(LPVOID lpFiber);

QC #:

Date Reported:

Area:

24345

1/31/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Wrong declaration of SHGetFileInfoW (ShellAPI.pas)

[QC Description]
SHGetFileInfoW in ShellAPI.pas is:
function SHGetFileInfoW(pszPath: PAnsiChar, ...

the correct declaration is:
function SHGetFileInfoW(pszPath: PWideChar, ...
QC Entry 24345

var ws: WideString; pws: PWideChar; begin ws := 'some unicode string, not null'; pws := addr(ws[1]); SHGetFileInfoW(pws, ... will result in a sintax error.

QC #:

Date Reported:

Area:

21046

11/5/2005

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
ShFolder.pas is not sync with ShFolder.h

[QC Description]
The following declarations are missing in ShFolder.pas :

CSIDL_MYMUSIC
CSIDL_RESOURCES
CSIDL_RESOURCES_LOCALIZED
QC Entry 21046

Compare ShFolder.h (from the Microsoft Platform SDK) to ShFolder.pas.

QC #:

Date Reported:

Area:

20818

10/30/2005

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Incorrect declaration for GetProcessHeaps API

[QC Description]
This is the declaration for the GetProcessHeaps API in the Windows.pas unit:

function GetProcessHeaps(NumberOfHeaps: DWORD; var ProcessHeaps: THandle): DWORD; stdcall;

And this is the MSDN page on that function:
http://msdn.microsoft.com/library/en-us/memory/base/getprocessheaps.asp
(http://tinyurl.com/apzsw)

MSDN specifies this signature:
DWORD GetProcessHeaps(
DWORD NumberOfHeaps,
PHANDLE ProcessHeaps
);

In this case the PHANDLE type should not have been converted to a by reference parameter, since the ProcessHeaps parameter really points to an array:
[out] Pointer to a buffer that receives an array of heap handles.

The proper translation would have been this:
function GetProcessHeaps(NumberOfHeaps: DWORD; ProcessHeaps: PHandle): DWORD; stdcall;
QC Entry 20818

1) Create an empty project 2) Add a button 3) Add the following event handler: procedure TForm1.Button1Click(Sender: TObject); var Handles: array[0..9] of THandle; begin GetProcessHeaps(Length(Handles), Handles); end; 4) Compile 5) Delphi now reports: [Error] Unit1.pas(30): Types of actual and formal var parameters must be identical

QC #:

Date Reported:

Area:

7767

3/29/2004

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Incorrect BackupSeek declaration

[QC Description]
windows.pas declares the BackupSeek function as

function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD;
var lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD; lpContext: Pointer): BOOL; stdcall;

This is wrong according to MSDN.

The correct declaration is (var missing before lpContext)

QC Entry 7767

// see windows.pas Is function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD; var lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD; lpContext: Pointer): BOOL; stdcall; but should be function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD; var lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD; var lpContext: Pointer): BOOL; stdcall;

QC #:

Date Reported:

Area:

34060

9/17/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Incorrect definition of Largeuint in ActiveX.pas

[QC Description]
Line # 1646 of ActiveX.pas defines the following:

Largeuint = Int64;

Since it is supposed to be unsigned it should be defined as:

Largeuint = UInt64;
QC Entry 34060

n/a

QC #:

Date Reported:

Area:

52746

9/29/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Windows.pas missing definition of FILE_FLAG_FIRST_PIPE_INSTANCE

[QC Description]
The Windows.pas file is missing the definition of FILE_FLAG_FIRST_PIPE_INSTANCE.

const
FILE_FLAG_FIRST_PIPE_INSTANCE = $00080000;

QC Entry 52746

N/A

QC #:

Date Reported:

Area:

43297

3/27/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
WinINet.pas: unicode version of DeleteUrlCacheEntry missing

[QC Description]
WinINet.pas only contains the ansi version of DeleteUrlCacheEntry. Please add *A and *W declarations and map the current one to the ansi version as done with most other APIs.
QC Entry 43297

1. Start IDE 2. Open WinINet.pas and navigate to DeleteUrlCacheEntry (line 2715 with D2007 RTM sources) exp: there should be 3 versions: DeleteUrlCacheEntry, DeleteUrlCacheEntryA and DeleteUrlCacheEntryW act: only ANSI version is declared (DeleteUrlCacheEntry)

QC #:

Date Reported:

Area:

43299

3/27/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
WinINet.pas: declaration of FindFirstUrlCacheEntryExW incorrect

[QC Description]
The declaration of FindFirstUrlCacheEntryExW incorrectly uses PAnsiChar for the lpszUrlSearchPattern parameter instead of PWideChar.
Additionally the lpFirstCacheEntryInfo parameter should be PInternetCacheEntryInfoW and not PInternetCacheEntryInfo which corresponds to PInternetCacheEntryInfoA
QC Entry 43299

1. Open WinINet.pas in IDE 2. Navigate to declaration of FindFirstUrlCacheEntryExW exp: lpszUrlSearchPattern should be of type PWideChar act: lpszUrlSearchPattern is of type PAnsiChar exp: lpFirstCacheEntryInfo should be of type PInternetCacheEntryInfoW act: lpFirstCacheEntryInfo is of type PInternetCacheEntryInfo

QC #:

Date Reported:

Area:

43300

3/27/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
WinINet.pas: declaration of FindFirstUrlCacheEntryW incorrect

[QC Description]
The declaration of FindFirstUrlCacheEntryW incorrectly uses PAnsiChar for the lpszUrlSearchPattern parameter instead of PWideChar.
Additionally the lpFirstCacheEntryInfo parameter should be TInternetCacheEntryInfoW and not TInternetCacheEntryInfo which corresponds to TInternetCacheEntryInfoA
QC Entry 43300

1. Open WinINet.pas in IDE 2. Navigate to declaration of FindFirstUrlCacheEntryW exp: lpszUrlSearchPattern should be of type PWideChar act: lpszUrlSearchPattern is of type PAnsiChar exp: lpFirstCacheEntryInfo should be of type TInternetCacheEntryInfoW act: lpFirstCacheEntryInfo is of type TInternetCacheEntryInfo

QC #:

Date Reported:

Area:

43303

3/27/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
WinINet.pas: declaration of FindNextUrlCacheEntryExW incorrect

[QC Description]
The declaration of FindNextUrlCacheEntryExW incorrectly uses PInternetCacheEntryInfo for the lpFirstCacheEntryInfo parameter, but PInternetCacheEntryInfoW would be correct.

Additionally, to be consistent with FindNextUrlCacheEntryW the parameter should be called lpNextCacheEntryInfo instead of lpFirstCacheEntryInfo.
QC Entry 43303

1. Open WinINet.pas in IDE 2. Navigate to declaration of FindNextUrlCacheEntryExW (line 2677 with D2007 RTM) exp: lpFirstCacheEntryInfo should be of type PInternetCacheEntryInfoW act: lpFirstCacheEntryInfo is of type PInternetCacheEntryInfo exp: lpFirstCacheEntryInfo should be called lpNextCacheEntryInfo as it is for FindNextUrlCacheEntryW

QC #:

Date Reported:

Area:

48771

7/9/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
GetWindowLongPtr, SetWindowLongPtr, GWLP_* missing

[QC Description]
GetWindowLongPtr, SetWindowLongPtr, and GWLP_* are missing from Windows.pas.
These functions/constants are needed in order to write code today that will compile cleanly on a future 64-bit version of Delphi.

Here's what must be added:

interface

const
GWLP_WNDPROC = -4;
GWLP_HINSTANCE = -6;
GWLP_HWNDPARENT = -8;
GWLP_USERDATA = -21;
GWLP_ID = -12;

function GetWindowLongPtr(hWnd: HWND; nIndex: Integer): LONG_PTR; stdcall;
function GetWindowLongPtrA(hWnd: HWND; nIndex: Integer): LONG_PTR; stdcall;
function GetWindowLongPtrW(hWnd: HWND; nIndex: Integer): LONG_PTR; stdcall;
function SetWindowLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: LONG_PTR): LONG_PTR; stdcall;
function SetWindowLongPtrA(hWnd: HWND; nIndex: Integer; dwNewLong: LONG_PTR): LONG_PTR; stdcall;
function SetWindowLongPtrW(hWnd: HWND; nIndex: Integer; dwNewLong: LONG_PTR): LONG_PTR; stdcall;

implementation

{$IFNDEF _WIN64}
// In a 32-bit build, these are simply aliases for the non-Ptr versions.
// (WinUser.h uses macros, e.g.: #define GetWindowLongPtrA GetWindowLongA)
function GetWindowLongPtr; external user32 name 'GetWindowLongA';
function GetWindowLongPtrA; external user32 name 'GetWindowLongA';
function GetWindowLongPtrW; external user32 name 'GetWindowLongW';
function SetWindowLongPtr; external user32 name 'SetWindowLongA';
function SetWindowLongPtrA; external user32 name 'SetWindowLongA';
function SetWindowLongPtrW; external user32 name 'SetWindowLongW';
{$ELSE}
// In a 64-bit build, use the real Ptr functions.
function GetWindowLongPtr; external user32 name 'GetWindowLongPtrA';
function GetWindowLongPtrA; external user32 name 'GetWindowLongPtrA';
function GetWindowLongPtrW; external user32 name 'GetWindowLongPtrW';
function SetWindowLongPtr; external user32 name 'SetWindowLongPtrA';
function SetWindowLongPtrA; external user32 name 'SetWindowLongPtrA';
function SetWindowLongPtrW; external user32 name 'SetWindowLongPtrW';
{$ENDIF}
QC Entry 48771

Compile and run the attached program below.

See the following message at runtime.

The procedure entry point SetWindowLongPtrW could not be located in the dynamic link library user32.dll


program BTS242143;

{$APPTYPE CONSOLE}

uses
Windows;

var
Counter: Integer = 0;

begin
if (GWLP_WNDPROC = -4) and
(GWLP_HINSTANCE = -6) and
(GWLP_HWNDPARENT = -8) and
(GWLP_USERDATA = -21) and
(GWLP_ID = -12)
then
Inc(Counter)
else
WriteLn('FAIL #1');

if Counter = 47 then
begin
GetWindowLongPtr(0, 0);
GetWindowLongPtrA(0, 0);
GetWindowLongPtrW(0, 0);
SetWindowLongPtr(0, 0, 0);
SetWindowLongPtrA(0, 0, 0);
SetWindowLongPtrW(0, 0, 0);
end;

if Counter = 1 then
WriteLn('PASS');
end.

QC #:

Date Reported:

Area:

49529

7/25/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
SHDeleteEmptyKeyA and SHDeleteEmptyKeyW have wrong import name

[QC Description]
In ShlwAPI it says:

function SHDeleteEmptyKeyA; external shlwapi32 name 'SHDeleteEmptyKeyAA';
function SHDeleteEmptyKeyW; external shlwapi32 name 'SHDeleteEmptyKeyWW';

These function have an A and a W too much:
SHDeleteEmptyKeyAA should be SHDeleteEmptyKeyA
SHDeleteEmptyKeyWW should be SHDeleteEmptyKeyWW

A program that is using SHDeleteEmptyKeyW (or ...A) will show an error message on startup. The application will not run.
QC Entry 49529

Add the following code to a program: procedure TForm1.Button1Click(Sender: TObject); begin SHDeleteEmptyKeyW(HKEY_CLASSES_ROOT, 'Software\Classes\CLSID\{F279065E-A9C8-440C-AFD6-199E55BC5001}'); end; When you start the application. it will display the Error Message "Entry point not found - The entry point "SHDeleteEmptyKeyWW" could not be located in the dynamic link library "shlwapi.dll". --------------------------- Test_VistaShield.exe - Einsprungpunkt nicht gefunden --------------------------- Der Prozedureinsprungpunkt "SHDeleteEmptyKeyWW" wurde in der DLL "shlwapi.dll" nicht gefunden. --------------------------- OK --------------------------- Tested on Vista Home Premium, but the problem seems to exist on XP, too. When adding the following code to a program, the program starts fine, and the functions works: const shlwapi32 = 'shlwapi.dll'; function SHDeleteEmptyKeyW(hKey: HKEY; pszSubKey: PWideChar): DWORD; stdcall; external shlwapi32 name 'SHDeleteEmptyKeyW'; function SHDeleteEmptyKeyA(hKey: HKEY; pszSubKey: PAnsiChar): DWORD; stdcall; external shlwapi32 name 'SHDeleteEmptyKeyA';

QC #:

Date Reported:

Area:

55095

11/21/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
WinSvc is missing new API function

[QC Description]
QueryServiceStatusEx() is MIA. Introduced in Windows 2000.
QC Entry 55095

QC #:

Date Reported:

Area:

55648

12/6/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Incorrect declaration for FindFirstFileEx

[QC Description]
Windows.pas, line 5681:

function FindFirstFileEx(lpFileName: PChar; fInfoLevelId: TFindexInfoLevels;
lpFindFileData: Pointer; fSearchOp: TFindexSearchOps; lpSearchFilter: Pointer;
dwAdditionalFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindFirstFileEx}
function FindFirstFileExA(lpFileName: PAnsiChar; fInfoLevelId: TFindexInfoLevels;
lpFindFileData: Pointer; fSearchOp: TFindexSearchOps; lpSearchFilter: Pointer;
dwAdditionalFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindFirstFileExA}
function FindFirstFileExW(lpFileName: PWideChar; fInfoLevelId: TFindexInfoLevels;
lpFindFileData: Pointer; fSearchOp: TFindexSearchOps; lpSearchFilter: Pointer;
dwAdditionalFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindFirstFileExW}

This is incorrect. The return value of FindFirstFileEx is THandle.

See http://msdn2.microsoft.com/en-us/library/aa364419.aspx
QC Entry 55648

QC #:

Date Reported:

Area:

55647

12/6/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Incorrect value of SFGAO_GHOSTED

[QC Description]
ShlObj.pas, line 2412:

SFGAO_GHOSTED = $00080000; { ghosted icon }

This is incorrect. The real value of SFGAO_GHOSTED is 0x00008000

(see http://msdn2.microsoft.com/en-us/library/bb762589.aspx)
QC Entry 55647

QC #:

Date Reported:

Area:

43296

3/27/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
WinINet.pas: declaration of INTERNET_CACHE_ENTRY_INFOW incorrect

[QC Description]
The declaration of INTERNET_CACHE_ENTRY_INFOW incorrectly uses PAnsiChar for the lpszSourceUrlName field. Correct would be PWideChar as already used for the other LPSTR fields.
QC Entry 43296

1. Start IDE and open WinINet.pas 2. Navigate to declaration of INTERNET_CACHE_ENTRY_INFOW (line 2416 for D2007 RTM) exp: lpszSourceUrlName should be of type PWideChar act: lpszSourceUrlName is of type PWideChar

QC #:

Date Reported:

Area:

39179

1/23/2007

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
GetRandomRgn WinAPI translation is missing in Windows.pas

[QC Description]
The following should be added to Windows.pas to bring it more up to date:

const
SYSRGN = 4;

function GetRandomRgn(hdc: HDC; hrgn: HRGN; iNum: Integer): Integer; stdcall;
external gdi32 name 'GetRandomRgn';

GetRandomRgn has been supported by the WinAPI since NT 3.1 and Windows 95, but is omitted from Windows.pas.
QC Entry 39179

N/A - Enhancement request

QC #:

Date Reported:

Area:

27006

4/5/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
Memory Leak 109 - 116 Bytes in DLL

[QC Description]
I get always a unexpected Memory Leak when code is in DLL and using ReportMemoryLeaksOnShutdown:=True

---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:

109 - 116 bytes: Unknown x 1

QC Entry 27006

[Top Ten]

Look at this simple code: ************** DLL *********************** library myDLL; uses Classes,Dialogs,SysUtils; {$R *.res} Procedure Show(u:Integer);stdCall; Begin MessageDlg(IntTOStr(U), mtWarning, [mbOK], 0); end; Exports Show; begin ReportMemoryLeaksOnShutdown:=True; end. ============================================ ************ Calling APP ******************* unit unMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TShow = Procedure(Data:Integer); stdcall; var Form1: TForm1; MyHandle:THandle; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); Var Show: TShow; Begin MyHandle:=LoadLibrary('myDLL.dll'); Try if MyHandle <> 0 then begin @Show:=GetProcAddress(MyHandle,'Show'); if @Show <> nil then begin Show(1234); end else MessageBox(0, 'ERROR', nil, 0); end; finally FreeLibrary(MyHandle); end; end; end.

QC #:

Date Reported:

Area:

34063

9/17/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
incorrect definition of ULARGE_INTEGER in Windows.pas

[QC Description]
ULARGE_INTEGER contains the line

QuadPart : LONGLONG;

It is supposed to be unsigned.
see winnt.h line # 502.
QC Entry 34063

n/a

QC #:

Date Reported:

Area:

38195

12/30/2006

RTL\Delphi\WinAPI

Description:

Steps:

[QC Short Description]
CreateProcessAsUserW declared wrong

[QC Description]
In Windows.pas CreateProcessAsUserW is declared as:

function CreateProcessAsUserW( [...] const lpStartupInfo: TStartupInfo; [...])

This doesn't work correctly because the wide function requires TStartupInfoW:

function CreateProcessAsUserW( [...] const lpStartupInfo: TStartupInfoW; [...])

CreateProcessAsUserW can be used to launch a process in the context of a limited user from a process that has admin rights (i.e. Setup programs in Vista).
QC Entry 38195

When using the following code to start C:\windows\system32\cmd.exe the window title of cmd looks like "[[" instead of "Test". After fixing CreateProcessAsUserW it worked as expected. FillChar(si, sizeof(STARTUPINFO), 0); si.cb := SizeOf(STARTUPINFO); si.lpDesktop := nil; si.lpTitle := PAnsiChar('Test'); // Spin up the new process if (CreateProcessAsUserW( hToken, PWideChar(AFileName), PWideChar(ACommandLine), nil, nil, FALSE, CREATE_NEW_CONSOLE, nil, nil, si, pi)) then

QC #:

Date Reported:

Area:

21057

11/6/2005

RTL\Delphi\Other RTL

Description:

Steps:

[QC Short Description]
Convert UpCase into an inline Pascal function

[QC Description]
The current UpCase function is poorly implemented and can easily be improved, as detailed below.
QC Entry 21057

The current BASM Upcase function code is:-. function UpCase( ch : Char ) : Char; asm CMP AL,'a' JB @@exit CMP AL,'z' JA @@exit SUB AL,'a' - 'A' @@exit: end; I propose converting it into the following Pascal code:- function UpCase(ch: Char): Char; inline; begin Result := Ch; if Result in ['a'..'z'] then Dec(Result, Ord('a')-Ord('A')); end; The compiler inserts the following code for the Pascal version. mov edx,eax add dl,$9f sub dl,$1a jnb @@Exit sub al,$20 @@Exit: This is much more efficient - No call overhead when inlined, and only 1 condition branch.

QC #:

Date Reported:

Area:

21678

11/23/2005

RTL\Delphi\Other RTL

Description:

Steps:

[QC Short Description]
Convert FreeAndNil Procedure into a INLINE Procedure

[QC Description]
FreeAndNil is a widely used but very small Pascal procedure, and is an ideal candidate for conversion into an INLINE procedure.
QC Entry 21678

QC #:

Date Reported:

Area:

5744

8/27/2003

RTL\Delphi\Other RTL

Description:

Steps:


The sample program should print False all four times, but actually prints True, True, False, True.

(JJS: DCCIL reports the expected result)

The source of the bug is in Masks.MatchesMaskStates. It doesn't actually check whether it's going beyond the end of the file name. It relies only on failing a match test to exit its loop. When it's checking the third character of 'ab', which is #0, the test passes since #0 fits the '?' mask. And because of how the 'ab' string happens to be stored, there is another #0 in the "fourth" character of 'ab', so it matches the #0 at the end of the 'ab?' string, and the whole test passes.

(When using the debugger to trace the problem, it may help to make your own copy of Masks; Masks.dcu is not included in the collection of debug DCUs.)
QC Entry 5744

// NOTE: Why isn't the Windows API

function PathMatchSpec(pszFile, pszSpec: PChar): BOOL; stdcall;

from shlwapi.pas used instead?

(JJS: See also 242399)

[Top Ten]

program TestMask; {$APPTYPE CONSOLE} uses Masks; begin writeln(MatchesMask('ab', 'ab?')); writeln(MatchesMask('ab', 'ab?*?')); writeln(MatchesMask('ab', 'ab??')); writeln(MatchesMask('abc', 'abc??????????????')); end.

QC #:

Date Reported:

Area:

53764

10/21/2007

RTL\Delphi\Other RTL

Description:

Steps:

[QC Short Description]
MultiMon function stubs are not initialized when used inside a DLL

[QC Description]
Thanks to Pieter Zijlstra for the actual tracing of the problem.

His description goes:

When used with the VCL GetMonitorInfo (stub) is initialized by getting
the ProcAddress of "GetMonitorInfoA" when GetSystemMetrics (also a
stub) is first called / initialized.

When used without the VCL, GetSystemMetrics does not get called and
then GetMonitorInfo is initialized by xGetMonitorInfo which will do
that by getting the ProcAddress of "GetMonitorInfo" (without the A)
which does not exists.
QC Entry 53764

See the attatched ZIP file.

QC #:

Date Reported:

Area:

50653

8/16/2007

RTL\Delphi\Other RTL

Description:

Steps:

[QC Short Description]
Classes function HexToBin does not detect bad input and doesn't handle it consistantly between the Win32 and .NET compilers.

[QC Description]

HexToBin will not detect and stop (or report errors) when certain non-hexadecimal characters are in its input, namely those characters in the range Succ('9') .. Pred('A') and in the range Succ('F') .. Pred('a').

Thus inputs like 'GG' are accepted and return a nonsense result into the output buffer.

Also note that there are help file errors reported in Quality Central report #9542.

--JohnH, 2007-08-15
QC Entry 50653

Compile and run the attached test case below.

See the following output with the Win32 compiler.

FAIL #4 Value=n=1, s=GG, Buf: EF 2D
FAIL Counter=3

With the .NET compiler, the following result will be seen.

FAIL #4 Value=n=1, s=GG, Buf: FF 2D
FAIL Counter=3

program BTS254169;

{$APPTYPE CONSOLE}

uses
Classes,
SysUtils;

var
Counter: Integer = 0;

procedure DoIt;

function XX(const s: string): String;
var
n: integer;
I: Integer;

{$IFDEF CLR}
Buf: TBytes;
Text: TBytes;
{$ELSE}
Buf: array [0..9] of byte;
{$ENDIF}

begin
{$IFDEF CLR}
SetLength(Buf, 10);
SetLength(Text, 256);
Text := BytesOf(S);
{$ENDIF}
for I := 0 to High(Buf) do
Buf[I] := $2D;

{$IFDEF CLR}
n := HexToBin(Text, 0, Buf, 0, Length(Text) div 2);
{$ELSE}
n := HexToBin(PChar(s), @Buf, SizeOf(Buf));
{$ENDIF}

Result := Format( 'n=%D, s=%S, Buf: %2.2X %2.2X', [n,s,Buf[0], Buf[1]]);
end;

var
Value: String;

begin
Value := XX('');
if Value = 'n=0, s=, Buf: 2D 2D' then
Inc(Counter)
else
WriteLn('FAIL #1 Value=', Value);

Value := XX('A');
if Value = 'n=0, s=A, Buf: 2D 2D' then
Inc(Counter)
else
WriteLn('FAIL #2 Value=', Value);

Value := XX('11');
if Value = 'n=1, s=11, Buf: 11 2D' then
Inc(Counter)
else
WriteLn('FAIL #3 Value=', Value);

Value := XX('GG');
if Value = 'n=0, s=GG, Buf: 2D 2D' then
Inc(Counter)
else
WriteLn('FAIL #4 Value=', Value);
end;

begin
try
DoIt;
if Counter = 4 then
WriteLn('PASS')
else
WriteLn('FAIL Counter=', Counter);
except
on E: Exception do
WriteLn('FAIL - Exception=', E.ClassName, '/', E.Message, ' Counter=', Counter);
end;
end.

QC #:

Date Reported:

Area:

40342

2/12/2007

RTL\Delphi\Other RTL

Description:

Steps:

[QC Short Description]
WideExtractQuotedStr

[QC Description]
Passing in a string of three quotation marks causes an access violation to occur.
QC Entry 40342

Run the attached program below.

See the following output to the console.

FAIL Exception (EAccessViolation/Access violation at address 00402FFF in module 'BTS245551.exe'. Write of address 0040509A)

program BTS245551;

{$APPTYPE CONSOLE}

uses
SysUtils,
WideStrUtils;

var
S: WideString;

begin
try
S := WideDequotedStr('"""', '"');
if S <> 'Hello' then
WriteLn('PASS');
except
on E: Exception do
WriteLn('FAIL Exception (', E.ClassName, '/', E.Message, ')');
end;
end.

QC #:

Date Reported:

Area:

39575

1/29/2007

RTL\Delphi\Other RTL

Description:

Steps:

[QC Short Description]
Wrong string memory managment in Collections.pas

[QC Description]
Method TStringHashTable.Contains should be changed.

Old version:
------------
function TStringHashTable.Contains(const Key: string;
out Value: string): Boolean;
begin
Result := TCustomHashTable(Self).Contains(Pointer(Key), HashProc(Key), Pointer(Value));
end;

New version:
-------------
function TStringHashTable.Contains(const Key: string;
out Value: string): Boolean;
var
ValuePtr: Pointer;
begin
Result := TCustomHashTable1(Self).Contains(Pointer(Key), HashProc(Key),
ValuePtr);
Value := string(ValuePtr);
end;

Description
------------------
There is wrong string memory managment for Value parameter: there is no correct refcount. As result AV could happen.
See steps for demostration of AV.

QC Entry 39575

1. Try to run such project. {$o-} program Project1; {$APPTYPE CONSOLE} uses Windows, SysUtils, Collections; procedure Test(); const cLen = 22222222; var kC: TStringHashTable; kKey, kValue, kValue2: String; begin kC := TStringHashTable.Create(); kKey := StringOfChar('k', cLen); kValue := StringOfChar('v', cLen); kC.Add(kKey, kValue); if kC.Contains(StringOfChar('k', cLen), kValue2) then begin kValue2 := ''; if kC.Contains(StringOfChar('k', cLen), kValue2) then begin kValue2 := ''; if kC.Contains(StringOfChar('k', cLen), kValue2) then begin kValue2[cLen-10] := #45; end; end; end; kC.Free(); end; begin try Test; except on kE: Exception do MessageBox(0, PChar(kE.Message), '', 0); end; end. 2. Ex. beh: All OK Actual beh: AV happens. (if you dont see AV simply increase cLen const or make some more calls to kC.Contains and clear kValue2 after it).

QC #:

Date Reported:

Area:

39714

1/31/2007

RTL\Delphi\Other RTL

Description:

Steps:

[QC Short Description]
Wrong memory managment in Collections.pas

[QC Description]
Method TObjectIHashTable.Contains should be changed.

Old version:
------------
function TObjectIHashTable.Contains(const Key: TObject;
out Value: IInterface): Boolean;
begin
Result := TCustomHashTable(Self).Contains(Key, Key.GetHashCode, Pointer(Value));
end;

New version:
-------------
function TObjectIHashTable.Contains(const Key: TObject;
out Value: IInterface): Boolean;
var
ValuePtr: Pointer;
begin
Result := TCustomHashTable(Self).Contains(Key, Key.GetHashCode, ValuePtr);
Value := IInterface(ValuePtr);
end;

Description
------------------
There is wrong interface memory managment for Value parameter: there is no correct refcount. As result AV could happen.
See steps for demostration of AV.

Important
---------------
Same bug presents for sure in this methods:
1. TWideStringIHashTable.Contains
2. TStringIHashTable.Contains
3. TInterfaceStrHashTable.Contains
4. TIntegerIHashTable.Contains

I think that there is need to pay attantion on TWideStringHashTable.Contains.
I really don't know WideString memory management good. But i've got a feeling that there is also a bug.
QC Entry 39714

Run the attached program below.

See that execution halts with an unexpected exception error.

(if you dont see AV simply increase cLen const or make some more calls to kC.Contains and clear kValue2 after it).

{$o-}
program BTS244950;

{$APPTYPE CONSOLE}

uses
Windows,
SysUtils,
Collections;

const
cLen = 22222222;

type
IMyValue = interface
['{6CFC8F78-A2AF-4F9C-8050-C0C5155F01AB}']
procedure Change();
end;

TMyValue = class(TInterfacedObject, IMyValue)
public
var
Dummy: packed array[0..cLen-1] of Byte;
public
procedure Change;
end;

procedure TMyValue.Change();
begin
Dummy[cLen-10] := 23;
end;

procedure Test;
var
kC: TObjectIHashTable;
kKey: TObject;
kValue: IMyValue;
kValue2: IInterface;
begin
kC := TObjectIHashTable.Create();
kKey := TObject.Create();
kValue := TMyValue.Create();
kC.Add(kKey, kValue);
if kC.Contains(kKey, kValue2) then
begin
kValue2 := nil;
if kC.Contains(kKey, kValue2) then
begin
kValue2 := nil;
if kC.Contains(kKey, kValue2) then
begin
(kValue2 as IMyValue).Change();
end;
end;
end;
kC.Free();
kKey.Free();
end;

begin
try
Test;
WriteLn('PASS'); // No exception raised
except
on E: Exception do
WriteLn('FAIL - Exception (', E.ClassName, '/', E.Message, ')');
end;
end.

QC #:

Date Reported:

Area:

51427

8/31/2007

RTL\Delphi\RTL Exceptions

Description:

Steps:

[QC Short Description]
Calling Halt in 'except' or 'finally' forcibly displays the exception message, and causes process to return wrong exit code


(JJS: Seems related to 255308 but reproducible with D2007 December Update)

[QC Description]
This is a new problem introduced in Delphi 2007 (and still repro with the Dec2007 update installed):

If Halt is called inside an 'except' or 'finally' block, the current exception's message is forcibly displayed on the screen, and the process returns with an exit code of 1 instead of the exit code specified in the Halt call.

The cause appears to be these lines in SysUtils' DoneException procedure, which are new to Delphi 2007:

if ExceptObject <> nil then
ExceptHandler(ExceptObject, ExceptAddr);

I assume the intention there is to ensure that any new exceptions raised during termination are brought to the attention of the user.

In my case, however (see the example code), the exception was raised before termination commenced. DoneException should ignore such pre-existing exceptions. And it certainly should not be changing my exit code from 5 to 1.
QC Entry 51427

Run this code: program Project1; uses Windows, SysUtils; begin try raise Exception.Create('xxx'); except Halt(5); end; end. Expected results (what happened in Delphi 2.0 through 2006): 1. The process should return with an exit code of 5. Actual results on Delphi 2007: 1. A message box is displayed: --------------------------- Application Error --------------------------- Exception Exception in module Project1.exe at 00055753. xxx. --------------------------- OK --------------------------- 2. The process returns with an exit code of 1, not 5.

QC #:

Date Reported:

Area:

7308

2/16/2004

RTL\Delphi\Date - Time

Description:

Steps:

[QC Short Description]
TDate and TTime are declared in the wrong unit.

[QC Description]
TDate and TTime can be considered 'basic' data tyupes and should be defined in SysUtils or Types. Currently they are defined in Controls. This is IMHO a bit of a weird spot for those types.

Since TDate, TTime and TDatetime are all doubles you can always use Tdatetime everywhere unless you use RTTI for these types also.
QC Entry 7308

QC #:

Date Reported:

Area:

461

4/4/2002

RTL\Delphi\File Management

Description:

Steps:

[QC Short Description]
Not all file attributes are defined in SYSUtils.pas

[QC Description]
There are a number of extended file attributes which are not defined in SYSUtils.pas.

An example is the 'normal' file attribute. This should be defined like this:

const
faNormal = $00000080 platform; // A file attribute not defined in here in the Delphi release VCL code...

There are others such as excrypted and compressed which could also be defined. See the MSDN for full details.

The 'Normal' file attribute is a specific problem as many files on LANs running Win2K Server will have files that have the 'Normal' attribute and no others. This means that a file search using faAnyFile will not match these files.

SYSOP:
Link to other attributes from the help file that ships with BDS 2006

ms-help://borland.bds4/fileio/base/getfileattributes.htm
QC Entry 461

I would suggest we also add more of the file attributes line compressed files at the moment even with the new modifications it will not allow compressed file to be found using FindFirst

So the problem is this:
FindFirst(Path, faAnyFile,F);
if (F.Attr and faAnyFile) then do something. // <-- This fails for compressed files even with the new fixed modifications

QC #:

Date Reported:

Area:

20590

10/24/2005

RTL\Delphi\File Management

Description:

Steps:

[QC Short Description]
SYSUtils.pas uses incorrect vars for return type of GetFileAttributes()

[QC Description]
SYSUtils.pas has numerous calls to GetFileAttributes() (such as in FileExists()). It assigns the results of these calls to Integer type vars, while the return type of GetFileAttributes() is DWORD.

This is rather annoying if you are compiling in the VCL source to be able to improve debugging as this issue causes range check exceptions to be thrown unless you turn off range checking for your application (or modify the VCL code itself.)
QC Entry 20590

QC #:

Date Reported:

Area:

7545

3/8/2004

RTL\Delphi\Pascal Strings

Description:

Steps:

[QC Short Description]
SoundexInt with blank string causes access violation

[QC Description]
SoundexInt() causes an access violation when called with a blank string.

Note: Soundex() works when called with a blank string.
QC Entry 7545

ShowMessage( Soundex( '')); // is ok

ShowMessage( IntToStr( SoundexInt( ''))); // causes access violation

Workaround:
Check for a blank string before calling.

QC #:

Date Reported:

Area:

7677

1/9/2001

RTL\Delphi\Pascal Strings

Description:

Steps:

AnsiPos fails to handle strings with embedded #0 characters properly.

QC 7677

(JJS: See also 224399)

[Top Ten]

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(AnsiPos('bar', 'fu'#0'bar')));
end;

Message displayed is "0", but the correct answer is "4". Pos renders the correct result (as long as it's not a MBCS string).

QC #:

Date Reported:

Area:

47915

6/21/2007

RTL\Delphi\Pascal Strings

Description:

Steps:

[QC Short Description]
SetLength crashes if length is between $7FFFFFF6 and $7FFFFFFF

[QC Description]
...because _NewAnsiString doesn't handle integer overflow properly.

Suggested fix (not tested):

function _NewAnsiString(length: Longint): Pointer;
...
asm
{ -> EAX length }
{ <- EAX pointer to new string }

TEST EAX,EAX
JLE @@lengthLEZero
// ===BEGIN ADDED LINES===
CMP EAX,07FFFFF00H
JAE @@lengthOutOfRange
// ===END ADDED LINES===
PUSH EAX
ADD EAX,rOff+2 // one or two nulls (Ansi/Wide)
AND EAX, not 1 // round up to even length
PUSH EAX
CALL _GetMem
POP EDX // actual allocated length (>= 2)
MOV word ptr [EAX+EDX-2],0 // double null terminator
ADD EAX,rOff
POP EDX // requested string length
MOV [EAX-skew].StrRec.length,EDX
MOV [EAX-skew].StrRec.refCnt,1
RET

// ===BEGIN ADDED LINES===
@@lengthOutOfRange:
MOV AL,reOutOfMemory
JMP Error
// ===END ADDED LINES===

@@lengthLEZero:
XOR EAX,EAX
end;

See also #21773.
QC Entry 47915

Run this code: var S: String; begin SetLength(S, $7FFFFFFF); end; Actual results: "Access violation at address 004048EA in module 'Project1.exe'. Write of address 80000006." (Note: In a LARGE_ADDRESS_AWARE executable, this could potentially corrupt the heap.) Expected results: "Out of memory" -- the exception raised by SetLength($7FFFFFF5) and lower.

QC #:

Date Reported:

Area:

37737

12/14/2006

RTL\Delphi\Pascal Strings

Description:

Steps:

[QC Short Description]
WideString and AnsiString overloads of StringOfChar behave differently

[QC Description]
The AnsiString version of StringOfChar returns a blank string for negative Count parameters, e.g.:

StringOfChar(Char('a'), -1); //returns a blank string

The WideString overload, however, raises an "Out of Memory" exception for negative Count values, e.g.:

StringOfChar(WideChar('a'), -1); //raises an EOutOfMemory exception

Ideally, the overloads should behave the same, i.e. both should return blank strings for negative Count parameter values.

An example is attached, and a workaround is provided.
QC Entry 37737

(JJS: See also 243206 for a regression with StringOfChar)

1) Start Delphi Win32 2) Open the attached project1.dpr 3) Run it Expected: Program runs to completion without any error messages. Actual: An EOutOfMemory exception is raised during the call to the WideString overload of StringOfChar

QC #:

Date Reported:

Area:

55654

12/6/2007

RTL\Delphi\Pascal Strings

Description:

Steps:

[QC Short Description]
TStringBuilder.Append methods with array-arguments are slow

[QC Description]
The missing "const" in TStringBuilder.Append(Value: array of Char) causes the compiler to generate a lot of unnecessary code.

Example:
procedure MyArr(Arr: array of Char);
begin
if Length(Arr) > 0 then
;
end;

is compiled to:

procedure MyArr(Arr: array of Char);
begin
push ebp
mov ebp,esp
push ebx
mov ecx,edx
add ecx,ecx
inc ecx
test ecx,ecx
js $004669ff
shr ecx,$02
mov ebx,[eax+ecx*4]
dec ecx
push ebx
jns $004669f8
mov eax,esp
if Length(Arr) > 0 then
inc edx
test edx,edx
;
end;
mov ebx,[ebp-$04]
mov esp,ebp
pop ebp
ret


With the "const" it becomes the small and fast function:

procedure MyArr(const Arr: array of Char);
begin // no generated for "begin"
if Length(Arr) > 0 then
inc edx
test edx,edx
;
end;
ret
QC Entry 55654

program Project1; uses Windows, SysUtils; var sb: TStringBuilder; begin sb := TStringBuilder.Create; try DebugBreak; { Open the CPU view and debug into the TStringBuilder.Append() method. Have a look at all the code that the compiler has generated for the "begin". } sb.Append(['A', 'B']); finally sb.Free; end; end.

QC #:

Date Reported:

Area:

42252

3/9/2007

RTL\Delphi\Pascal Strings

Description:

Steps:

[QC Short Description]
UTF8Decode does not work for long dashes

QC Entry 42252

Run UTF8Decode on the attached file. MultiByteToWideChar(CP_UTF8,...) works fine.