List of Bug Fixes in Updates 4 and 5 for Delphi 2010

By: Kris Houser

Abstract: Summarizes the bugs that were fixed in these two updates.

This article lists all the fixes included in Updates 4 and 5 for Delphi 2010.

If you have the initial release of Delphi 2010, you can download updates free of charge from the appropriate registered users page for your product:

The Release Notes for Updates 4 and 5 for Delphi 2010 are located at edn.embarcadero.com/article/40174

     
     
   
   
QC #: Date Reported: Area:
  8/21/2009 10:00:32 AM Documentation\Online Docs (not help)
Description: Steps:
The encoding of InstallRADStudio_ja.htm file is wrong.

This is an ESD only problem.

//wrong: SJIS
//right: UTF-8

 

QC #: Date Reported: Area:
  7/21/2009 11:58:03 AM Documentation\IDE Help Contexts
Description: Steps:
Object Inspecter help contexts are nonfunctional.
New VCL app.
Click on Align property in Object Inspecter, press F1.
Exp: topic for Align appears
Act: nothing happens

QC #: Date Reported: Area:
  9/3/2008 1:15:27 PM Documentation\IDE Help Contexts
Description: Steps:
Selecting Search | Incremental Search and hitting F1 brings up message: No Help for Context.

IDE properly searches for hcMSearchIncrementalSearch
 

QC #: Date Reported: Area:
  9/14/2009 3:43:53 PM IDE
Description: Steps:
When having enabled large fonts in Vista, the extensions '.pas' are cut off a little bit from the list off Use Unit dialog. 1. Enable large fonts in Windows Vista
2. Open IDE
3. File | New | VCL Forms App - Delphi
4. Add some units to the project
5. File | Use Unit

Exp: the list with units should be displayed
Act: the list is displayed, but the letter 's' from extension 'pas' is cut off (see atached screenshot)

Note: this is also happening for View | Units dialog.

QC #: Date Reported: Area:
78136 9/27/2009 IDE
Description: Steps:
[QC Short Description]
Problem using Shift key multi-select in Search for Units/Forms dialogs

[QC Description]
If you open the 'Search for Units' or 'Search for Forms' dialogs (View->Units and View->Forms), when you try and multi-select a number of forms/units, the OK button is always disabled once you select more than one unit/form. So, it is not possible to make contiguous multi-selections with the shift key.

If you use the Ctrl key then you can make multi-selections, but you have to click on each file individually.
QC Entry 78136
Open project with multiple units. Open the Search for Units dialog by choosing Units from the View menu. Click on the first unit then hold down shift and click on the last unit. The selection is made but the OK button becomes disabled.

QC #: Date Reported: Area:
  9/23/2009 5:35:09 PM IDE
Description: Steps:
On windows 7, 64 bit, when enabling large fonts the reopen properties form is not displayed correctly. 1. Set large fonts(120 dpi) on Windows 7 - 64 bit
2. Open IDE
3. File | Reopen | Properties

Exp: the form is displayed correctly.
Act: the right side of the form is cut off.(see atached screenshot)

QC #: Date Reported: Area:
  7/30/2009 12:28:25 AM IDE
Description: Steps:
MISSING TRANSLATION

EN = Servers
FR = Serveurs
EDI
Outils | Options | Options d'environnement | Barre d'outils des composants

QC #: Date Reported: Area:
76794 8/18/2009 IDE
Description: Steps:
[QC Short Description]
AVs at shutdown - fatal for 3rd party addins

[QC Description]
I'm getting serious AVs at shutdown in several cases.
A long story:
I first noticed that in some cases ModelMaker Code Explorer (MMX) caused AVs at shutdown.
Running this ide add-in in the in the debugger showed all kind of errors (object instance
not set to a ref) followed by crashed, but all outside the MMX code.

Then after a while the AVs went away! and I could shutdown repeatedly without problem.
I tired to open a different project in the IDE being debugged and voila: AVs again.
Next step: I ran bds.exe in the debugger by defining it as host app for the MMX addin dll
project without actually loading the add-in dll (temp unregistered it).
And yes: AVs at shutdown - as long as the project opened in the IDE is relatively "new".
Once the opened project is "known" I can shutdown OK.

Doing the same thing outside the debugger does not show any noticable error msgs.
So why is this a shopwstopper?
Because these (invisible) AVs can cause 3rd party addins to crash afterwards which
in that case does show error msgs.

Another hint: something inside the IDE makes the "known" state persistent:
once the problem is gone I can consistently restart / shutdown without AVs

The stack traces point at some thread still running at shutdown causing the AV.
Probably the thread collection the "persistent state" ?

Below are several errors for "clean" IDEs at shut-down
QC Entry 76794
Steps: 1 Run BDS in debugger. 2 Open large project, not previously openend in BDS. "Large" just gives you time you: 3 shut down after showing the .dpr 4 before the IDE completes bk-gnd analyzing the units in this project: 5 shut down. => AV #1 --------------------------- Debugger Exception Notification --------------------------- Project bds.exe raised exception class EOleException with message 'Object reference not set to an instance of an object'. --------------------------- Break Continue Help --------------------------- :7c812a5b kernel32.RaiseException + 0x52 :515b6315 ; c:\program files\embarcadero\rad studio\7.0\bin\exceptiondiag140.bpl :21e22511 ; c:\program files\embarcadero\rad studio\7.0\Bin\delphierrorinsite140.bpl :2092e545 ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\coreide140.bpl :2092dee7 ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\coreide140.bpl :20733211 ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\coreide140.bpl :50073681 ThreadProc + $45 :5000b976 ThreadWrapper + $2A :7c80b683 ; C:\WINDOWS\system32\kernel32.dll #2 --------------------------- Debugger Exception Notification --------------------------- Project bds.exe raised exception class EListError with message 'List index out of bounds (0)'. --------------------------- Break Continue Help --------------------------- :7c812a5b kernel32.RaiseException + 0x52 :515b6315 ; c:\program files\embarcadero\rad studio\7.0\bin\exceptiondiag140.bpl :50063ec6 TList.Get + $1A :50063ec6 TList.Get + $1A :221d8455 ; c:\program files\embarcadero\rad studio\7.0\Bin\dotnetcoreide140.bpl :77e79dc9 RPCRT4.CheckVerificationTrailer + 0x75 :77ef321a ; C:\WINDOWS\system32\RPCRT4.dll :77ef4f4a RPCRT4.NdrProxyErrorHandler + 0xa4 :771366b4 ; C:\WINDOWS\system32\oleaut32.dll :77600c31 ; C:\WINDOWS\system32\ole32.dll :77600bdb ; C:\WINDOWS\system32\ole32.dll :7750f237 ; C:\WINDOWS\system32\ole32.dll :7750f15c ; C:\WINDOWS\system32\ole32.dll :7750fc79 ; C:\WINDOWS\system32\ole32.dll :77600e3b ; C:\WINDOWS\system32\ole32.dll :776009bc ; C:\WINDOWS\system32\ole32.dll :77600df2 ; C:\WINDOWS\system32\ole32.dll :7750fcb3 ; C:\WINDOWS\system32\ole32.dll :7750fae9 ; C:\WINDOWS\system32\ole32.dll :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d489cd ; C:\WINDOWS\system32\USER32.dll :77d48a10 USER32.DispatchMessageW + 0xf :77512c02 ; C:\WINDOWS\system32\ole32.dll :77512761 ; C:\WINDOWS\system32\ole32.dll :77557227 ole32.CoWaitForMultipleHandles + 0xe6 :5007b76f CoWaitForMultipleHandles + $2B :5007b814 THandleObject.WaitFor + $20 :07875bb5 :0269ad49 :078797a5 :0787976b :79f68c4e ; c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll :79f68d5b ; c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll :79f68ec4 ; c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll :0269a29a :221d8215 ; c:\program files\embarcadero\rad studio\7.0\Bin\dotnetcoreide140.bpl :221da14d ; c:\program files\embarcadero\rad studio\7.0\Bin\dotnetcoreide140.bpl :208cd698 coreide140.@Docmodul@TCodeIDocModule@NotifyDestroyed$qqr45System@%DelphiInterface$t17System@IInterface%t1 + 0x58 :20d8cda8 ForEach + $60 :208cd5fb coreide140.@Docmodul@TCodeIDocModule@NotifyDestruction$qqrv + 0x13 :20805c40 ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\coreide140.bpl :218a8bf2 delphicoreide140.@Basedelphiproject@TBaseDelphiProject@BeforeDestruction$qqrv + 0x2a :50009d73 TObject.Free + $B :5000a45c @BeforeDestruction + $C :0042025e ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\bds.exe :502c392f TCustomForm.CloseQuery + $5B :5029a6c5 TWinControl.WndProc + $56D :502bf591 TCustomForm.WndProc + $599 :50299d63 TWinControl.MainWndProc + $2F :50076362 StdWndProc + $16 :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d4b4c0 ; C:\WINDOWS\system32\USER32.dll :77d4b50c ; C:\WINDOWS\system32\USER32.dll :7c90eae3 ntdll.KiUserCallbackDispatcher + 0x13 :77d4b3f9 USER32.DefWindowProcW + 0xbd :5ad73c20 ; C:\WINDOWS\system32\uxtheme.dll :5ad8e300 ; C:\WINDOWS\system32\uxtheme.dll :5ad71ac7 ; C:\WINDOWS\system32\uxtheme.dll :5ad71b3d ; C:\WINDOWS\system32\uxtheme.dll :77d4bb15 USER32.GetPropW + 0x3a :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d4c63f USER32.IsWindowUnicode + 0xa1 :77d4c665 USER32.CallWindowProcW + 0x1b :5029a7c5 TWinControl.DefaultHandler + $DD :502c28d6 TCustomForm.WMSysCommand + $5A :20833be3 coreide140.@Mainworkfrm@TMainWorkForm@WMSysCommand$qqrr22Messages@TWMSysCommand + 0x17 :5029a6c5 TWinControl.WndProc + $56D :502bf591 TCustomForm.WndProc + $599 :50299d63 TWinControl.MainWndProc + $2F :50076362 StdWndProc + $16 :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d4b4c0 ; C:\WINDOWS\system32\USER32.dll :77d4b50c ; C:\WINDOWS\system32\USER32.dll :7c90eae3 ntdll.KiUserCallbackDispatcher + 0x13 :77d4b903 USER32.SendMessageW + 0x49 :5ad9881f ; C:\WINDOWS\system32\uxtheme.dll :5ad71ac7 ; C:\WINDOWS\system32\uxtheme.dll :5ad71b3d ; C:\WINDOWS\system32\uxtheme.dll :77d4bb15 USER32.GetPropW + 0x3a :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d4c63f USER32.IsWindowUnicode + 0xa1 :77d4c665 USER32.CallWindowProcW + 0x1b :5029a7c5 TWinControl.DefaultHandler + $DD :5029a6c5 TWinControl.WndProc + $56D :502bf591 TCustomForm.WndProc + $599 :50299d63 TWinControl.MainWndProc + $2F :50076362 StdWndProc + $16 :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d489cd ; C:\WINDOWS\system32\USER32.dll :77d48a10 USER32.DispatchMessageW + 0xf #3 :7c812a5b kernel32.RaiseException + 0x52 :515b6315 ; c:\program files\embarcadero\rad studio\7.0\bin\exceptiondiag140.bpl :21e2249d ; c:\program files\embarcadero\rad studio\7.0\Bin\delphierrorinsite140.bpl :2092e545 ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\coreide140.bpl :2092dee7 ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\coreide140.bpl :20733211 ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\coreide140.bpl :50073681 ThreadProc + $45 :5000b976 ThreadWrapper + $2A :7c80b683 ; C:\WINDOWS\system32\kernel32.dll #4 :7c812a5b kernel32.RaiseException + 0x52 :515b6315 ; c:\program files\embarcadero\rad studio\7.0\bin\exceptiondiag140.bpl :50063ec6 TList.Get + $1A :50063ec6 TList.Get + $1A :221d8455 ; c:\program files\embarcadero\rad studio\7.0\Bin\dotnetcoreide140.bpl :77e79dc9 RPCRT4.CheckVerificationTrailer + 0x75 :77ef321a ; C:\WINDOWS\system32\RPCRT4.dll :77ef4f4a RPCRT4.NdrProxyErrorHandler + 0xa4 :771366b4 ; C:\WINDOWS\system32\oleaut32.dll :77600c31 ; C:\WINDOWS\system32\ole32.dll :77600bdb ; C:\WINDOWS\system32\ole32.dll :7750f237 ; C:\WINDOWS\system32\ole32.dll :7750f15c ; C:\WINDOWS\system32\ole32.dll :7750fc79 ; C:\WINDOWS\system32\ole32.dll :77600e3b ; C:\WINDOWS\system32\ole32.dll :776009bc ; C:\WINDOWS\system32\ole32.dll :77600df2 ; C:\WINDOWS\system32\ole32.dll :7750fcb3 ; C:\WINDOWS\system32\ole32.dll :7750fae9 ; C:\WINDOWS\system32\ole32.dll :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d489cd ; C:\WINDOWS\system32\USER32.dll :77d48a10 USER32.DispatchMessageW + 0xf :77512c02 ; C:\WINDOWS\system32\ole32.dll :77512bd2 ; C:\WINDOWS\system32\ole32.dll :77512b76 ; C:\WINDOWS\system32\ole32.dll :77512b33 ; C:\WINDOWS\system32\ole32.dll :77557227 ole32.CoWaitForMultipleHandles + 0xe6 :5007b76f CoWaitForMultipleHandles + $2B :5007b814 THandleObject.WaitFor + $20 :07875bb5 :0269ad49 :078797a5 :0787976b :79f68c4e ; c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll :79f68d5b ; c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll :79f68ec4 ; c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll :0269a29a :221d8215 ; c:\program files\embarcadero\rad studio\7.0\Bin\dotnetcoreide140.bpl :221da14d ; c:\program files\embarcadero\rad studio\7.0\Bin\dotnetcoreide140.bpl :208cd698 coreide140.@Docmodul@TCodeIDocModule@NotifyDestroyed$qqr45System@%DelphiInterface$t17System@IInterface%t1 + 0x58 :20d8cda8 ForEach + $60 :208cd5fb coreide140.@Docmodul@TCodeIDocModule@NotifyDestruction$qqrv + 0x13 :20805c40 ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\coreide140.bpl :218a8bf2 delphicoreide140.@Basedelphiproject@TBaseDelphiProject@BeforeDestruction$qqrv + 0x2a :50009d73 TObject.Free + $B :5000a45c @BeforeDestruction + $C :0042025e ; C:\Program Files\Embarcadero\RAD Studio\7.0\bin\bds.exe :502c392f TCustomForm.CloseQuery + $5B :5029a6c5 TWinControl.WndProc + $56D :502bf591 TCustomForm.WndProc + $599 :50299d63 TWinControl.MainWndProc + $2F :50076362 StdWndProc + $16 :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d4b4c0 ; C:\WINDOWS\system32\USER32.dll :77d4b50c ; C:\WINDOWS\system32\USER32.dll :7c90eae3 ntdll.KiUserCallbackDispatcher + 0x13 :77d4b3f9 USER32.DefWindowProcW + 0xbd :5ad73c20 ; C:\WINDOWS\system32\uxtheme.dll :5ad8e300 ; C:\WINDOWS\system32\uxtheme.dll :5ad71ac7 ; C:\WINDOWS\system32\uxtheme.dll :5ad71b3d ; C:\WINDOWS\system32\uxtheme.dll :77d4bb15 USER32.GetPropW + 0x3a :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d4c63f USER32.IsWindowUnicode + 0xa1 :77d4c665 USER32.CallWindowProcW + 0x1b :5029a7c5 TWinControl.DefaultHandler + $DD :502c28d6 TCustomForm.WMSysCommand + $5A :20833be3 coreide140.@Mainworkfrm@TMainWorkForm@WMSysCommand$qqrr22Messages@TWMSysCommand + 0x17 :5029a6c5 TWinControl.WndProc + $56D :502bf591 TCustomForm.WndProc + $599 :50299d63 TWinControl.MainWndProc + $2F :50076362 StdWndProc + $16 :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d4b4c0 ; C:\WINDOWS\system32\USER32.dll :77d4b50c ; C:\WINDOWS\system32\USER32.dll :7c90eae3 ntdll.KiUserCallbackDispatcher + 0x13 :77d4b903 USER32.SendMessageW + 0x49 :5ad9881f ; C:\WINDOWS\system32\uxtheme.dll :5ad71ac7 ; C:\WINDOWS\system32\uxtheme.dll :5ad71b3d ; C:\WINDOWS\system32\uxtheme.dll :77d4bb15 USER32.GetPropW + 0x3a :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d4c63f USER32.IsWindowUnicode + 0xa1 :77d4c665 USER32.CallWindowProcW + 0x1b :5029a7c5 TWinControl.DefaultHandler + $DD :5029a6c5 TWinControl.WndProc + $56D :502bf591 TCustomForm.WndProc + $599 :50299d63 TWinControl.MainWndProc + $2F :50076362 StdWndProc + $16 :77d48734 USER32.GetDC + 0x6d :77d48816 ; C:\WINDOWS\system32\USER32.dll :77d489cd ; C:\WINDOWS\system32\USER32.dll :77d48a10 USER32.DispatchMessageW + 0xf

QC #: Date Reported: Area:
  9/14/2009 4:21:45 PM IDE
Description: Steps:
When enabling large fonts in Vista, the View Forms, and View Units dialos are not displayed correctly, the 'Ok' buttons are cut off. 1. Enable large fonts in Windows Vista
2. Open IDE
3. File | New | VCL Forms App - Delphi
4. Add some forms to the project
5. View | Forms

Exp: the 'Ok' button is displayed
Act: the 'Ok' button is displayed but cut off (see atached screenshot)

Note: this is happening also for View | Units.

QC #: Date Reported: Area:
  5/28/2009 9:26:17 AM IDE
Description: Steps:
when first creating a vcl application and setting a breakpoint, running to the breakpoint and then attempting to run again will bring up the dialog:

Source has been modified. Rebuild?
Create a new VCL forms application.

Drop a button on the form
In the OnClick event, place the following code:
Caption := 'Foo';

Place a breakpoint on that line of code.

Hit F9.
Click the button.
You are now at the breakpoint. Hit F9 again.

Exp: Program should resume running
Act: Dialog pops up stating: Source has been modified. Rebuild?

Note: This also happens in C++. Problem doesn't happen if you save the project. Only happens on first run. If you right click on the Form and choose View as Text and then switch back to view in the designer, the problem doesn't occur.

This broke in between Subversion revision 21434 and 21454

QC #: Date Reported: Area:
  8/31/2009 8:46:05 AM IDE
Description: Steps:
Reported in the public newsgroups:

=========
I have less than a few minutes of experience with Delphi and I am trying to get familiar with the IDE. It did not get long before I managed to get the product to have a hiccup;

1- Start Deplhi 10
2- File -> New -> Form - Delphi
3- Project -> Syntax Check [none]

Following these steps, Delphi generated an access violation:

"Access violation at address 2079D5AF in module 'coreide140.bpl' Read of address 00000000".

I hope this is not a typical behavior of Delphi.
=========

I assume this menu item should not be available in this case (no project loaded)
1- Start Deplhi 2010
2- File -> New -> Form - Delphi
3- Project -> Syntax Check [none]

QC #: Date Reported: Area:
  8/16/2009 1:39:11 PM IDE
Description: Steps:
[flexible language feature]
BDSSetLang /? result in changes the UI to English.

see also attached screen shots, before and after PNG.
// on one of DE/FR/JA VM
- install product with all 4 language (i.e. LANGUAGE=German EN=TRUE DE=TRUE FR=TRUE JA=TRUE for silent install option)
- launch the IDE then exit
// ACT & EXP: assume to German UI for above case
- invoke BDSSetLang.exe /? from command line then start IDE
// EXP: keep German UI
// ACT: changed to English UI

QC #: Date Reported: Area:
76862 8/19/2009 IDE
Description: Steps:
[QC Short Description]
Gridlines for alignment of components don't account for non client areas of container components.

[QC Description]
Lines for alignment components in IDE are drawn incorrectly

http://img90.imageshack.us/img90/9999/31005543.png
QC Entry 76862

trunk rev: 24853
update rev: 24855
1) Put TCategoryPanelGroup on Form 2) Create new CategoryPanel 3) Put two buttons on CategoryPanel 4) Press down left mouse-button on one of this buttons and see http://img90.imageshack.us/img90/9999/31005543.png For comparison: http://img170.imageshack.us/img170/4613/31456407.png

QC #: Date Reported: Area:
BETA 9/8/2009 11:34:10 AM IDE
Description: Steps:
The Gradient TabSet used by the IDE has several painting problems.

1) There is space below the "scroller" which paints in clWindow instead of the color used by the rest of the background.

2) The right arrow scroller also paints using clWindow when enabled.

3) The whole tabset does not change colors immediately when the clBtnFace color changes on the system.
Start the IDE and open enough editor tabs to get the scrollers active.

Set the "Window Color" to fuschia or something else bright in Control Panel.
// Note the 2 pixel area below the tabset scroller that is now painted in this color.
// Also note, when the right arrow scroller button (when enabled) is also this color.

Set the button face color to Teal (aka "3D objects") in Control Panel.
// Note the editor tabs do not repaint using this new color (restarting IDE picks it up).

QC #: Date Reported: Area:
77443 9/7/2009 IDE\Dialogs\Project Options
Description: Steps:
[QC Short Description]
Wrong behavior Project\Compile command when "Auto increment build number" flag checked in project options

[QC Description]
1) Create new VCL application.
2) Choose Project\Options
3) Select "Version Info" node
4) Check "Include version information in project" and "Auto-increment build number"
5) Choose Project\Compile
Build number was increased!!!??? In early versions of Delphi Build number are increasing only by Project\Build command. And this was a correct behavior.
QC Entry 77443
 

QC #: Date Reported: Area:
  9/24/2009 11:39:50 AM IDE\Dialogs\Project Options
Description: Steps:
Turning on "Auto-increment build number" marks the project "pstModSinceCompiled" after it had already been marked "pstCompiled"

True for Delphi and C++ projects
Create a new Delphi VCL app (or C++ VCL app)
Project | Options | Version Info
Check "Include version information in project" and "Auto-increment build number"
OK
F8 to step
F8 again

EXP: The debugger steps to the next line
ACT: You get the "Source Modified" dialog:
---------------------------
Information
---------------------------
Source has been modified. Rebuild?
---------------------------
Yes No Cancel Help
---------------------------

QC #: Date Reported: Area:
  8/27/2009 9:15:10 AM IDE\Dialogs\Environment Options
Description: Steps:
Some Environment Options pages not displaying correctly on Large Fonts 1. Set OS to run with large fonts
2. Select Tools | Options
3. Navigate to the VCL Designer tab

exp: Controls laid out properly
act: Controls not displaying correctly inside group boxes.

See attached graphic

QC #: Date Reported: Area:
  9/30/2009 2:24:22 PM IDE\Dialogs\Environment Options
Description: Steps:
Reported in public newsgroup: Updown control in Editor Options page has no effect. Tools | Options
Select Editor Options node in tree view
Try to use the Up/Down control that is next to the "File backup limit" edit contol

EXP: The value in the edit control changes when you use the up or down arrows
ACT: nothing happens

QC #: Date Reported: Area:
  8/24/2009 4:14:54 PM IDE\Project Management
Description: Steps:
When trying to save a project with the same name as a unit the IDE silently ignores it and the project isn't saved. File | New | VCL Forms Application - Delphi
File | Save All
type dupname for both prompts

Note that the project still has the same name and that "File | Save All" will ask for the project name again.

QC #: Date Reported: Area:
77765 9/16/2009 IDE\Project Management
Description: Steps:
[QC Short Description]
Removing files from project performance decreased

[QC Description]
There is a huge performance difference between D2009 and D2010 when you remove files from a project using the Project Manager or the OTA.

-> see steps
QC Entry 77765
- save the attached project files - start Delphi - open TestProject.dpr - multiselect the units TestUnit0001.pas till TestUnit0100.pas in the Project Manager - press the DEL key or call "Remove From Project" from the Project Manager popup menu expected: the operation is finished in less then a second actual: it takes more than two minutes to finish the operation (Vista x64 on and old Core2 Duo)

QC #: Date Reported: Area:
  9/23/2009 10:40:02 AM IDE\Code Editor
Description: Steps:
New tab indent does not work well with persistent blocks., 1. New Delphi VCL application.
2. Double-click on form to create OnCreate handler.
3. Tools/Options/Editor Options, make sure Persistent Blocks is checked.
4. Highlight lines 10 and 11 (declaration of TFormx class and FormCreate procedure).
5. Use arrow keys to navigate to some other line outside of the selected block.
6. Press Tab.

// exp: Tab is inserted at the cursor location.
// act: Selected block is indented.

QC #: Date Reported: Area:
76775 8/17/2009 IDE\Code Editor
Description: Steps:
[QC Short Description]
How to crash the IDE in a few steps

[QC Description]
Steps:

1) Create a new Delphi forms application and drop a TButton,
double klick to auto-create the OnClick handler.
2) In the event handler type some nonsense chars, ensure the
last char is not a semicolon.
3) Mark the nonsense string and move the curser to the right
within the _same line until some loop starts popping up
code insight windows infinitely (eats a lot of CPU time,
but IDE still survives).
4) While in that loop press the DEL key.
5) Move the curser to another line to stop the loop.

If you do not see strange looking characters in the editor yet just undo last change by using the shortcut keys. A lot of garbage should become visible. Try to delete the garbage and the IDE should crash sooner or later.

Vista 32bit, single CPU VM. Clean, default install and default settings.
QC Entry 76775
1) Create a new Delphi forms application and drop a TButton, double klick to auto-create the OnClick handler. 2) In the event handler type some nonsense chars, ensure the last char is not a semicolon. 3) Mark the nonsense string and move the curser to the right within the _same line until some loop starts popping up code insight windows infinitely (eats a lot of CPU time, but IDE still survives). 4) While in that loop press the DEL key. 5) Move the curser to another line to stop the loop. If you do not see strange looking characters in the editor yet just undo last change by using the shortcut keys. A lot of garbage should become visible. Try to delete the garbage and the IDE should crash sooner or later. Vista 32bit, single CPU VM. Clean, default install and default settings.

QC #: Date Reported: Area:
76729 8/16/2009 IDE\Code Editor
Description: Steps:
[QC Short Description]
Editor shows no error when it cannot save a file

[QC Description]
When the editor cannot save a file due to a low level error, no message is displayed.
A temporary file *.$$$ is kept instead.
QC Entry 76729
1. Launch the IDE under a non-privileged user (specifically who has no write access to $(BDS)\Source directory). 2. Create a new console application using the wizard. 3. Open SysUtils unit source and make some changes. 4. Try "Save"/"Save all" 5. Try "Compile"/"Run" ("Autosave options->Editor files" should be enabled). In steps #4 and #5 IDE silently refuses to perform the requested action and you have no clue what's going on.

QC #: Date Reported: Area:
  7/9/2008 6:00:05 PM IDE\Code Editor
Description: Steps:
MISSING TRANSLATION

For example:
Drag mouse pointer on the following items:
uses section -> Windows Namespace
const section -> RBTOP Constant
type section -> spot Type
procedure name -> <procedurename> Method
var section -> MainForm Field
and so on...

The following words are untranslated:
Namespace, Constant, Type, Method, Field....


Open an application.
Select Code tab.
Drag mouse pointer over various items.

QC #: Date Reported: Area:
74253 5/26/2009 IDE\Code Editor
Description: Steps:
[QC Short Description]
Inconvinience with indent

QC Entry 74253
I found small problem with tab indent. Assume we have following text: (1)Begin (2) MyLine; (3)End; if I selected block from the beginning of line 2 to the beginning of MyLine (in other order all these spaces from the left of MyLine until beginning of the line) and then press Tab MyLine will be indented even more. I actually expecting it to replace selection with tab (or spaces) because selected only one line. Visual Studio works exactly the same way as I expected.

QC #: Date Reported: Area:
76680 8/13/2009 IDE\Code Editor
Description: Steps:
[QC Short Description]
dialog use unit - OK button disabled

[QC Description]
After filtering and select an unit with a mouse click the OK button is disabled.
QC Entry 76680
Steps by USc: - save the attached files - open UseUnitTest.dpr - open FirstUnit.pas - press ALT+F11 to show the "Use Unit" dialog - enter "Second" in the search edit in the "Use Unit" dialog (see that "OK" is enabled) - click with the mouse on the line with SecondUnit.pas expected: OK is enabled actual: OK is disabled Original Steps: 1. Open a project with few units 2. push [ALT] [F11] to open the dialog "Unit verwenden" Use unit 3. Filter the units and click with the mouse on an unit or click twice on an item The OK button is disabled

QC #: Date Reported: Area:
75920 7/19/2009 IDE\Code Editor\Error Insight
Description: Steps:
[QC Short Description]
"Identifier redeclared" with procedures after generic "reference to procedure"

[QC Description]
...\RAD Studio\7.0\source\Win32\rtl\sys\SysUtils.pas does produce since FT build 3478 some "new" Error Insight error. They were probably hidden due RAID 213361 (+ QC 64959/RAID 263095) and the error has something todo with generic "reference to procedure"

-> see steps
QC Entry 75920
- save the file at the end of the steps - start Weaver - open SimplifiedSysUtils.pas expected: no Error Insight errors in the Structure view actual: Identifier redeclared 'GetDefaultFallbackLanguages' at line 16 (16:10) Identifier redeclared 'SetDefaultFallbackLanguages' at line 20 (20:11) Identifier redeclared 'PreferredUILanguages' at line 24 (24:10) - open ...\RAD Studio\7.0\source\Win32\rtl\sys\SysUtils.pas expected: no Error Insight errors in the Structure view actual: Identifier redeclared 'GetDefaultFallbackLanguages' at line 22731 (22731:10) Identifier redeclared 'SetDefaultFallbackLanguages' at line 22736 (22736:11) Identifier redeclared 'PreferredUILanguages' at line 22746 (22746:10) unit SimplifiedSysUtils; interface type TProc<T> = reference to procedure; function GetDefaultFallbackLanguages: string; procedure SetDefaultFallbackLanguages(const Languages: string); function PreferredUILanguages: string; implementation function GetDefaultFallbackLanguages: string; begin end; procedure SetDefaultFallbackLanguages(const Languages: string); begin end; function PreferredUILanguages: string; begin end; end.

QC #: Date Reported: Area:
76277 7/31/2009 IDE\Code Editor\Error Insight
Description: Steps:
[QC Short Description]
"Overloaded procedure 'TFoo.Bar' must be marked with the 'overload'..." with generic type a result

[QC Description]
...\RAD Studio\7.0\source\Win32\rtl\common\Rtti.pas does produce a Error Insight error for an overloaded method with a generic type as result.

-> see steps
QC Entry 76277
- save the file at the end of the steps - start Weaver - open GenericsResultOverloadErrorInsightTest.dpr expected: no Error Insight errors in the Structure view actual: Overloaded procedure 'TRttiType.GetMethods' must be marked with the 'overload' directive at line 18 (18:10) - open ...\RAD Studio\7.0\source\Win32\rtl\common\Rtti.pas expected: no Error Insight errors in the Structure view actual: Overloaded procedure 'TRttiType.GetMethods' must be marked with the 'overload' directive at line 3401 (3401:10) program GenericsResultOverloadErrorInsightTest; {$APPTYPE CONSOLE} type TArray<T> = class(TObject); TRttiType = class(TObject) function GetMethods: TArray<TObject>; overload; function GetMethods(const AName: string): TArray<TObject>; overload; end; function TRttiType.GetMethods: TArray<TObject>; begin Result := nil; end; function TRttiType.GetMethods(const AName: string): TArray<TObject>; begin Result := nil; end; begin end.

QC #: Date Reported: Area:
76563 8/10/2009 IDE\Code Editor\Help Insight
Description: Steps:
[QC Short Description]
Tooltip help insight is not working for symbols inside "on" statement block

[QC Description]
Tooltip help insight is not working for symbols inside "on" statement block
QC Entry 76563
Create a new Delphi Win32 application Double click on the new form In the OnCreate Event past this code : try showmessage('Hello'); except on E: Exception do showmessage('Hello'); end; Hover the mouse over showmessage('Hello'); ("on" block) Act : code parameter hint is displayed Expt : Tooltip help insight should be displayed

QC #: Date Reported: Area:
73995 5/16/2009 IDE\Code Editor\Formatting
Description: Steps:
[QC Short Description]
[3417] Code Formatter: No menu item

[QC Description]
I noticed that the Formatter can only work on pas files in a project. Otherwise there is no item in the menu. e.g. load Math.pas unit with Open File and right click in the editor window --> no menu item
QC Entry 73995
It was in the CodeFormatter requirements.
http://radblog.codegear.net/wiki/index.php?title=Source_Code_Formatter
see Design Overview "Worst use cases". We have now problems with files outside project

[vk] Formatting files not in the project fixed in rev.23158
all other - 23191
refixed: rev.23211

[vk]All is OK for Delphi, but the same bug occures now in cpp
[vk] refixed - in the trunk rev.24349
in the branch - rev.24350

QC #: Date Reported: Area:
76861 8/19/2009 IDE\Code Editor\Formatting
Description: Steps:
[QC Short Description]
RAD Studio 2010: "Format source" moved all bookmarks

[QC Description]
All bookmarks are moved in the last line of unit

http://img443.imageshack.us/img443/4311/13961015.png
QC Entry 76861
1) Create one (or more) bookmark in the unit
2) 'Format source';
3) All bookmarks are moved in the last line of unit

http://img443.imageshack.us/img443/4311/13961015.png

fixed: trunk - rev,24557-24559, branch - rev.24560-24562

QC #: Date Reported: Area:
  10/7/2009 IDE\Code Editor\Formatting
Description: Steps:
Delphi Formatting:keep ; after end in asm block and keep dynamic in function declaration 2. Dont split after formatting in the assembly section (delphi) "end" and ";" (print "end;" in the same line): example
asm
push lParam;
end;
(now end and ";" are printed in different lines - this is the bag))

3. Take into account "dynamic" modifier for functions (delphi). For example
procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); dynamic;
(now "dynamic;" is printed in the saparate line - this is the bug)

[vk] This is part of #273202 in initial revision. Fixed trunk, rev.25187, brunch rev.25202

QC #: Date Reported: Area:
75941 7/20/2009 IDE\Code Editor\Formatting
Description: Steps:
[QC Short Description]
Code Formatter: formatting of message handlers

QC Entry 75941
Message handlers like procedure WMLButtonDown(var Msg: TWMMouse); message WM_LBUTTONDOWN; are formatted into procedure WMLButtonDown( var Msg: TWMMouse); message WM_LBUTTONDOWN; Not good. It's also weird, 'cause 'virtual', 'override', 'abstract' keywords are kept on the same line, which is correct and expected.

QC #: Date Reported: Area:
77118 8/28/2009 IDE\Code Editor\Formatting
Description: Steps:
[QC Short Description]
Formatter confused by subrange type definition

[QC Description]
Code to be formatted:

program Project1;
{$APPTYPE CONSOLE}

uses
SysUtils;

type
{ subrange type }
TSub = -1..1;

TFoo = class
private
FSub1: TSub;
FSub2: TSub;
end;

begin
end.

Result:

program Project1;
{$APPTYPE CONSOLE}

uses
SysUtils;

type
{ subrange type }
TSub = -1 .. 1;

TFoo = class private FSub1: TSub;
FSub2 :
TSub;
end;

begin

end.
QC Entry 77118
See Description

[vk] Fixed in the trunk rev.24448.
Fixed in brunch - rev.24450

QC #: Date Reported: Area:
77585 9/10/2009 IDE\Tool Palette
Description: Steps:
[QC Short Description]
Component Toolbar does not retain it's position when restarting the IDE

[QC Description]
When the IDE is restarted the Component Toolbar is always moved to the right of the other toolbars even when it was previously positioned in another location.
QC Entry 77585
Start the IDE View | Toolbars | Component (check it) Drag Component Toolbar to be below the other toolbars Restart IDE //Exp: Toolbar positioned where it was //Act: Toolbar moved back up to the right of the menu and other toolbars

QC #: Date Reported: Area:
76780 8/17/2009 IDE\Tool Palette
Description: Steps:
[QC Short Description]
Indy Component Icons missing

[QC Description]
Some of Indy components are missing icons:

- Indy SASL - missing all
- Indy Misc - missing some
- Indy Intercept - missing some
- Indy I/O Handlers - missing one
- Indy Servers - missing some
- Indy Clients - missing one
QC Entry 76780
Check Indy component Tool Palette and also in the Component Toolbar.

QC #: Date Reported: Area:
  8/5/2009 4:57:41 PM IDE\Tool Palette
Description: Steps:
New hint popup on component toolpallete is nottranslatable.

For example:
It is a hint-popup for TButton control.

Name: TButton
Unit: StdCtrls
Package: dclstd140.bpl


Japense translated version still display with English text.

It would be nice to translate Name/Unit/Package texts.

(app\delphicore\CompPalMgr.pas
Hard coded strings. no resourcestring. )
Start IDE
Create New VCL/w32 app.
Move mouse over component palette.
On TButton, hint window is popuped.

Name: TButton
Unit: StdCtrls
Package: dclstd140.bpl

These are not translated yet.

QC #: Date Reported: Area:
  9/16/2009 10:43:03 AM IDE\Form Designer
Description: Steps:
Renaming a form or component while editing a StringList in the code editor causes an error Create a new Delphi VCL app
Drop a TMemo on the form
Double click the "Lines" property to open the String List Editor
Click the Code Editor button
In the Object inspector change the "Name" property of either the Form or the TMemo component
Notice that the "filename" in the string list code editor tab changes: the "dfm." part disappears
Edit the string list in the code editor and do a File | Save

You get an error:
---------------------------
Error
---------------------------
Unable to locate form/component, 'Form33.foomemo.Lines'.
---------------------------
OK
---------------------------

QC #: Date Reported: Area:
  9/14/2009 1:10:13 PM IDE\Form Designer
Description: Steps:
If you edit the contents of a published TStringList in the code editor and you do a "File | Save as", and then try to save the unit of the project you'll get an access violation. Create a new Delphi VCL app
Drop a TMemo on the form
In the Object Inspector, double click the "Lines" property
In the TStringList Property editor, click the "Code Editor" button
File | Save as
Click Save to accept the default
Try to save the unit of the project.
An AV will appear.

QC #: Date Reported: Area:
  8/13/2009 4:28:58 PM IDE\Object Inspector
Description: Steps:
CustomPainting a property editor is broken if you attempt to custom paint something on the right edge of the property editor value rect.

The edit control overpaints anything you paint.

[Blocking for CodeRage4 talk]
* Install the attached package
* Drop a TNotSoMuch component on the form
* Click on the Value property
//Exp: The scroll buttons are visible
//Act: The scroll buttons disappear when the property is selected

QC #: Date Reported: Area:
76812 8/18/2009 IDE\Toolbars\Component
Description: Steps:
[QC Short Description]
Component ToolBar duplicate "DataSnap Client"

[QC Description]
Component ToolBar have 2 items "DataSnap Client"

1- "Datasnap Client" with all items
2 - "DataSnap Cliente" Empty
QC Entry 76812
 

QC #: Date Reported: Area:
  10/28/2009 9:21:42 AM IDE\Open Tools API
Description: Steps:
New IOTAExplorer... interfaces that were added for Udpate 2 do not work.

Calling IOTAExplorerServices.CreateExplorer gives the error:

> ---------------------------
> Error
> ---------------------------
> Error reading VETreeview->OnContextMenuShow: Invalid property value.
> ---------------------------
> OK
> ---------------------------

This is because in BaseExplorer.dfm, the OnContextMenuShow event is assigned, but the actual handler is commented out in code.

To fix this for the update, we could simply move the newly-introduced interfaces out of ToolsAPI.pas and put them in a private unit (BaseExplorer.pas seems like a good place).
Look in ToolsAPI.pas
For the Update, there should be no "IOTAExplorer..." interfaces.
There used to be 4 such interfaces, but they will be removed for the Update

QC #: Date Reported: Area:
  8/13/2009 1:23:13 PM IDE\Open Tools API
Description: Steps:
Add comments to document the IDE Insight interfaces in ToolsAPI.pas:

INTAIDEInsightItem
IOTAIDEInsightCategory
IOTAIDEInsightNotifier
IOTAIDEInsightServices
 

QC #: Date Reported: Area:
  9/15/2009 9:59:43 AM IDE\Open Tools API
Description: Steps:
After installing a compiler notifier, the package builds again with error. 1. Download the attached package (a compiler notifier).
2. Open the package in IDE.
3. Install the package.
4. Build the same package.

Act: This error appears:[Fatal Error] Access violation at address 208E48A5 in module 'coreide140.bpl'. Read of address 00000000 .
5. Add a new project.
6. Build the project.

Act: The same error appears.
Exp: No error.

You have to close the bds and to reopen it again , so any project can work to be built.

QC #: Date Reported: Area:
  8/16/2009 11:04:59 PM IDE\Open Tools API
Description: Steps:
IOTAVersionControlNotifier.ProjectManagerMenu and IOTAProjectMenuItemCreatorNotifier.AddMenu are not triggered when more then one item is selected - build and install the attached package ProjectManagerMenuMultiSelectTest.dpk
- open ProjectManagerMultiSelectTestProject.dpr
- show the Project Manager popup menu for FirstUnit.pas
(see that there is a menu item "OTA (IsMultiSelect=False)")
- (multi)select FirstUnit.pas and SecondUnit.pas for exam. by pressing CTRL and clicking with the mouse on both items
- show the Project Manager popup menu

expected: in the popup menu is an item "OTA (IsMultiSelect=True)"
actual: there is no "OTA..." item at all

QC #: Date Reported: Area:
  10/5/2009 10:30:49 AM IDE\Open Tools API
Description: Steps:
Uninstalling a package that creates and displays a top-level editor tab wil cause a crash if the top-level editro tab is still open Open attached package
Right click on the package in the Project Manager and select "Install"
View | Something Cool
Right click on the package in the Project Manager and select "Uninstall"

EXP: The bouncing ball tab closes and the package uninstalls
ACT: The IDE crashes.

QC #: Date Reported: Area:
78289 10/1/2009 IDE\Open Tools API
Description: Steps:
[QC Short Description]
Read/Write of keyboard macros broken (IOTARecord.ReadFromStream, WriteToStream)

[QC Description]
Using IOTARecord to read/write macros to a stream always fails with this error message: "Invalid Key macro format." I believe the problem is
that the code to read/write the macro stream (VEdTypes.TRecord.ReadFromStream) was not adjusted for unicode compatibility.

The attached test case works fine in older releases. This bug prevents the macro library tool in GExperts from working.
QC Entry 78289
Compile and install the attached package into the IDE with the default keymapping Focus the code editor, Shift+Ctrl+R to begin a macro, type "zzz" and then CR, Shift+Ctrl+R to end recording, Shift+Ctrl+P to playback the macro, and the zzz CR should appear in the editor Help, Test Wizard which tries to read the macro to a stream and then write it immediately back to the IDE stream Resulting error from VEdTypes.TRecord.ReadFromStream: --------------------------- Error --------------------------- Invalid Key macro format. --------------------------- OK Details << --------------------------- [208899ED]{coreide140.bpl} VEdTypes.Error (Line 641, "VEdTypes.pas" + 0) + $11 [20889AB7]{coreide140.bpl} VEdTypes.TRecord.ReadFromStream (Line 654, "VEdTypes.pas" + 4) + $0 [502717F7]{vcl140.bpl } Dialogs.ShowMessagePos (Line 6202, "Dialogs.pas" + 0) + $F [131D2D2B]{WizPackage.bpl} Testrecord.Register + $167 [2075F021]{coreide140.bpl} ExptMain.TExpertServices.WizardItemClick (Line 659, "ExptMain.pas" + 2) + $12 [50075663]{rtl140.bpl } Classes.TBasicAction.Execute (Line 12512, "Classes.pas" + 3) + $7 [502B182D]{vcl140.bpl } ActnList.TContainedAction.Execute (Line 448, "ActnList.pas" + 8) + $2C [502B2608]{vcl140.bpl } ActnList.TCustomAction.Execute (Line 1094, "ActnList.pas" + 7) + $8 [50075527]{rtl140.bpl } Classes.TBasicActionLink.Execute (Line 12441, "Classes.pas" + 2) + $7 [214BB9E1]{vclactnband140.bpl} ActnMenus.TCustomActionMenuBar.ExecAction (Line 1066, "ActnMenus.pas" + 6) + $D [214BCEA7]{vclactnband140.bpl} ActnMenus.TCustomActionMenuBar.TrackMenu (Line 1748, "ActnMenus.pas" + 15) + $15 [214C0460]{vclactnband140.bpl} ActnMenus.TCustomActionMainMenuBar.TrackMenu (Line 3474, "ActnMenus.pas" + 3) + $3 [214BB5A5]{vclactnband140.bpl} ActnMenus.TCustomActionMenuBar.CMItemClicked (Line 945, "ActnMenus.pas" + 3) + $4 [50295DFC]{vcl140.bpl } Controls.TControl.WndProc (Line 7062, "Controls.pas" + 91) + $6 [50295A20]{vcl140.bpl } Controls.TControl.Perform (Line 6840, "Controls.pas" + 10) + $8 [50299E58]{vcl140.bpl } Controls.GetControlAtPos (Line 9563, "Controls.pas" + 4) + $76 [5029A583]{vcl140.bpl } Controls.TWinControl.WndProc (Line 9776, "Controls.pas" + 101) + $1D [5029A6C0]{vcl140.bpl } Controls.TWinControl.WndProc (Line 9819, "Controls.pas" + 144) + $6 [214BCF96]{vclactnband140.bpl} ActnMenus.TCustomActionMenuBar.WndProc (Line 1783, "ActnMenus.pas" + 25) + $4 [50299D60]{vcl140.bpl } Controls.TWinControl.MainWndProc (Line 9540, "Controls.pas" + 3) + $6 [50076360]{rtl140.bpl } Classes.StdWndProc (Line 13014, "Classes.pas" + 8) + $0 [50290916]{vcl140.bpl } Controls.FindControl (Line 3377, "Controls.pas" + 6) + $9 [502C8749]{vcl140.bpl } Forms.TApplication.ProcessMessage (Line 9784, "Forms.pas" + 30) + $1 [502C878E]{vcl140.bpl } Forms.TApplication.HandleMessage (Line 9814, "Forms.pas" + 1) + $4 [502C8AB9]{vcl140.bpl } Forms.TApplication.Run (Line 9951, "Forms.pas" + 26) + $3 [0042D94A]{bds.exe } bds.bds (Line 200, "" + 8) + $FFFB

QC #: Date Reported: Area:
  9/25/2009 4:29:51 PM IDE\Message View
Description: Steps:
From public newsgroup:

If the message view is opened, tab-docked, but not the active dock client (see steps), it will not get displayed when you compile a project that has an error
Start IDE with Default Layout
View | Messages
Grab the Object Inspector and tab-dock it into the Message View
Make sure the Object Inspector is the active dock client (not the Message View)
----->(see "1" in attached screenshot)
Create a new Delphi project
Add invalid code to the app and compile it
----->(see "2" in attached screenshot)

EXP: Error is shown and the Message view is brought in front of the Obejct Inspector
ACT: Error is shown, but the Message view stays behind the Object Inspector

QC #: Date Reported: Area:
71187 2/5/2009 IDE\Code Templates
Description: Steps:
[QC Short Description]
Ctrl+Space incorrectly eats the character following the template name

[QC Description]
When Ctrl+Space is used to expand a template name into a template, the character following the template name disappears.

See "Steps".

This worked correctly in Delphi 7 but does not in Delphi 2009.

Severity comment: This makes the new code template system MUCH more clumsy and less useful than the Delphi 7 system.
QC Entry 71187
E.g. 1) Suppose the template name is "abc" and that it expands to "A=B": Suppose that before Ctrl+Space you have: if abc| then Inc(A); After Ctrl+Space you get: if A=Bthen Inc(A); rather than: if A=B then Inc(A); This lost space must then be replaced manually for the code to compile. --- E.g. 2) Suppose the template name is "fan" and that it expands to "FreeAndNil": Suppose that before Ctrl+Space you have: fan|(ObjectReference); After Ctrl+Space you get: FreeAndNilObjectReference); rather than: FreeAndNil(ObjectReference); This lost semicolon must then be replaced manually for the code to compile.

QC #: Date Reported: Area:
  8/5/2009 8:50:49 PM IDE\Code Completion
Description: Steps:
Unexpected $ClassInitFlag is list up in code-completion list for some classes.

I found $ClassInitFlag from the following

SysUtils.Exception
SysUtils.TEncoding
Classes.TThread


CodeCompletion said it is a "class variable"
But compiler can not compile this "variable"
Create Delphi/VCL application
Double click form, add the following text in FormCreate handler.

procedure TForm1.FormCreate(Sender: TObject);
begin
tthread
end;

Don't type . (period)
Move caret to the end of 'tthread' (After 'd')
Hit Ctrl-space to invoke code-completion.

You will see

var TThread.$ClassInitFlag:

QC #: Date Reported: Area:
  8/21/2009 1:20:17 PM IDE\Code Browsing
Description: Steps:
Code browsing fails on a project after it has been built. 1. Open the attached project.
2. Open Unit1.pas.
3. Ctrl-Click on Unit2 in the uses clause.

// exp & act: Unit2.pas is opened in the editor.

4. Close edit window for Unit2.pas.
5. Build the project (Ctrl-F9).
6. Ctrl-Click on Unit2 in the uses clause.

//exp: Unit2.pas is opened.
//act: Nothing happens.

From internal debugging, I find that Unit2 is not opened because the position returned by the call to BrowserFindDeclaration has 0 as the line number.

QC #: Date Reported: Area:
  9/18/2009 9:11:02 AM IDE\Code Browsing
Description: Steps:
Code browsing fails to detect when a file has been modified in the IDE. 1. Open attached project.
2. Open Unit1.pas.
3. Ctrl-click on CONST1

// exp & act: IDE navigates to the delcaration of CONST1 in Unit2.pas

4. In Unit2.pas, press Enter to move the constant declarations down a line.
5. Go back to Unit1.pas and Ctrl-click on CONST1 again.

// exp: IDE navigates to the declaration of CONST1 in Unit2.pas.
// act: IDE navigates to Unit2.pas, but does not go to the right line number. It goes to the original line number where the declaration used to be.

QC #: Date Reported: Area:
77185 8/30/2009 IDE\Class Completion
Description: Steps:
[QC Short Description]
Class Complete stops working if there is a "procedure(x: Integer) of object" field in the class

[QC Description]
Class Complete stops working if there is a method pointer in the class who's type is inlined.
QC Entry 77185
1. Create a new unit 2. Replace the content with the following text <<<<<< unit ClassComplBug; interface type TTest = class public Event: procedure(const S: string) of object; procedure Test; end; implementation end. >>>>>> 3. Move the caret into the class declaration 4. Press Ctrl+Shift+C (Class Complete) Expected: The body for "Test" is created under implementation Actual: Expected ';' but OF found in class TTest.

QC #: Date Reported: Area:
76332 8/3/2009 IDE\Search\Find
Description: Steps:
[QC Short Description]
Find bar (Ctrl-F) options doesn't shown

[QC Description]
When using Ctrl-F option find bar shown but some options are hidden behind "Additional search options" button when plenty of space available to show all of them in one place
QC Entry 76332
used screen resolution: 1680x1050 run and maximaze Delphi 2010 open any file for editing press Ctrl-F - find bar is shown the result - some options (usually Search selection, but sometimes others depends on program window size) are not shown hidden behind "Additional search options" button when plenty of space available to show all of them in one place (See attached image)

QC #: Date Reported: Area:
67688 10/8/2008 IDE\Packages
Description: Steps:
[QC Short Description]
Disabled design time packages become enabled after IDE restart

[QC Description]
If you disable some design time packages under Components\Install Packages or under Project Options\Packages by unchecking the checkboxes, then close Delphi and restart, all packages appear enabled as if you did not change anything.
QC Entry 67688
Open a VCL Project
Go to Project Options, item Packages and disable some packages by unchecking the checkboxes. Check Default button to be sure.
Save all changes,
restart IDE,
Reopen the project
go back to project options and observe checkboxes you unchecked appear checked again.

The same happens if you disable packages through menu Component\Install Packages...

QC #: Date Reported: Area:
  8/18/2009 12:08:36 PM IDE\Packages\Installing Components
Description: Steps:
Packages with suffixes do not indicate they are installed or uninstallable. Extract attached files.
Open the project group.
Build the runtime package.
Build/Install the design-time package.
Exp: icon should be yellow indicating the package is installed, and "Uninstall" local menu item should be present.
Act: icon indicates package is not installed, no menu item present.

QC #: Date Reported: Area:
65498 8/10/2008 IDE\Packages\New Component Wizard
Description: Steps:
[QC Short Description]
When installing to a new package, selecting the name of an existing file causes AV

[QC Description]
When you use Component | New VCL component, or Component | Install component, select the 'Install into new package' option, and set the package name to a name of an existing file, you get an AV.
QC Entry 65498
1. Component | New VCL component 2. Select anything, e.g. TAnimate, and click Next twice 3. Choose Install to New package and click Next 4. For the package name, type: FirstPackage 5. Click Finish, say yes to Save dialog // OK, the package installs 6. Component | Install packages 7. Select FirstPackage and click Remove, then click OK 8. File | Close all, say No to save dialog 9. Repeat steps 1-5. //EXP: the package to be installed, with maybe a warning first about overwriting an existing file //ACT: --------------------------- Error --------------------------- Access violation at address 2177E7D2 in module 'delphicoreide120.bpl'. Read of address 00000000. [2177E7D2]{delphicoreide120.bpl} BaseDelphiProject.TDelphiProjectModuleHandler.Validate (Line 2615, "BaseDelphiProject.pas" + 1) + $3 [21E43897]{delphide120.bpl} DelphiProject.TDelphiPackageProject.AfterConstruction (Line 158, "DelphiProject.pas" + 2) + $2 [20007235]{rtl120.bpl } System.@AfterConstruction (Line 10601, "System.pas" + 2) + $5 [2177926B]{delphicoreide120.bpl} BaseDelphiProject.TBaseDelphiProject.Create (Line 723, "BaseDelphiProject.pas" + 69) + $B9 [21E43C2B]{delphide120.bpl} DelphiProject.TDelphiProjectCreationTrait.CreateMSBProject (Line 229, "DelphiProject.pas" + 2) + $24 [209D9B5B]{coreide120.bpl} ProjectFileUtils.CreateMSBProject (Line 707, "ProjectFileUtils.pas" + 7) + $36 [21E47AF8]{delphide120.bpl} PasReg.TPascalPersonalityTraits.CreatePackageProject (Line 1038, "PasReg.pas" + 5) + $30 [218134E7]{delphicoreide120.bpl} NewComponentWizard.CreateNewPackage (Line 277, "NewComponentWizard.pas" + 10) + $8 [21813CC7]{delphicoreide120.bpl} NewComponentWizard.TNewComponentWizard.Finish (Line 512, "NewComponentWizard.pas" + 57) + $24 [20AD88B1]{coreide120.bpl} Wizard.TWizard.Show (Line 713, "Wizard.pas" + 30) + $8 [2181303E]{delphicoreide120.bpl} NewComponentWizard.CreateNewComponent (Line 169, "NewComponentWizard.pas" + 6) + $5 [21819816]{delphicoreide120.bpl} PasCppCmds.TPasCppCom

QC #: Date Reported: Area:
78036 9/24/2009 IDE\Desktop Layouts
Description: Steps:
[QC Short Description]
Component Toolbar won't stay "gone..."

[QC Description]
The Component Toolbar (located under the main menu [File, Edit, Search, etc...]) does not stay "gone" when removed.

Typically, I would expect that I could right click the Component Toolbar's handle, (or anywhere in the toolbar,) and deselect the checkmark to show the Component toolbar to hide it. I would expect that I should save my desktop layout, and be able to close out Delphi, and reopen it, and have the Component Toolbar remain hidden. Instead, the Component Toolbar is again visible, as though none of my layout preferences were saved.
QC Entry 78036
Start the IDE
Switch to Classic Undocked Layou
// Component Toolbar appears
View | Toolbars and uncheck "Component"
Save the desktop layout
Shutdown and restart IDE
// Exp: Component Toolbar not shown
// Act: It is.

QC #: Date Reported: Area:
  8/15/2009 2:13:12 PM IDE\Background compile
Description: Steps:
[DCC Error] E2161 Error: RLINK32: Error opening file "C:\Documents and Settings\daviddean\My Documents\RAD Studio\Projects\Project1.RES" Turn on background compilation
File->New->Other->Delphi->ActiveX->ActiveXLibrary
Project->Compile

res:

[DCC Error] E2161 Error: RLINK32: Error opening file "C:\Documents and Settings\daviddean\My Documents\RAD Studio\Projects\Project1.RES"

QC #: Date Reported: Area:
  8/13/2009 11:47:35 AM IDE\Background compile
Description: Steps:
Background compilation reports success when it really failed. This occurs when the background parser is active (note the dots painted in the Structure Pane caption in the dev build)

If you're debugging the IDE, you'll see this exception in the debugger from the background compilation thread:

First chance exception at $7C812AFB. Exception class EThread with message 'CheckSynchronize called from thread $3EC, which is NOT the main thread'. Process bds.exe (2692)
Turn on background compilation (I have the progress dialog shown)
Open attached large project
Note that the dots are painting on the Structure View's Caption
Press Ctrl-F9 to build

Note the message view reports success, but the source does not compile
Compiling it in the foreground properly shows the error

Dismiss the progress dialog


Wait for the dots to stop painting (indicating that the background parser is complete)
Ctrl-F9 to compile again.
This time you get: "[DCC Fatal Error] E2165 Compile terminated by user"
Dismiss the progress dialog

Ctrl-F9 to compile again.
This time, finally you see the error in the message view

QC #: Date Reported: Area:
  9/14/2009 3:57:26 PM IDE\Build Tools\Delphi
Description: Steps:
When enabling large fonts with Vista, some option from Add Watch dialog is not visible. 1. Enable large fonts in Windows Vista
2. Open IDE
3. File | New | VCL Forms App - C++Builder
4. Run | Add watch

Exp: the option 'Allow side effects and function calls' should be visible
Act: the option 'Allow side effects and function calls' is not displayed, it is hidden under option group (see atached screenshot)

QC #: Date Reported: Area:
  10/6/2009 12:58:40 PM IDE\Start Page
Description: Steps:
Running the IDE with Kaspersky AntiVirus 2010 installed, you get errors from the welcome page:

Cannot create file "C:\Documents and
Settings\chesik\Local Settings\Temporary Internet
Files\Content.IE5\YDQSQD5S\wpLoader[1].js". The process cannot access
the file because it is being used by another process.

We have over 25 AIR reports for this for D2010, 20+ for D2009, a few for D2007
Install Delphi
Install Kaspersky AntiVirus 2010 (30 day trial available at kaspersky.com)

Run Delphi
If you don't get an error right away, then:
-- close the Welcome page tab
-- View | Welcome page

QC #: Date Reported: Area:
  9/15/2009 6:36:40 PM IDE\Start Page
Description: Steps:
The start page should refresh only if the welcome page is shown and only when you open or close a project, not if you've navigated to some other web page and if you open or close a saved file. 1. New VCl project.
2. Open a link (an youtube link to a video clip) in the Welcome Page.
3. Let the video clip to play.
4. Save the project.
5. Close the open unit, or open an unopened saved file.

Act: The video clip is restarting (A refresh of the page is done).
Exp: No refresh.

QC #: Date Reported: Area:
  10/5/2009 6:05:07 PM IDE\Structure Pane
Description: Steps:
Double clicking an item makes that other item to be selected and double clicked. 1. File->New VCL Application for Delphi (or an existent project with a file with some classes, functions)
2. Double click the form designer.
3. Double click "FormCreate(Sender: TObject)" from Structure Pane. (or any other item).

Exp: The "FormCreate(Sender: TObject)" should remain selected and the cursor should be moved at the item declaration.
Act: The selected item is "TForm1(TForm)" and the cursor is moved at "TForm1 = class(TForm)" declaration.

QC #: Date Reported: Area:
  9/2/2009 2:01:17 PM IDE\Structure Pane
Description: Steps:
Access violation when closing the IDE caused by the parser thread accessing the editor view after it has already been destroyed. Shutdown the IDE while the parser thread is parsing.

See attachment for stacks.

QC #: Date Reported: Area:
  10/28/2004 IDE\History View
Description: Steps:
History view -- Word order of time stamp is wrong (am/pm comes before hour in Japanese). Change it to 24 hour system. If it is impossible, revert it to English.

(attached image)

note: the standard time format of my machine is "H:mm:ss" (24 hour system).
 

QC #: Date Reported: Area:
76732 8/16/2009 IDE\History View
Description: Steps:
[QC Short Description]
Switching to another revision does not reset the search result

[QC Description]
After performing a search in the History view and switching to another revision the search result is not resetted.

-> see steps and attached images

This is from the thread "Search in Historie Window?" in .weaver.ide.editor
https://forums.embarcadero.com/thread.jspa?messageID=147476&tstart=0#147476
Message-ID: <149135@forums.codegear.com>
QC Entry 76732
Before you start with the following steps make sure that QC 75439/RAID 270794 and QC 76730 is fixed! - start the IDE - create a new Delphi console application - save it - remove the "{ TODO -oUser -cConsole Main : Insert code here }" line - save it - switch to the History editor tab - switch to the "Content" History sub tab - click into the edit control on the "Contents" tab - press CTRL+F - enter "end" in the search edit and press ENTER (see "end" [end;] on line 13 is marked in black see also HistoryViewSearchResultCorrectRevision.png) - select the Revision "~1~" in the Revision content virtual tree expected: the search result is resetted actual: the black mark stays where it is (see HistoryViewSearchResultOtherRevision.png)

QC #: Date Reported: Area:
  8/10/2009 4:47:48 PM IDE\IDE Insight
Description: Steps:
IDE Insight doesn't auto-update actions, so it's possible for available commands to be missing from the list. Start IDE
Create a Delphi VCL app
Pull down the Run menu and see that the "Inspect" menu item is disabled
F6 to invoke IDE Insight
Type in "Inspect" and note that the Inspect command is not shown (because it is disabled).
All good to this point
Dismiss IDE Insight
Now press F8 to invoke a debug session
F6 to invoke IDE Insight
Type in "Inspect" and note that the Inspect command is still not shown
Dismiss IDE Insight
Pull down the Run menu and see that the "Inspect" menu item is enabled
F6 to invoke IDE Insight
Type in "Inspect" and note that now the Inspect command is shown (becuase you manually did something in the IDE that caused the Action to get updated).

QC #: Date Reported: Area:
  10/26/2009 2:48:01 PM Install
Description: Steps:
BDSShellRes.dll and BDSShellRes140.dll are different between the Update 2 patch and the Update 2 inline.  

QC #: Date Reported: Area:
  10/26/2009 3:39:38 PM Install
Description: Steps:
cglm.ini has different contents between patch and inline install.

For the patch install, the following line is missing from cglm.ini:

RegExe=bdsreg.exe
 

QC #: Date Reported: Area:
  11/3/2009 3:51:48 PM Install
Description: Steps:
Additional_Products.htm has the wrong URL for remote debugger.

It has http://www.installers.codegear.com, but should have http://installers.codegear.com instead.
 

QC #: Date Reported: Area:
  8/19/2009 11:19:35 AM Install
Description: Steps:
In German build, Check for Updates fails with an AV. 1. Start Menu
2. Embarcadero RAD Studio 2010
3. Check for Updates
4. Press Download button

//Actual: AV

QC #: Date Reported: Area:
  10/27/2009 8:52:03 AM Install
Description: Steps:
Timestamps for the update should be changed to reflect this is an Update 2 install.

We should use :02 in the timestamp to indicate this is Update 2.
 

QC #: Date Reported: Area:
  10/29/2009 4:41:24 PM Install
Description: Steps:
Uninstall of RAD Studio fails after Update 2 has been applied.

This is in patch 3589.

I installed RTM+Update1+Update2 -> uninstall and then I got:

"Error:
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2109."
 

QC #: Date Reported: Area:
  9/30/2009 11:08:10 AM Install
Description: Steps:
The description for the patch still says "Update 1". Run setup.exe update 2 on a Vista or Windows 7 system
When asked if you would like to run this setup the description says Delphi and C++Builder 2010 Update 1

QC #: Date Reported: Area:
  10/13/2009 4:15:06 PM Install
Description: Steps:
New eSlip functionality requires the following:

If a *.slip or reg*.txt is found next to setup.exe during the install, then the installer must copy *.slip or reg*.txt to the <installDir>\license folder.

Additionally, the installer should be able to parse the reg*.txt files and not display a serial number prompt if the reg*.txt is valid.
 

QC #: Date Reported: Area:
  9/30/2009 11:20:17 AM Install
Description: Steps:
First time install with a trial slip.

When reinstalling with a different slip next to setup.exe, the installer remembers the previous trial slip and does not prompt for a serial key when upgrading.

Therefore the customer has to uninstall RAD Studio Trial before installing the full version.
 

QC #: Date Reported: Area:
  10/8/2009 1:46:43 PM Install
Description: Steps:
DBPack doesn't install on Vista 64 bit systems.

This started when we started writing UPDATE_STRING for the dbpack installs.
 

QC #: Date Reported: Area:
  10/9/2009 3:38:02 PM Install
Description: Steps:
The latest boost update does not appear in Help->About.

Boost needs to be rebuilt with UPDATE_STRING set.
 

QC #: Date Reported: Area:
  10/13/2009 2:44:16 PM Install
Description: Steps:
Need to add silent activation capability to Update 2.

The installer will need to add a line to cglm.ini also.
 

QC #: Date Reported: Area:
  10/20/2009 10:09:27 AM Install
Description: Steps:
When installing patch 3576 over a C++Builder install, there is an error at the end of the patch. It says it cannot update bcbofficexp.lib as it may have been updated by another process.

This appeared to work ok in patch 3575.
 

QC #: Date Reported: Area:
  9/10/2009 1:31:54 PM Install
Description: Steps:
RAD Studio installer currently accepts serial numbers with Product ID 501.

For Update 2, we should not allow 501 serial numbers because the IDE doesn't work with those serial numbers.

At some point in the future, the IDE and installer should both accept 501 serial keys, however that won't be the case for Update 2.
 

QC #: Date Reported: Area:
  10/15/2009 3:39:19 PM Install
Description: Steps:
When updating to Patch 1 or Patch 2 from WeaverRTM, the "automatically show updates on launch of IDE" setting is undone if indeed you have selected originally to automatically show updates when launching the IDE *Install Weaver RTM build and select "Automatically check for updates when IDE launches" (or something like that)
*map installers.codegear.com to swintern
*Launch the IDE -- updates are found -- cancel out of the updating process
*Install Patch1
*Launch IDE -- no "Updates available" screen shows up even though several are available.
*Launch "Check for Updates" from the start menu -- notice there are indeed updates...

With Sergio's help I have watched where the registry value:

HKLM\Software\CodeGear\BDS\7.0\AutoRun\UpdateCheck was populated after the RTM install and right at the instant I click Finish on the Patch1 install (or Patch 2 - in either case) it is deleted...

QC #: Date Reported: Area:
  10/15/2009 2:42:03 PM Install\Install Execution
Description: Steps:
When installing a language besides English, the Database Pack installer does not keep the language selection... * Install RTM with a language besides English
* Check for updates (using swintern mapped to installers.codegear.com)
* Install all updates
* Check and see that the DBPack files expected for Japanese (or any other language besides English) are not there.

QC #: Date Reported: Area:
  10/16/2009 2:36:26 PM Install\CD Layout
Description: Steps:
Download Partner ISO button does not work -- it's looking for D:\Install\Additional_Products.htm and the file doesn not exist. * Mount \\ussvs-file02.embarcadero.com\RND\Delphi\latest\Weaver\ISO\14.0.3575.25466.1\RADStudio2010.iso
* Click on Download Partner ISO -- see the error

QC #: Date Reported: Area:
  9/30/2009 10:38:50 AM Install\Registry settings
Description: Steps:
The update2 is not adding to the registry such that Installed Updates string shows in the About box. Install update 2 over update 1
Run the IDE and choose Help |About
Exp. the update shows RAD Studio 2010 Update 2
Act. the update string has RAD Studio 2010 Update 1

QC #: Date Reported: Area:
  9/16/2009 4:39:25 PM Install\Files
Description: Steps:
[Missing File]

UTF8ContentParser.pas need to be delivered to fix Web Broker / IntraWeb internationalization issue.

 

QC #: Date Reported: Area:
76662 8/13/2009 Install\Files
Description: Steps:
[QC Short Description]
Quality Central splash screen with CodeGear on it

[QC Description]
The built-in Quality Central tool of Weaver has a splash screen that still has the word "CodeGear" all over it.
QC Entry 76662
Start Quality Central from the Weaver IDE.

QC #: Date Reported: Area:
  10/5/2009 11:14:37 AM Install\Files
Description: Steps:
REGRESSION

Applications using the unit SOAPHTTPClient fail to compile with the following error.

Fatal: F1026 File not found: 'CertHelper.dcu'

Compile the attached application below.

See the following error at compile-time.

Test.dpr(3) Fatal: F1026 File not found: 'CertHelper.dcu'


program Test;
uses
SOAPHTTPClient;
begin
end.

QC #: Date Reported: Area:
78075 9/25/2009 10:33:32 AM Install\Files
Description: Steps:

The following dcu files are not being installed:

cor.dcu
CorError.dcu
CorHdr.dcu
D3DX8.dcu
D3DX9.dcu
Direct3D.dcu
Direct3D8.dcu
Direct3D9.dcu
DirectDraw.dcu
DirectInput.dcu
DirectMusic.dcu
DirectPlay8.dcu
DirectShow9.dcu
DirectSound.dcu
DX7toDX8.dcu
DxDiag.dcu
DXFile.dcu
DXTypes.dcu
WMF9.dcu

 

QC #: Date Reported: Area:
  11/26/2009 9:32:54 AM Install\Sanctuary/Registration Server
Description: Steps:
Installing Weaver Update 2 causes registration dialog to appear each time the IDE is started. This occurs 30 days after the base product has been registered.

Re-registering the product does not make the dialog stop re-appearing. Canceling out of the dialog has no effect on product startup.

This only affects Enterprise and Pro versions. This is because we included an E/R Studio trial unlock in the RAD Studio license for those skus, and a full E/R Studio in the Architect.
- install / register Weaver RTM
- install Update 2
- move system clock ahead 31+ days
- start the IDE

QC #: Date Reported: Area:
  6/3/2009 10:56:27 AM Install\Sanctuary/Registration Server
Description: Steps:
[MISSING TRANSLATION]

If you try to register with a serial key that has been register for another user, has expired or is for trial puposes only, you get an error message in English instead of German.

NOTE: Assigned to Chris B�rgi instead of German Sub by request.
1. Install Weaver with default values
2.Enter key that is expired (e.g. 3Axx-xxxxxx-xxxxxx-MxxN)
( xx are only masks, but you should be able to find the key I refer to)
3. try to register the key on startup for any EDN user account

exp: message explaining that key expired/is invalid in German
act: message is in German

NOTE: Same problem applies as with other bugs. One does not try "another kind of registration" but the same "registration process again". The translation is incorrect at this point. This has been logged before.

QC #: Date Reported: Area:
  9/18/2009 10:46:54 AM Database
Description: Steps:
MetaData Query GetProcedureSources retrieves a stored procedure but AVs when trying to retrieve the Definition if the proc name is not present in the database TDBXWeaverBugsSuite.native.db.test.exe connection=ibconnection -s:TestRaid_272935

exp: pass
act: AV

QC #: Date Reported: Area:
70905 1/27/2009 Database
Description: Steps:
[QC Short Description]
TVarData.VString interpreted as UnicodeString, while it contains a pointer to an AnsiString

[QC Description]
A search in DBCommon for the symbol 'VString' (a member of TVarData), results in 8 occurances of this construct : "string(TVarData(Value).VString)".

Since 'string' now means UnicodeString, this construct interprets an AnsiString as UnicodeString, without any compiler magic in between.

Possibly the new string-header helps preventing errors, but at the very least this is a syntactic error.


PS: Don't mix this up with TVarRec.VString: PShortString, it's TVarData.VString: Pointer that's handled wrong.
QC Entry 70905
Search in the RTL/VCL code for all 'VString' occurances. Notice that in Variant.pas all TVarData.VString are cast to an AnsiString. Now notice that DBCommon (and other units) do a cast to 'string', which effectively means a cast to 'UnicodeString'.

QC #: Date Reported: Area:
  10/8/2009 4:28:48 PM Database
Description: Steps:
[MSSQL] [ASE]

Database tinyint that is unsigned maps to ClientDataSet TShortIntField which cannot handle unsigned ranges
DBTypes.native.Db.test.exe connection=aseconnection -s:Test_ReadWriteSQL
DBTypes.native.Db.test.exe connection=mssqlconnection -s:Test_ReadWriteSQL
(remove workarounds first)

exp: pass
act: 255 <> -1

QC #: Date Reported: Area:
  9/18/2009 10:36:26 AM Database
Description: Steps:
GetProcedureSources metadataquery will be unable to return the string if the procedure source is greater than 258 characters long
TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_272934

QC #: Date Reported: Area:
  10/21/2009 11:43:17 AM Database
Description: Steps:
Relate to RAID#273111(?)

SQL Window do not work at all w/ "Value cannot be Null. Parameter name: stream"message, see also attached screen shot.

Note to if change UI to English via BDSSetLang.exe, it worked fine.

This is also reproducible on Englsih OS + RAD Studio all language installation and change to other language UI, see attached _EN image.
- install build w/ all language
- start IDE
- set BLACKFISHSQLCONNECTION using sample employee.jds, MSSQLCONNECTION using Northwind database on Richie server
- Right-click above database connection in the Data Explorer window and select 'SQL Window' from the context menu
// act: small dialog bring up w/ "Value cannot be Null. Parameter name: stream" message and result in total failure

QC #: Date Reported: Area:
  5/18/2007 Database
Description: Steps:
[Interbase]

DBX for interbase accepts a 31 or 32 character column name, but truncates the field name to 30 characters.
TDBXBugsSuite.Native.DB.Test.exe -s:TestRaid_250633

-or-

You must have IB2007 installed and running.

See attaced archive. You have to update SQLConnection to point to the interbase database-file.


procedure TForm1.Button1Click(Sender: TObject);
var
f30, f31, f31workaround, f32, f32Workaround: TFIeld;
begin

try
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Append('drop table table1');
SQLQuery1.ExecSQL;
except
// Ignore not found
end;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Append('create table table1 (a23456789012345678901234567890 integer, b234567890123456789012345678901 integer, c2345678901234567890123456789012 integer)');
SQLQuery1.ExecSQL;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Append('insert into table1 (a23456789012345678901234567890, b234567890123456789012345678901, c2345678901234567890123456789012) values (30, 31, 32)');
SQLQuery1.ExecSQL;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Append('select a23456789012345678901234567890, b234567890123456789012345678901, c2345678901234567890123456789012 from table1');
SQLQuery1.Open;
f30 := SQLQuery1.FindField('a23456789012345678901234567890');
f31 := SQLQuery1.FindField('b234567890123456789012345678901');
f31workaround := SQLQuery1.FindField('b23456789012345678901234567890');
f32 := SQLQuery1.FindField('c2345678901234567890123456789012');
f32Workaround := SQLQuery1.FindField('c23456789012345678901234567890');
Assert(f30.Value = 30);
Assert(f31.Value = 31);
Assert(f32.Value = 32);
Assert (f31workaround = nil);
Assert (f32workaround = nil);

end;

QC #: Date Reported: Area:
34447 9/26/2006 Database\Data Aware Controls\TDBGrid
Description: Steps:
[QC Short Description]
Data loss in TDBGrid

[QC Description]
there is data loss if

- record is edited using DBEdits and simultaneously shown in a DBGrid
- user clicks on the empty are of a DBGrid

See steps and attached test-case

This is caused since in TCustomDBGrid.MouseDown there is a call to UpdateData instead of FDataLink.UpdateData (see workaround)
QC Entry 34447
1. Download and run the attached test-case 2. Activate the second record by clicking on the cell showing "two" 3. Enter a different text (e.g. "test") into the DBEdit above the grid 4. click on the empty area in the grid below the records exp: updated value ("test") should show up in the grid act: value is cleared, i.e. data loss

QC #: Date Reported: Area:
  9/25/2009 1:30:05 PM Database\Data Aware Controls\TDBRichEdit
Description: Steps:
In the latest D2010 VCL the TDBRichedit control is broken, when no datafield is assigned OR during the process of streaming the control is you will observe AV's in the dbtrls.pas, in the BeginEditing...

trunk rev: 24877
update rev: 24878
1) Create a 1 form Delphi VCL app
2) drop TDBRichEdit onto the form
3) now change the TDBRichEdit's Font's color property to something else say clGreen... (actually any of the font properties that change will do the trick)

you will see an AV
---------------------------
Error
---------------------------
Access violation at address 50D47D56 in module 'vcldb140.bpl'. Read of address 00000000.
---------------------------
OK Details >>
---------------------------

[50D47D56]{vcldb140.bpl} DBCtrls.TDBRichEdit.BeginEditing (Line 5804, "dbctrls.pas" + 4) + $3
[50D48379]{vcldb140.bpl} DBCtrls.TDBRichEdit.EMSetCharFormat (Line 5971, "dbctrls.pas" + 2) + $2
...

The problem is here in DBCtrls.pas...

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
function TDBRichEdit.BeginEditing: Boolean;
begin
Result := FDataLink.Editing;
if not FDataLink.Editing then
try
if FDataLink.Field.IsBlob then
FDataSave := FDataLink.Field.AsString;
Result := FDataLink.Edit;
finally
FDataSave := '';
end;
end;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

function TDBRichEdit.BeginEditing: Boolean;
begin
Result := FDataLink.Editing;
if not FDataLink.Editing then
try
if Assigned(FDataLink.Field) then //********Adding this line will fix the AV when font color is changed...***********
if FDataLink.Field.IsBlob then
FDataSave := FDataLink.Field.AsString;
Result := FDataLink.Edit;
finally
FDataSave := '';
end;
end;

The problem comes in during the streaming in process, when the font color is changed a message is sent, and at that point the DataField has not been streamed in has not been streamed in... And hence is blank so the datafield has not been created at at point, this also happens . or ih no datasource is connected the reason is we do not check if the Datalink's Field is assigned or not and we have the AV trying to dereference the pointer...

QC #: Date Reported: Area:
77939 9/22/2009 Database\Data Access Controls\TQuery
Description: Steps:
[QC Short Description]
Error ParamByName result IsEmpty

[QC Description]
After being reviewed, I have encountered a problem in a TQuery, then add the data to PARAM this way:
query1.ParamByName('name').AsString: = 'Boa';
query1.open;

and then to validate the result with:
if query1.IsEmpty
ShowMessage ( 'Empty');
else
ShowMessage ( 'Not Empty');

gives always empty because it does not filter well, but if it works well if I do this:
query1.ParamByName('name').Value: = 'Boa';
query1.open;
and then to validate the result with:
then if query1.IsEmpty
ShowMessage ( 'Empty');
else
ShowMessage ( 'Not Empty');

It gives me the desired result.

The query is, is this a modification of Delphi 2010 and earlier versions that no such breakdown, then it is a modification or some inconveniete surmountable with any update?

How to solve this problem?

Thank you.
QC Entry 77939
BAD: query1.ParamByName('name').AsString: = 'Boa'; query1.open; if query1.IsEmpty ShowMessage ( 'Empty'); else ShowMessage ( 'Not Empty'); GOOD: query1.ParamByName('name').Value: = 'Boa'; query1.open; then if query1.IsEmpty ShowMessage ( 'Empty'); else ShowMessage ( 'Not Empty');

QC #: Date Reported: Area:
78576 10/12/2009 Database\TField\TBlobField
Description: Steps:
[QC Short Description]
TBlobField DataSize should return zero

[QC Description]
A change was made to TBlobField in D2010 that causes the DataSize property to return the size of the blob stream contents rather than zero. This change breaks the previously documented behavior for the DataSize property which requires fields with "data of indeterminate size" to return zero. The new behavior is cleary inconsistent with Delphi documentation and hazardous for code that depends on the previous behavior:

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TField_DataSize.html

"The value of DataSize for TField is 0. Most descendants of TField override this property to specify the size required by the specific field type they represent. BLOB fields, however, represent data of indeterminate size. They do not override the inherited method, so the value of DataSize for BLOB fields is 0. A value of zero should not be interpreted as meaning the field value requires no memory. A value of zero indicates that the memory required for the field is indeterminate."
QC Entry 78576
Compare the TBlobField definition in D2010 with that from D2009 and earlier. D2010 adds the following
GetDataSize override to TBlobField:

// From DB.pas in D2010

TBlobField = class(TField)
...
function GetDataSize: Integer; override;
public
...

function TBlobField.GetDataSize: Integer;
begin
Result := GetBlobSize;
end;

QC #: Date Reported: Area:
78620 10/13/2009 Database\TField\TNumericField\TBCDField
Description: Steps:
[QC Short Description]
TBCDField.GetDataSize returns incorrect value

[QC Description]
A change was made to TBCDField in D2010 that causes the DataSize property to return the wrong value. In previous versions of Delphi, the GetDataSize method of TBCDField returned SizeOf(TBcd). The GetDataSize method has been changed in D2010 to return SizeOf(System.Currency) instead. This change breaks code that depends on the previous behavior, in particular code that manipulates DataSet record buffers.
QC Entry 78620
Compare the GetDataSize method implementation for TBCDField in D2010 with that from D2009 and earlier. // DB.pas D2010 function TBCDField.GetDataSize: Integer; begin Result := SizeOf(System.Currency); end; // DB.pas D2009 function TBCDField.GetDataSize: Integer; begin Result := SizeOf(TBcd); end;

QC #: Date Reported: Area:
  8/19/2009 3:12:28 PM Database\Core VCL\Blobs
Description: Steps:
Using the BDE to inserting blobs into tables has issues... in Delphi/CB 2009 VCL 1) Compile the example code application
2) press the top button first this will create a Pdx table and insert a Blob and an Ansistring into the table
3) press the second button to retrieve the data from the table and display what was pull out of the table...
4) you will see random values...


To fix this problem... modify dbtables.pas as follow:
1) goto procedure GetParamData(Param: TParam; Buffer: Pointer; const DrvLocale: TLocale);
2) modify it as follows
procedure GetParamData(Param: TParam; Buffer: Pointer; const DrvLocale: TLocale);

...
var
//*********Modified******************
AnsiNativeStr: AnsiString;
BunchOBytes : TBytes;
begin
...
else if (DataType in [ftBlob..ftTypedBinary,ftOraBlob,ftOraClob]) then
begin
with BlobParamDesc(Buffer^) do
begin
//*********Modified******************
BunchOBytes := Value; //*********Modified******************
NativeStr := PChar(BunchOBytes); //*********Modified******************
ulBlobLen := Length(BunchOBytes); //*********Modified******************
pBlobBuffer := PChar(BunchOBytes); //*********Modified******************
//*********Modified******************
end;
end else
GetData(Buffer);
end;

The blobdata will now be inserted properly...
There are more issues with Blob data in the db.pas and dbtables.pas, these will also have to be addressed...

The will fix the parameterised TQueries using SetBlobdata AND AsBlob BUT *NOT* is you use AsBytes as it passes through a different code path, I am working on fixing that too.

QC #: Date Reported: Area:
  10/9/2009 10:01:00 AM Database\DBExpress
Description: Steps:
Hard coded strings that need to be resourced in these methods in dbxcommon.pas:

1) in TDBXDriverRegistry.InternalRegisterLoader 2) in TDBXIniFileConnectionFactory.LoadDrivers 3) in TDBXError.ErrorCodeToString.
 

QC #: Date Reported: Area:
62562 5/25/2008 Database\DBExpress
Description: Steps:
[ASE]

[QC Short Description]
Memory leak when ExecSQL using dbexpress TSQLconnection / TSQLQuery with ASE (dbxase30.dll)

[QC Description]
When using dbxpress TSQLConnection / TSQLQuery with Sybase ASE (using dbxase30.dll) in Deplhi 2007, a memory leak occurs with each call to ExecSQL.

The issue appears to be related to dbxase30.dll (Sybase ASE), as the same test application does not produce a memory leak if the TSQLConnection is instead associated with the 3rd party dbexpca400.dll (from Peter Sawatzki) and connected to an AS/400 database.

Including "ReportMemoryLeaksOnShutdown:=true;" in the test application FormCreate, does not report any memory leaks on shutdown, despite the application having consumed and not released additional memory for each ExecSQL call.

The leaked memory is also not released even after Free'ing the TSQLQuery object that was used to invoke the ExecSQL call (perhaps further confirming the issue exists with dbxase30.dll?). The memory is only released upon termination of the application.
QC Entry 62562
TDBXWeaverBugsSuite.Native.DB.Test.exe connection=aseconnection -s:TestRaid_260834

-or-

Simple Delphi 2007 test application source is attached which reproduces the problem.
This establishes runtime TSQLConnection and TSQLQuery component, and attempts to truncate then write 1000 unique records to a database table called dse_trpprc, which comprises two char fields (trp, prctyp). This can be easily changed to any table name / field names in the source.
Note that using VCL components at design time, or creating runtime components for TSQLConnection or TSQLQuery makes no difference.
Example output from the dbxase30.dll ASE connection using the test application is as follows (demonstrating a memory leak):
--
Start Mem: 3,988 K - End Mem: 6,204 K - Consumed: 2,216 K
Start Mem: 6,212 K - End Mem: 6,216 K - Consumed: 4 K
Start Mem: 6,216 K - End Mem: 6,220 K - Consumed: 4 K
Start Mem: 6,220 K - End Mem: 6,228 K - Consumed: 8 K
Start Mem: 6,228 K - End Mem: 6,232 K - Consumed: 4 K
Start Mem: 6,232 K - End Mem: 6,240 K - Consumed: 8 K
Start Mem: 6,240 K - End Mem: 6,244 K - Consumed: 4 K
Start Mem: 6,244 K - End Mem: 6,252 K - Consumed: 8 K
etc.
--
Conversely, if the TSQLConnection is changed to use dbexpca400.dll / dbxadapter30.dll to connect to an AS/400 database (instead of Sybase ASE), the following output is logged (noting no memory leak - only the initial component memory consumption):
--
Start Mem: 3,256 K - End Mem: 6,504 K - Consumed: 3,248 K
Start Mem: 6,508 K - End Mem: 6,512 K - Consumed: 4 K
Start Mem: 6,512 K - End Mem: 6,516 K - Consumed: 4 K
Start Mem: 6,516 K - End Mem: 6,516 K - Consumed: 0 K
Start Mem: 6,516 K - End Mem: 6,516 K - Consumed: 0 K
Start Mem: 6,516 K - End Mem: 6,516 K - Consumed: 0 K
Start Mem: 6,516 K - End Mem: 6,516 K - Consumed: 0 K
Start Mem: 6,516 K - End Mem: 6,516 K - Consumed: 0 K
Start Mem: 6,516 K - End Mem: 6,516 K - Consumed: 0 K
Start Mem: 6,516 K - End Mem: 6,516 K - Consumed: 0 K
etc.
--

QC #: Date Reported: Area:
77303 9/3/2009 Database\DBExpress
Description: Steps:
[QC Short Description]
Impossible to use temp tables in mssql

[QC Description]
An application originally made with D2007 uses dbExpress to connect to MSSQL. For some functionality, it creates temporary tables and fills these with data in consecutive statements on the same connection in the same (implicit) transaction.
This worked great in D2007, but the same code fails in D2010. It looks like changes to the mssql dbexpress driver in between versions has broken this functionality. (Don't know about D2009.)

Using explicit transactions does not help. Dmitry Arefiev suggested the driver might be using sp_execute statements internally, which would explain the behaviour because that would create a new context for each statement thus failing to recognize temp tables made in another context and therefore already dropped.

This is really basic functionality for our app and a showstopper for porting it to D2010 (unfortunately, because I really like it even better than D2007).
QC Entry 77303
TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_272730

-or-

Create a new application and drop a TSQLConnection and a TButton.
Connect the TSQLConnection to a MSSQL server by setting the Driver, Host and a Database.
To the button.OnClick handler attach this code:

SQLConnection1.ExecuteDirect('create table #TestTemp (something integer)');
SQLConnection1.ExecuteDirect('insert into #TestTemp (something) values (1)');

Expected: both statements run fine. If this program is made using D2007, it does.

If made with D2010, this application fails on the 2nd statement with the SQL error "Invalid object name '#TestTemp' ".

D2007 uses dbxmss30.dll. D2010 uses dbxmss.dll. If I make the D2007 version use dbxmss.dll, it fails too. Unfortunately, it doesn't work the other way round.

QC #: Date Reported: Area:
78188 9/29/2009 Database\DBExpress
Description: Steps:
[QC Short Description]
List index out of bounds if only some fields are persistent

[QC Description]
If you have a SELECT * but only create persistent fields for some columns, Delphi 2010 gives a "List index out of bounds" when you open the clientdataset. This worked in previous versions.

According to Dmitry Arefiev, this may be the problem:

As I see, the problem is in TCustomSQLDataSet.GetFieldData.
There are few places, where the code is accessing to the dataset
fields as "Fields[Ordinal]". But there Ordinal is FieldNo-1 and
not a index. Instead must be used Fields.FieldByNumber(FieldNo).
This issue is introduced in D2010 - in D2009 there is no such issue.
QC Entry 78188
TGUIFulcrumBugsSuite.Zombie.DB.Test.exe connection=oracleconnection -s:TestRaid_273138

-or-

Open and run raid273138.zip
push the button

exp: to show recordcount
act: shows error message as described

-or-

Run this script in Oracle10 to create the table:
{code}
CREATE TABLE MITABLA -- TABLE WITH 4 FIELDS
(
CAMPO1 VARCHAR2(10) NOT NULL,
CAMPO2 VARCHAR2(250) NOT NULL,
CAMPOFECHA DATE NOT NULL,
CAMPO4 VARCHAR2(10) NOT NULL,

CONSTRAINT PKMITABLA PRIMARY KEY (CAMPO1, CAMPO2)
)
And insert some data:
/
INSERT INTO MITABLA VALUES ('CAMPO UNO', 'CAMPO DOS', SYSDATE, 'CAMPO CUA');
/
{code}

Change the attached program to use your user and password. Run the program and press Button1:

Expected: showmessage should show a 1.
Actual: list index out of bounds(3)


This is the call stack:


{code}
:7c812afb kernel32.RaiseException + 0x52
:0043ce6e TList.Get + $1A
:0043ce6e TList.Get + $1A
:005989b4 TCustomSQLDataSet.GetFieldData + $134
:005006d6 TDataSet.GetFieldData + $E2
:0050fa95 TDataPacketWriter.PutWideStringField + $45
:00513012 TDataPacketWriter.GetDataPacket + $42
:00515b78 TDataSetProvider.CreateDataPacket + $70
:005143b3 TBaseProvider.InternalGetRecords + $43
:005157ef TDataSetProvider.InternalGetRecords + $E7
:00513e0d TCustomProvider.DoGetRecords + $61
:00513da3 TCustomProvider.GetRecords + $2F
:0051ac15 TLocalAppServer.AS_GetRecords + $51
:0052998f TCustomClientDataSet.DoGetRecords + $C3
:00520ca8 TCustomClientDataSet.OpenCursor + $1BC
:004ff86b TDataSet.SetActive + $5B
:004ff6b2 TDataSet.Open + $A
:004919f5 TControl.Click + $75
:00495d4d TWinControl.WndProc + $56D
:0046d091 TButtonControl.WndProc + $71
:00495ea0 DoControlMsg + $28
:00495d4d TWinControl.WndProc + $56D
:004b6369 TCustomForm.WndProc + $599
:004953eb TWinControl.MainWndProc + $2F
:0044a50e StdWndProc + $16
:7e398734 USER32.GetDC + 0x6d
:7e398816 ; C:\WINDOWS\system32\USER32.dll

QC #: Date Reported: Area:
  10/24/2007 Database\DBExpress\TSQLConnection
Description: Steps:
When applying updates through DataSetProvider.ApplyUpdates procedure, access violation happens if connection to database was not yet established. Example is attached. This is only a small test sample. Otherwise in our software Delta is sent from client application to a stateless server with multiple datamodules which can handle the request and apply updates. In that case if datamodule handling the data was not the same as datamodule handling updates this error occured.
I believe this to be a bug.
TDBXHighlanderBugsSuite.Native.DB.Test.exe connection=IBCONNECTION -s:TestRaid_256017

-or-

See attached project

QC #: Date Reported: Area:
  8/18/2009 10:11:39 AM Database\Data Explorer
Description: Steps:
Data Explorer is mapping Firebird blob fields as bigint

See also 273128 for blob issues.
1 - Connect to any Firebird database using Data Explorer

2 - Execute the script
create table test ( id integer,
NOTES BLOB sub_type 1 segment size 80,
GRAPHIC BLOB sub_type 0 segment size 80);

3 - Select Alter Talbe on data explorer

Act: // NOTES and GRAPHIC field has data type BIGINT

Exp: // Should be BLOB for both

QC #: Date Reported: Area:
  8/4/2009 5:08:21 PM Database\Data Explorer
Description: Steps:
[DataSnap]

When dragging server methods from Data Explorer onto a VCL form, the TSQLDataSet is created with commandType set to ctStoredProc instead of ctServermethod
open data explorer
connect to any datasnap connection
expand procedures
create a new vcl app
drag and drop any "server method" (not stored proc belonging to a database) to the form

exp: to create a tsqldataset with ctServermethod commandtype
act: created with ctStoredProc commandtype

Note: activating it will cause errors

QC #: Date Reported: Area:
  12/12/2008 11:06:50 AM Database\Data Explorer
Description: Steps:
[Weaver only]

Cannot execute stored procedure for Oracle
TGUIFulcrumBugsSuite.Zombie.DB.Test.exe connection=oracleconnection -s:TestRaid_267315

-or-

set up a connection oracle in data explorer
right click the new connection, click sql window
paste the following into the window:

CREATE PROCEDURE testraid(IN_PARAM IN NVARCHAR2, OUT_PARAM OUT NVARCHAR2) AS BEGIN OUT_PARAM := IN_PARAM;END;

-click the execute button
now expand stored procedures
right click on the testraid stored procedure, click View Parameters
enter anything in the Value field for the Input parameter
click exeecute

exp: echo of the input returned
act: error msg:
---------------------------
Error
---------------------------
ORA-01403: no data found
---------------------------
OK
---------------------------

QC #: Date Reported: Area:
  8/12/2009 12:35:12 PM Database\Data Explorer
Description: Steps:
[Weaver only]

//DataSnap Data Explorer connections

When dragging and dropping a server method from the procedures node of a datasnap connection, it needs to put quotes around the CommandText property in order for it to work. otherwise it will error when executing with "Unknown Token".

Note: Storedprocs do not have periods in its name, therefore we can use the logic: if there is a period, then quote it, as all server methods will have a period to separate serverclass.servermethod

See related: 272416 (possibly the issue causing this one)
TGUIFulcrumBugsSuite.Zombie.DB.Test.exe connection=dsconnection -s:TestRaid_272373

-or-

create a new vcl form
open data explorer and connect to any datasnap connection
expand that connection and expand procedures
drag and drop any server method (make sure it has a . as it is a storedproc otherwise)
right click the sqldataset and clcik execute

exp: to complain about missing parameters values not set or execute successfully
act: token unknown error

Note: now put quotes manually around the CommandText property and repeat execute. it will now work as expected.

QC #: Date Reported: Area:
  8/17/2009 12:41:31 PM Database\DataSnap
Description: Steps:
'Invalid pointer operation' error when executing a server method with var AnsiString or UnicodeString parameters

Note: This error only shows when the string was set on the client side (not left blank)
DataSnapDM.Native.Db.Test.exe connection=dsconnection -s:TestRaid_272514

-or-

open and run attached
check the second checkbox (set in/out value)
and click any button

exp: to work
act: fails with 'Invalid pointer operation' on executemethod.

QC #: Date Reported: Area:
79047 10/27/2009 Database\DataSnap
Description: Steps:
[QC Short Description]
HTTP based DataSnap client causes lots of memory leaks

[QC Description]
When HTTP based DataSnap standalone server is called by DataSnap client via HTTP protocol, client application causes lots of memory leaks per call.

This memory leaks can be detected ReportsMemoryLeaksOnShutdown and we can see increase of memory usage with TaskManager.

MemoryManager reports leaks when terninating a client application as below
21-28: TMemoryStream x NN ....


This issue is caused by generated proxy and TSQLServerMethod.

Please see attached quite simple test proejcts(Server/Client).
QC Entry 79047
1. create simple HTTP based DataSnap server via Wizard. Hostname is localhost. Port number is 8000. Please see attached project, 'httpserver' 2. build the server and run it. 3. create simple HTTP based DataSnap client which call a server method, 'EchoString'. Please see attached project, 'httpclient' 4. build client and run it. 5. press start button and close the client 6. MemoryManager reports lots of memory leaks

QC #: Date Reported: Area:
79153 11/1/2009 Database\DataSnap
Description: Steps:
[QC Short Description]
TJSONString.ToBytes fails to convert Unicode chars

[QC Description]
TJSONString.ToBytes fails to convert Unicode chars which are between U+0080 and U+00FF.

For example, multiply operation charcter(x = U+00D7) has been converted invalid data, because U+00D7 has been handled as byte(ASCII character) data instead of Unicode character.
It must be converted to \u00D7 by the method.

The bug exist in Line#1813 of DBXJSON.pas.
-----
... or (CurrentChar > WideChar(255)) then
must be
... or (CurrentChar > WideChar(127)) then
-----
QC Entry 79153


Added By Sysop
<<<<<<<<<<<<<
In 'DBXStream.pas',
TDBXJSonStreamWriter.WriteString method also has same bug.
>>>>>>>>>>>>>
DataSnapJSON.Native.DB.Test.exe connection=dsconnection -s:Test_JSON_String

-or-

Please return U+00D7 character as string from a server method of DataSnap Server.

QC #: Date Reported: Area:
  8/14/2009 9:29:22 AM Database\DataSnap
Description: Steps:
The string returning in a TDBXWideStringValue or WideString parameter of a server method is "truncated"

build test harness
run dsserver.native.db.test.exe

launch the test app or execute "TEchoDBXWideStringValue.EchoReturnValue"

exp: to see result param to equal input param
act: result param is "truncated"

QC #: Date Reported: Area:
  8/19/2009 8:04:52 AM Database\DataSnap
Description: Steps:
DataSnap CGI servers don't work properly Create a new DataSnap WebBroker app, check cgi
Setup in IIS
Create virtual directory called DSProjects
Enable CGI (executables) in virtual directory
Enable browsing
Build CGI to virtual directory
Browse to the virtual directory
Click on the .exe
expected: "DataSnap Server" shows in browser
Copy to the clipboard part of URL starting with DSProjects, this is the URLPath for the connection
Start DataExplore.exe
Add a connection
http
localhost
80
URLPath: Paste in URLPath. Should be something like DSProjects/Project1.exe

Test Connection

Expected: Connection works
Actual: Hang

QC #: Date Reported: Area:
  9/25/2009 4:52:26 PM Database\DataSnap
Description: Steps:
A table returned by a datasnap server method can't be used with a TDataSetProvider and TClientDataSet. Open the attached applications
Start the server
Start the client
Select ftString in the Field Type combobox
Click "ReturnDataSetWithTFieldType to CDS Provider" or "ReturnReaderWithTFieldType to CDS Provider"
Expected: Displays data in the grid
Actual: CDS.Active Exception: Catastrophic failure

QC #: Date Reported: Area:
  8/25/2009 8:16:57 AM Database\DataSnap
Description: Steps:
REST

Current unable to pass Multibyte strings (Unicode) as parameters to a server method expecting a unicode string for example

IE: EchoStr(Input: String): TJSONValue;

Note: JSON protocol also does not seem to work well with unicode chars in the msg content portion of a json execution
DataSnapHTTP.Native.DB.test.exe connection=dshttpconnection -s:TestRaid_272624
DataSnapHTTP.Native.DB.test.exe connection=dsconnection -s:TestRaid_272624

QC #: Date Reported: Area:
76785 8/17/2009 Database\DataSnap\Server
Description: Steps:
[QC Short Description]
HTTP PUT command does not work in DataSnap REST

[QC Description]
The HTTP PUT command does not work in the DataSnap REST support, because the PostStream is not returned to the beginning of the stream before the byte content is read.
QC Entry 76785
DataSnapHTTP.Native.DB.Test.exe connection=dsconnection -s:TestRaid_272545

-or-

1. Extract the attached project into a location.
2. Open the project in Delphi 2010.
3. Run the application.
4. Click the button.

Expected: Nothing visible to happen, but the request to be processed internally.

Actual: The applications throws the following exception:

First chance exception at $7C812AEB. Exception class TDSServiceException with message 'Message content is not a valid JSON value.'. Process Project1.exe (204)

QC #: Date Reported: Area:
76580 8/10/2009 Database\DataSnap\Server
Description: Steps:
[QC Short Description]
Server method parameter lost data

[QC Description]
When I pass a double value via parameter to server method, the server side only get a zero.

The Server side:
procedure TDSServerModule1.SaveInvoice(const SessionID, InvoiceNumber,
ClientAccountCode: string; BilledAmount, TaxableAmount, GSTTotal, PSTTotal,
QSTTotal, HSTTotal: double; InvoiceImage: OleVariant);

The Client side:
DataModuleMain.Client.SaveInvoice('',
InvoiceNumber,
cdsInvoiceSummaryClientAccountCode.AsString,
InvoiceTotal,
TaxableTotal,
GSTTotal,
PSTTotal,
QSTTotal,
HSTTotal, //value 20.31
vaPDF);

When debug the server side, I found HSTTotal has value 0 instead of 20.31
QC Entry 76580
DataSnapDM.native.Db.test.exe connection=dsconnection -s:TestRaid_272522

-or-

Added by Sysop
<<<<<<<<<<<<<<
1. open project group
2. build Server project and run it
3. build Client project and run it
4. click Button2 ---> Results are OK
5. click Button1 ---> Results are NG as below
---------
invoice number
test
1.1
2.2
3.3
4.4
5.5
6.59999847412109 // NG: expected result is 6.6
0 // NG: expected result is 7.7
9 // OK
-----------
>>>>>>>>>>>>>>

QC #: Date Reported: Area:
76776 8/17/2009 Database\DataSnap\Server
Description: Steps:
[QC Short Description]
DataSnap WebBroker applications don't run

[QC Description]
DataSnap WebBroker projects created with the new project wizard do not run, but throw an exception stating that an application can only have one data module.
QC Entry 76776
1. Click File->New->Other 2. Select DataSnap Server 3. Double-click on DataSnap WebBroker application. 4. Select CGI, and click OK 5. Hit Run Expected: Application to run, show default handler content, and exit. Actual: Application starts and throws the following exception: First chance exception at $7C812AEB. Exception class Exception with message 'Only one data module per application'. Process Project1.exe (4216)

QC #: Date Reported: Area:
  8/17/2009 12:23:43 PM Database\DataSnap\Server
Description: Steps:
DataSnap Filters is raising exception some times, more frequently in debug mode.

After some test with Adrian, he knows where is the problem and look likes is easy to fix.

This is stop ship bug
open and run raid272513.zip
run without debugging the failover project
run two instances of the Myserver project
start the servers on port 211 and 213 each
open data explorer and connect to the server using http protocol (8080)
expand procedures
select the EchoString procedure for executing
enter any string value (ie: Delphi)
click execute and expect it to work
now shutdown the first server on 211
clcik execute 5 more times

exp: to pass
act: fails if this bug reproduces


//old steps:
1 - Install the filter DSEncryptFilter.bpl
2 - Run the MyDataSnapServer
3 - Click the bottom - Refresh Server Methods avaliable some times.

exp: // list of methods avaliable

ac :// ---------------------------
DataSnap Server Demo
---------------------------
Expected: '{' found: '-+0-9.' at position: 0
verRDM.AS_GetParams0TLookupServerRDM,AS_GetParams >TLookupServerRDM.AS_RowRequest0TLookupServerRDM-AS_RowRequest ;TLookupServerRDM.AS_Execute0TLookupServerRDM*AS_Execute =TDepartment.DepartmentDefault+TDepartment1DepartmentDefault ?TDepartment.DepartmentOrderByID+TDepartment3DepartmentOrderByID #16#0!TDepartment.DepartmentOrderByName+TDepartment5DepartmentOrderByName 8TDepartment.OrderByField+TDepartment,OrderByField #16#0!TDepartment.GetDepartmentsOrderBy+TDepartment5GetDepartmentsOrderBy :TDepartment.GetDepartments+TDepartment.GetDepartments 2TDepartment.Insert+TDepartment&Insert =TDepartment.InsertAsDBXReader+TDepartment1InsertAsDBXReader <TDepartment.GetDbxConnection+TDepartment0GetDbxConnection ]}asses'DSAdmin+ListClasses 5DSAdmin.DescribeClass'DSAdmin-DescribeClass 3DSAdmin.ListMethods'DSAdmin+ListMethods 6DSAdmin.DescribeMethod'DSAdmin.DescribeMethod 8DSAdmin.GetServerMethods'DSAdmin0GetServerMethods #16#0!DSAdmin.GetServerMethodParameters'DSAdmin9GetServerMethodParameters

QC #: Date Reported: Area:
  8/10/2009 2:32:29 PM International\Translation
Description: Steps:
[Japanese translation]

Precompiled Header Ziard.


English original:
Checking for initialized data, which will fail precompiled header creation.

Current Japanese translation
�������f�[�^�̊m�F���A�R���p�C���ς݃w�b�_�[�̍쐬�����s���܂��B

Proposal:
�R���p�C���ς݃w�b�_�[��쐬�ł��Ȃ�����A�������f�[�^�̗L����m�F��
Eecute IDE with Japanese UI.

Create C++/VCL application.
Invoke Precompiled header Wizard from tools menu

Click"Next" button four-times

In test build pane,

Strange translation message is logged in the result pane.

Re-translated to English by Google-translate.
"Checking for initial data, it fails to create pre-compiled headers."

QC #: Date Reported: Area:
78205 9/29/2009 International\Translation
Description: Steps:
[QC Short Description]
English ION version of RAD Studio 2010 Architect has Japanese translations on SQL Window tab

[QC Description]
The English InstantOn version of RAD Studio 2010 Architect has Japanese translations shown on the SQL Window tab. Not all labels are shown in Japanese, and I have not noticed this anywhere else in the IDE. I have attached a screenshot for reference
QC Entry 78205


//Masahiro Arai
This is not only for ION but Installer.
- Right-click a valid database connection in the Data Explorer window and select 'SQL Window' from the contest menu Expected: The SQL Window tab is shown with all text in English Actual: The SQL Window tab is shown with a mixture of English and Japanese text

QC #: Date Reported: Area:
  10/3/2009 10:50:01 AM International\Translation
Description: Steps:
Regression and integration problem?
File History property dialog resources are shown in English (Number of projects: and Number of files:).

Both are translated in Weaver projects repository but new resources are added in 'RAD Studio (TP - Trunk; this is for RAD Studio 2011)' project and it seems to picked those resource, please see attached screen shot.

//Masahiro Arai
This will be translated in the next batch
- install latest build
- launch IDE
- File | Reopen, Properties...
// act: two resources label are shown in English

QC #: Date Reported: Area:
76446 8/6/2009 International\Truncation
Description: Steps:
[QC Short Description]
Background compiling - German text in the dialog is truncated

[QC Description]
German text in the dialog is truncated
See picture
QC Entry 76446
1. I enabled background compiling in Option 2. Rebuild my project and hit F12 to switch from frormdesigner to codedesigner. The compiling prozess stopped and Delphi locked. 3. I using the taskmanager and finished the Delphi prozess. After this the compiler finshed his prozess and I got a message "F�r dies Operation muss die aktuelle Hintergrund-Compilierung abgebrochen werden. Soll die Hintergrund-Compilierung abgebrochen und weitergemacht"

QC #: Date Reported: Area:
77448 9/7/2009 VCL
Description: Steps:
[QC Short Description]
TRichEdit.RegisterConversionFormat causes exception

[QC Description]
On Delphi 2009, TRichEdit.RegisterConversionFormat does not work (the function passed to the method will never be called), and simply calling the method causes an exception when the program exits.

The problem appears to be in the FreeConversionFormatList method called in the ComCtrls finalization section, and specifically the AppendConversionFormat method, which is using the code:

ConversionFormatList.Add(Pointer(@NewRec));

when it looks to me like it should be this:

ConversionFormatList.Add(Pointer(NewRec));

Not only does this fail to register the conversion function with the correct address, so it never gets called, but it screws up the heap when the list is de-allocated.
QC Entry 77448

trunk rev: 24803
update rev: 24804

Simply creating a TRichEdit instance and then calling the RegisterConversionFormat method with appropriate parameters demonstrates the bug. The attachment contains a program for both Delphi 2009 and Delphi 5 which demonstrates the problem. To see the problem, run the program, click the button on the main form, then close the program. An access violation occurs when the program exits if compiled with Delphi 2009, but not with Delphi 5.

QC #: Date Reported: Area:
77551 9/9/2009 VCL
Description: Steps:
[QC Short Description]
TWinControl.Destroy access violation on FTouchManager

[QC Description]
TWinControl.Destroy in Controls.pas contains the following code:

if Touch.GestureEngine <> nil then
Touch.GestureEngine.Free;

Under normal circumstances, this works because the inherited TControl.Create calls CreateTouchManager to create the object;

A problems occurs if an exception is raised during the constructor of a TWinControl, before inherited, which will cause the Destroy procedure to raise an access violation on Touch.GestureEngine.

The code should be written as follows:

if (Touch <> nil) and (Touch.GestureEngine <> nil) then
Touch.GestureEngine.Free;
QC Entry 77551

trunk rev: 24741
update rev: 24747
1. Create a subclass of TWinControl 2. In the constructor, raise an exception before calling inherited.

QC #: Date Reported: Area:
76743 8/16/2009 VCL
Description: Steps:
[QC Short Description]
scrollbars don't work with touch

QC Entry 76743

trunk rev: 24810
update rev: 24811
The scrollbars of TListBox, TMemo, TStringGrid and TScrollBox don't work with touch on a Windows 7 multi-touch machine. You can click them, but moving the slider or keeping the outer buttons down doesn't work. In NotePad the scrollbars do work.

QC #: Date Reported: Area:
66905 9/17/2008 VCL\Additional Controls\TCheckListBox
Description: Steps:
[QC Short Description]
Repaint Error.

[QC Description]
Set the property "DoubleBuffered" to be True. And then check the item in the TCheckListBox(Do not check the first item.). It's seemed that checkbox is paintting error.
QC Entry 66905
1.Put a TCheckListBox in a form. 2.Set the DoubleBuffered property to be true. 3.Insert some items into the CheckListBox. 4.Complie and run the program and check the item in the CheckListBox. you will find some checkbox can not been paint as checked status.

QC #: Date Reported: Area:
2913 11/14/2002 VCL\Core VCL Classes\Streaming
Description: Steps:
[regression]

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


trunk rev: 24740
update rev: 24745
 

QC #: Date Reported: Area:
66550 9/9/2008 VCL\Core VCL Classes\TControl
Description: Steps:
[QC Short Description]
Cursor property missing Windows "Link Select" cursor

[QC Description]
Microsoft Windows has a Link Select cursor under Control Panel > Mouse > Pointers tab. Scroll to the bottom and you'll see Link Select. This is the cursor that is shown when the user is hovering over a clickable link in a browser. The VCL has never had that cursor as an option in the Cursor property's drop-down list of cursor. The closest thing to it is crHandPoint which looks Windows-95-ish. Can the Link Select cursor please be added to the TCursor type?

Once that is done, ms-help://borland.bds5/delphivclwin32/Controls_TCursor.html would need to be updated because it has this to say about crHandPoint:

"An upward pointing hand cursor. This is normally used to identify a selectable item, such as a web page link."

which has false.
QC Entry 66550
 

QC #: Date Reported: Area:
77100 8/27/2009 VCL\Standard Controls\TComboBox
Description: Steps:
[QC Short Description]
TComboBox position uncontrollable when BevelKind != bkNone

[QC Description]
The position (Top, Left) or size (Width) of TComboBox are uncontrollable in a strange way if you change BevelKind to values other than bkNone.
QC Entry 77100

trunk rev: 24782
update rev: 24785
Place TComboBox on a form. Then, change the BevelKind to bkFlat. You will see its position or size are being changed wrongly (every time you select the combobox).

QC #: Date Reported: Area:
  7/28/2009 4:11:53 PM VCL\Standard Controls\TRadioButton
Description: Steps:
Fix for flicker in TGroupButton. See attached.

QC #: Date Reported: Area:
  7/28/2009 4:24:24 PM VCL\Standard Controls\TRadioGroup
Description: Steps:
For TRadioGroup, defer the creation of TRadioButton intances until the window handle is created. See attached patch.

QC #: Date Reported: Area:
BETA 6/14/2004 VCL\System Controls\TTimer
Description: Steps:
TTimer currently creates a window handle eagerly in its constructor. Each TTimer instance has a window handle dedicated to it.

Optimizations:
#1: Only create a window handle the first time it is needed (when Enabled = True and Interval > 0).

#2: Let all TTimer instances share a single shared window handle. Use the Timer ID as the Self reference (instead of the hard-coded 1 as is used now). (New defect for this one: 272990)

This should reduce resource ussage for applications that use many timers. Note that even Win2k and XP has (articifical) resource limits (max ~10.000 handles).
 

QC #: Date Reported: Area:
77561 9/9/2009 VCL\System Controls\TTrayIcon
Description: Steps:
[QC Short Description]
TTrayIcon.ShowBalloonHint() does not work correctly on pre-Vista systems

[QC Description]
TTrayIcon.ShowBalloonHint() does not work correctly on pre-Vista systems. This is because the ShellAPI.TNotifyIconData record is larger in D2010 than it is in D2009, and TTrayIcon is setting the TNotifyIconData.cbSize member to the full byte size, which is only appropriate for Vista and later systems. TTrayIcon needs to be updated to check the actual OS version and adjust the cbSize value accordingly, and then not use fields that are outside that size when appropriate.
QC Entry 77561

trunk rev: 24729
updates rev: 24730
 

QC #: Date Reported: Area:
BETA 6/27/2002 VCL\Win 32 Controls\TDateTimePicker
Description: Steps:
Changing a value (day, month, year ...) by cursor arrow when ShowCheckbox = True causes the checkbox to get focused after each change. This makes using arrow keys nearly impossible for changing values.

Other non-VCL applications using the control (for example Find Message dialog in Outlook Express) does not have the problem.

trunk rev: 24880
update rev: 24881
1. Create New Application
2. Drop TDateTimePicker component on the form
3. Set ShowCheckbox property to True
4. Set the Datemode to dmUpDown
5. Run the application
6. Click on day field
7. Press cursor down key to change the value

This is also a problem for the Kind property set to dtkTime

act: Checkbox gets focused
exp: The day field remain focused

Windows 2000 SP2, COMCTL32.DLL version 5.81.4807.2300

The reason why this is happening is because the control is refreshed and thus the focus shifts away from the field the user just edited.
this happens because VCL sends a DTM_SETSYSTEMTIME message by calling DateTime_SetSystemtime whenever the user changes the time.
This call is redundant because there is no point in telling the window control to update it's time during the processing of a message from it that the time changed.

To resolve the issue adding these values resolve the issue....
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
procedure TDateTimePicker.CNNotify(var Message: TWMNotifyDT);
...
DTN_DATETIMECHANGE:
begin
...
if dwFlags = GDT_VALID then
begin
FLastChange := st;
FChanging := True; //***********Added********
DT := SystemTimeToDateTime(st);
if Kind = dtkDate then SetDate(DT)
else SetTime(DT);
FChanging := False; //***********Added********
if FShowCheckbox then FChecked := True;
end;
end;
Change;
end;
end;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

QC #: Date Reported: Area:
76299 8/1/2009 VCL\Ribbon Controls
Description: Steps:
[QC Short Description]
Deleting a combobox from a Ribbon cause an exception

[QC Description]
Deleting a combobox from a Ribbon cause an exception
QC Entry 76299
Open RibbonDemo Go to Home tab Click on rcbFontSize Press delete key An exception occures [[10534938]{vclribbon140.bpl} RibbonActnCtrls.TRibbonComboControl.SetBounds (Line 4382, "RibbonActnCtrls.pas" + 4) + $F [500073FE]{rtl140.bpl } System.ErrorAt (Line 3645, "System.pas" + 3) + $4 [10534938]{vclribbon140.bpl} RibbonActnCtrls.TRibbonComboControl.SetBounds (Line 4382, "RibbonActnCtrls.pas" + 4) + $F [1051D0A8]{vclribbon140.bpl} Ribbon.TCustomRibbonGroup.AlignGroupControls (Line 6851, "Ribbon.pas" + 93) + $12 [502996AB]{vcl140.bpl } Controls.TWinControl.Notification (Line 8959, "Controls.pas" + 1) + $6 [1051E6D5]{vclribbon140.bpl} Ribbon.TCustomRibbonGroup.Notification (Line 7495, "Ribbon.pas" + 9) + $4 [50075359]{rtl140.bpl } Classes.TComponent.RemoveFreeNotifications (Line 11810, "Classes.pas" + 4) + $11 [500752FC]{rtl140.bpl } Classes.TComponent.Destroy (Line 11793, "Classes.pas" + 2) + $2 [50293A7B]{vcl140.bpl } Controls.TControl.Destroy (Line 5222, "Controls.pas" + 27) + $7 [50009D14]{rtl140.bpl } System.TObject.FreeInstance (Line 9440, "System.pas" + 2) + $2 [5000A3E6]{rtl140.bpl } System.@ClassDestroy (Line 10319, "System.pas" + 0) + $2 [50293198]{vcl140.bpl } Controls.TControlCanvas.Destroy (Line 4865, "Controls.pas" + 3) + $6 [5029FD7C]{vcl140.bpl } Controls.TGraphicControl.Destroy (Line 13104, "Controls.pas" + 3) + $7 [214E1B6A]{vclactnband140.bpl} ActnMan.TCustomActionControl.Destroy (Line 5749, "ActnMan.pas" + 3) + $7 [1053418A]{vclribbon140.bpl} RibbonActnCtrls.TRibbonComboControl.Destroy (Line 4164, "RibbonActnCtrls.pas" + 4) + $7 [50009D5C]{rtl140.bpl } System.TObject.Free (Line 9459, "System.pas" + 1) + $4 [214E1085]{vclactnband140.bpl} ActnMan.TCustomActionBar.RecreateControls (Line 5448, "ActnMan.pas" + 4) + $15 [214DE3AB]{vclactnband140.bpl} ActnMan.TActionClientItem.SetCommandStyle (Line 4063, "ActnMan.pas" + 33) + $A [10534817]{vclribbon140.bpl} RibbonActnCtrls.TRibbonComboControl.Notification (Line 4347, "RibbonActnCtrls.pas" + 7) + $8 [500756C0]{rtl140.bpl } Classes.TComponent.Notification (Line 11979, "Classes.pas" + 8) + $12 [50293E37]{vcl140.bpl } Controls.TControl.Notification (Line 5426, "Controls.pas" + 1) + $6 [502996AB]{vcl140.bpl } Controls.TWinControl.Notification (Line 8959, "Controls.pas" + 1) + $6 [214E0337]{vclactnband140.bpl} ActnMan.TCustomActionBar.Notification (Line 5001, "ActnMan.pas" + 1) + $6 [1051E69F]{vclribbon140.bpl} Ribbon.TCustomRibbonGroup.Notification (Line 7487, "Ribbon.pas" + 1) + $6 [500756C0]{rtl140.bpl } Classes.TComponent.Notification (Line 11979, "Classes.pas" + 8) + $12 [50293E37]{vcl140.bpl } Controls.TControl.Notification (Line 5426, "Controls.pas" + 1) + $6 [502996AB]{vcl140.bpl } Controls.TWinControl.Notification (Line 8959, "Controls.pas" + 1) + $6 [502BEC17]{vcl140.bpl } Forms.TCustomForm.Notification (Line 3362, "Forms.pas" + 1) + $6 [20D80EB1]{designide140.bpl} Proxies.NotificationHook (Line 310, "Proxies.pas" + 8) + $B [50075549]{rtl140.bpl } Classes.TComponent.RemoveComponent (Line 11903, "Classes.pas" + 2) + $8 [50075311]{rtl140.bpl } Classes.TComponent.Destroy (Line 11795, "Classes.pas" + 4) + $9 [50293A7B]{vcl140.bpl } Controls.TControl.Destroy (Line 5222, "Controls.pas" + 27) + $7 [5029821B]{vcl140.bpl } Controls.TWinControl.Destroy (Line 8198, "Controls.pas" + 34) + $7 [10534FDD]{vclribbon140.bpl} RibbonActnCtrls.TCustomRibbonComboBox.Destroy (Line 4589, "RibbonActnCtrls.pas" + 2) + $7 [50009D5C]{rtl140.bpl } System.TObject.Free (Line 9459, "System.pas" + 1) + $4 [20DAF869]{designide140.bpl} ComponentDesigner.TComponentRoot.DeleteSelection (Line 4628, "ComponentDesigner.pas" + 44) + $2 [20DC2DAB]{designide140.bpl} Surface.TDesignSurface.DeleteSelection (Line 193, "Surface.pas" + 0) + $7 [20D8E48B]{designide140.bpl} Designer.TDesigner.DeleteSelection (Line 751, "Designer.pas" + 2) + $5 [20D909EF]{designide140.bpl} Designer.TDesigner.Key (Line 1547, "Designer.pas" + 4) + $3 [5196CF04]{vcldesigner140.bpl} VCLSurface.KeyEvent (Line 3000, "VCLSurface.pas" + 8) + $1E [5196D80E]{vcldesigner140.bpl} VCLSurface.TVclDesignSurface.IsDesignMsg (Line 3182, "VCLSurface.pas" + 61) + $6 [50009F7E]{rtl140.bpl } System.@IsClass (Line 9739, "System.pas" + 1) + $8 [50296273]{vcl140.bpl } Controls.TControl.WndProc (Line 6968, "Controls.pas" + 4) + $21 [20D6C80E]{designide140.bpl} DeskUtil.SetFocusHook (Line 454, "DeskUtil.pas" + 4) + $C [5029AD50]{vcl140.bpl } Controls.TWinControl.WndProc (Line 9797, "Controls.pas" + 144) + $6 [502BFCDC]{vcl140.bpl } Forms.TCustomForm.WndProc (Line 3960, "Forms.pas" + 191) + $5 [5029A41D]{vcl140.bpl } Controls.TWinControl.MainWndProc (Line 9521, "Controls.pas" + 6) + $0 [5029AD50]{vcl140.bpl } Controls.TWinControl.WndProc (Line 9797, "Controls.pas" + 144) + $6 (0002D49C){CnWizards_D14.dll} [0948E49C] [502BFCDC]{vcl140.bpl } Forms.TCustomForm.WndProc (Line 3960, "Forms.pas" + 191) + $5 [2215510B]{delphivclide140.bpl} VCLFormContainer.TControlSizer.ControlWndProc (Line 306, "VCLFormContainer.pas" + 33) + $C [5029A408]{vcl140.bpl } Controls.TWinControl.MainWndProc (Line 9518, "Controls.pas" + 3) + $6 [50076E3C]{rtl140.bpl } Classes.StdWndProc (Line 13072, "Classes.pas" + 8) + $0 [502C8EF1]{vcl140.bpl } Forms.TApplication.ProcessMessage (Line 9784, "Forms.pas" + 30) + $1 [502C8F36]{vcl140.bpl } Forms.TApplication.HandleMessage (Line 9814, "Forms.pas" + 1) + $4 [502C9261]{vcl140.bpl } Forms.TApplication.Run (Line 9951, "Forms.pas" + 26) + $3 [0042C94A]{bds.exe } bds.bds (Line 200, "" + 8) + $FFFB Note: this happens in Delphi 2009 too

QC #: Date Reported: Area:
  9/30/2009 1:36:46 PM VCL\Gestures
Description: Steps:
Testing gestures in the Gesture Designer isn't working.

trunk rev: 25000
update rev: 25002
* Drop a TGestureManager on a form
* Double click, and click Create
* Record a gesture and click the test button
* Try to reproduce the gesture
// Exp: either success or failure reported
// Act: Nothing

QC #: Date Reported: Area:
  8/3/2009 2:40:23 PM VCL\Gestures\Recognizer Engine
Description: Steps:
ChevronUp is recognized as either SemiCircleLeft or SemiCircleRight. 1. Drop gesture manager onto form
2. Hook up gesture manager to form
3. Turn on all gestures for the form and add an OnGesture event handler and add code to check EventInfo.ID
4. Run and try drawing ChevronUp in both directions
//exp: Recognized correctly
//act: Recognized as SemiCircleLeft (or Right) depending on direction.

QC #: Date Reported: Area:
  8/20/2009 2:31:08 PM VCL\Gestures\Components\TGestureManager
Description: Steps:
Executing a standard gesture on a parent control which has a child listening for the gesture results in an AV.

Reported by Eric Gaspard in the VCL newsgroup. Test project is attached.

Reproduced the bug with Weaver RTM on Win XP and Win 7.

Workaround for users who are not using interactive gestures: Set gesture manager property for the form.

Trunk rev 24249
1. Extract attached project.
2. Run and execute left and right gestures on the image
//exp & act: moves thru' images as expected
3. Execute left and right gestures on the form
//exp: No action
//act: AV
Controls.TControl.ScreenToClient((18060744, 4216450))
Gestures.TGestureEngine.BroadcastGesture(???,(4040, (1244708, 1244616), [gfInertia..gfEnd,(hors limite) 4], 6,9534831276e-309, (-324, 18), 1953105149, (1277, 29802)))
Gestures.TMouseGestureEngine.Notification(???)
Controls.TWinControl.WndProc((514, 0, 4391472, 0, 0, 0, 560, 67, 0, 0))
Forms.TCustomForm.WndProc(???)
Controls.TWinControl.MainWndProc(???)
Classes.StdWndProc(788296,514,0,4391472)
Forms.TApplication.ProcessMessage(???)

QC #: Date Reported: Area:
  9/28/2009 2:44:50 PM VCL\Gestures\Components\TGestureRecorder
Description: Steps:
TGestureRecorder doesn't block gestures from being passed to it's parent.

If the parent responds to sgiLeft and a left motion is recorded, it will trigger the parent's OnGesture event.

trunk rev: 24918
update rev: 24919
* Run attached application
* Record a "left" motion on the recording surface
// Exp: Caption of form doesn't change
// Act: Caption is changed due to form's OnGesture being called

QC #: Date Reported: Area:
  9/16/2009 10:55:07 AM VCL\Touch Controls\TTouchKeyboard
Description: Steps:
Users cannot overrite keyboard layouts. 1. Open the attached project.
2. It will function because of the two lines:

Layout.KeyboardType := 'Foo';

and

TouchKeyboard.Layout := 'Foo';

if you commented out these two lines then it will fail. A success is there are no Esc and Fn keys.

QC #: Date Reported: Area:
  7/31/2009 2:21:30 PM VCL\Touch Controls\TTouchKeyboard
Description: Steps:
Clicking the right shift key to toggle out of Shift mode is not working right. 1. Drop touch keyboard onto VCL Forms app and run
2. Click Left Shift
//exp & act: Toggled into shift mode i.e. all key captions are in shifted state
3. Click Right Shift
//exp: Both shift keys are shown as released. Toggled out of shift mode i.e. key captions in normal state
//act: Left and right shift keys are shown as clicked. Key captions are in shifted state. I have to click the left shift key to get out of Shift.

QC #: Date Reported: Area:
  8/4/2009 2:08:32 PM VCL\Touch Controls\TTouchKeyboard
Description: Steps:
Memory footprint of touch keyboard layouts needs to be optimized. Currently they are large. They can be cut in half!  

QC #: Date Reported: Area:
  10/14/2009 10:20:48 AM Debugger
Description: Steps:
Several AIR reports are showing crashes in the inspector code (used by the Locals view) when either double-clicking call stack frames or shutting down the IDE.

Seems to be related to using Undocked Layout and debugging multi-threaded apps

See 78615, 78499 and 78464
Steps using the work/tp build:

Start the work build
Switch fo Classic undocked layout
Set Debug Desktop to None
Load GalileoGroup.groupproj
Open tp\app\coreide\ParserThread.pas
Set a breakpoint on the "Parse;" call on/near line 180
Run
In debugged IDE, create a new Delphi VCL app
The breakpoint will be hit
Open the call stack view
Double click the second item in the call stack (if asked, give the path to tp\rtl\common\Classes.pas)
Double click the second item in the call stack (if asked, give the path to tp\rtl\sys\System.pas)
File | Exit to close the work (debugger) IDE
Click OK on Terminate Debugging prompt
IDE will crash on exit

QC #: Date Reported: Area:
  8/24/2009 3:58:24 PM Debugger
Description: Steps:
"AllDescendants" parameter of IOTADebuggerVisualizer.GetSupportedType is ignored (see souce code comment in ToolsAPI.pas.

This limitation should be removed.

============
Impossibility to use the visualizers with generic classes.

Envision this situation: I have a new class called TBox<T> which can contain a value of any other type.

TBox<T> is derived from TBox and TBox exposes non-generic properties I can read in a debug visualizer (e.g. TBox.ToString());

If I register TBox for visualizing and set AllDescendants to true, still, nothing changes. If I register TBox<string> directly then it works.

If I typecast TBox<string> to a TBox then I can see th value in the visualizer.
see description

QC #: Date Reported: Area:
  9/14/2009 2:46:42 PM Debugger\Execution
Description: Steps:
Debugger generates millions of stack entries while debugging with the steps.

Comments from Andreas:

A call stack with over 2 million items looks suspicious to me. And the 3 access violations in browdbug.c that were raised before I spotted the huge call stack doesn't make things better.

What was I doing:
I'm trying to nail down the undo bug (garbage characters in the editor) for which I now have 100% reproducible steps (thanks to Arno Garrels
[weaver.ide.general: How to crash the IDE in a few steps]. During debugging I came to the ek_ins.c:EditKernel::EditableRange() method which calls EditKernel::QueryNotifyEvent() what brings us to EditorBuffer.pas:QueryEventHandler(). And in the moment I enter the last method the debugger throws 3 access violations in browdbug.c. After that the call stack tree wants to allocate more than 2 million nodes.
Start Work IDE (W1)
Start TP IDE in Work IDE (active project: bds.exe) (T1)
Start another Work IDE and attach it to the first Work IDE. (W2)
In TP IDE: Create a new Delphi VCL application
Drop a TButton on the form
Double click the Button
Type Space Space "asdf"
Double click "asdf" (select it)
Switch to W1 and open tp\editkernel\ek_util.cpp
Set a breakpoint in EditKernel::QueryNotifyEvent() at the "pEvent->EventProc(..." line.
Switch to T1
Press DEL to delete the selected text
IDE stops at the break point
Press F7 (Step into)
W2 shows an access violation in browdbug.c
"if (ce->varLoc->h.frameFlags == FF_NONE)"
because "ce->varLoc == NULL" => AV



QC #: Date Reported: Area:
78575 9/16/2009 9:28:36 AM Debugger\Execution
Description: Steps:
On Windows 7, running under the debugger often causes the debugee to crash on shutdown.

This manifests when debugging the IDE in the IDE and in the simple DB application which is attached.
Load the attached project and run it.
Wait about 30 seconds and then shutdown.
Repeat if necessary.
Usually after 2 or 3 runs it crashes on shutdown.

QC #: Date Reported: Area:
  8/24/2009 4:50:05 PM Debugger\Remote Debugging
Description: Steps:
loading remote symbol file on delphi side is failing. No debug info is found for executable even when the .rsm file is in the same directory. Open up attached project in Rad Studio.
In project options, under Delphi Compiler | Linking set Debug Information to True and Include Remote Debug Symbols to true.
Hit OK.
Build project and save.
Copy the .rsm and the .exe file to a directory called c:\temp\remote
Open up a cmd window.
Navigate to the Rad Studio\7.0\bin directory
Launch the remote debugger using the following command:
rmtdbg140.exe -listen
In the IDE, select Run | Load Process.
Select Remote.
For Remote path, set it to: c:\temp\remote\RemoteDebugTest.exe
for Remote host, set it to: localhost
Click Load
Open up Modules view and notice the symbol file never got loaded.

QC #: Date Reported: Area:
  11/2/2009 5:09:28 PM Debugger\Inspector
Description: Steps:
Unable to terminate an app if there is an inspector open Create a new Delphi VCL app
F8 to step past the "Application.Initialize" call
Create a debug inspector for "Application"
Ctrl-F2 to try to terminate the app

EXP: app terminates, IDE leaves debug mode
ACT: nothing really happens, then you get an "Abort, Retry, Ignore" error

QC #: Date Reported: Area:
75209 6/24/2009 Debugger\CPU
Description: Steps:
[QC Short Description]
Memory operand size displayed incorrectly for PMOVSX... instructions

[QC Description]
In CPU view, the PMOVSX.. instructions are incorrectly displayed as having DQWORD sized memory operands.

Compare the disassembly with the specifications found in:
Intel� 64 and IA-32 Architectures Software Developer�s Manual, Volume 2B: Instruction Set Reference, N-Z
QC Entry 75209
Inspect the disassembly for the following code: procedure PMOVSXDebuggerBugs; var i64:uint64; i16:uint16; i32:uint32; asm //PMOVSX jmp @x //Disassembly shows "DQWORD PTR" pmovsxBW xmm2, i64 //is QWORD pmovsxBD xmm2, i32 //is DWORD pmovsxBQ xmm2, i16 //is WORD pmovsxWD xmm2, i64 //is QWORD pmovsxWQ xmm2, i32 //is DWORD pmovsxDQ xmm2, i64 //is QORD @x: end;

QC #: Date Reported: Area:
75211 6/24/2009 Debugger\CPU
Description: Steps:
[QC Short Description]
Wrong size shown for INSERTPS memory operand

[QC Description]
In disassembly, INSERTPS is displayed as having a DQWORD sized memory operand, although it actually is a DWORD.

Reference:
Intel� 64 and IA-32 Architectures Software Developer�s Manual; Volume 2A: Instruction Set Reference, A-M
QC Entry 75211
Inspect the disassembly for the following code: procedure INSERTPSDebuggerBug; var i32:longword; asm jmp @x //Disassembly shows "DQWORD PTR" insertps xmm0, i32, 7 //actually is DWORD @x: end;

QC #: Date Reported: Area:
73376 4/26/2009 Debugger\CPU
Description: Steps:
[QC Short Description]
Disassembly of the CVTSD2SS has a typo

[QC Description]
There's a typo in the disassembly of the CVTSD2SS instruction:
The disassembled instruction reads "cvtSS2ss" instead of "cvtSD2ss"
QC Entry 73376
Add the following to a Delphi app and view in the debugger: asm cvtsd2ss xmm1, xmm2 //Disassembly: F20F5ACA cvtss2ss xmm1,xmm2 end;

QC #: Date Reported: Area:
73374 4/26/2009 Debugger\CPU
Description: Steps:
[QC Short Description]
Debugger shows PREFETCHT#/PREFETCHh with typo

[QC Description]
The PREFETCHh/prefetchT# (prefetcht0, prefetcht1, prefetcht2) instructions appear with a typo in the debugger:

The debugger displays "prefetch0"/1/2 instead of "prefetchT0"/1/2. (Note the "T" in the instruction name; the prefetchnta instruction is not affected.)

Reference:
Intel� 64 and IA-32 Architectures
Software Developer�s Manual
Volume 2B:
Instruction Set Reference, N-Z

See also:
https://forums.codegear.com/thread.jspa?threadID=16160
QC Entry 73374
Add the following to a delphi project and view in debugger: asm prefetcht0 [eax+512] //0F188800020000 prefetch0 byte ptr [eax+$00000200] prefetcht1 [eax+512] //0F189000020000 prefetch1 byte ptr [eax+$00000200] prefetcht2 [eax+512] //0F189800020000 prefetch2 byte ptr [eax+$00000200] end;

QC #: Date Reported: Area:
75208 6/24/2009 Debugger\CPU
Description: Steps:
[QC Short Description]
Memory operand size displayed incorrectly for PMOVZX.. instructions

[QC Description]
In CPU view, the PMOVZX.. instructions are incorrectly displayed as having DQWORD sized memory operands.

Compare the disassembly with the specifications found in:
Intel� 64 and IA-32 Architectures Software Developer�s Manual, Volume 2B: Instruction Set Reference, N-Z
QC Entry 75208
Look at the disassembly for the following code: procedure PMOVZXDebuggerBugs; var i64:uint64; i16:uint16; i32:uint32; asm //PMOVZX jmp @x //DISASSEMLY SHOWS "DQWORD PTR" FOR ALL OF THESE!! pmovzxbw xmm0, i64 //Is QWORD pmovzxbd xmm0, i32 //Is DWORD pmovzxwd xmm1, i64 //Is QWORD pmovzxbq xmm2, i16 //Is WORD pmovzxwq xmm0, i32 //Is DWORD pmovzxdq xmm1, i64 //Is QWORD @x: end;

QC #: Date Reported: Area:
  10/20/2009 8:58:08 AM Debugger\Debugger UI
Description: Steps:
Having duplicate external viewer visualizers where both return "AllDescendants=True" causes duplicate menu items to appear when showing the visualizer menu Uninstall the samplevisualizers140.bpl package
Take the attached source, add it to a package and install the package
Open attached Project1
F8 4 times to step the "end."
Add a watch on "SL"
In the watch view. click the Visualizer glyph

EXP: The menu has three items in it (two "TStrings" items and one "TStringList" item)
ACT: The menu has five items in it -- the two "TStrings" items are each shown twice

QC #: Date Reported: Area:
  10/23/2009 1:51:04 PM Debugger\Debugger UI
Description: Steps:
If a TStringList instance gets freed while you have the string list visualizer open for it, the visualizer will start throwing "List index out of bounds" errors.

A couple of AIR reports are showing this: 78852, 78459
Create a console app with this code:

program Project3;

{$APPTYPE CONSOLE}

uses
SysUtils, Classes;

var
SL: TStringList;

begin
try
SL := TStringList.Create;
SL.Add('one');
SL.Free; //BP here
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

Set a BP on the "SL.Free" line
Run to hit the BP
Watch "SL"
Click the visualizer glyph to open the string list visualizer
F8 to step over the "SL.Free" line
Click in the visualizer to refresh it

List index out of bounds!

QC #: Date Reported: Area:
  9/14/2009 2:09:46 PM Debugger\Debugger UI
Description: Steps:
For Local Variables View, Watch List View, Evaluator Tooltips and the Evaluate\Modify dialog, if there is only one external viewer visualizer installed for a given variable, clicking the visualizer glyph should show that visualizer without having to select a menu item. The menu should only be shown if there is more than one visualizer installed for the variable Look at a TStringList in the Watch, Locals, Eval/Modify dialog and Eval tooltip. Click the visualizer glyph

EXP: The default TStringList visualizer should be shown
ACT: A menu with one item is shown

QC #: Date Reported: Area:
  8/31/2009 1:33:36 PM Debugger\Evaluator ToolTips
Description: Steps:
The visualizer glyph in the evaluator tooltip is cut off at the top Create an app that uses a TStringList instance
Debug it, and hover the mouse over the TStringList instance
Note that the glyph that indicates the presence on an external visualizer is cut off ot the top
See attached screenshot

QC #: Date Reported: Area:
77226 8/31/2009 AddOn\Interbase components
Description: Steps:
[QC Short Description]
IBX Not reporting correct Interbase Error Number

[QC Description]
I think I have run into a bug in the latest version of IBX that came
with Delphi 2010. IBX is returning a different error code under a
specific situation than it used to in D2009

Basic details; I was creating a trigger, and the trigger purposely was
referencing an invalid column in the database. Under D2009, IBX
properly reported a -206 error (column not found error). Now under
D2010 it reports 66 (Use Open for Select Statement).

I think I have found the change in IBX that caused this. It may have
other side effects on other IB errors as well..(not sure how bad this
actually is - for me its bad though)

In IBSql.pas
TIBSQL.Prepare;
...
if Assigned(Encoding) then
bt := Encoding.GetBytes(FProcessedSQL.Text + #0)
else
bt := BytesOf(AnsiString(FProcessedSQL.Text) + #0);
try
Call(FGDSLibrary.isc_dsql_prepare(StatusVector, TRHandle,
@FHandle, 0, PByte(bt), Database.SQLDialect, nil), True);
except
SetLength(bt, 0);
end;

As you can see, the call to isc_dsql_prepare, which generates the
proper interbase error (-206), when it raises this exception, it gets
gobbled up by the try/except which sets the length of the bt buffer to
0. I really think this should also re-raise the exception generated by
isc_dsql_prepare. The older IBX code does not have this try/except, so
the interbase exception -206, makes it out to the outside callers.


If I am correct here, then I have a problem that I am going to have to
figure out a workaround for until a fix is made.
QC Entry 77226
Create an interbase table to a database: CREATE TABLE TESTTABLE ( FIELD1 INTEGER NOT NULL, FIELD2 INTEGER NOT NULL); Now, Using IBX components, IBDatabase, IBTransaction, IBQuery, attempt to execute the following DDL query: CREATE TRIGGER TESTTRIGGER FOR TESTTABLE ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF ((NEW.SEQ IS NULL) OR (NEW.SEQ = 0)) THEN begin /* Do something dumb just for illustation*/ new.seq = 100; end; END When executing this DDL query, IBX should report a -206 column not found error. But it just generates a 66 (use Open for a Select Statement)

QC #: Date Reported: Area:
77524 9/8/2009 AddOn\Interbase components
Description: Steps:
[QC Short Description]
IBX Not handling new data types in D2010

[QC Description]
I have ran into an area where IBX is reporting a "Unsupported Feature". This bug is similar to bug #77478, but just in a different area

In IBQuery.pas -
procedure TIBQuery.SetParams;

There is a case statement to deal with all the different Param Datatypes. It fails to check for ftShortInt and raises an Unsupported feature exception.

It appears that the IBx code should be checked everywhere it is looking at field data types to ensure that they account for any new types in D2010.

SQLParams[i].IsNull := True
else begin
SQLParams[i].IsNull := False;
>>>>> case Params[i].DataType of
ftBytes:
begin
...
QC Entry 77524
 

QC #: Date Reported: Area:
77478 9/8/2009 AddOn\Interbase components
Description: Steps:
[QC Short Description]
IBX: TIBStoredProc not working with WideString-Param in D2010

[QC Description]
Hello,
I just installed Delphi 2010. In my projects I am using TIBStoredProc with ExecProc. The IB-Database uses "UNICODE_FSS".
When a Param is "WideString" an exception comes up (ibxeNotSupported).

I think it is a problem of "TIBStoredProc.SetParams". WideString is missing in the case block.

--

procedure TIBStoredProc.SetParams;
var
i : integer;
j: integer;
begin
...
case Params[j].DataType of
ftString, ftFixedChar: // <--- WideString missing
...
QC Entry 77478
TGUIFulcrumBugsSuite.Zombie.DB.Test.exe connection=ibconnection_utf8 -s:Test

QC #: Date Reported: Area:
68913 11/13/2008 AddOn\IntraWeb
Description: Steps:
[QC Short Description]
IntraWeb 10.0.6 fails to handle MBCS string(Japanese etc...)

[QC Description]
IntraWeb 10.0.6 (Test Release Version) fails to handle MBCS.

Pleasse see Steps and attached screenshots.

[Version 10.0.6]
http://downloads.atozed.com/intraweb/iw10.0.6.exe
QC Entry 68913
1. intall VCL for the Web Verion 10.0.6 http://downloads.atozed.com/intraweb/iw10.0.6.exe 2. create VCL for the Web application with Standalone mode 3. add a IWEdit, a IWLabel and a IWButton on the form 4. add OnClick event handler of IWButton as below procedure TIWForm1.IWButton1Click(Sender: TObject); begin IWLabel1.Caption := IWEdit1.Text; end; 5. build and run it 6. input Japanese Kanji characters as attached screenshot, 'before.jpg' 7. click Button 8. the Japanese Kanji characters are corrupted as attached screenshot, 'after.jpg'

QC #: Date Reported: Area:
76849 8/19/2009 Internet\CGI Application
Description: Steps:
[QC Short Description]
Raw POST data not available in TWebRequest

[QC Description]
When a POST request is set to a WebBroker-based CGI application, the raw submitted content is not present in the TWebRequest.RawContent property.

The data is available at the ContentFields property.
QC Entry 76849
1. Extract the attached project. 2. Open and build the project. 3. Configure IIS to execute the project as a CGI application 4. Using a web browser, navigate to the CGI application. 5. Click the Submit button on the shown form. Expected: The form to be submitted, and the submitted data to be shown next to the Raw data submitted label. Actual: The form submits, but the data only shows at the Parsed data submitted section.

QC #: Date Reported: Area:
  9/10/2009 2:42:30 PM Internet\XML\Data Binding
Description: Steps:
When Schemas contain a cycle, our Schema handling goes into an endless loop of opening the files [well, eventually - after 49 mins on my machine - it comes back].



NOTE: This was reported against SOAP for a WSDL that used the schema mentioned.
1. Create a Delphi VCL Form Application.
2. Then import the following Schema via the XML Data Binding wizard ( File|New|Other|Delphi|XML|XML Data Binding ):

> http://www.sagliknet.saglik.gov.tr/portal_pages/notlogin/bilisimciler/docs/msvs_semalari/coreschemas/infrastructureRoot.xsd


exp: Expect the Wizard to import the Schema and generate a language binding
act: The IDE locks up

(If you see a breakpoing on lin2 2511 of XMLDoc - on the call to 'DOMPersist.Load(FFileName)' you note that we're continuously loading a cycle of schemas: datatypes.xsd -> datatypes-base.xsd -> voc.xsd -> datatypes.xsd -> datatypes-base.xsd -> voc.xsd -> etc -> etc. )

QC #: Date Reported: Area:
75913 7/19/2009 Resourcing
Description: Steps:
[QC Short Description]
cgrc.exe cannot handle output file names with spaces

[QC Description]
The cgrc.exe resource compiler which invokes Microsoft's rc.exe does not handle spaces in the -fo command line option.

c:\codegear\rad studio\7.0\bin\cgrc.exe -dDEBUG -i"c:\codegear\rad studio\7.0\lib";"C:\Dokumente und Einstellungen\Andreas\Eigene Dateien\RAD
Studio\7.0\Imports";"c:\codegear\rad studio\7.0\Imports";"c:\codegear\rad studio\7.0\Lib\Indy10";"C:\Dokumente und Einstellungen\All
Users\Dokumente\RAD Studio\7.0\Dcp";"c:\codegear\rad studio\7.0\include" "My Test.rc" -fo"My Test.res"

[BRCC32 Fehler] My Test.rc(1): invalid usage; use RC /? for Help


This is what ProcessMonitor shows: You can clearly see the missing quotes for the >/fo My Test.res< option.

"c:\codegear\rad studio\7.0\bin\rc.exe" /dDEBUG=1 /fo My Test.res /i "c:\codegear\rad studio\7.0\lib";"C:\Dokumente und Einstellungen\Andreas\Eigene Dateien\RAD Studio\7.0\Imports";"c:\codegear\rad studio\7.0\Imports";"c:\codegear\rad studio\7.0\Lib\Indy10";"C:\Dokumente und Einstellungen\All Users\Dokumente\RAD Studio\7.0\Dcp";"c:\codegear\rad studio\7.0\include" "C:\Dokumente und Einstellungen\Andreas\Eigene Dateien\RAD Studio\Projekte\cgrcBug\tmp6.tmp"


Looks like somebody forgot to send the -fo option with quotes to the rc.exe.


This bug also affects Delphi/C++Builder 2009
QC Entry 75913
1. Open the attached project 2. Verify that the resource compiler is set to "Windows SDK Resource compiler" in the project options dialog 3. Build the project Expected: The project compiles Actual: cgrc.exe fails with [BRCC32 Fehler] My Test.rc(1): invalid usage; use RC /? for Help

QC #: Date Reported: Area:
  9/9/2009 9:57:12 AM ActiveX\IDE\Import ActiveX Control/Type Library
Description: Steps:
Keyboard shortcuts do not work in the Import type library wzard.

Missing FocusControl for various labels
Start IDE
Component | Import Component
Choose Delphi, Next
Choose Import a Type Library, Next
Choose any type libaray, Next
On this page, try to use any of the keyboard shortcuts for any of the labels

EXP: the associated edit control or combo box is focused
ACT: Nothing happens (it beeps at you)

Note also, that the "Generate Component Wrappers" checkbox has not shortcut assigned

QC #: Date Reported: Area:
74573 6/4/2009 Midas\TClientDataSet
Description: Steps:
[QC Short Description]
TClientDataSet filters still don't work with WideString fields

[QC Description]
The attached test case demonstrates additional failures when using WideString fields in a filter expression.

This is a follow-up to QC 4790 which was marked as fixed for Delphi 2009 update 3 but is still not completely fixed.


QC Entry 74573

Ref: 272886
TDBXWeaverBugsSuite.Native.Db.Test.exe connection=ibconnection -s:TestRaid_269928

-or-

Run the attached program.

- Press Test1

Expected: data should get filtered and only 1 record should be visible.
Actual: Type mismatch in expression.

- Press Test2

Expected: data should get filtered and 2 records should remain visible.
Actual: sometimes "Type mismatch in expression". Other times "Access violation at address 4DB1E8D1 in module 'midas.dll'. Read of address 00FC00BF."


- Press Test3

Expected: data should get filtered and 2 records should remain visible.
Actual: no records are visible.

Of course, all these worked with normal strings.

QC #: Date Reported: Area:
77733 9/15/2009 Midas\TClientDataSet
Description: Steps:
[QC Short Description]
TClientDataSet does not stream out "empty" TWideStringField values properly

[QC Description]
TClientDataSet does not preserve empty string values when streaming out TWideStringField data. The empty strings are incorrectly converted into null values causing the IsNull property to return the wrong value.
QC Entry 77733
TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_272894

-or-

Compile and run this test case:

program WideStringIsNullTest;

{$APPTYPE CONSOLE}

uses
DB, DBClient,
SysUtils;

procedure IsNullTest;
var
CDS: TClientDataSet;
begin
CDS := TClientDataSet.Create(nil);
try
CDS.FieldDefs.Add('F1', ftWideString, 10);
CDS.CreateDataSet;
CDS.AppendRecord(['']);
Assert(not CDS.Fields[0].IsNull, 'IsNull check before streaming');
CDS.Data := CDS.Data;
Assert(not CDS.Fields[0].IsNull, 'IsNull check AFTER streaming');
finally
CDS.Free;
end;
end;

begin
try
IsNullTest;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

QC #: Date Reported: Area:
78041 9/25/2009 Midas\TClientDataSet
Description: Steps:
[QC Short Description]
Using GotoBookmark with TClientDataset raise "Record not found" exception

[QC Description]
I encounter a situation using TClientDataSet.GotoBookmark in Delphi 2010 and a "Record Not Found" exception raised.

This problem doesn't happen to Delphi 2007 and Delphi 2009.

Please run the following test case to replay the problem.

I suspect the problem is related to Delphi 2010 midas.dll.

If you have Delphi 2007, 2009 and 2010 install on the machine, make sure you add midaslib into the probject file in order to test with correct version of midas library.

QC Entry 78041
TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_273067

-or-

Please run the following test case:

var D: TClientDataSet;
B: TBookmark;
i: Integer;
begin
D := TClientDataSet.Create(nil);
try
D.FieldDefs.Add('SWID', ftInteger);
D.CreateDataSet;

for i := 1 to 5 do
D.AppendRecord([i]);

// go to any record
D.RecNo := 3;

// obtain bookmark of current record
B := D.GetBookmark;

// modify current record
D.Edit;
D.FindField('SWID').AsInteger := 10;
D.Post;

// go to last bookmark will raise exception
D.GotoBookmark(B);
finally
D.Free;
end;
end;

QC #: Date Reported: Area:
  8/13/2009 3:31:59 PM Compiler
Description: Steps:
Visibility information for class attributes needs to be added to the compiler output:

class array: GestureCtrls.TCustomGestureListView.TGestureItemDataArray

class struct: GestureCtrls.TCustomGestureListView.TGestureItemData

class typedef (C++): GestureCtrls.TCustomGestureListView.TGestureItemDataArray

Visibility information is required to decide what attributes should be documented.
1. Create a unit, test.pas, with the following content:

unit test;

interface

type

Outer = class
private type
PrivateType = (A, B);
protected type
ProctedSet = set of PrivateType;
public type
PublicClass = class
end;
end;

implementation
end.


2. Generate .xml file for the above using dcc32 --doc test.pas


exp: Visibility attribute for all the types declared within 'Class' (i.e. PrivateType, ProtectedSet and PublicClass)
act: No visibility attribute

QC #: Date Reported: Area:
  9/2/2009 4:39:26 PM Compiler
Description: Steps:
Procflags are needed in Delphi compiler output ancestor information to treat messaging procedures as private for documentation.

The Delphi declaration of CMColorChanged looks like this in ComCtrls.pas:

procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;

The procflag (not the paramflag) set to message means that this procedure is involved with the
messaging process and must be exposed to external resources. That is why it's Delphi compiler
output looks like this:

<procedure name="CMColorChanged" visibility="public" procflags="message">

Now, I can use the procflag="message" to treat these messaging procedures as private. Allen
says that there is no reason to document any of these procedures. This would eliminate
empty method pages and links in the class methods pages. Unfortunately the procflags
attribute is not in the ancestor infomation for these procs. So I can't remove them from the
"Inherited members" pages.
1. Build ComComctrls.pas with --doc

2. Look for the <methodref name="CMColorChanged" ... > element

exp: Expect the procflags="message" attribute
act: It's missing. It only appears in the <method ...> element.

QC #: Date Reported: Area:
  8/13/2009 3:54:55 PM Compiler
Description: Steps:
Visibility information in the compiler output is wrong.

Many class members, like:

ComCtrls.TCustomListView.CMColorChanged

have a visibility attribute in the comiler output of public. This method is listed in the private section of the TCustomListView declaration in ComCtrls.pas.

Visibility is used by the documentation scripts to decide what class members should appear in the RAD Studio Help, populating the Help with thousands of empty pages for private members.
1. Create a unit, test.pas, with the following content:

unit test;

interface

uses Windows, Messages;

type
Outer = class
private
procedure CMColorChanged(var Message: TMessage); message $100;
end;

implementation

procedure Outer.CMColorChanged(var Message: TMessage);
begin
end;

end.


2. Generate XML from the above using the --doc option of DCC32

exp: CMColorChanged to be flagged as private
act: The XML generated reads:
<procedure name="CMColorChanged" visibility="public" procflags="message">

NOTE: The visibility is incorrectly marked as 'public'.

QC #: Date Reported: Area:
67276 9/28/2008 Compiler
Description: Steps:
[QC Short Description]
Error if you try to initialize an anonymous method when declared.

[QC Description]
If you try to initialize an anymous method where it is declared you get an error :-

[DCC Fatal Error] Unit39.pas(34): F2084 Internal Error: AV04A02FC9-W0000002C-1

If it's illegal it needs an error message, or if not, needs to compile properly.
QC Entry 67276
write the code: type TMyAnomMethod = reference to procedure; var b: TMyAnomMethod = procedure() begin end; then try to compile + you get an internal error. Same happens if you do something a bit more complex: type TMyAnomMethod = reference to procedure; TMyRecord = record anomMethod: TMyAnomMethod; end; var c: TMyRecord = (anomMethod: procedure() begin end); The same Internal error occurs.

QC #: Date Reported: Area:
  9/15/2009 12:25:25 PM Compiler
Description: Steps:
Delphi compiler XML output contains very little for variables that are functions. Here's an example:

Forms.pas:

Ctl3DDlgFramePaint: function(Window: HWnd; Msg, wParam, lParam: Longint): Longint stdcall = nil;

Forms.xml: (compiler output)

<variable name="Ctl3DDlgFramePaint" visibility="public" />
 

QC #: Date Reported: Area:
78182 9/29/2009 Compiler\Delphi
Description: Steps:
[QC Short Description]
"Compile All" and "Build All" commands are produced the different exe-file when using packages

Additional internal note by USc:
This is regression that happened between FT build 3478 (revision 22926) and 3494 (revision 23552)

[QC Description]
-> see steps
QC Entry 78182

(JJS: Expected in delivery after 14.0.3565.25148.2)
Steps by USc: - save the attached files from the dir "simplified" - dcc32 -B package1.dpk - dcc32 -B -LUrtl;package1 project1.dpr - execute project1.exe expected: the output is PASS actual: message box "...\project1.exe is no valid Win32-App" and output "Access denied" on the command line (messages translated from german) - dcc32 -M -LUrtl;package1 project1.dpr - execute project1.exe expected: the output is PASS actual: the output is PASS - save the attached files from the dir "original" - start Delphi 1) Open attached project group "Test_20090929" 2) Select Project1 as active project 3) Click "Project -> Build All" 4) Click "Run -> Run". See the results. (i got the message like "Unable to create process: <Path>\Project1.exe: is not valid Win32 application") 5) Click "Project -> Compile All" 6) Click "Run -> Run". See the results. (all is fine. Project1.exe is started as expected.)

QC #: Date Reported: Area:
  9/28/2009 2:52:47 PM Compiler\Delphi\TD Debug Info
Description: Steps:
Bad debug info produced when using units that use generics.

The problems are seen by just listing these units in a uses clause, even if the generic types are not used.

This was originally reported against D2009 and D2010 by Alex at AutomatedQA. It is preventing them from properly supporting both D2009 and D2010 with AQTime.
Attached are three projects all set to produce TD Debug info. No problems are seen in standardexe.exe

If you build and then tdump either controlexe.exe or problemexe.exe, you'll see problems.

See email thread copied into comments for more thorough description and discussion.

QC #: Date Reported: Area:
  9/10/2009 3:01:54 PM Compiler\Delphi\Code Generation/Optimization
Description: Steps:
The copiler generates wrong code if a package containing generic classes is mixed with code from normal RTL units.

CLARIFICATION:
- Using the trunk build (debug).
- No problmes on an older Weaver build (integration)
- No problems in any Tiburon version.
The attached archive contains a portion of a library (trimmed down a big) plus an test executable in the same groupproj.
The executable uses the package from the same group and imports a class: TList<T>. The written TList<T> is used in paralel with Delphi's GC.TList<T>.

This function:
procedure TestCrash();
var
List: Generics.Collections.TList<Integer>; // << COMMENT ME
gList: TList<Integer>;

begin
gList := TList<Integer>.Create();
end;

Generates an AV because in the call chain a virtual call fails (code-gen problem). If the suggested line is commented out (List: Generics.Collections.TList<Integer>; // << COMMENT ME) everything
works fine.

There are several places in which this effect produces problems - most notable in the original's code DUnit tests.

QC #: Date Reported: Area:
76667 8/13/2009 Compiler\Delphi\Execution
Description: Steps:
[QC Short Description]
Internal Compiler Error when generating header definition for a subset of an enumeration

[QC Description]
See steps.
QC Entry 76667
Compile the following code (dcc32 -JPHN qc76667.pas): // ----- unit qc76667; interface type TVegetable = (Aubergine, Zucchini, Tomato, Paprika, Onion); TRatatouille = set of TVegetable; // works TPeperonata = set of Tomato..Onion; // fails implementation end. // ----- Exp.: works Act.: Fatal: F2084 Internal error: GH1151

QC #: Date Reported: Area:
77285 9/2/2009 Compiler\Delphi\Interfaces
Description: Steps:
[QC Short Description]
TComponent interface functions "redirected" to TInterfacedObject when a class helper for TComponent (descendant) exists

[QC Description]
TComponent Interface functions like _AddRef or _Release are "redirected" to TInterfacedObject when a class helper for TComponent or a TComponent descendant exists.
This is regression from D2007, but it happened already in D2009. This issue can lead to unexpected behavior, because components are destroyed when the interfaces are released.

-> see steps


Original short description: Corrupted component interfaces
Original description:
I am running into a very strange bug with interfaces. Unfortunately it seems that i can only reproduce this on my product which is about 200000 lines of codes making impossible to supply a code for reproducing. I'll try to describe what happens in pseudo code bellow

Type
a = class(tcomponent)
b = class(a, IAnyInterface)

var
myobject: b;

implementation
in my code i a getinterface call on objects eg
myobject.getInterface(IAnyInterface, ivar)

The problem is that in function TObject.GetInterface(const IID: TGUID; out Obj): Boolean;

the statement
if Pointer(Obj) <> nil then IInterface(Obj)._AddRef;
Results to a call to TInterfacedObject._AddRef insteand of TComponent._AddRef. This behavior occurs only with 2010 while 2007 and 2009 work as expected.
This causes the object to be freed and crash the app.
My application dosen't work with d2010 while worked as expected with d2007 and d2009
QC Entry 77285
Steps by USc: - save the file at the end of the steps - dcc32 ClassHelperIntf.dpr - execute ClassHelperIntf.exe and see the output is "PASS" - dcc32 -DWITHCOMPONENTCLASSHELPER ClassHelperIntf.dpr - execute ClassHelperIntf.exe expected: output is PASS actual: output is FAIL #1 Additional test to "see" whats happening - start Delphi - open ClassHelperIntf.dpr - enable "Use debug .dcus" in the project options or compile with the RTL source - add WITHCOMPONENTCLASSHELPER as conditional define or remove the dot in line five - compile ClassHelperIntf.dpr - start the app - step through the following lines "FooComponent.GetInterface(IFooInterface, I)" "I := nil;" and see TInterfacedObject._AddRef and TInterfacedObject._Release are executed program ClassHelperIntf; {$APPTYPE CONSOLE} {.$DEFINE WITHCOMPONENTCLASSHELPER} uses Classes; type IFooInterface = interface ['{68A52E11-7139-4B66-AB44-21AF8E85B81A}'] end; TFooComponent = class(TComponent, IFooInterface) destructor Destroy; override; end; {$IFDEF WITHCOMPONENTCLASSHELPER} TBarComponentHelper = class helper for TComponent end; {$ENDIF WITHCOMPONENTCLASSHELPER} var FooComponent: TFooComponent; I: IFooInterface; ComponentAlive: Boolean; destructor TFooComponent.Destroy; begin ComponentAlive := False; inherited Destroy; end; begin FooComponent := TFooComponent.Create(nil); try if FooComponent.GetInterface(IFooInterface, I) then begin ComponentAlive := True; I := nil; if ComponentAlive then WriteLn('PASS') else WriteLn('FAIL #1'); end else WriteLn('FAIL #2'); except FooComponent.Free; end; end.

QC #: Date Reported: Area:
78326 10/2/2009 Compiler\Delphi\Generics
Description: Steps:
REGRESSION

[QC Short Description]
Codegen generates incorrect code for Generics in some cases with optimization enabled

Additional internal note by USc:
This is regression that happened between FT build 3417 (revision 21151) and 3449 (revision 21988)

[QC Description]
see steps.

in this case, TMyArray<T>.GetItem will be optimized as:
{function TMyArray<Single>.GetItem}
Unit2.pas.67: begin
004A7058 51 push ecx
Unit2.pas.68: Result := Fdata[x];
004A7059 8B00 mov eax,[eax]
004A705B 8B0490 mov eax,[eax+edx*4]
004A705E 894500 mov [ebp+$00],eax
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unit2.pas.69: end;
004A7061 D94500 fld dword ptr [ebp+$00]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
004A7064 5A pop edx
004A7065 C3 ret

it should be [ESP], not [EBP].
QC Entry 78326
Steps by USc (turned the original steps into complete test case): - save the attachment or the following code as QC78326.dpr - dcc32 QC78326.dpr - execute QC78326.exe expected: PASS actual: FAIL - Exception Error Additional notes: - works with optimization disabled - also doesn't work for exam. with Real, Double, Extended - work for exam. with Integer ("foo[0] := 0.1" needs an adjustment then) program QC78326; {$APPTYPE CONSOLE} {.$OPTIMIZATION OFF} uses SysUtils; type TMyArray<T> = record private fdata: array of T; FCount: Cardinal; function GetItem(X: Cardinal): T; procedure SetItem(X: Cardinal; const Value: T); procedure SetCount(const Value: Cardinal); public property Item[X: Cardinal]: T read GetItem write SetItem; default; property Count: Cardinal read FCount write SetCount; end; function TMyArray<T>.GetItem(X: Cardinal): T; begin Result := fdata[x]; end; procedure TMyArray<T>.SetCount(const Value: Cardinal); begin FCount := Value; SetLength(fdata, Value); end; procedure TMyArray<T>.SetItem(X: Cardinal; const Value: T); begin fdata[X] := Value; end; procedure TestSingleGenericRecord; var foo: TMyArray<Single>; begin foo.Count := 10; foo[0] := 0.1; FloatToStr(foo[0]); end; function ReturnString: string; begin Result := ''; end; begin try TestSingleGenericRecord; if ReturnString = '' then WriteLn('PASS') else WriteLn('FAIL'); except on E: Exception do begin WriteLn('FAIL - Exception Error'); WriteLn(' ClassName=', E.Classname); WriteLn(' Message=', E.Message); end; end; end. ---- Original steps: 1. define a generic record TMyArray<T>: TMyArray<T> = record private fdata: array of T; FCount: Cardinal; function GetItem(X: Cardinal): T; procedure SetItem(X: Cardinal; const Value: T); procedure SetCount(const Value: Cardinal); public property Item[X: Cardinal]: T read GetItem write SetItem; default; property Count: Cardinal read FCount write SetCount; end; function TMyArray<T>.GetItem(X: Cardinal): T; begin Result := fdata[x]; end; procedure TMyArray<T>.SetCount(const Value: Cardinal); begin FCount := Value; SetLength(fdata, Value); end; procedure TMyArray<T>.SetItem(X: Cardinal; const Value: T); begin fdata[X] := Value; end; 2. use a TMyArray<Single> var(must be Single): var foo: TMyArray<Single>; 3. call it's GetItem: foo.Count := 10; foo[0] := 0.1; FloatToStr(foo[0]); * and then a procedure somewhere else will cause an error of memory addressing.

QC #: Date Reported: Area:
78433 10/7/2009 Compiler\Delphi\Generics
Description: Steps:
[QC Short Description]
Generic Class with two generic types destroy previous call EBP

[QC Description]
If i define a generic class with two generic types like TClass<A,R> and i define a function GetSomething(const I: R):A this function will destroy loose the stack frame of the previous call.

See the example that is a console application.
QC Entry 78433

(JJS: Changing the calling convention for TGenClass<>.GetItemByReference to stdcall, pascal, or cdecl seems to workaround the problem.)
Run the following program

See...

FAIL #1 - Value of C lost
FAIL #2 - ebp lost

program BTS273211;
{$APPTYPE CONSOLE}

uses
SysUtils,
Generics.Collections;

var
Counter: Integer = 0;

type
TClassName = class
end;

TClassNameRef = class(TClassName)
private
Fref: TClassName;
published
public
property Ref: TClassName read Fref write Fref;
end;

TGenClass<R: TClassName; T: TClassNameRef> = class(TList<T>)
private
function GetItemByReference(const Index: R): T;
public
property ItemByReference[const Index: R]:T read GetItemByReference;
end;

TGenClassName = class(TGenClass<TClassName, TClassNameRef>);

function TGenClass<R, T>.GetItemByReference(const Index: R): T;
var
j: Integer;
a: TClassNameRef;
r: TClassName;
_t: T;
begin
_t:= default(T);
r:= Index;
for j := 0 to Count - 1 do
begin
_t:= Items[j];
a:= _t;
if a.Ref = r then
Exit(_t);
end;
Result:= _t;
end;

procedure DoError;
begin
with TGenClassName.Create do
try
Add(TClassNameRef.Create);
Items[0].Ref:= Items[0];
ItemByReference[Items[0]].Ref:= nil;
Items[0].Free;
Delete(0);
finally
Free;
end;
end;

procedure Use(var Value);
begin
if Integer(Value) = 42 then
Inc(Counter)
else
WriteLn('FAIL #1 - Value of C lost');
end;

procedure DoMegaError;
var
b: Integer;
a: Integer;
C: Integer;
begin
{ Save ebp }
asm
mov a, ebp
end;

c:= 42;
DoError;

{ Save ebp again }
asm
mov b, ebp
end;

Use(C);

if a=b then
Inc(Counter)
else
WriteLn('FAIL #2 - ebp lost');
end;


begin
try
DoMegaError;
if Counter = 2 then
WriteLn('PASS')
else
WriteLn('FAIL - Counter=', Counter);
except
on E: Exception do
begin
WriteLn('FAIL - Exception Error');
WriteLn(' ClassName=', E.ClassName);
WriteLn(' Message=', E.Message);
end;
end;
end.

QC #: Date Reported: Area:
  9/24/2009 12:48:36 PM Compiler\Delphi\Generics
Description: Steps:
REGRESSION FROM D2009

Including JFEnumCrash.pas (attached to report) in an VCL application and compiling will cause an Internal Compiler Error - L1737


Note may be related to RAID # 272333
1. New VCL Forms Application
2. Add the unit JFEnumCrash.pas
3. Compile
exp: Project will compile and show a blank form
act: Receive - F2084 Internal Error: L1737

If you undefine OptimizeNames in the unit it will work past the error.

Note- Customer mentioned that this unit will compile fine in Rad Studio 2009 Update 3.

QC #: Date Reported: Area:
78563 10/12/2009 Compiler\Delphi\Generics
Description: Steps:
[QC Short Description]
Wrong InstanceSize using derived generic classes

[QC Description]
Summary :

- take a generic class containing a field of the generic type
- derive the generic class to another generic class
- classes built from the derived class have the wrong instancesize.

To reproduce, see attached code, the compiler computes the wrong instance size on the derived class TClassBugInstanceSize.

Needless to say, this bug is quite critical...

QC Entry 78563
Steps by USc: - save the two console applications in the steps (Project1.dpr is the original test case) - dcc32 Project1.dpr - execute Project1.exe expected: output is 4008 4008 actual: output is 4008 12 - dcc32 GenericInstanceSizeTest.dpr - execute GenericInstanceSizeTest.exe expected: output is PASS actual: output is FAIL #2 FAIL #6 Additional note: the sizes are based on the default compiler options/are for $A8 and i386/Win32 //--- Original test case --- program Project1; {$APPTYPE CONSOLE} type TClass1<T> = class(TObject) FField : T; end; TClass2<T> = class(TClass1<T>) end; TData = record Data : ARRAY [1..1000] OF Cardinal; // just a sample... end; TClassOkInstanceSize = class(TClass1<TData>); TClassBugInstanceSize = class(TClass2<TData>); begin Writeln(TClassOkInstanceSize.InstanceSize); // Returns 4008 Writeln(TClassBugInstanceSize.InstanceSize); // Ouch, should be the same as previously but returns 12, obviously no room for ffield !!! end. //--- test case by USc --- program GenericInstanceSizeTest; {$APPTYPE CONSOLE} type TClass1<T> = class(TObject) FField: T; function Class1GetSizeOfT: Integer; end; TClass2<T> = class(TClass1<T>) function Class2GetSizeOfT: Integer; end; function TClass1<T>.Class1GetSizeOfT: Integer; begin Result := SizeOf(T); end; function TClass2<T>.Class2GetSizeOfT: Integer; begin Result := SizeOf(T); end; type TData = record Data: array [1..1000] of Cardinal; // just a sample... end; TClassOkInstanceSize = class(TClass1<TData>); TClassBugInstanceSize = class(TClass2<TData>); TClass1Int64 = class(TClass1<Int64>); TClass2Int64 = class(TClass2<Int64>); { these constants may need an adjustment depending on the alignment and architecture (the current values are for $A8 and i386/Win32) } const ExpectedClass1DataInstanceSize = 4008; ExpectedClass2DataInstanceSize = 4008; ExpectedClass1Int64InstanceSize = 20; ExpectedClass2Int64InstanceSize = 20; var Class2Data: TClassBugInstanceSize; Class2Int64: TClass2Int64; FailCounter: Integer; begin FailCounter := 0; if TClassOkInstanceSize.InstanceSize <> ExpectedClass1DataInstanceSize then begin WriteLn('FAIL #1'); Inc(FailCounter); end; if TClassBugInstanceSize.InstanceSize <> ExpectedClass2DataInstanceSize then begin WriteLn('FAIL #2'); Inc(FailCounter); end; Class2Data := TClassBugInstanceSize.Create; try if Class2Data.Class1GetSizeOfT <> SizeOf(TData) then begin WriteLn('FAIL #3'); Inc(FailCounter); end; if Class2Data.Class2GetSizeOfT <> SizeOf(TData) then begin WriteLn('FAIL #4'); Inc(FailCounter); end; finally Class2Data.Free; end; if TClass1Int64.InstanceSize <> ExpectedClass1Int64InstanceSize then begin WriteLn('FAIL #5'); Inc(FailCounter); end; if TClass2Int64.InstanceSize <> ExpectedClass2Int64InstanceSize then begin WriteLn('FAIL #6'); Inc(FailCounter); end; Class2Int64 := TClass2Int64.Create; try if Class2Int64.Class1GetSizeOfT <> SizeOf(Int64) then begin WriteLn('FAIL #7'); Inc(FailCounter); end; if Class2Int64.Class2GetSizeOfT <> SizeOf(Int64) then begin WriteLn('FAIL #8'); Inc(FailCounter); end; finally Class2Int64.Free; end; if FailCounter = 0 then WriteLn('PASS'); end.

QC #: Date Reported: Area:
77121 8/28/2009 Compiler\Delphi\Generics
Description: Steps:
[QC Short Description]
Internal Error: I12307 w/ Generic Descendants in Separate Units and {$INLINE AUTO}

[QC Description]
The attached project demonstrates the error.

The setup:

Unit2 contains TBar, a non-Generic descendant from TObjectList<T>. (TObjectList<TObject> in particular)

type
TBar = class(TObjectList<TObject>);

Unit1 uses Unit2 and attempts to create an instance of TBar in Button2's OnClick handler.

var
Bar: TBar;

begin
{$INLINE AUTO}
Bar := TBar.Create;
Bar.Free;
end;

Attempting to compile the project will trigger the I12307 on the Bar := TBar.Create; line. Removing (or disabling) the $INLINE AUTO directive will allow the file to compile successfully.

It appars to only affect the call site itself, because setting Inline to Auto in the project options also causes the compiler error.

If the class declaration is in the same unit, the error is not thrown, as can be seen by TFoo and its corresponding usage in the demo project.
QC Entry 77121
Attempt to compile the attached project. Steps by USc: - save the following three files - dcc32 --inline:auto GenericsCodeGenTest.dpr expected: compiles actual: GenericsCodeGenTest.dpr(9) Error: E2010 Incompatible types: 'TObjectList<System.TObject>' and 'Class reference' GenericsCodeGenTest.dpr(11) Fatal: F2084 Internal Error: I12307 Note the E2010 error disappears if you remove the "FOwnsObjects := AOwnsObjects;" in "TObjectList<T>.Create" in Generics.Collections.Simplified.pas //--- GenericsCodeGenTest.dpr --- program GenericsCodeGenTest; {$APPTYPE CONSOLE} uses BarUnit in 'BarUnit.pas'; begin TBar.Create; WriteLn('PASS'); end. //--- BarUnit.pas --- unit BarUnit; interface uses Generics.Collections.Simplified; type TBar = class(TObjectList<TObject>); implementation end. //--- Generics.Collections.Simplified.pas --- unit Generics.Collections.Simplified; interface type TObjectList<T: class> = class(TObject) private FOwnsObjects: Boolean; public constructor Create(AOwnsObjects: Boolean = True); end; implementation constructor TObjectList<T>.Create(AOwnsObjects: Boolean); begin inherited Create; FOwnsObjects := AOwnsObjects; end; end.

QC #: Date Reported: Area:
77670 9/14/2009 Compiler\Delphi\Anonymous Methods
Description: Steps:
[QC Short Description]
overloaded method causes Internal Error: E2896

(JJS: Not seen until rev. 24844 is delivered)

[QC Description]
Advanced record with overloaded function/procedure, where one of them has an anonymous method parameter causes F2084 Internal Error: E2896.

Here is a code snippet that causes the F2084 Internal Error: E2896:

type
TF1 = reference to function (P: Pointer; AI: Integer): Cardinal;

type
TRec = record
var FP: Pointer;
var FI: Integer;
function Proc (AInteger: Integer): Boolean; overload;
function Proc (const AF: TF1): Boolean; overload;
end;

function TRec.Proc (AInteger: Integer): Boolean;

begin
Result := AInteger = 1;
end;

function TRec.Proc
(const AF: TF1): Boolean;

var
I: Integer;

begin
I := AF (FP, FI);
Result := I = 1;
end;

procedure TForm1.Button1Click
( Sender: TObject);

var
Rec: TRec;
Bool: Boolean;

begin
Rec.FP := @Rec;
Rec.FI := 2;
Bool := Rec.Proc (function (P: Pointer; AI: Integer): Cardinal
begin
if P = Nil then
Result := 1
else
Result := AI;
end);
end;
QC Entry 77670
Steps by USc including the code from the description slightly completed: - save the following code as AnonMethodFailure.dpr - dcc32 AnonMethodFailure.dpr expected: it compiles actual: D2009 U#3: AnonMethodFailure.dpr(42) Fatal: F2084 Internal Error: E2896 D2010 RTM: AnonMethodFailure.dpr(42) Fatal: F2084 Internal Error: E3018 program AnonMethodFailure; {$APPTYPE CONSOLE} type TF1 = reference to function(P: Pointer; AI: Integer): Cardinal; type TRec = record var FP: Pointer; var FI: Integer; function Proc(AInteger: Integer): Boolean; overload; function Proc(const AF: TF1): Boolean; overload; end; function TRec.Proc(AInteger: Integer): Boolean; begin Result := AInteger = 1; end; function TRec.Proc(const AF: TF1): Boolean; var I: Integer; begin I := AF(FP, FI); Result := I = 1; end; procedure TestProc; var Rec: TRec; Bool: Boolean; begin Rec.FP := @Rec; Rec.FI := 2; Bool := Rec.Proc(function(P: Pointer; AI: Integer): Cardinal begin if P = nil then Result := 1 else Result := AI; end); end; begin WriteLn('PASS'); end.

QC #: Date Reported: Area:
  10/14/2009 11:36:48 AM Compiler\Delphi\RTTI
Description: Steps:
REGRESSION

TRttiMethod.GetParameters now describes "out" parameters as "var" parameters.

Seen when verifying the fix for RAID 273062.
Compile and run the attached application.

See the following program output indicating failure.


FAIL #12 - S=var o
FAIL Counter=12

See that in place of the expected value "out o", "var o" is being returned.


program BTS273062;

{ RTTI reports const parameters wrong }

{$APPTYPE CONSOLE}

uses
SysUtils,
RTTI;

var
Counter: Integer = 0;

type
IBar = interface
['{FF5F7264-25EB-4C22-B6BE-922525A76D57}']
end;

TFoo = class
procedure ParamConst(const c);
procedure ParamVar(var v);
procedure ParamOut(out o);
procedure ParamConstIntf(const i: IBar);
end;

{ TFoo }

procedure TFoo.ParamConst(const c);
begin

end;

procedure TFoo.ParamConstIntf(const i: IBar);
begin

end;

procedure TFoo.ParamOut(out o);
begin

end;

procedure TFoo.ParamVar(var v);
begin

end;

procedure DoTest;
var
ctx: TRttiContext;
S: String;
I: Integer;
begin
...


//ok
S := ctx.GetType(TypeInfo(TFoo)).GetDeclaredMethods[2].GetParameters[0].ToString;
if S = 'out o' then
Inc(Counter)
else
WriteLn('FAIL #12 - S=', S);

....

QC #: Date Reported: Area:
77898 9/21/2009 Compiler\Delphi\RTTI
Description: Steps:
[QC Short Description]
Invoke fails with Variant stored in a TValue as parameter

[QC Description]
TRttiMethod.Invoke fails to call the method correctly.

The apparent cause it that variant is not getting loaded in the
register correctly.

Looking in Invoke() inside of RTTI.pas you will find PutArg() which
requires the datasize to be returned or it places the item on the stack.

TValue.DataSize returns 0 if a variant is stored in it.

var
vTest : Variant;
vTest2 : TValue;
begin
vTest := '123';
vTest2 := TValue.From<Variant>(vTest);
Writeln(SizeOf(Variant));
Writeln(vTest2.DataSize);
end.

Changing function TValue.GetDataSize: Integer;
to return 4 for a variant allows this test case to work.

....
tkMethod: Exit(8);
tkInt64: Exit(8);
tkVariant : Exit(4);
else
Exit(0);
end;
....

I don't believe this would be correct however, I think that
DataSize may need to return the size of the data correctly,
which would mean changing the TValue.GetDataSize from:

...
tkArray, tkRecord, tkString : Exit(IValueData(FData.FHeapData).GetDataSize);
...

tkArray, tkRecord, tkString,tkVariant : Exit(IValueData(FData.FHeapData).GetDataSize);

Doing this, however would require changes on the Invoke() side
to pass the parameters correctly.
QC Entry 77898
Compile and run the attached application below.

See the following program output indicating failure.

FAIL #1 - Args[0].DataSize is Zero
FAIL - Exception Error
ClassName=EAccessViolation
Message=Access violation at address 00406F22 in module 'BTS272964.exe'. Write of address 00000000


program BTS272964;

{ Invoke fails with Variant stored in a TValue as parameter }

{$APPTYPE CONSOLE}

uses
Sysutils,
Classes,
TypInfo,
Rtti;

var
Counter: Integer = 0;

type
TBookQuery = class(TObject)
public
function FindBook(ISBN : Variant;var Title : String) : Boolean;
end;

function TBookQuery.FindBook(ISBN : Variant;var Title : String) : Boolean;
begin
result := false;
title := 'This line causes an A/V'; //#1//
end;

procedure DoTest;
var
ctx : TRttiContext;
BQ : TBookQuery;
Args : Array Of TValue;
FindBook : TRttiMethod;
RetSize: Integer;
RetVal: Boolean;
begin
ctx := TRttiContext.Create;
BQ := TBookQuery.Create;

try
FindBook := Ctx.GetType(TBookQuery.ClassInfo).GetMethod('FindBook');

SetLength(args,2);
Args[0] := TValue.From<Variant>('123');

RetSize := Args[0].DataSize; // Note Zero!!!
if RetSize = 0 then
WriteLn('FAIL #1 - Args[0].DataSize is Zero')
else
Inc(Counter);

Args[1] := '';

RetVal := FindBook.Invoke(BQ,Args).AsBoolean;
if not RetVal then
Inc(Counter)
else
WriteLn('FAIL #2 - Expected result not found');

finally
BQ.Free;
ctx.Free;
end;
end;

begin
try
DoTest;
if Counter = 2 then
WriteLn('PASS')
else
WriteLn('FAIL Counter=', Counter);
except
on e : Exception do
begin
writeln('FAIL - Exception Error');
WriteLn(' ClassName=', E.ClassName);
WriteLn(' Message=', E.Message);
end;
end;
end.

QC #: Date Reported: Area:
78125 9/27/2009 Compiler\Delphi\RTTI
Description: Steps:
[QC Short Description]
RTTI reports const parameters wrong

[QC Description]
- untyped consts parameters are reported as var parameters
- typed const parameters are reported without the "const"

While this doesn't make a difference in regards to how parameters are passed in, it does make a difference if RTTI information is used to dynamically implement a method or interface.
QC Entry 78125
Compile and run the attached program whose fragments are seen below.

FAIL #10 S=var c
FAIL #13 S=i: IBar
FAIL Counter=11

See that typed and untyped const parameters are not represented corrected.


program BTS273062;

{$APPTYPE CONSOLE}

uses
SysUtils,
RTTI;

var
Counter: Integer = 0;

type
IBar = interface
['{FF5F7264-25EB-4C22-B6BE-922525A76D57}']
end;

TFoo = class
procedure ParamConst(const c);
procedure ParamVar(var v);
procedure ParamOut(out o);
procedure ParamConstIntf(const i: IBar);
end;
...

procedure DoTest;
var
ctx: TRttiContext;
S: String;
I: Integer;
begin
I := Length(ctx.GetType(TypeInfo(TFoo)).GetDeclaredMethods);
if I = 4 then
Inc(Counter)
else
WriteLn('FAIL #1');
...

//error, returns 'var c'
S := ctx.GetType(TypeInfo(TFoo)).GetDeclaredMethods[0].GetParameters[0].ToString;
if S = 'const c' then
Inc(Counter)
else
WriteLn('FAIL #10 S=', S);


//ok
S := ctx.GetType(TypeInfo(TFoo)).GetDeclaredMethods[1].GetParameters[0].ToString;
if S = 'var v' then
Inc(Counter)
else
WriteLn('FAIL #11');


//ok
S := ctx.GetType(TypeInfo(TFoo)).GetDeclaredMethods[2].GetParameters[0].ToString;
if S = 'out o' then
Inc(Counter)
else
WriteLn('FAIL #12');


//error, returns 'i: IBar'
S := ctx.GetType(TypeInfo(TFoo)).GetDeclaredMethods[3].GetParameters[0].ToString;
if S = 'const i: IBar' then
Inc(Counter)
else
WriteLn('FAIL #13 S=', S);
end;

...

QC #: Date Reported: Area:
77950 9/22/2009 Compiler\Delphi\RTTI\Custom attributes
Description: Steps:
[QC Short Description]
Internal compiler error with Attributes and set types

[QC Description]
TCustomAttribute descendants cannot take Set types as parameters. Attempting to do so results in an internal compiler error :

[DCC Fatal Error] Unit1.pas(29): F2084 Internal Error: TI2357
QC Entry 77950

(JJS: Expected in delivery after 14.0.3565.25148.2)
Compile the attached application below.

See the following compile-time error indicating failure.

Fatal: F2084 Internal Error: TI2357


program BTS273022;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
TTestEnum = (enOne,enTwo);
TTestSet = set of TTestEnum;

TSimpleAttribute = class(TCustomAttribute)
private
FSet : TTestSet;
public
constructor Create(const AValue : TTestSet);
property SetTest : TTestSet read FSet;
end;

[TSimpleAttribute([enOne,enTwo])]
TForm1 = class
end;

var
Form1: TForm1;

begin
WriteLn('PASS'); { PASS on compile }
end.

QC #: Date Reported: Area:
78124 9/27/2009 RTL\Delphi\WinAPI
Description: Steps:
[QC Short Description]
DirectShow9 IKSControl declared wrong

[QC Description]
The IksControl interface in DirectShow9.pas needs to be changed to using functions:

Currently:
IKsControl = interface(IUnknown)
['{28F54685-06FD-11D2-B27A-00A0C9223196}']
(*** IKsControl methods ***)
procedure KsProperty(Property_: PKSPROPERTY; PropertyLength: ULONG; PropertyData: Pointer;
DataLength: ULONG; out BytesReturned: ULONG); stdcall;
procedure KsMethod(Method: PKSMETHOD; MethodLength: ULONG; MethodData: Pointer;
DataLength: ULONG; out BytesReturned: ULONG); stdcall;
procedure KsEvent({OPTIONAL}Event: PKSEVENT; EventLength: ULONG; EventData: Pointer;
DataLength: ULONG; out BytesReturned: ULONG); stdcall;
end;

Should be:
IKsControl = interface(IUnknown)
['{28F54685-06FD-11D2-B27A-00A0C9223196}']
(*** IKsControl methods ***)
function KsProperty(Property_: PKSPROPERTY; PropertyLength: ULONG; PropertyData: Pointer;
DataLength: ULONG; out BytesReturned: ULONG): HResult; stdcall;
function KsMethod(Method: PKSMETHOD; MethodLength: ULONG; MethodData: Pointer;
DataLength: ULONG; out BytesReturned: ULONG): HResult; stdcall;
function KsEvent({OPTIONAL}Event: PKSEVENT; EventLength: ULONG; EventData: Pointer;
DataLength: ULONG; out BytesReturned: ULONG): HResult; stdcall;
end;

QC Entry 78124

trunk rev: 24910
update rev: 24916

ksproxy.h from windows SDK: DECLARE_INTERFACE_(IKsControl, IUnknown) { STDMETHOD(KsProperty)( THIS_ IN PKSPROPERTY Property, IN ULONG PropertyLength, IN OUT LPVOID PropertyData, IN ULONG DataLength, OUT ULONG* BytesReturned ) PURE; STDMETHOD(KsMethod)( THIS_ IN PKSMETHOD Method, IN ULONG MethodLength, IN OUT LPVOID MethodData, IN ULONG DataLength, OUT ULONG* BytesReturned ) PURE; STDMETHOD(KsEvent)( THIS_ IN PKSEVENT Event OPTIONAL, IN ULONG EventLength, IN OUT LPVOID EventData, IN ULONG DataLength, OUT ULONG* BytesReturned ) PURE; }; #define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE * method)

QC #: Date Reported: Area:
78015 9/24/2009 RTL\Delphi\WinAPI
Description: Steps:
[QC Short Description]
MINENUMSIZE missing in DirectShow and DirectX units

[QC Description]
Delphi 2010 includes many new DirectShow and DirectX units that were taken from my site at http://tib.s.songbeamer.eu/downloads/DSPack.zip

These units used to include the file DirectX.inc which also defines $MINENUMSIZE 4. These files depend on MINENUMSIZE 4 and will definitely not work without it.

QC Entry 78015

trunk rev: 24885
update rev: 24886
** See comments for different test case **

Compile and run the following console app with src\DirectX9 and also
with ...\RAD Studio\7.0\source\Win32\rtl\win. In rtl.bpl is
...\source\Win32\rtl\win included...

program DSFilterTest;

{$APPTYPE CONSOLE}

uses
SysUtils,
DSPack,
DSUtils;

var
F: TFilter;
SysDevEnum: TSysDevEnum;
begin
SysDevEnum := TSysDevEnum.Create;
SysDevEnum.SelectIndexCategory(0);
F := TFilter.Create(nil);
F.BaseFilter.Moniker := SysDevEnum.GetMoniker(2);
IFilter(F).NotifyFilter(foAdding);
IFilter(F).NotifyFilter(foRemoving);
end.

QC #: Date Reported: Area:
78157 9/28/2009 RTL\Delphi\WinAPI
Description: Steps:
[QC Short Description]
Update DirectX headers to the latest version

[QC Description]
Update DirectX headers to the latest version from http://tib.s.songbeamer.eu/downloads/DSPack.zip

Changes include an update to the latest DirectX version, some bugfixes and some unicode bugfixes.

Care should be taken because of bugfixes that are in the codegear version of the units, but not in the dspack DirectX units. Also the dspack DirectX units are using a newer version of the d3dx9_33.dll dll.
QC Entry 78157

trunk rev: 24914
update rev: 24917
Examples: Direct3D8.pas, DirectDraw.pas INCORRECT (Using Char instead of ansichar) function MAKEFOURCC(ch0, ch1, ch2, ch3: Char): DWord; begin Result:= Byte(ch0) or (Byte(ch1) shl 8) or (Byte(ch2) shl 16) or (Byte(ch3) shl 24 ); end; CORRECT: function MAKEFOURCC(ch0, ch1, ch2, ch3: AnsiChar): DWord; begin Result:= Byte(ch0) or (Byte(ch1) shl 8) or (Byte(ch2) shl 16) or (Byte(ch3) shl 24 ); end;

QC #: Date Reported: Area:
78156 9/28/2009 RTL\Delphi\WinAPI
Description: Steps:
[QC Short Description]
D3DX9.pas D3DXVec2Minimize and D3DXVec2Maximize return wrong result

[QC Description]
D3DXVec2Minimize and D3DXVec2Maximize in D3DX9.pas assign values to vOut.y instead of vOut.x
QC Entry 78156

trunk rev: 24908
update rev: 24915
function D3DXVec2Minimize(out vOut: TD3DXVector2; const v1, v2: TD3DXVEctor2): PD3DXVector2; begin if v1.x < v2.x then vOut.x:= v1.x else vOut.y:= v2.x; // <-- BAD (vOut.y is changed) if v1.y < v2.y then vOut.y:= v1.y else vOut.y:= v2.y; Result:= @vOut; end; function D3DXVec2Minimize(out vOut: TD3DXVector2; const v1, v2: TD3DXVEctor2): PD3DXVector2; begin if v1.x < v2.x then vOut.x:= v1.x else vOut.x:= v2.x; // <-- OK if v1.y < v2.y then vOut.y:= v1.y else vOut.y:= v2.y; Result:= @vOut; end; -------------------------------------------- // Maximize each component. x = max(x1, x2), y = max(y1, y2) function D3DXVec2Maximize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2; begin if v1.x > v2.x then vOut.x:= v1.x else vOut.y:= v2.x; // <-- BAD (vOut.y is changed) if v1.y > v2.y then vOut.y:= v1.y else vOut.y:= v2.y; Result:= @vOut; end; // Maximize each component. x = max(x1, x2), y = max(y1, y2) function D3DXVec2Maximize(out vOut: TD3DXVector2; const v1, v2: TD3DXVector2): PD3DXVector2; begin if v1.x > v2.x then vOut.x:= v1.x else vOut.x:= v2.x; // <-- OK if v1.y > v2.y then vOut.y:= v1.y else vOut.y:= v2.y; Result:= @vOut; end;

QC #: Date Reported: Area:
77509 9/8/2009 RTL\Delphi\Other RTL
Description: Steps:
[QC Short Description]
GetTimeZoneInformation is very slow on Vista with programs compiled using RS2010

[QC Description]
On Vista GetTimeZoneInformation() is about a 1000 times slower when using D2010 compared to when using D2009 (and earlier).

Also discussed here:
https://forums.embarcadero.com/thread.jspa?messageID=156125&tstart=0#156125
... and here:
https://forums.embarcadero.com/thread.jspa?messageID=157355&tstart=0#157355


program Project1;
program Project234;

{$APPTYPE CONSOLE}

{ $DEFINE USESYSUTILS} // define or not - test both

uses
Windows{$IFDEF USESYSUTILS}, SysUtils{$ENDIF};

var
I: Integer;
QPF, QPC1, QPC2: Int64;
tzi: TTimeZoneInformation;
begin
QueryPerformanceFrequency(QPF);

QueryPerformanceCounter(QPC1);
for I := 0 to 9999 do
GetTimeZoneInformation(tzi);
QueryPerformanceCounter(QPC2);

Writeln(CompilerVersion:10:2);
WriteLn('Execution time = ', (QPC2-QPC1)/QPF:10:6);
ReadLn;
end.


(On Vista Ultimate 64 SP2 on an Intel i7 920 2.67GHz)
D2009: Execution time = 0.005 s
D2010: Execution time = 5.289 s

It just worries me that a simple API suddenly takes about 0.5 millisecond to execute and am wondering if other APIs are effected by this as well.

In the mean-time someone else found out that this is apperently caused by a SetThreadUILanguage call in D2010 which sets some flag in Windows Vista which makes GetTimeZoneInformation call tzres.dll on every call instead of only a few times in all the loops. On XP, only 0 is allowed, so there, LOCALE_INVARIANT is not used anyway.
Note: this will not happen when you remove SysUtils from the above code.

To further prove this, following test was presented:

program Project2;

{$APPTYPE CONSOLE}

{ $DEFINE USE_LOCALE_INVARIANT} // define or not - test both

uses
Windows;

var
I: Integer;
QPF, QPC1, QPC2: Int64;
tzi: TTimeZoneInformation;

function SetThreadUILanguage(LangId: WORD): WORD; stdcall;
external 'kernel32.dll';

begin
{$IFDEF USE_LOCALE_INVARIANT}
SetThreadUILanguage(
LOCALE_INVARIANT); // In System.pas -
// getting res strings invokes its call.
{$ENDIF}
QueryPerformanceFrequency(QPF);

QueryPerformanceCounter(QPC1);
for I := 0 to 9999 do
GetTimeZoneInformation(tzi);
QueryPerformanceCounter(QPC2);

Writeln(CompilerVersion:10:2);
WriteLn('Execution time = ', (QPC2-QPC1)/QPF:10:6);
ReadLn;
end.


(Vista U64 SP2, D2010)
without SetThreadUILanguage: Execution time = 0.005452 seconds
with SetThreadUILanguage: Execution time = 5.045242 seconds

QC Entry 77509
Also see attached projects: 1) Open Project1 in D2009 and compile and run it. 2) note execution time 3) Open Project1 in D2010 and compile and run it. 4) note execution time When running on Vista (x32 or x64) you'll see a huge difference between the two execution times. 1) Open Project2 and compile and run in D2010 2) note execution time 3) Open Project2 and activate the $define USE_LOCALE_INVARIANT and compile using D2010. 4) note execution time Again when running on Vista (x32 or x64) you'll see a huge difference between the two execution times.

QC #: Date Reported: Area:
78497 10/8/2009 RTL\Delphi\RTL Exceptions
Description: Steps:
[QC Short Description]
REGRESSION

If simple program raises exception during initialization then program will consume all stack in _ExceptionHandler until it crashes

QC Entry 78497
Steps by USc: - save the attached files from dir "simplified" - dcc32 InitializationTestProject.dpr - execute InitializationTestProject.exe expected: output is Exception Exception in module InitializationTestProject.exe at ... Just an exception. actual: with Tiburon or Weaver till FT build 3494 (revision 23552): as expected with Weaver since FT build 3505 (revision 23995): "InitializationTestProject.exe has stopped working" in Vista (free translation of DE message) Original steps (uses the project from dir "original"): Firstly it is not special project. Just project with couple of units and last one raises exception in initialization. So I basically added only one line which produces code : raise Exception.Create("Bla") 1. Open attached project 2. Run it under debugger 3. When program raises exception press Continue 4. Then program crashes because stack I believe overlaps code. Anyway you can compile it with debug dcus and put breakpoint at first line in _ExceptionHandler in system.pas you will see that it calls itself indefinatelly. 5. If you run application without debugger it will display that dialog that program ecountered problem indefinatelly until you kill it in task manager. This happend in RTL and Beta Update 2 In D2009 the same code works fine.

QC #: Date Reported: Area:
  9/8/2009 2:36:39 PM RTL\Delphi\File Management\TFile
Description: Steps:
TFile.ReadAllLines()
TFile.ReadAllText()

Both return the file BOM bytes in the result.

(JJS: Test case fails in 14.0.3553.24818)
(JJS: SVN Log indicates fix will not be seen until rev. 24822 is delivered)
Compile and run the attached application below.

See the following program output indicating failure.

FAIL #1
FAIL Counter=1

program BTS272777;

{$APPTYPE CONSOLE}

uses
SysUtils,
Types,
IOUtils;

var
Counter: Integer = 0;

procedure DoTest;
const
FileName = 'BTS272777.txt';
UnicodeBOM = #$FEFF;
var
A: TStringDynArray;
S: String;
begin
A := TFile.ReadAllLines(FileName);
if Pos(#$FEFF, A[0]) = 0 then
Inc(Counter)
else
WriteLn('FAIL #1');

S := TFile.ReadAllText(FileName);
if Pos(#$FEFF, S) = 0 then
Inc(Counter)
else
WriteLn('FAIL #2');
end;

begin
try
DoTest;
if Counter = 2 then
WriteLn('PASS')
else
WriteLn('FAIL Counter=', Counter);
except
on E: Exception do
begin
WriteLn('FAIL - Exception');
writeLn(' ClassName=', E.ClassName);
WriteLn(' Message=', E.Message);
end;
end;
end.

QC #: Date Reported: Area:
76894 8/21/2009 RTL\Delphi\Other Classes\TStreamReader/TStreamWriter
Description: Steps:
(JJS: Not yet delivered in 14.0.3559.24962)

[QC Short Description]
TStreamReader(Helper).DetectBOM will never default to UTF8

[QC Description]
DetectBOM will never default to UTF-8 when no BOM is detected.

Code taken from Classes.pas

function TStreamReaderHelper.DetectBOM(var Encoding: TEncoding; Buffer: TBytes): Integer;
var
LEncoding: TEncoding;
begin
LEncoding := nil;
Result := TEncoding.GetBufferEncoding(Buffer, LEncoding);
if LEncoding <> nil then
Encoding := LEncoding
else if (LEncoding = TEncoding.Default) and (Encoding <> TEncoding.Default) then
Encoding := TEncoding.UTF8;
FDetectBOM := False;
end;

It would seem to me that in the else branch, the first condition of the if will never be true (LEncoding=nil there and can thus never be TEncoding.Default) and therefore the Encoding will never default to UTF8...

Code in D2010 is in TStreamReader itself, but otherwise unchanged.

Suggested code:
function TStreamReaderHelper.DetectBOM(var Encoding: TEncoding; Buffer: TBytes): Integer;
var
LEncoding: TEncoding;
begin
LEncoding := nil;
Result := TEncoding.GetBufferEncoding(Buffer, LEncoding);
if LEncoding <> nil then
begin
if (LEncoding = TEncoding.Default) and (Encoding <> TEncoding.Default) then
// If no BOM detected default to UTF-8
Encoding := TEncoding.UTF8
else
Encoding := LEncoding;
end
else
;// Leaving Encoding parameter alone
FDetectBOM := False;
end;


QC Entry 76894
Compile and run the attached application below.

See the following program output indicating failure.

FAIL #1 - RetVal=TMBCSEncoding
FAIL #2 - RetVal=TMBCSEncoding
FAIL - Counter=0


program BTS272593;

{$APPTYPE CONSOLE}

uses
Classes,
SysUtils;

var
Counter: Integer = 0;

procedure DoTest;
var
Reader: TStreamReader;
RetVal: String;
begin
{ Specifying DetectBOM on a BOM-less file }
Reader := TStreamReader.Create('BTS272593.txt', True); //True=DetectBOM//
try
Reader.ReadLine;
RetVal := Reader.CurrentEncoding.ClassName;
if RetVal = 'TUTF8Encoding' then
Inc(Counter)
else
WriteLn('FAIL #1 - RetVal=', RetVal);
finally
Reader.Free;
end;

{ Specifying DetectBOM on a BOM-less file and supply the UTF8 encoding }
Reader := TStreamReader.Create('BTS272593.txt', TEncoding.UTF8, True);
try
Reader.ReadLine;
RetVal := Reader.CurrentEncoding.ClassName;
if RetVal = 'TUTF8Encoding' then
Inc(Counter)
else
WriteLn('FAIL #2 - RetVal=', RetVal);
finally
Reader.Free;
end;

if Counter = 2 then
WriteLn('PASS')
else
WriteLn('FAIL - Counter=', Counter);
end;

begin
try
DoTest;
except
on E: Exception do
begin
WriteLn('FAIL - Exception Error');
WriteLn(' ClassName=', E.ClassName);
WriteLn(' Message=', E.Message);
end;
end;
end.

QC #: Date Reported: Area:
  10/3/2009 5:06:17 PM SOAP
Description: Steps:
NOTE: This is a regression introduced on Friday by the fix to RAID:273133.
==============================

Selecting a Service in the THTTPRIO component causes an AV with the stack trace shown in the steps.


















1. Create a VCL Application
2. Drop an THTTPRIO component
3. Select the component and type the following URL in the WSDLLocation property

http://pluto/webservices/EchoComplex.asmx?wsdl

4. Next Select the 'Service' property and activate the DropDown to pick a value


exp: To see Service values drop down
act: AV (See attached image)



[0C658586]{soaprtl140.bpl} HTTPUtil.TDictionary<System.string,TPair<WSDLItems.IWSDLItems,TList<System.string>>>.Add (Line 1457, "Generics.Collections.pas" + 1) + $3
[0C6579AD]{soaprtl140.bpl} HTTPUtil.TPair<WSDLItems.IWSDLItems,TList<System.string>>.Create (Line 1262, "Generics.Collections.pas" + 1) + $6
[0C65437B]{soaprtl140.bpl} HTTPUtil.TStreamLoader.Add (Line 203, "HTTPUtil.pas" + 5) + $C
[0C655470]{soaprtl140.bpl} HTTPUtil.InternalBuildWSDLItemsLookup (Line 359, "HTTPUtil.pas" + 9) + $B
[0C655746]{soaprtl140.bpl} HTTPUtil.TStreamLoader.BuildWSDLItemsLookup (Line 412, "HTTPUtil.pas" + 1) + $1F
[0C6557A4]{soaprtl140.bpl} HTTPUtil.TStreamLoader.BuildWSDLItemsLookup (Line 417, "HTTPUtil.pas" + 1) + $A
[0C5F3240]{soaprtl140.bpl} WSDLItems.TWSDLItems.GetServices (Line 490, "WSDLItems.pas" + 7) + $1D

QC #: Date Reported: Area:
  10/8/2009 1:16:01 PM SOAP\WSDL Importer
Description: Steps:
wsdlimp.exe does not properly detect the option to force the wsdl to be imported with SOAP 1.1 Run "WSDLImp.exe -SOAP11 http://pluto/webservices/EchoComplex.asmx?WSDL"

Notice: an error saying -SOAP11 is not a correct commandline option
Exp: It actually imports the wsdl (also the created pas file should have "// Codegen : [wfForceSOAP11+]" near the top saying we forced SOAP 1.1)

QC #: Date Reported: Area:
  9/30/2009 7:39:00 PM SOAP\WSDL Importer
Description: Steps:
Importing WSDL's with circular imports causes infinite loop in several places in the WSDLItems.pas . Eventually an "Out of memory" error is thrown.

This also occurs when you use the object inspectors drop down menus on a THTTPRio
Case 1:
1) Import https://testwebservices.qualifood.de/Klassifizierer/SchlachtdatenUploadSW.svc?wsdl with wsdlimp.exe
2) Notice Out of memory exception and infinite looping

Case 2:
1) Create a new VCL App

2) Drop a THTTPRio on form

3) In the Object Insp for the THTTPRio, assign "https://testwebservices.qualifood.de/Klassifizierer/SchlachtdatenUploadSW.svc?wsdl" to the WSDLocation field

4) Click on Service's Property drop down menu

3) Notice Out of memory exception and infinite looping


[NOTE: FROM BRUNEAU:
Using Case#2 above is AV'ing for me currently. I've created a new RAID for that: 273169]

QC #: Date Reported: Area:
  8/18/2009 2:11:09 PM Modeling
Description: Steps:
Relate to 272520? or build problem? or missing file delivery?

Edit hyperlinks for diagram dialolg is missing translation (and one truncation for DE) though resources are translated in database, see attached screen shots and confirm translation for the follows example using resource Editor 2.0.

Original: Edit hyperlinks for diagram
Context: TgNET\HyperLinks\HyperLinksDlg.resx|tpModelElements.Text

Original: Model Elements
Context: TgNET\HyperLinks\Strings.resx|HyperlinkDlg.Title.Diagram
- File | New, Other, Delphi Console App
- File | Save Project As
- Project | Modeling Support, OK
- View | Model View
- open diagram (DClick Project in ModelView pane)
- invoke Hyperlinks, Edit... context menu in diagram
// EXP: resources are translated one
// ACT: many resources are in English although there re translated resources are available in database

[vk] Text truncation in the German dialog fixed in svn rev.24566-24567. All other - is request to the localization team: TgNET\InternalAPI\UI\Choosers\AdvancedChooserDialog.resx is not translated. Messahe to [marray ]written.






































QC #: Date Reported: Area:
  8/14/2009 10:06:36 AM Modeling
Description: Steps:
missing translation-causes fail of automation test AssociationLinkTest

\\see attached screenshot
1.create a VCL delphi application
2.select modeling support
3.Open diagram by Right Click on projects name
4.Add Namespace
5.add class to this namespace. double click on it
6.add two classes to the namespace and a aggregation link betweeen them.
7. Select the association and check the properties window, type. aggregation should be translated (agr�gation)


QC #: Date Reported: Area:
  2/21/2007 Modeling
Description: Steps:
Correct SCI for the RCD audit test

[SpUpd]
Run RCD audit test. Test fails.
NOTE: SCI returns private modifier for Delphi classes (must be public) and RCD test ignores these classes

QC #: Date Reported: Area:
  9/15/2009 Modeling
Description: Steps:
Create ModelSupport folder in correct place on adding modeling after to second and next project in a project group. 1. create a project
2. save it to non-default place
3. add modeling support - it's added ok
4. add another project to this group
5. perform Save All command -> save the second project and the project group in some non-default places.
6. add modeling support for the second project - ModelSupport folder is created in Document and Settings/current user/My Documents/RAD Studio/Projects folder, but it should be created in the same folder where the project file is saved.

The case when this bug is not repeatable:
1. create 2 projects
2. save all - in non-default places, exactly as it was done in first scenario.
3. add modeling at once to both projects - ModelSupport folders are created ok in both projects.

Note: this bug is critical for multi-project automated tests.

QC #: Date Reported: Area:
  10/19/2008 1:07:43 PM Modeling
Description: Steps:
Modeling create a spurious user property when adding a typedef
1. Create a new Delphi win32 VCL forms
2. Save as Project1 / Unit1
3. Add a new unit, save as Unit2
4. Click on modelview, accept modeling
5. In model view, expand project1 and right click unit2, select open diagram
6. Right click on the diagram and select add typedef
7. Change default value to TMyInt:System.Integer
8. Show to object inspector having your just created typedef selected
9. Enter MyInteger in the Alias property
10. Click again in diagram to reselect your typedef
11. Look at the Object Inspector: you have now TWO alias properties. One with an uppercase "A" and one with a lower case "a". One is in
"General" catagory, the other is in "User properties" category (you see or not categories when right click on OI and selecting sort order.
Expected: No user property created.

QC #: Date Reported: Area:
  9/29/2005 Modeling\SCI
Description: Steps:
SCI should provide unit section
1. initialization as unit static constructor.
2. finalization as unit static destructor.

Lack of sections can result to erroneous audit messages.
For example: FNI
The same concerns to metrics, e.g. MNOB and others.

Note:The same concerns to 'Search for Usages' functionality, search usages of global functions in initialization part, for example
 

QC #: Date Reported: Area:
  9/18/2007 Modeling\Class Diagram
Description: Steps:
Delphi Win32 and .Net: show on interface icon parent interface name if the latter is absent in the diagram.
Expected behavior works ok on class icon.
In both cases below parent interface name (N1.I2 or S.I2) should be shown in the source interface icon (I1), if target interface is not shown in the same diagram with source interface (I1).
case 1:
I1 = interface(N1.I2) {target interface is located in another namespace}
end;
case 2:
S = record
type I2 = interface
end;
end;
I1 = interface(S.I2) {target interface is inner interface}
end;

QC #: Date Reported: Area:
  9/11/2009 10:51:22 AM Modeling\Class Diagram
Description: Steps:
Nested namespaces. When user d&d element from nested namespace to current diagram place, element must be placed at the point where mouse click executed. At that time element is placed at the top of diagram independently of point where we click. 1. add namespace1 to default delphi diagram, go to it.
2. add namespace2. add class into namespace2
3. d&d class from namespace2 to namespace1 diagram - e.g. to the right bottom corner

exp: class is placed at the right bottom corner
act: class is placed at the top of the diagram

[little note: also, in this case we have negative Y coordinate for dropped element in diagram files, that can cause problem for few autotests cases]


QC #: Date Reported: Area:
  9/14/2009 10:03:15 AM Modeling\Class Diagram
Description: Steps:
Delphi,C++,Design: Appearance display is oposite for Gradient color 1 and 2 between OI and Options setting, please see attached screen shot. - File | New, Other, Design Projects, UML 1.5 Design Project
- Tools | Options, Modeling->Default->Diagram->Appearance, Gradient color 1=Red, Gradient color 2=Yellow, Gradient mode=Vertical, Gradient on=True
- Open Diagram, Add Package1 and Package2
// act: gradation appearance is Top (Red) to Bottom(Yellow)
- select Package2, set Gradient color 1=Red, Gradient color 2=Yellow, Gradient Mode=Vertical, Gradient On=True via Object Inspector
// act: gradation appearance become to oposite one - Top (Yellow) to Bottom(Red)
// exp: should be same to Package1

QC #: Date Reported: Area:
  10/5/2009 Modeling\Printing
Description: Steps:
Print result (use Print/Preview) contains only page with scraps of shapes or empty page. Print (use Print/Preview) any not empty diagram: result pages are empty or contain only scraps of shapes.

QC #: Date Reported: Area:
  1/13/2009 8:37:05 PM Modeling\Patterns
Description: Steps:
[MISSINIG TRANSLATION]

Description for TCC code templates not translated in Pattern Organizer

please see attached screenshot


//Masahiro Arai
If fixing this require file set changes, don't fix this on Weaver update.
1. Tools/Pattern-Organzier/Bundled Patterns (Delphi)/TCC code templates

see untranslated description

QC #: Date Reported: Area:
  1/13/2009 8:46:49 PM Modeling\Patterns
Description: Steps:
[TRANSLATION CHANGE REQUEST]

Applikation ist not the correct translation for "application". It should be "Anwendung".

(I am wondering where this translation comes from.)



please see attached screenshots

1. Tools/Pattern-Organzier/Bundled Patterns (Delphi)/TCC code templates/Links
2. Default Aggregation
and
Default Association

see wrong translation "Applikation"

QC #: Date Reported: Area:
  9/18/2009 12:54:30 PM Modeling\Audits
Description: Steps:
Unable to use Audits or Metrics on IDE source code in work build

I've seen all of the following:

1) failed assertions
2) message boxes that say "no elements selected"
3) the progress dialog comes up, stays at 0% for a while, and then just disappears and no audits are shown
Do a fresh build by doing: msbuild clean debug register work

copy $(tp)\template\qa to work\template\qa to see Audits dialog

Start WORK version of bds.exe
Open $(tp)\app\GalileoGroup.groupproj
Make sure bds.exe is the active project
Open Appmain.pas in the code editor
Project | QA Audits

Here's the assertion failure
Debug Output:
level 0, msg="---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
Unable to cast object of type 'Borland.Delphi.CompiledNode' to type 'Borland.Delphi.UnitNode'.
---- Assert Long Message ----
at Borland.SCI.Impl.Delphi.NewNodeHelper.GetSectionLists(CompiledNode compiled, NodeList& iface, NodeList& impl) in c:\svn\tp\TgNET\Borland.SCI.Impl.Delphi\NewParserHelper.cs:line 363
at Borland.SCI.Impl.Delphi.DelphiHelper.DelphiChildPerformer.Objects(INode o) in c:\svn\tp\TgNET\Borland.SCI.Impl.Delphi\DelphiHelper.cs:line 480
at Borland.SCI.Impl.Common.Source.SourceNamespaceDeclaration.AdjustNode(INode node) in c:\svn\tp\TgNET\Borland.SCI.Impl.Common\Source\SourceNamespaceDeclaration.cs:line 29
at Borland.SCI.Impl.Delphi.DelphiNamespaceDeclaration.AdjustNode(INode n) in c:\svn\tp\TgNET\Borland.SCI.Impl.Delphi\DelphiNamespaceDeclaration.cs:line 25
at Borland.SCI.Impl.Delphi.ElementFactory.CreateElement(INode node, SourceFile file, SourceObject owner) in c:\svn\tp\TgNET\Borland.SCI.Impl
Process bds.exe (5128)

Dismissing this, I get a message box that says merely "no elements selected" which is a meaningless error message

QC #: Date Reported: Area:
73047 4/16/2009 Modeling\Audits
Description: Steps:
[QC Short Description]
Possibly wrong warning about uninitialized global var

[QC Description]
QA audits warns me about one global variable in a unit which is uninitialized. It's a integer and in the initialization section of this unit it gets initialized.

The only thing I could think about is if another unit uses this one and could have access to the var before the initialization section of the unit is run. Can this be? If not this check isn't yet intelligent enough in my eyes.
QC Entry 73047
1. create some application as follows: Unit QATest; interface procedure DoIt; implementation var myglobgalvar:TObject; procedure DoIt; begin myglobalvar.Free; end; initialization myglobalvar:=TObject.Create; end. 2. enable modeling support and run QA audits 3. see it complain that myglobalvar never gets initialized

QC #: Date Reported: Area:
  9/21/2009 Modeling\Metrics
Description: Steps:
Delphi Metric CC should count accordingly to definition:
A less formal definition is:

CC = D + 1

where D is the number of binary decisions in the control flow graph, if it has only one entry and exit. In other words, the number of if, for and while statements and number of logical and and or operators.

Now it looks like that the last "+1" is lost.
 

QC #: Date Reported: Area:
  9/22/2009 Modeling\Metrics
Description: Steps:
Delphi Metric NOM should not count 29 for globals (@unitclass) when option Count Ancestors = True Create an empty unit
run for it NOM metric with Count Ancestors = True

result: 29
but 0 is expected.
@unitclass has no parent and so has no inherited members.

ordinar class has an implicit parent TObject, but @unitclass has no it.

QC #: Date Reported: Area:
  9/17/2009 Modeling\Metrics
Description: Steps:
Delphi Metrics: IUR should not count
1. strict private virtual methods as inheritance-specific always
2. private virtual methods as inheritance-specific if a child and parent classes are located in different units.
unit Unit1;

interface
type
A = class
public procedure VPublicProc;virtual; // Ihn-sp
protected procedure VProtectedProc; // Ihn-sp
private procedure VPrivateProc;virtual; // Ihn-sp for class B
strict private procedure VSPrivateProc;virtual;
end;
B = class(A)
public procedure VPublicProc;override; // usage
end;

implementation
procedure B.VPublicProc;
begin
end;
procedure A.VPrivateProc;
begin
end;
procedure A.VSPrivateProc;
begin
end;
procedure A.VProtectedProc;
begin
end;
procedure A.VPublicProc;
begin
end;

end.

At this case IUR for class B should be 33, but now it's 25.
So, IUR counts strict private virtual method as inheritance-specific, but it should not.

The similar case with private virtual methods if parent and child are located in different units.

QC #: Date Reported: Area:
  9/22/2009 Modeling\Metrics
Description: Steps:
Delphi Metric NOM should not count initialization and finalization sections for globals element (@unitclass) when option Count Constructors = False.  

QC #: Date Reported: Area:
74036 5/18/2009 Modeling\Metrics
Description: Steps:
[QC Short Description]
AV happens after 'QA Metrics' execution and during the end of IDE.

[QC Description]
OS : Windows Vista Ultimate SP1, Japanese
Weaver : Build 3417, Japanese

I installed Visual Studio 2008 in order to get information more.
I got the address with the JIT debugger of VS2008.


I installed the Weaver English edition in Windows XP Japanese.
However, I was not able to reproduce AV.


--
July 3, 2009 Edit

Similarly in Build3462, AV occurs.
I attached to bds by bds.
I added the screen shot and the text file of Call Stack to the attached file.
QC Entry 74036
1. Start IDE.
2. [File]-[New]-[VCL Forms Application - Delphi]
3. Show a code editor.
4. [Project]-[QA Metrics]
5. Click the 'Start' button.
6. Close a Metrics dialog.
7. End IDE.
The dialog of AV is displayed after the window of IDE disappears.

[vk, 22.09.2009] See CommentOnly note
[vk] Fixed in trunk - revision 24876, branch - rev.24882
[vk, 28.09.2009] 2nd fix. Fixed in trunk - rev.24902, branch - rev.24904

QC #: Date Reported: Area:
  12/13/2007 Modeling\Metrics
Description: Steps:
Delphi .Net and Win32: AIUR and IUR should count methods from helper classes if there are inheritance-specific members both in parent and its helper classes. In following case AIUR and IUR metrics for Class3 returns 0, but 67 is expected for both metrics:

unit Namespace1;
interface
type
Class1 = class
protected var Field1; // if to comment this field, both AIUR and IUR returns 100, as it would expected in that case.
end;

Class2 = class helper for Class1
strict protected function Func2: Integer;
public procedure Proc2;virtual;
end;

Class3 = class(Class1)
public procedure Proc2;override;
end;

implementation

{ Class2 }
function Class2.Func2: Integer;
begin
Result:=2;
end;

procedure Class2.Proc2;
begin
end;

{ Class3 }
procedure Class3.Proc2;
begin
inherited;
Func2;
end;

end.

QC #: Date Reported: Area:
  9/21/2009 Modeling\Metrics
Description: Steps:
Delphi Metric MNOL should correctly count in initialization section if the option Case As Branch = true. initialization
case b of
MNOL.F1, MNOL.F2:
begin
if(a=MNOL_Enum.F1) then
if(a<>MNOL_Enum.F2) then
WriteLn('F1')
else WriteLn('F2');
end;
MNOL.F3: WriteLn('F3');
end;

In this case:
if Case As Branch = False: MNOL = 2
if Case As Branch = True : MNOL = 2 , but 3 expected

QC #: Date Reported: Area:
  1/21/2008 Modeling\Metrics
Description: Steps:
Delphi .Net and Win32: NOAM and NOOM metrics should have the same value for case when they are not applicable. Now for a class without a parent NOAM returns -1 and NOOM - 0. It should be better to have -1 in both cases.  

QC #: Date Reported: Area:
  9/28/2009 Modeling\Metrics
Description: Steps:
Delphi Audits and Metrics: second and next runs should show some values. Now only empty window in shown. 1. run bds, create a project
2. run metrics first time
3. Metrics window is shown with some results. Ok.
4. close the window with the command "Close All" from tab context menu in Metrics window - this is critical point
5. now run the same metrics again - Metrics window is shown empty.

Now close the project, create a new one, open a pas file and run metrics - Metrics window is empty again.
Only restart BDS helps.

The same happens with Audits.

[vk] This is side effect of "fix" rev.24786 (bug #272184). Changes rolled back in the trunk rev.24900, in the branch rev.24901

QC #: Date Reported: Area:
  10/3/2007 Modeling\Metrics
Description: Steps:
Delphi .Net and Win32: NOA (Number Of Attributes) Metric: no constant should be counted if "Count constants" option is false. Now they are counted always. Class1 = class
public
var
Field1:Integer;
const
Field2:Integer=3;
end;

Now NOA always is equal to 2 despite of the option value.

QC #: Date Reported: Area:
  9/21/2009 Modeling\Metrics
Description: Steps:
Delphi Metric CC: option Case As Branch = True: count every case label. the case
procedure p(i:integer);
begin
case i of
1, 2: writeln('1 or 2');
3: writeln('3');
end;
end;

now CC for this procedure is 3 (one for first case branch, one for second branch and plus one by formula), but it should be 4 (3 labels plus 1).

QC #: Date Reported: Area:
  9/21/2009 Modeling\Metrics
Description: Steps:
Delphi Metric MNOB should result the same number for the same code in initialization section and in ordinar function/procedure. The case:
initialization
case b of
MNOB.F1, MNOB.F2:
begin
if(a=MNOB_Enum.F1) then
WriteLn('F1')
else WriteLn('F2');
end;
MNOB.F3: WriteLn('F3');
end;

Now for initialization MNOB = 2, but for the same code in a procedure or a function 4.
4 is expected here as well.

QC #: Date Reported: Area:
  9/22/2009 Modeling\Metrics
Description: Steps:
Delphi Metric NOM should count members from all parents when option Count Ancestors = true, now only immediate parent is taken into account. A=class
procedure p1;
end;
B=class(A)
procedure p2;
end

in this case now when Count Ancestors = True
NOM for A = 30 (29 from parent + 1 declared)
NOM for B = 2 (1 from A + 1 from B), but expected 31 (29 from TObject + 1 from A + 1 from B)

QC #: Date Reported: Area:
  10/2/2009 6:12:45 PM Modeling\Class Explorer
Description: Steps:
Delphi:Class Explorer:Exception appears after openning IDEVirtualTrees namespace in Class Explorer in PasBrowTest project 1. open PasBrowTest project
2. open Class Explorer
3. find IDEVirtualTrees namespace-> click expand ('+' sign)

act: unhandled exception appears.



Server Response from: ETNASC01