QC #: Date Reported: Area: 584 4/9/2002 IDE\Structure Pane Description: Steps: [QC Short Description] 1. Create a new application 2. Drop quite a few buttons etc. on the form and a PageControl. 3. Open the Object Strcuture View (formerly Object TreeView) doesn't automatically scroll when in Drag&Drop TreeView (Alt+Shift+F11) 4. Resize the Object TreeView window so that not all nodes are visible and the scrollbars appear 5. Now try to drag one of the buttons TreeNodes to the edges of the TreeView exp: TreeView [QC Description] should automatically scroll act: Nothing When designing complex forms the content of Structure View doesn't fit on the screen.

If you then try to move components in the Structure TreeView by Drag&Drop you can't drop it onto a TreeView node which is currently not visible because the TreeView doesn't scroll when you're pointing your mouse near the edges of the TreeView.

That way Object TreeView loses it's most important feature (IMO) ! QC Entry 584 QC #: Date Reported: Area: 739 4/12/2002 IDE\Code Editor\Keymapping Description: Steps: [QC Short Description] Tab key should indent block

[QC Description] The tab key should indent a block of text when it is highlighted. This is the behaviour of most other IDEs and makes more sense than the current key combination.

Shift+tab should unindent a block of text when it is highlighted.

This suggestion costs nothing to implement, has no negatives, makes life easier for people changing from VB, is intuitive for new users, and makes it easier for everyone who has ever had to indent text.

There is no need to remove the current functionality of tab when no block is highlighted. And there is no need to remove the other keystrokes which indent blocks of text. QC Entry 739 QC #: Date Reported: Area: 1936 7/26/2002 IDE\Search\Find in Files Description: Steps: [QC Short Description] Allow "find in files" in properties on forms/datamodels/frames (DFMs)

[QC Description] When finding in files only the source code is searched. There is no such function for searching in all forms / data models within a project / directory etc.

Example:

Your customer asks you to change all texts / labels / ... from Automobile to Vehicle. You know this word is present is source code, on many forms in captions, hints etc.

Do a "Find in files" on Automobile with the (Associated files checkbox enabled or something like that). When you select the Automobiles found on DFMs it popups the form, selects the correct component/control, popups the Object Inspector and selects the correct property.

QC Entry 1936 QC #: Date Reported: Area: 2248 9/2/2002 Documentation\Online Help\VCL Description: Steps: [QC Short Description] Put a TXPManifest on a form and press F1 while it is selected 7: No help for TXPManifest Fixed in Weaver, see [QC Description] There is not helptopic about TXPManifest, which makes is hard to understand in de Trial version. ms-help://embarcadero.rs2010/vcl/XPMan.TXPManifest.html QC Entry 2248 QC #: Date Reported: Area: 2267 2/15/2004 VCL\Additional Controls\TCheckListBox Description: Steps: (This report "migrated" from QC 2267 for D6)

It would be really useful to have the following methods in TCheckListBox:

CheckAll; -> set all items to Checked UncheckAll;-> set all items to Unchecked

It might be nice to include a default (const bool=True) parameter to specify whether also the Grayed items should be influenced by these sweep-all methods.

(PS why is there no QC "Area" for VCL TCheckListBox in D.NET?) QC Entry 2267 QC #: Date Reported: Area: 3111 12/12/2002 Database\TParams Description: Steps: [QC Short Description] Open the attachement and click the button on the mainform. ParseSQL alters function parameter by value It enters an event handler which will initialize some components reproduce the bug and show a workaround.

[QC Description] with SqlClientDataSet1 do TParams.ParseSql is declared as: begin CommandText := 'select * from employee where emp_no=:emp_no'; function ParseSQL(SQL: String; DoCreate: Boolean): String; Params.ParseSQL(CommandText, True); { <-- BUG ALTERS THE COMMANDTEXT VALUE } Params.ParamValues['emp_no'] := 100; But the implementation behaves like the SQL is passed as a parameter by reference. It used a PChar typecast Open; { <-- EXCEPTION APPEARS HERE } on the SQL parameter and works on the characters inside this buffer. Therefor it behaves as a parameter by end; reference:

ParseSql(var SQL: string; DoCreate: boolean);

ParseSql's implementation should not affect the original SQL string parameter. QC Entry 3111 QC #: Date Reported: Area: 3156 12/18/2002 Debugger\Inspector Description: Steps: [QC Short Description] Note: initially, do this for top level items Create watch from Inspect window

[QC Description] It'd be nice to be able to right click an item in the Inspect window and create a watch for it. QC Entry 3156 QC #: Date Reported: Area: 3445 1/29/2003 AddOn\Interbase components Description: Steps: [QC Short Description] TIBStringField a EmptyAsNull

[QC Description] Since there is no way to tell if an blank DBEdit is to be stored as NULL or an Empty string an extra property to TIBStringField (EmptyAsNull) should be added so the developer can override the default behavior of storing NULL. The default should be true to keep the long standing behavior intact (this behavior matches most TDataset descendants). QC Entry 3445 QC #: Date Reported: Area: 4790 6/19/2003 Midas\TClientDataSet Description: Steps: Open the example project. First press the button 'Load From File', next press 'Filter Widestring' -> Exception Midas generates an exception when filtering on WideString fields using "like".

Note from Tomohiro Takahashi <<<<<<< QC#10828 >>>>>>> QC #: Date Reported: Area: 5067 5/14/1998 ActiveX\Framework Description: Steps: Imported IE4 WebBrowser ActiveX Control does not size correctly when dropped on a D4 form. 1- Import MS Internet Controls 2- Drop the WebBrowser on a D4 form This is not the case for D3 or VB5 3- Notice that the Control does not respect the size on the form that it was dropped for. QC #: Date Reported: Area: 5836 9/4/2003 Database\TParams Description: Steps: [QC Short Description] With ParamCheck = TRUE, set SQL.Text on a query similar to the following (Oracle is the RDBMS in this ParseSQL incorrectly interprets quotes in literal strings example): SELECT SYSDATE FROM DUAL WHERE USER IN ( 'LPs are 12" in diameter', 'My TV is 16:9 ratio' ) The ParseSQL implementation incorrectly identifies a parameter with a name of "9". This could be [QC Description] particularly tricky to identify as a problem, considering that this, only slightly different, query works as expected: When parsing an SQL statement that contains strings literals, the ParseSQL implementation does not properly SELECT SYSDATE FROM DUAL WHERE USER IN ( 'LPs are 12" in diameter', 'CDs are 5" in diameter', 'My interpret quote characters embedded within those literals. TV is 16:9 ratio' )

A double-quote char (") encountered within a string literal (enclosed by a pair of ') is interpreted as the end of the string literal.

In most cases this is a silent failure, but if you also have string literals in the SQL that contain colons, then under the right conditions that colon is treated as a parameter identifier and not part of a literal.

We found this because we had a query that built a "WHERE COLUMN IN ( )", where the literals included some entries with length information (" denoting inches) and ratios (e.g, 1:500).

NB - I have yet to check Delphi7 as I don't currently have access to my D7 installation, to see whether the implementation of ParseSQL has been altered to address this area. QC Entry 5836 QC #: Date Reported: Area: 6417 11/13/2003 ActiveX\Framework\DAX\Container Support (TOleControl) Description: Steps: I have created a simple ActiveX control which is a descendant of the TActiveXControl. (I picked TMemo for the procedure TActiveXControl.Initialize; VCL Class Name in the ActiveX Control wizard). begin inherited Initialize; When I dynamically instantiate this control in a client program and Free it, it seems to have a memory leak. I FConnectionPoints := TConnectionPoints.Create(Self); have a client program which basically creates and frees the control in a loop and you can watch the memory FControlFactory := Factory as TActiveXControlFactory; leak. if FControlFactory.EventTypeInfo <> nil then FConnectionPoints.CreateConnectionPoint(FControlFactory.EventIID, I have attached the ActiveX and the client program source code. ckSingle, EventConnect); FPropertySinks := FConnectionPoints.CreateConnectionPoint(IPropertyNotifySink, An interesting point to note is that if I replace the Delphi 7 version of Axctrls.pas unit with the one in Delphi 6 ckMulti, nil); version, the problem seems to go away! FControl := FControlFactory.WinControlClass.CreateParented(ParkingWindow); if csReflector in FControl.ControlStyle then There are a few differences between these files… but perhaps the most significant is the code as noted below. FWinControl := TReflectorWindow.Create(ParkingWindow, FControl) else FWinControl := FControl; FControlWndProc := FControl.WindowProc; FControl.WindowProc := WndProc; InitializeControl; end;

destructor TActiveXControl.Destroy; begin if Assigned(FControlWndProc) then FControl.WindowProc := FControlWndProc; FControl.Free; if FWinControl <> FControl then FWinControl.Free; FConnectionPoints.Free; inherited Destroy; end;

Delphi 7.x (Axctrls.pas)

Noted: The addition of code that allocates an instance of the class ToleLinkStub and then manually adjusts the interface pointer reference count (why is this done?)

procedure TActiveXControl.Initialize; begin inherited Initialize; FConnectionPoints := TConnectionPoints.Create(Self); FOleLinkStub := TOleLinkStub.Create(nil); FOleLinkStub._AddRef; FControlFactory := Factory as TActiveXControlFactory; if FControlFactory.EventTypeInfo <> nil then FConnectionPoints.CreateConnectionPoint(FControlFactory.EventIID, ckSingle, EventConnect); FPropertySinks := FConnectionPoints.CreateConnectionPoint(IPropertyNotifySink, ckMulti, nil); FControl := FControlFactory.WinControlClass.CreateParented(ParkingWindow); if csReflector in FControl.ControlStyle then FWinControl := TReflectorWindow.Create(ParkingWindow, FControl) else QC #: Date Reported: Area: 6725 12/29/2003 VCL\Printing Description: Steps: [QC Short Description] Create new service application. Add Printers to the uses clause In the service attempt to read the value of TPrinter fails in Service Applications on W2K Printer.PrinterIndex Watch the exception happen via debugger (or with a try/except block and a dialog message (requires the service be set to interact with the desktop)) Note: I had the service set to interact with the desktop, [QC Description] though it still happens when it is not set this way. I did not try running the service in a specific account, only the When a service application uses the local system account on Windows 2000 the procedure local system account. TPrinter.SetToDefaultPrinter fails to identify and set the default printer. The property Printers does contain the complete list of printers. Because the TPrinter object fails to properly set the default printer most calls end up with an exception, even attempting to set the default printer.

In the SetToDefaultPrinter procedure the following block of code is executed and the value of Device is a single space. else begin GetProfileString('windows', 'device', '', DefaultPrinter, SizeOf(DefaultPrinter) - 1); Cur := DefaultPrinter; Device := FetchStr(Cur);

{As a w2k service in local account Device is ' ' at this point}

It should also be noted that this is not the method Microsoft recommends for finding the default printer, though I can't seem to find the link on MSDN where I was reading this. QC Entry 6725 QC #: Date Reported: Area: 7393 2/24/2004 VCL\Core VCL Classes\TApplication Description: Steps: [QC Short Description] Create a second form in the project, set ShowHint to True, dump a couple controls down and give them hints. App with no main form showing a form with hints freezes In the project file, change the mainline code to the following: begin Form2 := TForm2.Create(nil); if Form2.Showmodal = 1 then begin Application.Initialize; Application.CreateForm(TForm1, Form1); [QC Description] Application.Run; end; end. Run the project, have some other app running close by or overlapping so you can It is fairly common to do things like present a splash screen or login screen prior to creating the main form of an experiment with getting a hint to appear on the modal dialog and then switch quickly to the other window. The application. person reporting this apparently can reproduce this easily. (See thread starting with message ID <[email protected]> in borland.public.delphi.language.delphi.general). I had to make If such a form has hints enabled, it is possible to completely hang that app by hovering over a control to display a quite a number of tries to reproduce but was able to. I ran the test app outside of Delphi and on W2K, but do hint and then very quickly switching to another window on the desktop. not know if either of these matter.

The code at fault appears to be in UnhookHintHooks:

HintHook := 0; if HintThread <> 0 then begin SetEvent(HintDoneEvent); if GetCurrentThreadId <> HintThreadID then WaitForSingleObject(HintThread, INFINITE); CloseHandle(HintThread);

WaitOnSingleObject never comes back for some reason.

The problem is also present in Delphi 7 / 4.453.

The following provides a stack trace of when the deadlock occurs. It was lifted from 7383... applications lock up. can happen at anytime during the execution of the program generally when it has called NtWaitForSingleObject from ntdll.dll. the following is some exception reporting i have when the application freezes. main thread ($1b4): 77f827e8 ntdll.dll NtWaitForSingleObject 77e86a13 kernel32.dll WaitForSingleObjectEx 77e86a38 kernel32.dll WaitForSingleObject 004c6414 prog.exe Forms UnhookHintHooks 004c885d prog.exe Forms TApplication.CancelHint 004c8330 prog.exe Forms TApplication.Idle 004c7a23 prog.exe Forms TApplication.HandleMessage 004c4771 prog.exe Forms TCustomForm.ShowModal 006c78d3 prog.exe frmLogin 266 TLogin.TestLogin 006d2d99 prog.exe prog 66 EntryPoint thread $4c4: 77e15d3b user32.dll ShowWindow 004c883c prog.exe Forms TApplication.HideHint 004c884f prog.exe Forms TApplication.CancelHint 004c62f8 prog.exe Forms HintMouseThread 004254d3 prog.exe madExcept 3942 ThreadExceptFrame >> created by main thread ($1b4) at: 004c63c3 prog.exe Forms HookHintHooks

disassembling: 77f827dd public NtWaitForSingleObject: ; function entry point 77f827dd mov eax, $ea 77f827e2 lea edx, [esp+4] 77f827e6 int $2e 77f827e8 » ret $c QC Entry 7393 QC #: Date Reported: Area: 7472 3/1/2004 Compiler\Delphi\Language Description: Steps: [QC Short Description] Allow the following syntax: type T1 = class private function GetA(Idx: Integer): string; function GetB(Idx: string): Allow multiple properties to be default within a single class Integer; procedure SetA(Idx: Integer; const Value: string); procedure SetB(Idx: string; const Value: Integer); public property A[Idx: Integer]: string read GetA write SetA; default; property B[Idx: string]: Integer read GetB [QC Description] write SetB; default; end; Currently, only a single default property is allowed within a single class. This default property can also be considered an overloaded operator [] . Whenever the index datatypes differ, it can be allowed to add multiple default properties.

Example:

Consider a 'list' class where objects need to be accessed on index in the array and on some key (for example a string). You could use the following notation: for i := 0 to 9 do DoSomethingInteresting(List[i]);

DoSomethingInteresting(List['John']);

I think this would allow Delphi to extend its easy to readability of Delphi source code, it does not introduce ambiguity (just like overloaded methods) like default properties without indexers would. QC Entry 7472 QC #: Date Reported: Area: 7527 3/5/2004 Database\Data Aware Controls\TDBGrid Description: Steps: Update: DBGrid doesn't repaint itself correctly when scroll bars get are toggled from off, to on, to off. (This is 1. Compile and Run the attached test-case 2. Record 4 is active in the top grid; note that the bottom detail grid really seen in master detail apps... when a master record has 0 detail and another master record has serveral needs a scrollbar to show all records 3. In the top grid activate the record with 5 in the first field 4. Go back to detail records) the record 4 exp: Scrollbar in the bottom detail grid should be displayed as in step 2 act: Scollbar is hidden If you repeat steps 3 and 4, notice how the grid scrollbar appears and dissappears. You can just about make out [QC Short Description] the outline of the scrollbar on the right, including the thumb thingy shadow moving as you scroll! TDBGrid vertical scrollbar dissappears

[QC Description] When you have a master/detail record, and the detail is shown using a TDBGrid, then the vertical scrollbar dissappear randomly, even if there are more records than will fit! You can see the right border outline of the scrollbar though, including the thumb thingy moving. It's as if the grid has resized slightly over the scrollbar.

See attached test-case. QC Entry 7527 QC #: Date Reported: Area: 7767 3/29/2004 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] // see windows.pas Is function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: Incorrect BackupSeek declaration DWORD; var lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD; lpContext: Pointer): BOOL; stdcall; but should be function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD; var [QC Description] lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD; var lpContext: Pointer): BOOL; stdcall; windows.pas declares the BackupSeek function as function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD; var lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD; lpContext: Pointer): BOOL; stdcall;

This is wrong according to MSDN.

The correct declaration is (var missing before lpContext)

QC Entry 7767 QC #: Date Reported: Area: 7802 4/2/2004 Internet\XML Description: Steps: [QC Short Description] var XmlDoc : IXmlDocument; Node : IXmlNode; memStream : TMemoryStream; begin XmlDoc := TXmlDocument.SaveToStream does not clear Modified Flag NewXmlDocument; XmlDoc.Node.AddChild('Sub'); if XmlDoc.Modified then begin memStream := TMemoryStream.Create; XmlDoc.SaveToStream(memStream); FreeAndNil(MemStream); end; if [QC Description] XmlDoc.Modified then begin ShowMessage('Still Modified'); XmlDoc.SaveToFile('\\.\NUL'); end; if Saving a XML Document to a Stream using SaveToFile clears the Modified Flag. Same procedure using XmlDoc.Modified then begin ShowMessage('Still Modified'); // never reached end; end; SaveToStream does NOT clear the modified flag. QC Entry 7802 QC #: Date Reported: Area: 8365 6/7/2004 Midas\TClientDataSet Description: Steps: [QC Short Description] 1. Run attached application 2. click the button - note that it thinks it has a range applied at 0 3. turn the filter and CloneCursor reset=true does not reset active ranges range on (check boxes) 4. note the record count in the status bar 5. click the button again - note the range is still applied and it sees 10 records which means that the range is still applied, but the filter is not 6. remove the [QC Description] range and filter (check boxes) 7. click the button - it is now correct since there is no range applied to the cds When doing cds.cloneCursor(true) there all filters AND ranges on the cloned dataset should be cleared. This is being cloned not the case for Delphi 6.02, Delphi 7, and Delphi 7.1. The filter is correctly removed, but the range is never removed. QC Entry 8365

[Diamondback] QC #: Date Reported: Area: 8433 6/16/2004 Debugger Description: Steps: [QC Short Description] 1. Unzip attached files 2. Compile and run Declaring a method called DebugHook and then calling it causes "too many consecutive exceptions"

[QC Description] As per the subject, declaring a method with parameters called DebugHook and then calling it causes a "too many consecutive exceptions" error.

I relalise that this is an extreme corner case, and has an easy workaround, however I expect it's worth investigating as the underlying reasons may affect other areas.

The problem was originally reported by Sterling Bates in the borland.public.delphi.language.delphi.win32 newsgroup. QC Entry 8433 QC #: Date Reported: Area: 8616 7/10/2004 IDE\Packages Description: Steps: [QC Short Description] Include an Uninstall/Remove context menu item in the project manager when a package is loaded.

[QC Description] When a package project is open in the project manager. I would like an Uninstall context menu item, so that the package can be unloaded from the IDE easily. QC Entry 8616 QC #: Date Reported: Area: 9147 9/27/2004 VCL\Standard Controls\TListBox Description: Steps: [QC Short Description] Start new Application with a TListBox and a TButton. Add at designtime some items to the Listbox. Add code at TListbox doesn't color the whole background the OnClick of the Button. SOmething like ListBox1.Color := clGradientActiveCaption. Hit run and press the button. [QC Description] When setting the color of a listbox at designtime, only the background of the items is colored and not the rest of the background. QC Entry 9147 QC #: Date Reported: Area: 9511 11/8/2004 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] Compile and run the attached application below. Charcter Array -> String conversion problem See the following output at run-time indicating failure. [QC Description] procedure TForm1.Button1Click(Sender: TObject); FAIL L=256 var Buf: array[0..300] of Char; This result indicates that the target string received only 256 of the 281 expected characters. p: PChar; a: string; i: Integer; program BTS257545; begin for i := 0 to 280 do {$APPTYPE CONSOLE} Buf[i] := 'a'; Buf[280] := #0; var p := Buf; Buf: array[0..300] of Char; a := 'M' + p; p: PChar; ShowMessage(IntToStr(Length(a))); a: string; end; i: Integer; L: INteger; This code reports 256! begin for i := 0 to 280 do QC Entry 9511 Buf[i] := 'a'; Buf[280] := #0; p := Buf; a := 'M' + p;

L := Length(A); if L = 281 then writeLn('PASS') else WriteLn('FAIL L=', L); end. QC #: Date Reported: Area: 9757 12/5/2004 Documentation\Online Help\VCL Description: Steps: [QC Short Description] Compare delphi 7 online help and delphi 2005 online help for the same entries. Help hypertext links were not converted from delphi 7 to 2005

[QC Description] Hypertext links in parameterlists or description text were not converted to 2005. Examples: sysutils.FindFirst, sysutils.StrToDateTime, sysutils.FormatDatetime and so on.

As I see, the conversion was done automatically but failed in this respect.

This is particulary annoying, when parameters are of complex (non simple) type. QC Entry 9757 QC #: Date Reported: Area: 10015 12/25/2004 Compiler\Delphi\Linker Description: Steps: [QC Short Description] (1) Install the D7 trial version. (2) Install any 3rd party components which don't ship with sources, but with trial version doesn't accept 3rd party precompiled DCUs precompiled DCUs only. E.g. http://madshi.net/madCollection.exe (3) Try to use those 3rd party components. The IDE experts will work, but the project will not be successfully compiled. Instead you'll get a message like [QC Description] "something.pas" not found. The D7 trial version doesn't accept any precompiled 3rd party DCUs. This is not really a problem in itself. But the trial version doesn't say "I don't accept these DCUs because I'm a trial version". Instead it sais "file xxx.pas" not found.

As a result I'm regularly getting support requests, because people think my component collection is at fault.

It would be nice, if the trial version could complain with a better warning, so that we component developers don't get those support requests all the time. QC Entry 10015 QC #: Date Reported: Area: 10309 1/12/2005 IDE\Toolbars Description: Steps: [QC Short Description] 1. Right click on the toolbar area and select customize Placing URL Text Box command on the toolbar displays junk in the edit part of the combo 2. Select the Browse category 3. Drag and drop the "URL Text Box" command onto the toolbar //exp: URL text box shows up empty //act: URL shows Japanese text in the box.

[QC Description] If you drag the URL Text Box command onto a toolbar, the combobox text part gets junk text in it.

When you select an item from the combo, the junk text disappears. ------ORIGINAL ------Check out the text. I get 6 boxes in my edit portion and the default welcome page is currently being displayed. QC Entry 10309 QC #: Date Reported: Area: 10392 1/14/2005 IDE Description: Steps: [QC Short Description] Open Project menu item doesn't use the correct filter

[QC Description] When you select Open Project from either the menu item or the toolbar, the filter used is wrong. By default the filter used is the "Borland Developer Studio File" which incase you don't know, includes just about every file you could ever hope to use in the IDE.

This is wrong. The reason I have done "Open Project" is so that I can open a PROJECT file. A PROJECT file for Delphi 2005 and it should be either a bdsproj or bdsgroup (I like to live in the NOW not the past). Not all of the legacy project file types. Once I've updated my project to Delphi 2005, I should not have to continually see these files in a default filter. For one thing it's off putting seeing twice as many files lists as I expected.

Perhaps there needs to be a "Delphi 2005 Project File" filter that includes bdsproj and bdsgroup ONLY and it's the default filter for the Open Project action.

If people want to upgrade a project to D2005, then let them select the Delphi Project or Delphi Package filters (which should be combined into a Delphi Legacy Filter IMHO). After all - they are only ever going to do it once. QC Entry 10392 QC #: Date Reported: Area: 10395 1/14/2005 IDE\Project Management Description: Steps: [QC Short Description] 1. Create a new project, or open an existing one. 2. Go to Project > Options. 3. In the treeview, select the Add a listbox for runtime package list "Packages" page. 4. If the "Build with runtime packages" checkbox isn't checked, check it. 5. Look at the text box just under the checkbox. This is a single-line text box containing a semicolon-delimited list (typically a very [QC Description] long list) of package names. 6. Try to remove an item from this list. Note that the only way to do so is clicking In Project Options, the list of runtime packages is jammed into a single edit box. and typing, typically with a lot of scrolling left and right (because the list is usually wider than the text box). 7. In the treeview, select the "Directories/Conditionals" page. 8. Note the similarity: this page has a large number of Please add a way to make this list more easily editable. Something similar to the "..." buttons from combo boxes, most of which contain a (sometimes long) semicolon-delimited list. Also note the "..." buttons. 9. Directories/Conditionals (and the list-edit dialogs they bring up) would be an excellent way to accomplish this. Click the "..." button next to one of the combo boxes. A "Directories" dialog box appears, with the semicolon- delimited list split out into multiple lines in a list box. Note the buttons for adding new items to the list, removing See Steps. items from the list, and replacing items. If the list of runtime packages had a "..." button, and that button brought QC Entry 10395 up a dialog similar to this "Directories" dialog, runtime packages would be a great deal easier to work with. QC #: Date Reported: Area: 10481 1/19/2005 Debugger\Watches Description: Steps: [QC Short Description] Open any project You can't delete multiple selected watches. Add a few watches Select more than one watch in the watch view [QC Description] Press the key In the watches window you can multi select the watches. However if you then press the DEL key or the Ctrl+D Only a single watch is deleted shortcut, only one watch (amongst the selected group) is deleted. QC Entry 10481 QC #: Date Reported: Area: 10931 2/15/2005 Documentation Description: Steps: [QC Short Description] If you press F1 (over TChart comp.), Help appears 'No topic found' TChart Help

[QC Description] TChart help is in Tiburon: The TChart Help is not available. ms-help://embarcadero.rs2009/TeeChart8Standard/html/TChart.html QC Entry 10931

QC #: Date Reported: Area: 12768 5/12/2005 Debugger\CPU Description: Steps: [QC Short Description] N/A New register pane context menu items

[QC Description] It would be useful if the context menu for registers in the register pane contained items to:

1) Display memory starting at the register address.

2) Start a disassembly starting at the register address.

The register address should be used directly or optionally dereferenced. QC Entry 12768 QC #: Date Reported: Area: 12993 5/21/2005 MTS\Wizards Description: Steps: [QC Short Description] Try File, new, other and nothing is found. Also after first making an ActiveX Library. There are no MTS Wizards

[QC Description] I can not find these wizards anywhere. The help says

To bring up the Transactional Object wizard

Choose FileNewOther. Select the folder labeled ActiveX under Delphi Projects. Double-click the Transactional Object icon in the right pane.

This is not possible. QC Entry 12993 QC #: Date Reported: Area: 13104 5/25/2005 IDE\Menus Description: Steps: [QC Short Description] N/A Too few projects on File/Reopen

[QC Description] IMO, there are too few projects and too many individual files listed on the File/Reopen menu. Please increase the number of projects and decrease the number of individual files. It would be nice if there were an option to set the number of each - a registry entry would suffice as far as I'm concerned. QC Entry 13104 QC #: Date Reported: Area: 13670 6/14/2005 Debugger\Watches Description: Steps: [QC Short Description] ability to right click on an expanded sub property in watch window and select Add as watch

[QC Description] With the addition of expanding watches the following additional feature request is made:

Ability to right click on an expanded sub property in watch window and select Add as watch

Specifically if I drill down multiiple levels, it might be easier to maintain a watch at that level, instead of seeing all of the expanded properties. QC Entry 13670 QC #: Date Reported: Area: 13816 6/20/2005 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] Make path reconstruction in ProjectManager optional

[QC Description] Currently, path in PM is represented as folder with subfolders... when project structure is complex enough, then to get to the file will require some number of clicks... Now, yes, it is good in many cases, but not very good fit for others... Is it possible to make this "reconstruction" optional - have ability for "Delphi 7" style - yes, we lost file location column, but I would live with just Hint for file location...

QC Entry 13816 QC #: Date Reported: Area: 14024 6/29/2005 Internet\XML\Data Binding Description: Steps: [QC Short Description] Generate a binding for the attached file and try to compile it. Decimal type, duplicate names 2 errors

[QC Description] The data binding wizard dosn't recognises the decimal type, it's imported with the default type 'widestring' in my case.

If duplicate names are present in the .xsd file the wizard will create duplicate interface and objects and the compiler will report error. If the interface name is redefined in the wizard dialog the interface definitions will be ok, but the object definitions will be still duplicate. QC Entry 14024 QC #: Date Reported: Area: 14232 7/9/2005 Documentation\Online Help\VCL Description: Steps: [QC Short Description] SYSOP: The page for this help topic is. ms- TFileStream.Create lists fmShareXxxx constants twice help://borland.bds3/bds3win32api_win32/html/ClassesTFileStreamCreateMethod.htm

[QC Description] The online help for TFileStream.Create has two tables of constants to be passed to the Mode parameter. The sentence before the first table suggest that this table contains only the "open mode" constants while the second table contains the "share mode" constants. Actually the first table contains both, the "open mode" and the "share mode" constants. QC Entry 14232

10/26/05 - The topic still exists as specified in this bug. We will have to defer it until Highlander, since the DeXter doc is locked. -- Janet QC #: Date Reported: Area: 14558 7/21/2005 VCL\Win 32 Controls\TListView Description: Steps: [QC Short Description] 1. Create empty VCL application. 2. Paste this procedure TForm1.FormCreate(Sender: TObject); var I : integer; Basic bug in clear leads to huge execution time begin FListView := TListView.Create(Self); with FListView do begin Parent := self; Align := alLeft; ViewStyle := vsReport; Columns.Add.Width := 200; SortType := stNone; Items.BeginUpdate; for I := 1 to 10000 do AddItem [QC Description] (IntToStr(I), nil); Items.EndUpdate; end; end; 3. Run 4. Close (while looking at the task manager CPU). Then First the behavior: if you have a simple list with 10000 items, clearing takes a lot of time (populating takes also you can try the same using the attached comctrls unit (be sure to build with it). time, but that's something else).

Clear is sending LVM_DELETEALLITEMS message, which triggers LVN_DELETEALLITEMS notification.

There are several basic problems with notifications:

- Item.Destroy sends LVM_DELETEITEM message even if it's coming from a notification. This means that LVN_DELETEALLITEMS triggers one LVN_DELETEITEM also, which is totally unnecessary (there is some logic to avoid double free) IF LVN_DELETEALLITEMS returns 1.

- LVN_DELETEALLITEMS does NOT set the return value to 1 (same in LVN_DELETEITEM)! Because of this each list item must be deleted (in destroy) sending an explicit call.

Correcting these problems leads to an instant response for the clear call. QC Entry 14558 QC #: Date Reported: Area: 19881 10/7/2005 Debugger\Call Stack Description: Steps: [QC Short Description] Similar to other windows in the IDE that have multiple lines (like Message View), I'd like to have the ability to Allow for the contents of the Call Stack Window to be copied/exported copy all of the lines and/or export the contents of the window to a text file. To make this 100% obvious, please add menu items to the context menu for this window. [QC Description] Allow for the contents of the Call Stack Window to be copied/exported QC Entry 19881 QC #: Date Reported: Area: 19963 10/10/2005 IDE\Code Editor\Sync Edit Description: Steps: [QC Short Description] New->Delphi Projects->VCL Forms Application Click on the Code tab CTRL-A to select all CTRL-SHIFT-J to Scrolling in sync edit mode sometimes cancels the sync activate sync edit mode Scroll the editor window down by clicking the vertical scroll bar Result; Sync edit is cancelled Now; CTRL-A to select all CTRL-SHIFT-J to activate sync edit mode Scroll the editor window down [QC Description] by rolling the mouse wheel Result; Sync edit is NOT cancelled Whan a block of code highlighted, and sync edit is activated scrolling the code editor using the scroll bars (horizontal or vertical) sync edit is cancelled. But, scrolling using the mouse wheel doesn't cancel sync edit mode.

This is true for C++, and C# projects. QC Entry 19963 QC #: Date Reported: Area: 20027 10/11/2005 Documentation\Online Help Description: Steps: [QC Short Description] 1. Start Internet Explorer 2. Select Tools|Options 3. Click the Colors button in the lower left corner on the Help system uses black text on default background General tab 4. Turn off "use Windows colors", and set the text to white, and background to black. 5. Start Delphi 2006. 6. Click the Help button. Help file's welcome page is readable with black text on a white [QC Description] background. 7. Look up TControl (Delphi for Win32) in the index TControl's help is displayed with black text on The body text of many (but not all) topics in the Delphi 2006 help system seems to be hard-coded as black, while a black background. the background color is the default background color specified in Internet Explorer. If Internet Explorer is configured to show white text on a black background, the Delphi 2006 help system will show black text on a black background. QC Entry 20027 QC #: Date Reported: Area: 20051 10/12/2005 IDE\Search Description: Steps: [QC Short Description] Remove modal search dialog and add a "Firefox Search Bar"

[QC Description] Currently, the current file search feature of the IDE pops up a modal dialog box, which the user fills out, and which then requires a click.

Since modal dialogs are rapidly going out of style, please institute a search functionality similar to that found in the Firefox web browser.

Rather than pop up a modal dialog, the IDE should display at the bottom of the editor a small tool bar that allows the user to type the search phrase into an edit box. Incremental search is done as the user types. If the user types something that is not found in the file, then a small "not found" sound is played. The tool bar can have common search choices such as "Match Case", "Find Next", "Find Previous", etc.

I've grown quite used to the Firefox Search model, and really like it. I think it would make a great addition to the Delphi IDE. QC Entry 20051 QC #: Date Reported: Area: 20170 10/16/2005 IDE\Form Designer Description: Steps: [QC Short Description] You must have another application running 1. Create new VCL Form Application. 2. Add ActionList to form. 3. Closing action editor makes BDS go behind other applications. Double -click ActionList1. 4. Right - click and select New Standard Action... 5. Cancel Dialog. 6. Close Action List Editor by clicking on the X top Right. 7. The other application is now the foreground window. [QC Description] I have insatlled only the C++ personality.

When closing the action editor BDS is no longer the active appplication.

WinXP SP2 with latest MS patches. QC Entry 20170 QC #: Date Reported: Area: 20383 10/20/2005 Documentation\Online Help\VCL Description: Steps: [QC Short Description] Missing Font.Orientation documentation

[QC Description] Doesn't appear to be any documentation on how this works. QC Entry 20383 QC #: Date Reported: Area: 20899 11/1/2005 Debugger\Evaluator ToolTips Description: Steps: [QC Short Description] For example, File, New VCL Forms App Double click the form aand add this code Set a breakpoint on that Eval Hover Hints Do Not Update As Easily as in D7 single line, run Move the mouse from Self to Caption, but the hint still shows the Self eval hint: procedure TForm1.FormCreate(Sender: TObject); begin Self.Caption := 'Test'; end; [QC Description] While debugging, if I move the mouse from one identifier to the next, the previous eval hint doesn't always disappear, so I have to click to make the hint move to the new identifier and show the new identifier's value. Previously, I could just hover. See Steps.

The above may be a change in behavior because it thinks I might be moving the mouse into the hint to expand something?

From Chris: Yes, before expandable hints, the code would keep the hint visible as long as the mouse stayed in the bounding rectangle of the editor token. Now, it uses a union of the editor token rect and the hint rect itself. So in most cases it won't go away when simply moving the mouse horizontally to a different token on the same line (depending on how wide the hint itself is).

There may be a way to be smarter about this. If you file a QC report for this, I'll investigate it. QC Entry 20899 QC #: Date Reported: Area: 20965 11/3/2005 IDE\Packages Description: Steps: [QC Short Description] In the IDE, F2084 Internal Error when attempting to install certain packages open the attached project group, ProjectGroup1.bdsgroup.

[QC Description] In the Project Manager, right click RxCtl10.bpl and select "Build" from the local menu. Attached is the source for the popular open source library RXLib (now part of the JVCL). Attempting to install all Then right click RxDB10.bpl and select "Build" from the local menu. packages causes the following error: Right click dclrx10.bpl and select "Install" from the local menu. Right click dclrxdb10.bpl and select "Install" from the local menu. [Pascal Fatal Error] dclrxdb10.dpk(39): F2084 Internal Error: AV1AD113B6-R00000000-0 See the following Internal Error.

Please refer to steps to produce the error. [Pascal Fatal Error] dclrxdb10.dpk(39): F2084 Internal Error: AV12AF13B6-R00000000-0' QC Entry 20965

(Original Description) (JJS: See attached comment by Chris Pattinson from 2/5/2007 with Barry Kelly's comments. Basically, he recommends handling exceptions in user components so they are not reported as compiler Internal Errors) 1) Compile RxCtl10.dpk 2) Compile RxDB10.dpk 3) Install dclrx10.dpk 4) Attempt to install dclrxdb10.dpk. You will get the following error:

[Pascal Fatal Error] dclrxdb10.dpk(39): F2084 Internal Error: AV1AD113B6-R00000000-0 QC #: Date Reported: Area: 20997 11/4/2005 VCL\Additional Controls\TSplitter Description: Steps: [QC Short Description] 1) New VCL32 Form 2) Place a TPanel, Align=alTop 3) Place a TSplitter, Align=alTop 4) Place a Panel, AlignWithMargins blocks TSplitter Align=alClient 5) Run and test, all Ok 6) Set AlignWithmargins=True on First Panel 7) Run and Test, Splitter is nonfunctional ----- Additional: Setting the Splitter's AlignWithmargins=True also breaks it, setting it for the [QC Description] alClient Panel has no effect

See steps QC Entry 20997 QC #: Date Reported: Area: 21041 11/5/2005 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Compare ShellAPI.pas and ShellAPI.h (from the Microsoft Platform SDK). Update ShellAPI.pas

[QC Description] The ShellAPI.pas is not sync with the latest version of ShellAPI.h

Here is a list of differencies : ShellAPI.pas: Line 155 of ShellAPI.h: #define ABM_SETSTATE 0x0000000a Line 236 of ShellAPI.h: #define FOF_NORECURSEREPARSE 0x8000 Line 370 : #define SEE_MASK_HMONITOR 0x00200000 Line 372 : #define SEE_MASK_NOZONECHECKS 0x00800000 Line 375 : #define SEE_MASK_NOQUERYCLASSSTORE 0x01000000 Line 376 : #define SEE_MASK_WAITFORINPUTIDLE 0x02000000 Line 379 : #define SEE_MASK_FLAG_LOG_USAGE 0x04000000 Line 420 : HANDLE hMonitor; // in _SHELLEXECUTEINFOA Line 442 : HANDLE hMonitor; // in _SHELLEXECUTEINFOW Line 461 : Missing WinExecErrorA Line 462 : Missing WinExecErrorW Line 466 : Missing WinExecError Line 470 : Missing SHCreateProcessAsUser declaration and types Line 499 : Missing SHQueryRecycleBinA, SHQueryRecycleBinW, SHQueryRecycleBin and types Line 513 : Missing #define SHERB_NOCONFIRMATION 0x00000001 Line 514 : Missing #define SHERB_NOPROGRESSUI 0x00000002 Line 515 : Missing #define SHERB_NOSOUND 0x00000004 Line 525 : Missing SHEmptyRecycleBinA, SHEmptyRecycleBinW, SHEmptyRecycleBin Line 559 : Missing UINT uVersion; // in _NOTIFYICONDATAA Line 565 : Missing GUID guidItem; // in _NOTIFYICONDATAA Line 586 : Missing UINT uVersion; // in _NOTIFYICONDATAW Line 592 : Missing GUID guidItem; // in _NOTIFYICONDATAW Line 652 : Missing #define NIF_GUID 0x00000020 Line 656 : Missing #define NIS_HIDDEN 0x00000001 Line 657 : Missing #define NIS_SHAREDICON 0x00000002 Line 669 : Missing #define NIIF_USER 0x00000004 Line 673 : Missing #define NIIF_NOSOUND 0x00000010 Line 747 : Missing #define SHGFI_ATTR_SPECIFIED 0x000020000 // get only specified attributes Line 756 : Missing #define SHGFI_ADDOVERLAYS 0x000000020 // apply the appropriate overlays Line 757 : Missing #define SHGFI_OVERLAYINDEX 0x000000040 // Get the index of the overlay Line 779 : Missing SHGetNewLinkInfoA, SHGetNewLinkInfoW, SHGetNewLinkInfo Line 791 : Missing #define SHGNLI_NOLNK 0x000000008 // don't add ".lnk" extension Line 800 : Missing SHInvokePrinterCommandA, SHInvokePrinterCommandW, SHInvokePrinterCommand and associated constants Line 836 : Missing SHLoadNonloadedIconOverlayIdentifiers Line 857 : Missing SHIsFileAvailableOffline Line 859 : Missing #define OFFLINE_STATUS_LOCAL 0x0001 Line 860 : Missing #define OFFLINE_STATUS_REMOTE 0x0002 Line 861 : Missing #define OFFLINE_STATUS_INCOMPLETE 0x0004 Line 869 : Missing SHSetLocalizedName Line 892 : Missing ShellMessageBoxA, ShellMessageBoxW, ShellMessageBox Line 915 : Missing IsLFNDriveA, IsLFNDriveW, IsLFNDrive Line 927 : Missing SHEnumerateUnreadMailAccountsA, SHEnumerateUnreadMailAccountsW, SHEnumerateUnreadMailAccounts Line 934 : Missing SHGetUnreadMailCountA, SHGetUnreadMailCountW, SHGetUnreadMailCount // overloaded Line 941 : Missing SHSetUnreadMailCountA, SHSetUnreadMailCountW, SHSetUnreadMailCount // overloaded Line 952 : Missing SHTestTokenMembership Line 957 : Missing SHGetImageList Line 959 : Missing #define SHIL_LARGE 0 Line 960 : Missing #define SHIL_SMALL 1 Line 961 : Missing #define SHIL_EXTRALARGE 2 Line 962 : Missing #define SHIL_SYSSMALL 3 Line 964 : Missing #define SHIL_LAST SHIL_SYSSMALL QC Entry 21041 QC #: Date Reported: Area: 21044 11/5/2005 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Compare shlguid.h and shlobj.h (from the Microsoft Platform SDK) to ShlObj.pas Update of ShlObj.pas

[QC Description] ShlObj.pas is not sync with the latest version of ShlObj.h (new interfaces, new types, new structures, new constants).

The declaration of SID_ and IID_ should contains changes in ShlGuid.h too, adding guid from CLSID_ShellDesktop (line 22 of ShlGuid.h) to CLSID_MyDocuments (line 35 of shlguid.h) would be a great idea. QC Entry 21044 QC #: Date Reported: Area: 21140 11/7/2005 Debugger\Stepping Description: Steps: [QC Short Description] Stepping/debugging within selected thread(s) only

[QC Description] When debugging multi-threaded applications single stepping the debugger can cause jumps between threads. This is of course not an error but it can be rather anoying.

I suggest a Ctrl/Shift/Alt F7/F8 or whatever key combination that will cause the debugger to not stop in other threads but only in the relevant thread.

It would also be great to be able to enable/disable breakpoints/breakpoint groups based on what thread they are activated in.

Of course this feature is equally relevant in Win32 and .NET. QC Entry 21140 QC #: Date Reported: Area: 21211 11/9/2005 IDE\Project Management Description: Steps: [QC Short Description] 1. Open a project, that has more than one unit. 2. right click on an unopen unit. 3. Select "Save as" // Expected: Right click save as fails! A prompt to rename // Act: "This operation requires that the selected module be open in the editor" Details >> + $29[20BCC233]{coreide100.bpl} ProjectModule.ProjectModule.TBaseProject.SaveLocalFile (Line 1513, [QC Description] "ProjectModule.pas" + 7) + $29 + $0[5202CAB7]{vcl100.bpl } Menus.Menus.TMenuItem.Click (Line 1878, Project Manager -> Right click -> save as fails! "Menus.pas" + 14) + $0 + $B[5202F08D]{vcl100.bpl } Menus.Menus.TPopupList.MainWndProc (Line 3373, "Menus.pas" + 1) + $B + $9[51F40BA0]{rtl100.bpl } Classes.Classes.TDataModule.BeforeDestruction (Line // See steps 11375, "classes.pas" + 1) + $9 + $2588[77D43A5C]{USER32.dll } CreateWindowExA + $2588 + $2655 QC Entry 21211 [77D43B29]{USER32.dll } CreateWindowExA + $2655 + $2891[77D43D65]{USER32.dll } CreateWindowExA + $2891 QC #: Date Reported: Area: 21702 11/23/2005 VCL\Dialog Controls Description: Steps: [QC Short Description] Update TPageSetupDialogOption in Dialogs.pas to include psoEnablePagePaintHook Update Printing Commondialog with latest values from commn.dlg.h psoEnablePageSetupHook psoEnablePageSetupTemplate psoEnablePageSetupTemplateHandle And update the Execute function. [QC Description] The TPageSetupDialogOptions typedef is missing some values from commndlg.h.

PSD_ENABLEPAGEPAINTHOOK PSD_ENABLEPAGESETUPHOOK PSD_ENABLEPAGESETUPTEMPLATE PSD_ENABLEPAGESETUPTEMPLATEHANDLE QC Entry 21702 QC #: Date Reported: Area: 21817 11/30/2005 Documentation\Online Help\Main help Description: Steps: [QC Short Description] Go to ms-help://borland.bds4/bds4win32devguide/html/idh_programmingtemplates.htm My help shows text Help incorrect for Templates starting with: "ToolsOptions>Editor Options>Source Options Use this page to manage code templates. Code templates include commonly used programming statements (such as if, while, and for statements) that you can [QC Description] insert into your source code. ..." It took me a while to locate the code template list dialog. It's actually on \View\Templates but part of the help claims it's on \Options\Editor options\Source options. QC Entry 21817 QC #: Date Reported: Area: 21930 12/4/2005 Documentation\Online Help\Object Pascal Description: Steps: [QC Short Description] operator overloading documentation correction

[QC Description] A minor (but highly annoying) correction for-- ms-help://borland.bds4/bds4ref/html/OperatorOverloads.htm.

For the shift operators, they are LeftShift and RightShift, not ShiftLeft and ShiftRight (though the latter seem more appropriate; maybe the compiler guy(s) can be convinced to use both). QC Entry 21930 QC #: Date Reported: Area: 22022 12/7/2005 IDE Description: Steps: [QC Short Description] Set IDE to non embedded classic undocked. Open up a project with several units that have design forms. Try Using view unit (Ctrl+F12) always shows design form flipping between the units using Ctrl+F12. Notice that the IDE will always show the form, and not the source view. So you have to press F12 once more. (Creates another problem, see QC 10661: Install all components [QC Description] from JVCL and DevExpress, and then try this. Notice that it will take about 2-3 seconds for it to switch) Tested in non embedded, classic undocked.

Default behaviour is broken, as the designer now always show the design form of the unit when using Ctrl+F12 to view a new unit.

Default behaviour before was showing the source code, and is the most logical thing to have here since you want to vew the unit, not the form. You have Shift+F12 (View form) for that.

Since viewing a form takes 2 seconds on a XP 3200 with 1G RAM (when JVCL and DevExpress is installed), a bi effect is that switching units will take a long time. See QC 10661 for more info on this (speeded up a bit in D2005 update 3). But still slow.

So please change it back to the standard behaviour, and view source instead of form. Or make it an option. QC Entry 22022 QC #: Date Reported: Area: 22059 1/13/2004 IDE\Dialogs\Project Options Description: Steps: I have the IDE set to echo command lines in the message window. When I tried to use this to capture a - i have a Output directory of "..\..\Bin" specified for my project. very obviously, the assembly also gets built into command line for a delphi package I was surprised to find that the command line does not work - even after said directory. however, when i turn on "Show CommandLine" i see "-ER:\RemObjects SDK extensive work on my part to try to "fix it up". for .NET\Source\RemObjects.SDK.Delphi8\" which is my project folder.

Tried also with a simple delphi vcl forms app and had the same problem. - the command line output lists an option of -C0 [That's a Zero], which dccil doesn't understand.

- the command line output also lists the .dpk as *last* item of the commandline, leading dccil to emit "project $A-" not found. the project has to be the FIRST item on the command line

- it doesn't bother to prefix the $A+ etc compiler options with a "-"

- it doesn't bother to quote filenames and searchpaths that have spaces

in summary, i guess it would have been easier to list what parts the command line output got *right*, and it's hard to hold back saying this is just completely useless. QC #: Date Reported: Area: 22169 12/10/2005 Documentation\Online Help\Object Pascal Description: Steps: [QC Short Description] In page "ms-help://borland.bds4/bds4ref/html/Overview.htm" the example code for "A Simple Console Bad indentation on sample code in help examples Application" is formatted in a rather odd manner: program greeting; {$APPTYPE CONSOLE} var MyMessage: string; begin MyMessage := 'Hello world!'; Writeln(MyMessage); end. Likewise the code for the "A More [QC Description] Complicated Example": program greeting; {$APPTYPE CONSOLE} uses Unit1; begin PrintMessage('Hello The indentation is highly irregular. World!'); end. The "A VCL Application" example has the same problem. QC Entry 22169 QC #: Date Reported: Area: 22262 12/13/2005 Documentation Description: Steps: [QC Short Description] SYSOP: Link in Help File: ms-help://borland.bds4/bds4ref/html/fhxr39722.htm Help lists wrong VER symbol for D2006

[QC Description] The online help topic "Conditional compilation (Delphi)" lists the version constant for D2006 as VER140. This is wrong, it is VER180. QC Entry 22262 ms-help://embarcadero.rs2010/rad/Conditional_compilation_(Delphi).html

Latest version says: Always defined, indicating the version number of the Delphi compiler. (Each compiler version has a corresponding predefined symbol. For example, compiler version 18.0 has VER180 defined.)

QC #: Date Reported: Area: 22354 12/15/2005 IDE\Packages\Package Manager Description: Steps: [QC Short Description] Create a new package and save it. Create a form and save it. Remove form from package. Right-click on Adding a unit with a form to a package only registers the unit package and click Add. Select the unit you previously removed. Check the project manager. The form branch is not there and the package source doesn't have the form name associated to the unit. [QC Description] If you create a new package and create a form in the package, the Project Manager correctly displays a unit with a form branch. If you remove the form and add the unit manually by any means (drag and drop, right-click->Add) the unit is registered and does NOT have the form branch showing.

This affect StarTeam checkin and checkout and also affects form inheritance since the base class cannot be found unless the form info is specified in the package source.

The package source after adding looks like this:

Unit1 in 'Unit1.pas'; when it should look like:

Unit1 in 'Unit1.pas' {Form1};

I have to manually edit the package source to correct it. QC Entry 22354 QC #: Date Reported: Area: 22532 12/19/2005 IDE\File Handling Description: Steps: [QC Short Description] 1. Open Delphi 7, 8, Delphi 2005, or Delphi 2006 (any or no Service Pack for any of them). 2. Use "Welcome "List index out of bounds" after using Welcome Page Open Project button Page => Open Project button" to open any existing project that is not on the Welcome Page MRU list. 3. Use "Toolbar => File Open Dropdown array" to try to open any recent project. Delphi will tell you "List index out of [QC Description] bounds (2)", when you try again "List index out of bounds (1)", and only on third try open. I will attach a When using both Open button on Welcome page and toolbar MRU, projects won't open, Delphi will tell me "List screenshot anyway... PS: MRU = Most Recently Used PPS: Already exists in bug 11007 // Note (QC Sysop): index out of bounds" instead. The Projects need to be on a samba drive. Unable to reproduce without samba. // Note (QC Sysop): AIR with stacktrace and modules lists can be found here: QC 22751, QC 22839, QC 22840, QC23099 Update to Service Pack 1 did not help (updated build no in bug entry therefore). QC Entry 22532

NOTE: i have no Samba drive, ergo i cannot reproduce this. i opened it in case anyone in R&D has one and can try it. QC #: Date Reported: Area: 22540 12/19/2005 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] Using external editors for unsupported file types

[QC Description] It would be great if files, added to project, but not supported by IDE editors, would be edited in their original editors if you just double click them in Project Manager window.

For example, I have a folder Documents. There are some DOC and XLS files related to my project. For now if I want to see their contents or edit them I have to open then from external editors (Word, Excel etc.) or find them by file manager and activate.

If I double click them in Project Manager, Delphi tries to edit such files - opens them in hex editor. Instead of such behaviour I propose to just raise such files with ShellExecute function.

That would: 1. save time when need to edit some info 2. help to collect all project-related files in project manager. (well not 'help' itself, but stimulate to do so) QC Entry 22540 QC #: Date Reported: Area: 23195 1/6/2006 IDE\Form Designer Description: Steps: [QC Short Description] ExpressBars product from Developer Express was used. 1) Drop TdxDockPanel on the form 2) Click it The AV using control guidelines with dock controls from Developer Express ExpressBars problem seems to be here: function TControlGuidelines.CalcHorzPos(APos: Integer): Integer; var LParent: TWinControl; begin if Component <> Container then LParent := TControl(Component).Parent else LParent := [QC Description] TWinControl(Component); Result := TControl(Component).Left + APos; while LParent <> Container do <<<<<< Access violation at address 00371FF1 in module 'designide100.bpl'. Read of address 00000040. begin Inc(Result, LParent.Left); LParent := LParent.Parent; end; end; The code assumes that after LParent := LParent.Parent; LParent cannot be nil and it is probably nil in this case. QC Entry 23195

The following QC AIR reports also show this stack trace:

70585 26503 25900 25899 QC #: Date Reported: Area: 23651 1/16/2006 Documentation\Online Help\VCL Description: Steps: [QC Short Description] Try finding TServiceApplication.DelayInitialize in the help system; it's not there. TServiceApplication.DelayInitialize property not documented

[QC Description] TServiceApplication.DelayInitialize -- a very important property to know about when writing for apps running on Windows 2003 systems (see http://distribucon.com/blog/archive/2006/01/11/870.aspx) is not mentioned in the Help system.

When it is documented, it might be good to discuss the pros & cons of both possible values when running in Win2003 and non-Win2003 environments, and whether post-Win2003 -- e.g., Vista -- Windows version are likely to require it to be set a particular way. I myself am using the code

SvcMgr.Application.DelayInitialize := CheckWin32Version(5, 2); in my DPR, but this may not be ideal. QC Entry 23651 QC #: Date Reported: Area: 23670 1/16/2006 IDE\Tool Palette Description: Steps: [QC Short Description] 1. File | new | vcl app Remember Tool Palette position after going to src and than back to designer 2. scroll down towards bottom (ie WebSnap) and put a TAdapter on a form 3. F12 to view source [QC Description] 4. F12 again to switch back to design view When I'm designning a form and placeing some components near the end of component palette and click F12 to edit some source and than going back to designning form than the position in Tool Pallette is not the same //exp : tool pallate to be where you left it where it was before. (The Tool Pallette is other in source than in designning, than you reposition view.) It may be //res : it's somwhere else fine when you will store scrollbar position of tool palette for each view/type separatelly. QC Entry 23670 QC #: Date Reported: Area: 23732 1/17/2006 Documentation\Online Help\VCL Description: Steps: [QC Short Description] 1. Load Delph help. TWideStrings documentation is incorrect or missing. 2. Browse the following URL. ms-help://borland.bds4/bds4win32api_win32/html/DelphiWin32_WSDLIntfTWideStringsClass.htm [QC Description] Online help file says TWideStrings is in WSDLIntf.pas, but it is also in WideStrings.pas. WideStrings.pas should Fixed, see be documented. ms-help://embarcadero.rs2009/delphivclwin32/WideStrings_TWideStrings.html QC Entry 23732 QC #: Date Reported: Area: 24521 2/5/2006 Compiler\Delphi\Interfaces Description: Steps: [QC Short Description] Compile the attached program below. interface implementation methods not recognized if declared as strict private See the following compile time error. [QC Description] Under Delphi 2006 (Win32 personality), the following code is accepted and behaves as expected: Error: E2003 Undeclared identifier: 'DoSomething' type IMyInterface = interface This behavior is inconsistent with Delphi for .NET which compiles and runs the test case as expected. ['{291883F3-1000-4BC6-9FC3-ABB16F4F7D36}'] procedure DoSomething; program BTS257056; end; {$APPTYPE CONSOLE} TMyClass = class(TInterfacedObject, IMyInterface) private var procedure DoSomething; Counter: Integer = 0; end; However, declaring the TMyClass.DoSomething method as strict private is not accepted.Ex: type type IMyInterface = interface IMyInterface = interface ['{291883F3-1000-4BC6-9FC3-ABB16F4F7D36}'] ['{291883F3-1000-4BC6-9FC3-ABB16F4F7D36}'] procedure DoSomething; procedure DoSomething; end; end; TMyClass = class(TInterfacedObject, IMyInterface) TMyClass = class(TInterfacedObject, IMyInterface) strict private strict private procedure DoSomething; procedure DoSomething; end; end; The error I receive is: [Pascal Error] MyUnit.pas(14): E2003 Undeclared identifier: 'DoSomething' procedure TMyClass.DoSomething; QC Entry 24521 begin Inc(Counter); end;

var MyStuff: IMyInterface;

begin MyStuff := TMyClass.Create; MyStuff.DoSomething; if Counter = 1 then WriteLn('PASS') else WriteLn('FAIL'); end. QC #: Date Reported: Area: 24804 2/12/2006 IDE\Code Editor Description: Steps: [QC Short Description] New->Delphi Projects->VCL Forms Application Click OK Add a TButton to the form Click on the Code Tab Now Inappropriate Edit options are available click Edit->Lock Controls Click on the Design Tab Result; You can move the TButton. It isn't locked

[QC Description] When the Code (for Delphi projects) or Unit (for C++Builder projects) tab is enabled, the Edit menu option has design options enabled. These options do not apply and have no effect. QC Entry 24804 QC #: Date Reported: Area: 24884 2/14/2006 Internet\XML\Data Binding Description: Steps: [QC Short Description] Use the XML data binding wizard to import this xml schema: Duplicate type created for Danish OIOXML Invoice schema http://rep.oio.dk/ubl/xml/schemas/0p71/pie/pieStrict.xsd Compile the resulting code.

[QC Description] Denmark is using electronic invoices for all government offices. These are defined in the xml namespace: http://rep.oio.dk/ubl/xml/schemas/0p71/pie/

The schema in question is: http://rep.oio.dk/ubl/xml/schemas/0p71/pie/pieStrict.xsd

The two elements "com:TypeCode" and "main:InvoiceCurrencyCode" both use the type TXMLCodeType. This type is generated twice by the wizard. The resulting code will not compile because of this.

Mind that I haven't read through the schemas to see if they are totally error free. So I won't guarantee that this isn't a problem with the schemas themselves. I don't think so though. QC Entry 24884 QC #: Date Reported: Area: 24948 2/15/2006 Debugger\Event Log View Description: Steps: [QC Short Description] 1. Create new classic Delphi VCL application (Win32) 2. Add Button. Double click it. 3. add this onClick event large amount of OutputDebugString makes IDE totally unresponsive. handler code: procedure TForm1.Button1Click(Sender: TObject); var t,n:Integer; begin n := 0; Button1.caption := 'now try to stop the debugger'; for t := 0 to 65535 do begin // almost an endless loop... [QC Description] OutputDebugString('The Delphi IDE Debugger will go slightly crazy and be non responsive until this completes. Create a new application and put the code shown in Steps into it, and run the application, and your IDE will be This could take a few hours'); Inc(n); //Sleep(n); end; end; 4. Run the application. [warning, save anything non-responsive permanently and you will either need to kill the EXE. important before running.] 5. Try to click any button in the IDE toolbar, especially the debugger Pause button. Try to do anything at all in the IDE. 6. For slightly less insanity, uncomment the sleep line above, which if you If a large number of OutputDebugString lines output to the Event Log View then the whole IDE will become non- put enough sleep time in, you may be able to still use the IDE. responsive. This means that the toolbar buttons used to control the debug target application (such as pause) are no longer clickable. Perhaps some kind of throttling, or some kind of buffering is necessary for OutputDebugString output.

This is really severe because it means that the target delphi app (or C++Builder app, or perhaps even a dotNet app) that outputs enough output via the win32 api OutputDebugString could make the whole IDE unstable.

If the target application keeps outputing lots of OutputDebugString output permanently, then the only way out of the situation is to kill the IDE and the target Application exe. This causes major data loss.

This does NOT happen in Delphi 7. It appears to happen in Delphi 2005 and 2006. It may be infrequent for most users, since most users don't have a lot of outputdebugstring messages, and are probably careful not to generate a huge amount of it. but if you ever slip up and put a debug message somewhere where it gets hit 100 times a second, you can kiss your IDE goodbye.

QC Entry 24948 QC #: Date Reported: Area: 25056 2/17/2006 VCL\Win 32 Controls\TListView Description: Steps: [QC Short Description] When ListView appeares Access Violation message rises.

[QC Description] In the procedure TCustomListView.CreateWnd there is a piece of code: if FSaveSelectedIndex <> -1 then begin Selected := Items[FSaveSelectedIndex]; Selected.MakeVisible(False); end;

Sometimes it happendes so that Items[FSaveSelectedIndex] returns NIL value. This causes the trouble described above. Also method TListItems.GetItem uses the expression ListView_GetItem(Handle, Item), that returns False value. And because of this Items[FSaveSelectedIndex] returns NIL value. QC Entry 25056 QC #: Date Reported: Area: 25286 2/23/2006 Compiler\Delphi\Language Description: Steps: [QC Short Description] Qualifiable enumeration constants

[QC Description] Enumeration constants are always in unit scope, even if declared local to a class. Due to this language "quirk" generations of Pascal programmers are in need to prefix nearly all those constants with something in order to circumvent the likely naming conflict.

If there were a possibility to quilify the identifiers those problems were absent.

I propose something like the following: type te=enum(a,b,c);

To access the constants you would write stuff like te.a. For enum types generated by this new syntax I suggest that they must be qualified.

By the way: This opens the possibility to even create expandable enums like type te_enhances=enum[te](d,e,f); QC Entry 25286 QC #: Date Reported: Area: 25441 2/26/2006 Documentation Description: Steps: [QC Short Description] 1. Open the help file TSaveTextFileDialog and TOpenTextFileDialog undocumented 2. Type TSaveTextFileDialog or TOpenTextFileDialog in the index 3. Find nothing [QC Description] TSaveTextFileDialog and TOpenTextFileDialog undocumented Fixed, see QC Entry 25441 ms-help://embarcadero.rs2009/delphivclwin32/ExtDlgs_TSaveTextFileDialog.html

and

ms-help://embarcadero.rs2009/delphivclwin32/ExtDlgs_TOpenTextFileDialog.html QC #: Date Reported: Area: 25613 3/2/2006 IDE\Form Designer Description: Steps: [QC Short Description] 1. Select IDE classic undocked layout 2. In Tools-Options, select VCL Designer, set show component captions sometime component's caption disappear and toolbar dithering when vcl designer show component captions checked 3. new a vcl form application, put some non-visual component, such as TClientDataset, TDataSource checked 4. F9 run the application, then close the application return to IDE then you will find the non-visual component's caption no visual and when you move component, will find the whole IDE repaint(dithering) [QC Description] when IDE use default layout, sometime appear this instance when use undocked layout, run application will appear this. very diffault to find different coomponent. QC Entry 25613 QC #: Date Reported: Area: 25763 3/6/2006 Documentation\Online Help Description: Steps: [QC Short Description] Fixed in Weaver, see Surround Editor Context Menu Item not documented ms-help://embarcadero.rs2010/rad/Using_Live_Templates.html [QC Description] Search for the Surround in the Help and no item was returned QC Entry 25763 QC #: Date Reported: Area: 26193 3/16/2006 IDE\Dialogs\Project Options Description: Steps: [QC Short Description] 1. File|New|Other, Delphi Projects, DLL Wizard, click OK Creating a DLL project and setting LIBSUFFIX causes AV and prevents generation and usage of the 2. Project|Options, enter 01 for LibSuffix, click OK project .RES file Exp: No error Actual: [QC Description] ------As per short description, creating a DLL project and setting LIBSUFFIX causes an AV and prevents generation Error and usage of the project .RES file ------QC Entry 26193 Access violation at address 51F5156D in module 'rtl100.bpl'. Read of address 0000000B. ------[D2006 : RTM : AV in coreide100.bpl ] OK Details << setting prefix causes AV in coreide100.bpl ------Details:

+ $3[51F5156D]{rtl100.bpl } Classes.Classes.TList.Get (Line 2993, "classes.pas" + 3) + $3 + $0[51F26B4B]{rtl100.bpl } System.System.@HandleAnyException (Line 9980, "system.pas" + 13) + $0 + $41[7C903786]{ntdll.dll } RtlConvertUlongToLargeInteger + $41 + $9[7C90EAF5]{ntdll.dll } KiUserExceptionDispatcher + $9 //results with latest Spacely: ------Error ------Access violation at address 20985FF3 in module 'coreide100.bpl'. Read of address 00000033. ------OK Details >> ------+ $3[20985FF3]{coreide100.bpl} ResUtils.ResUtils.TResFile.Find (Line 609, "ResUtils.pas" + 1) + $3 + $0[00346D23]{rtl100.bpl } System.System.@HandleAnyException (Line 9986, "sys\system.pas" + 13) + $0 + $41[7C903786]{ntdll.dll } RtlConvertUlongToLargeInteger + $41 QC #: Date Reported: Area: 26291 3/20/2006 RTL\Delphi\Thread support Description: Steps: [QC Short Description] Make a routine to create many TThread's that finish up very quickly. Set them to FreeOnTerminate and use the Using TThread.Resume may cause setting freed object value TThread.Resume. Set FastMM to use FullDebugMode, and it will detect modified memory after free.

[QC Description] When using TThread in suspended state, and FreeOnTerminate, TThread.Resume miss threadsafe handling of the thread.

Today the code looks like this: procedure TThread.Resume; var SuspendCount: Integer; begin SuspendCount := ResumeThread(FHandle); CheckThreadError(SuspendCount >= 0); if SuspendCount = 1 then FSuspended := False; end;

The problem is, if there are many threads created and freed, the delay after ResumeThread(FHandle) could be big enough for the thread to finish and free itself before the routine arrives at FSuspended := False.

This will cause TThread.Resume to set a value on the freed object, and in worst case corrupt memory on newly allocated memory for some other structure.

This routine has to be made threadsafe, with interlocked states or using a critical section. One solution could be something like this: [See resolution comment]

[Top Ten]

QC Entry 26291 QC #: Date Reported: Area: 26409 3/22/2006 Database\DBExpress\TSQLStoredProc Description: Steps: [QC Short Description] See report 8678 - states it's fixed. TSQLStoredProc parameters in incorrect position (Oracle)

[QC Description] TSQLStoredProc returns an Oracle 10g stored procedure parameters in wrong order. The issue is exaclty like in report 8678. Report 8678 is marked as fixed but the build number is not specified. Any more information on it? The issue is simple - SYS.ALL_ARGUMENTS.POSITION is not being selected nor used in ORDER BY. The fix is very simple but it seems it never got to any public release or update. QC Entry 26409 QC #: Date Reported: Area: 26707 3/29/2006 Internet Description: Steps: [QC Short Description] File -> New -> Other -> Delphi Projects -> WebSnap -> WebSnao Applicartion Web app debugger executable WebSnap do not compile in Delphi 2006 Class name: any OK Run (F9) [Pascal Fatal Error] Project3.dpr(9): F2051 Unit SockApp was compiled with a different version of IdTCPServer.TIdTCPServer [QC Description]

When compiling a Websnap app I got this error message:

[Pascal Fatal Error] Project3.dpr(9): F2051 Unit SockApp was compiled with a different version of IdTCPServer.TIdTCPServer QC Entry 26707 QC #: Date Reported: Area: 27156 4/10/2006 IDE\Dialogs Description: Steps: [QC Short Description] [QC Description] Make Install Packages dialog resizable 1. When no project is loaded: Clicking the Components/Install Packages menu item brings up a dialog/window 'Install Packages' which is RESIZABLE.

2. When a project is loaded: Clicking the Components/Install Packages menu item brings up a dialog/window 'Project Options for ThisProject.exe' which is NOT resizable. However obviously this is not the same dialog as when clicking Project/Options so the question arises why this dialog is not resizable as the dialog/window under 1.

Not resizable dialogs which contain lists of variable length are a very bad design, because the user has to scroll a lot to find the desired list item and he has no overview to the whole list.

Dialogs which are not resizable containing lists of variable length are a reminiscence to the old times of DOS where such cumbersome user interfaces were a result of the restricted technology at that time. QC Entry 27156 [see RAID 219297] QC #: Date Reported: Area: 29307 5/21/2006 VCL Description: Steps: [QC Short Description] 1. File | New | VCL Win32 Applicaiton Form size constraints do not work properly 2. drop a TCheckBox 3. double click CheckBox1 to code editor [QC Description] 4. paste: With a form's MaxWidth and MinWidth constraint set equally, dragging the left form border moves the form's Constraints.MaxWidth := Width; position on the screen. Dragging the right form border does nothing (as expected). Constraints.MinWidth := Width; 5. run Sample project attached. 6. Resize the running form QC Entry 29307 //exp: you can't change the form size //act : you can change it's height, but not width

Bug exist in D7

======old steps ======1) Unzip the attached project. 2) Run the program. 3) With the Constrain checkbox unchecked, drag both the left and right form borders to resize the form. 4) Check the Constrain checkbox. 5) Drag the right border - nothing happens as expected. 6) Drag the left form border - the form is repositioned on the screen.

From the comments: This is non-standard behavior and a client has complained about it.

QC #: Date Reported: Area: 30036 6/12/2006 IDE Description: Steps: [QC Short Description] Save type libraries (TLB) in text format instead of binary

[QC Description] Please provide a way to maintain type libraries in text format instead of binary format.

The binary format is bad when using version control software as you cannot compare two versions and see what changed. If two developers have changed the same file it becomes really inconvenient to manually merge the changes

The particular format is not important (IDL, XML, ...) as long as you can easily compare two versions of a type library file. QC Entry 30036 QC #: Date Reported: Area: 30665 6/27/2006 RTL Description: Steps: [QC Short Description] ImageGetCertificateHeader has wrong parameter

[QC Description] ImageHlp.ImageGetCertificateHeader is declared as: function ImageGetCertificateHeader(FileHandle: THandle; CertificateIndex: DWORD; var Certificateheader: PWinCertificate): Bool; stdcall;

It should be: function ImageGetCertificateHeader(FileHandle: THandle; CertificateIndex: DWORD; var Certificateheader: TWinCertificate): Bool; stdcall; QC Entry 30665 QC #: Date Reported: Area: 31435 7/19/2006 RTL\Delphi\Pascal Strings Description: Steps: [QC Short Description] N/A - Feature request Please complete the functionality of the UTF8String type

[QC Description] Delphi 2006 has rudimentary support for UTF-8 text through the UTF8String type. This report requests the completion of the compiler and language support necessary to make this type fully functional and on par with the AnsiString and WideString types.

Currently the type maps to a long string, which is great since that means it inherits some great features (allocation/deallocation speed, reference counting, etc.). However, there are many areas in which support is currently lacking:

1) Implicit type conversion: UTF8String is currently treated in exactly the same way as an AnsiString when doing assignments to different types, so assigning a UTF8String to a WideString or Ansistring will cause data corruption if the UTF8String contains code points outside the ASCII range (code points U+0 to U+7F). 2) Object Inspector support: UTF8Strings cannot be edited in the Object Inspector. Again, the UTF8String is treated as an ordinary AnsiString, and thus code points outside the ASCII range are lost or corrupted. 3) Compiler support for UTF-8 string constants: The compiler does not support the assignment of Unicode text constants to UTF8String variables. All code points outside the ASCII range are lost or corrupted when assigning a Unicode text constant to a UTF8String variable. The compiler should implicitly convert the constant to UTF-8 during compilation. 4) Manual type conversion functions (Utf8ToUnicode and UnicodeToUTF8) only support the BMP (Basic Multilingual Plane, plane 0. i.e. the first 64K code points): The RTL and IDE's Unicode support is still limited to UCS-2, whereas Windows has moved on to UTF-16.

Full support of UTF-8 is a worthwhile companion to full support of UTF-16. UTF-8 is more storage space efficient than UTF-16 when working with predominantly European languages. Backed by the long string type the UTF8String type is also faster than the WideString type because it is not allocated on the (slow) Windows heap, and it is also reference counted. QC Entry 31435 QC #: Date Reported: Area: 31728 7/25/2006 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] [QC Description] Add ability to specify build configurations for all projects in a group I have a project group with about 8 projects in it. When I want to switch from DEBUG to RELEASE builds I have to edit the properties of each project in turn and turn off debug info, add conditional defines, etc.

On 8 projects this takes far too long, and then I have to switch them back again afterwards.

I'd like to be able to create build configurations in which I can set compiler/linker options + defines that get merged into the projects' conditional defines during compilation.

QC Entry 31728

+ Bring up multiple project in a project group + Project | Build Configurations (similar to the C++ idea). QC #: Date Reported: Area: 31809 7/27/2006 IDE\File Handling Description: Steps: [QC Short Description] 1) Create a project 2) Save all 3) Close the project 4) Mark the project files read-only (as if checked into source Cannot close a project if read-only control) 5) Open the project 6) Close the project Step 6 fails because ...... bdsproj.local is read-only. ------Additional from QA ------You must kill the IDE in order to close the project. You are unable to close [QC Description] the project or start a new one because the files are not handled correctly. The IDE will not let me close a project if it is read-only QC Entry 31809 QC #: Date Reported: Area: 31978 8/1/2006 IDE Description: Steps: [QC Short Description] Remove Limit from Menu: File, Reopen Project List.

[QC Description] There has been NG chatter (on & off) about this for the last 6 years, but apparently it was never entered in QC.

It would be great if we could set our own limit for the MRU Project list; 4 are just not enough.

I generally ping-pong between 6 - 7 different projects in any given month. Not too mention package builds.

I have one client who currently has 6 on going projects for different sections of their company.

If you can't let us set the limit, then I would suggest that 10 - 15 would be a respectable number. QC Entry 31978 QC #: Date Reported: Area: 32017 8/2/2006 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] Open a project with a large number of files. Size the PM pane to not show all of the files in the project Scroll so Project Manager should scroll automatically if necessary when dragging file to new location that the last file in the list is showing Grab the bottom file and try to drag to the top of the list - move it above the top visible file - window does not scroll It is necessary to drop the file near the top of the list, scroll the list and [QC Description] then grab and drag the file again to reach the top of the list. The Project Manager pane allows files to be dragged to new locations with the mouse, but if the desired location is not visible in the pane, it will not scroll to show the location.

Please add auto-scrolling during dragging as is done in Windows Explorer. sysop note: This is very similar to QC 584 and very easy to implement since this is automatically supported by TVirtualStringTree: just include toAutoScroll in TreeOptions.AutoOptions! QC Entry 32017 QC #: Date Reported: Area: 32038 8/2/2006 Database Description: Steps: [QC Short Description] var S, T: string; P: TParams; begin S := 'SELECT * FROM A WHERE Code=:Code AND DocNo=:DocNo'; P := TParams.ParseSQL return null terminated string with rubbish appended TParams.Create; try T := P.ParseSQL(S, True); CheckEquals(40, Length(T)); finally P.Free; end; end;

[QC Description] Use TParams.ParseSQL to parse the following SQL:

SELECT * FROM A WHERE Code=:Code AND DocNo=:DocNo

It will return

SELECT * FROM A WHERE Code=? AND DocNo=?'#0'ocNo'#0'cNo

We can notice there are some rubbish characters appended behind the #0 char. QC Entry 32038 QC #: Date Reported: Area: 32115 8/4/2006 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] Try to drag an editor file to the project manager Project manager shows insertion point as if ready to accept file, Please add capability to drag & drop from an editor tab to the project manager but the mouse cursor remains the don't symbol

[QC Description] If an external file is opened in the editor, I would like to be able to add the file to the project by draging and dropping from the editor tab to the project manager. QC Entry 32115 QC #: Date Reported: Area: 33599 9/6/2006 IDE\Object Inspector Description: Steps: [QC Short Description] Start BDS 2006 select default (docked) desktop layout Create New Delphi Win32 Application Add some OI Drop down list stay open after switching to another application with ALT Tab components on the form Select one of this component Click on the OI Drop Down list of components Click again if it does not drop down Switch to another application with the "Alt" "Tab" combination Act : drop down list [QC Description] stay open in the middle of the screen on application switch Exp: drop down list should close before switching to OI "Drop down list" stay open after switching to another application when using ALT Tab another application Note - this happens only once - after closing the dropdown it will later function properly until QC Entry 33599 another new app is created or the desktop layout is changed QC #: Date Reported: Area: 33766 9/10/2006 VCL\Printing Description: Steps: [QC Short Description] use WinSpool.DeviceCapabilities to check for staple support, the pages per minute, or list the supported media missing DeviceCapabilities constants types. Compare the DC_xxxx constants in windows.pas with the latest microsoft wingdi.h header. (in $BDS\Include\wingdi.h) [QC Description] the following constants for use with WinSpool.DeviceCapabilities are missing in windows.pas:

{$EXTERNALSYM DC_STAPLE} DC_STAPLE = 30 {$EXTERNALSYM DC_PRINTRATEPPM} DC_PRINTRATEPPM = 31 {$EXTERNALSYM DC_MEDIATYPENAMES} DC_MEDIATYPENAMES = 34 {$EXTERNALSYM DC_MEDIATYPES} DC_MEDIATYPES = 35

[sysop] adjusted to include appropriate code style QC Entry 33766 QC #: Date Reported: Area: 33869 9/13/2006 Documentation\OpenHelp Description: Steps: [QC Short Description] * Compile code that uses FileAge * Double-click on the Pascal Warning in the Messages list * Put the cursor FileAge deprecated but alternative not named onto FileAge and press F1

[QC Description] When using FileAge, the compiler warns:

[Pascal Warning] Someunit.pas(1234): W1000 Symbol 'FileAge' is deprecated

But if I open the BDS help on FileAge, it documents FileAge quite normally, and doesn't tell that it's either deprecated, or worse, it doesn't even name alternatives. QC Entry 33869 QC #: Date Reported: Area: 34035 9/16/2006 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] compare with winspool.h Incomplete winspool conversion

[QC Description] Current conversion of winspool is missing the following:

Structures: PRINTER_INFO_7 PRINTER_INFO_8 PRINTER_INFO_9 DRIVER_INFO_4 DRIVER_INFO_5 DRIVER_INFO_6 DOC_INFO_3 PRINTPROCESSOR_CAPS_1 PRINTER_ENUM_VALUES BINARY_CONTAINER BIDI_DATA BIDI_REQUEST_DATA BIDI_REQUEST_CONTAINER BIDI_RESPONSE_DATA BIDI_RESPONSE_CONTAINER PROVIDOR_INFO_2

Constants: PRINTER_ATTRIBUTE_PUBLISHED PRINTER_ATTRIBUTE_FAX PRINTER_ATTRIBUTE_TS DSPRINT_* JOB_STATUS_COMPLETE DRIVER_KERNELMODE DRIVER_USERMODE DPD_DELETE_* APD_STRICT_* APD_COPY_* DI_MEMORYMAP_WRITE NORMAL_PRINT REVERSE_PRINT PRINTER_ENUM_HIDE SPOOL_FILE_PERSISTENT SPOOL_FILE_TEMPORARY PRINTER_NOTIFY_FIELD_OBJECT_GUID BIDI_ACTION_* BIDI_ACCESS_* ERROR_BIDI_* SPLREG_* SPLDS_*

Functions: AddPrinterDriverEx FlushPrinter ExtDeviceMode GetPrinterDataEx EnumPrinterDataEx EnumPrinterKey SetPrinterDataEx DeletePrinterDataEx DeletePrinterKey XcvData GetDefaultPrinter SetDefaultPrinter IsValidDevmode QC Entry 34035 QC #: Date Reported: Area: 34447 9/26/2006 Database\Data Aware Controls\TDBGrid Description: Steps: [QC Short Description] 1. Download and run the attached test-case 2. Activate the second record by clicking on the cell showing "two" Data loss in TDBGrid 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 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 QC #: Date Reported: Area: 34745 10/2/2006 Database\DBExpress\TSQLQuery Description: Steps: [QC Short Description] 1. Put a TSQLQuery on a form. 2. Enter a simple update query that uses a date parameter. 3. Assign the .AsDateTime still does not work parameter value in code. TSQLQuery1.ParamByName('THE_DATE').AsDateTime = Date; 4. Execute the query using ExecSQL. 5. Watch the "unassigned code" error come up. [QC Description] When adding parameters to a TSQLQuery the .AsDateTime still cannot be used. When the query is executed it produces a "unassigned code" error. This has been a problem ever since dbExpress came out. Whilst simple in theory to fix when migrating code to dbExpress this is a major pain and should not need to be done. QC Entry 34745 QC #: Date Reported: Area: 34747 10/2/2006 Debugger\Event Log View Description: Steps: [QC Short Description] 1. Create a VCL application 2. Drop a TTimer on the form and set its Interval property to 50 3. Add event It is impossible to stop the scrolling in the event log handler to the timer 4. In the event handler call OutputDebugString( "some text\n" ); 5. Run 6. Observe the text scrolling quickly in the event log without ability to go to a particular place. [QC Description] There is no way to pause the scrolling in the events pane. This makes debugging very difficult, at times. Please, consider stopping the scrolling if the pane was clicked. This allows for manual scrolling to the points of interest.

[QC Workaround] A way to pause the scrolling is possible by a checkbox in the tools | options | Event page but it requires a lot of clicks/inputs to be invoked. QC #: Date Reported: Area: 34840 10/4/2006 RTL\Delphi\Date - Time Description: Steps: [QC Short Description] Compile and run the attached program below. StrToDateTime does not work when current locale s date/time format include extra character(s) between Date and Time. See the following output in lieu of the expected output PASS.

[QC Description] FAIL - Exception=EConvertError Msg='17.10.2006 year 1:59:16 PM' is not a valid date and time StrToDateTime does not work when current locale s date/time format include extra character(s) between Date and Time. For example if current locale s date/time format is "dd.m.yyyy '?.' HH:MM:SS" the function fail. Our program BTS242400; ShortDateFormat (Bulgaria) is "dd.m.yyyy '?.'" (Windows default locale settings). When I call ShowMessage(DateTimeToStr(StrToDateTime(DateTimeToStr(Now)))), I receive error message (exception), {$APPTYPE CONSOLE} SInvalidDateTime (%s is not a valid date and time). uses Functions TryStrToTime and TryStrToDate fork OK, without remarks. SysUtils;

This is from Delphi Version 2 up to Turbo Delphi Explorer. var QC Entry 34840 dt: TDateTime; S: String; TimeValue: TDateTime;

begin try ShortDateFormat:= 'dd.m.yyyy ''year'''; TimeValue := Now; S := DateTimeToStr(TimeValue); dt := StrToDateTime(S); //Exception!!! if dt = TimeValue then WriteLn('PASS') else WriteLn('FAIL - Expected value not found.'); except on E: Exception do WriteLn('FAIL - Exception=', E.ClassName, ' Msg=', E.Message); end; end. QC #: Date Reported: Area: 35001 10/9/2006 Database\Data Aware Controls\TDBGrid Description: Steps: [QC Short Description] 1. Download and start the attached project 2. Click on the button on the left panel 3. Click on a non-selected MDIChild's active control focus is not set correctly for a DBGrid. row of the DBGrid in the MDIChild Expected: The row is now selected Actually: Nothing happens. (Applies to Delphi 7) [QC Description] If you have a TWinControl on the MDIForm that can get the focus and then you click on the last active MDI Child, the MDI Child's active control isn't focused for Windows, but the VCL thinks it is and doesn't execute a Windows.SetFocus on it.

The problem is that the SetActiveControl call in TCustomForm.FocusControl doesn't do anything because there was no change in the ActiveControl of the MDIChild. But the "ActiveControl" isn't Focused(). QC Entry 35001 QC #: Date Reported: Area: 35073 10/11/2006 IDE Description: Steps: [QC Short Description] Restore/maximize Delphi IDE by double-clicking the window border. Windows x64 resize/repaint bug

[QC Description] On Windows XP x64 Edition, double-click on Delphi IDE window border to restore, then double-click again to maximize. The panels are not resized/repainted properly. The are grayed and accept no user interaction.

We are having this problem in one of our applications when run on Windows x64. The application is designed in Delphi 2005.

Sysop Note: Andreas Hausladen has an unofficial fix for this: http://cc.codegear.com/Item/25412 QC Entry 35073 QC #: Date Reported: Area: 35912 10/30/2006 IDE\File Handling Description: Steps: [QC Short Description] Need more than 4 recent projects

[QC Description] Delphi only offers quick access to four recent projects in the File, Reopen menu. It would be nice if one could specify the maximum number of recent projects so you never need to use File>Open to browse for them.

keywords: MRU count reopen recent file history QC Entry 35912 QC #: Date Reported: Area: 35992 11/1/2006 IDE\Packages\Package Manager Description: Steps: [QC Short Description] 1. Start IDE and don't open a project Edit button of Install Packages dialog doesn't work 2. Select "Install Packages" 3. Select a package where the "Edit" button gets enabled. (if you haven't got one, take the package from RAID [QC Description] 237742) If there is no project open in the IDE, the Edit button of the Install Packages dialog does nothing when clicked. 4. Press "Edit"

It should either be disabled if this is not supported (that would be a regression compared to D7 and before) or it exp: package should be opened in the IDE should open the appropriate package (as it does if there already is a project open). act: Nothing happens QC Entry 35992 QC #: Date Reported: Area: 36045 11/2/2006 ActiveX\IDE\Import ActiveX Control/Type Library Description: Steps: [QC Short Description] All I did was select Component > Import Component, clicked on the "Import ActiveX control" radio button, Importing an ActiveX control should assist Install Into package clicked next, selected a component from the list (I've tried several - all give the same behavior), clicked next, accepted the defaults (although I tried several variations to see if that had anything to do with it), clicked next, [QC Description] and the "Create unit" page shows just "Create Unit" with a single radio button. The other options that are It should not be necessary to open or create a package before installing an ActiveX control. The only option it supposed to be there, aren't. gives for "importing" is a single radio button to "create Unit". The options for install to existing package and install to new package that were there in previous versions of Delphi are missing.. QC Entry 36045 QC #: Date Reported: Area: 36262 11/7/2006 IDE\Dialogs\Editor Options Description: Steps: [QC Short Description] Start BDS. Select Tools, Options, Editor Options, Display. Click on the arrow next to the Editor font. Observe Editor font selector is not sorted the font order.

[QC Description] List of fonts under the 'Editor font' heading in the Editor Options, Display dialog is sorted in an 'arbitrary' order (looks like an installation order - probably the order fonts are returned from the enumeration function).

I believe this list should be displayed in alphabetical order. QC Entry 36262 QC #: Date Reported: Area: 36412 11/9/2006 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] 'Add Existing Project" Menu should add multiple projects

[QC Description] Creating project groups based on lots of existing projects is very slow and awkward. e.g. Jedi VCL contains lots of project files that have to be added separately QC Entry 36412 QC #: Date Reported: Area: 36481 11/11/2006 IDE\Block Completion Description: Steps: [QC Short Description] 1. Start new project (Win32 or VCL.NET) 2. Navigate to the implemetation section 3. type "type TMyRecord = Editor inserts extra "end;" after a forward record declaration record;" 4. Press return exp: Block Completion should not add an "end" since this is a forward declaration act: Block completion adds "end;" [QC Description] Forward declaring record types is allowed now. (It wasn't in BDS2006) But after forward declaring it the editor insists on having to insert "end;" every time you press return below the forward declaration.

BDS2006 does this too but compiling shows that the syntax is not accepted while in Highlander it is accepted (valid) syntax. QC Entry 36481 QC #: Date Reported: Area: 37053 11/27/2006 IDE\Startup/Shutdown Description: Steps: [QC Short Description] 1. Start Highlander 2. Click on the splash screen (to be sure that the splash screen has the focus) 3. Press Splash screen closes on ALT+F4 ALT+F4 Expected: The splash screen isn't closed. Actual: The splash screen disappears.

[QC Description] When pressing ALT+F4 on the splash screen, the splash screen disappears.

This should be very easy to fix: OnCloseQuery CanClose := False; QC Entry 37053 QC #: Date Reported: Area: 37462 12/7/2006 IDE\File Handling Description: Steps: [QC Short Description] Steps: 1) Extract the attached files into a folder, preserving the folder structure 2) Start the BDS (Win32) 3) File- IDE may select the wrong file when performing a ctrl + left-click on a filename in the editor >Open and select Folder1\Project1.dpr 4) File->Open and select Folder2\Unit1.pas 5) Click on the "Project1.dpr" tab in the editor 6) Hold down Ctrl and left-click (or right-click->"Open File At Cursor") on "Unit1" [QC Description] on the line "Unit1 in 'Unit1.pas';" in the editor. Up to this point everything is as expected. In step 6 the editor Sometimes when you ctrl + left-click or right-click->"Open File At Cursor" the editor selects the wrong file. opens up the correct Unit1.pas, ignoring the incorrect one located in Folder2 which is also listed among the editor tabs. 7) Press Ctrl-F9 to compile the project 8) Click on the "Project1.dpr" tab in the editor 9) Hold down This bug makes working with files from different projects, but with the same filenames, very tricky. Sometimes Ctrl and left-click (or right-click->"Open File At Cursor") on "Unit1" on the line "Unit1 in 'Unit1.pas';" in the editor. when I work on the latest version of my software I may have units of the old version open in the editor (for Expected: The editor changes tabs to the correct Unit1.pas from Folder1 (as it did previously) Actual: The editor reference purposes). I have to be very vigilant to avoid accidentally editing the wrong file, because the IDE's ctrl focuses on the tab for the wrong Unit1.pas - the one located in Folder2 and left-click mechanism cannot always be trusted.

Refer to "steps" and the attached files for an example. QC Entry 37462 QC #: Date Reported: Area: 37520 12/8/2006 IDE\Form Designer Description: Steps: [QC Short Description] To simluate a removed property we just edit the dfm outside of the IDE and add a fake form property: 1. New No prompt to save after load form with changed component properties Delphi VCL 32 Forms project 2. Save all, Close All 3. edit unit1.dfm outside of the IDE and add a new fake property to TForm1, like "DummProp = 1" 4. Reopen the project, ignore the warning about the non-existing [QC Description] property 5. Close All exp: IDE should ask if changes should be saved to the form act: IDE does not ask, form is If you load a form that contains components whose property names have been changed/removed it warns you closed unsaved, so after reopening the project, the missing property warning is shown again about them but does not make the form as modified, so when closing the form you are nor prompted to save. QC Entry 37520 QC #: Date Reported: Area: 37715 12/14/2006 Midas\TClientDataSet Description: Steps: [QC Short Description] 1) Open a ClientDataSet (the "Original") with InternalCalc Fields 2) Clone this ClientDataSet with another ClientDataSet's internalCalc don't work when Closing / Freeing CloneCursor ClientDataSet (the "Clone") 3) Close or Free this Clone. 4) Insert new records in the Original. => issue: The InternalCalc fields don't get calculated. [QC Description] When a ClientDataSet with InternalCalc fields is Cloned, and the Cloned ClientDataSet gets Closed or Freed, the new records their InternalCalc Fields don't get Calculated. (=> The state of the ClientDataSet is never dsInternalCalc.)

Added by Sysop <<<<<<<< This issue exist in D2006/D2007/D2009. >>>>>>>> QC Entry 37715 QC #: Date Reported: Area: 38464 1/8/2007 IDE\Repository\New\Console wizard Description: Steps: [QC Short Description] Create a new Delphi for Win32 or Delphi for .NET console program, using: File -> New -> Other -> Delphi Console Wizard formatting not according to style guide Projects OR Delphi for .NET Projects -> Console Application See the generated code.

[QC Description] The code created by the console wizard for Delphi for Win32 and .NET contains the following: except on E:Exception do Writeln(E.Classname, ': ', E.Message); end;

That should be on E: Exception do i.e. there should be a space between : and Exception. QC Entry 38464 QC #: Date Reported: Area: 38729 1/15/2007 Documentation\IDE Help Contexts Description: Steps: [QC Short Description] Set to embedded designer File | New | Delphi Win 32 application Clicking on an empty part of the form designer No help found for context in form designer Press F1

[QC Description] In a Delphi Win 32 application, clicking on an empty part of the form designer and pressing F1 gives a No help found for context error.

I'd expect it to show this page: ms-help://borland.bds5/bds5guide/html/IDETour.htm#designsurface or ms-help://borland.bds5/bds5guide/html/formdesigner.htm QC Entry 38729 QC #: Date Reported: Area: 38793 1/16/2007 Documentation\Online Help\VCL Description: Steps: [QC Short Description] 1. open OLH 2. go to Search tab 3. search for "TPopupActionBar" The result list is emtpy. The same applies for OLH does not mention the TPopupActionBar component the Index tab.

[QC Description] There seems to be no documentation for the TPopupActionBar component in the Online Help, at least neither the index nor the search function displays any hits when searching for it. QC Entry 38793 QC #: Date Reported: Area: 38811 1/16/2007 Documentation\Online Help\VCL Description: Steps: [QC Short Description] N/A TSpeedButton Transparent help insufficient fixed in Weaver [QC Description] The help for the TSpeedButton transparent property at ms-help://embarcadero.rs2010/vcl/Buttons.TSpeedButton.Transparent.html ms- help://borland.bds5/bds5dnetapi_dnet/html/DelphiNET_BorlandVclButtonsTSpeedButtonTransparentProperty.htm says:

Description Use Transparent to specify whether the background of the button is transparent.

It should also say that it will only work if the TSpeedButton's Flat property is set to true.

If QC 38831 is not fixed the help should also explain that setting Transparent to true will not work if Windows Themes are enabled. QC Entry 38811 QC #: Date Reported: Area: 38928 1/18/2007 SOAP Description: Steps: [QC Short Description] Import a WebService (New . Others . WebServices . Import WSDL). The WebService has been made by Calling a WebService fails when strings are long Microsoft VisualBasic. The WebService function called had the following C++ call syntax (generated by the BDS IDE from a .WSDL): virtual WideString SendRequest(const WideString XMLCallerInfo, const WideString [QC Description] XML) = 0; Calling it with short arguments in both strings will operate ok. Calling it with a long string (> 26000 Exception 'The action must be retried - URL:http://testdatagate.wienkav.at/MedArchiv/MedArchiv.asmx - bytes) in the second string throws the exception 'The action must be retried ...' if compiling with C++ BDS 4.0 SOAPAction:http://www.wienkav.at/kav/kav.datagate/MedArchiv/SendRequest' when calling the WebService (Update 2). Again: it was ok with Borland C++ Builder 6 ! with an argument string longer than about 25 kB.

This problem is new in C++ builder 2006 (BDS 2006); with BC++ Builder 6 the same program operated ok !

Borland Developer Studio f r Microsoft Windows Version 10.0.2288.42451 Update 2 QC Entry 38928 QC #: Date Reported: Area: 38937 1/18/2007 Documentation\Online Help\VCL Description: Steps: [QC Short Description] 1. Open the help. 2. Go to the index. 3. Enter TMouseEvent Expected: The TMouseEvent help topic to be TMouseEvent topic missing selected. Actual: There is no TMouseEvent help topic, so the next one (TMouseButton Type) is selected.

[QC Description] The TMouseEvent topic is missing from the help files. QC Entry 38937 QC #: Date Reported: Area: 39016 1/19/2007 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] 0. start HL 1. File / New / Delphi .NET VCL app 2. Right click on a blank project area of the project manager to Context menu requires two clicks bring up the project manager context menu. 3. Move the mouse on the menu. Expected: The menu item under the mouse to be hot-tracked. Actual: The menu item is not hot-tracked. 4. Click on a menu item. Expected: The [QC Description] menu item to be clicked, and the action taken. Actual: The menu item is not clicked, and the action isn't taken, The project manager context menu does not get mouse tracking. but now we have mouse tracking. Clicking again triggers the menu item to be clicked. Note - if you right click twice in the Project Manager, the second right click will bring up a menu that is mouse tracking immediately. See steps for details. QC Entry 39016 QC #: Date Reported: Area: 39049 1/20/2007 Documentation\IDE Help Contexts Description: Steps: [QC Short Description] 1) Placed cursor on the TADOConnection.Attributes.xaAbortRetaining component property. 2) Press F1. 3) Help missing for TPersistent.xaAbortRetaining and xaCommitRetaining Expected result - Help file for xaAbortRetaining. 4) Observed result - No help for TPersistent.xaAbortRetaining.

[QC Description] Place cursor on various component properties and press the F1 key. QC Entry 39049 QC #: Date Reported: Area: 39183 1/23/2007 Documentation Description: Steps: [QC Short Description] Typos in "TTreeNodes" methods help topics

[QC Description] There are typos in TTreeNodes methods help topics. These typos follow the same pattern: the actual parameter name that should be used in the description there is "Node".

This applies to the following methods: Add, AddChild, AddChildFirst, AddChildObject, AddChildObjectFirst, AddFirst AddObject AddObjectFirst Insert InsertNode InsertObject

For example:

1) In the "TTreeNodes.Add" help topic there is a typo: Is: "... specified by the Node parameter" Should be: "... specified by the Sibling parameter"

2) In the "TTreeNodes.AddObject" help topic there is a typo: Is:"... specified by the Node parameter" Should be:"... specified by the Sibling parameter"

3) In the "TTreeNodes.AddChildObject" help topic there is a typo: Is: "... specified by the Node parameter" Should be: "... specified by the Parent parameter"

QC Entry 39183 QC #: Date Reported: Area: 39191 1/23/2007 IDE\Dialogs\Environment Options Description: Steps: [QC Short Description] N/A Alignment and layout glitches in Environment Options dialog

[QC Description] See red marks in the attached screenshots for glitches locations.

The scrollbar glitch is a rerun of an old one in QCs that keeps coming back (9751, 10318 and 38070) QC Entry 39191 QC #: Date Reported: Area: 39229 1/23/2007 Documentation\Help Output Description: Steps: [QC Short Description] Fixed in Weaver Missing Topics for ActnRes.pas ms-help://embarcadero.rs2010/vcl/ActnRes.html [QC Description] The following documentation topics are not included in the TOC / Index for the unit ActnRes.pas: and is in the TOC

ActnRes.TStandardActions QC Entry 39229 QC #: Date Reported: Area: 39383 1/26/2007 VCL\Core VCL Classes\TThread Description: Steps: [QC Short Description] Scan classes.pas for 'ThreadCount'. You will only get three occurences. Listed below. implementation ... var ... Unused Threadcount in classes.pas ThreadCount: Integer; procedure AddThread; begin InterlockedIncrement(ThreadCount); end; procedure RemoveThread; begin InterlockedDecrement(ThreadCount); end; [QC Description] Classes.pas has a unit variable ThreadCount in the implementation that is added to and subtracted from. Only it is never used. And since it is in implementation it cannot be used outside this unit. So there is a useless blocking (interlockedexchange) call for every thread created and destroyed. It is likely old leftover code because in D5 classes.pas threadcount variable is really used, but D7 en D2006 classes.pas do not use it anymore. It cannot be for threadsafety as interlockedexchange only synchs the variable inc/dec, nothing else.

Please remove it! QC Entry 39383

[Top Ten] QC #: Date Reported: Area: 39991 2/5/2007 Install Description: Steps: [QC Short Description] Installation should check that Delphi 2007 is running before uninstall and any modification

[QC Description] Installtion should check that Delphi 2007 is running before uninstall and any modification. QC Entry 39991 QC #: Date Reported: Area: 40103 2/7/2007 Documentation Description: Steps: [QC Short Description] Start a vcl-project. Parser and Documentation seem to be interfering drop a button double click the button [QC Description] If the keyword is red underlined, the Doc will not found it. apply anywhere caption := IntToStr(11); QC Entry 40103 // may not be: Inttostr will be underlined (expected) try to press F1 for IntToStr to find the cause the error. NOTE: Error: No help found for context. It result an error instead of expected help.

//////

This appears to be fixed in build 2516 - Leo Siefert QC #: Date Reported: Area: 40110 2/7/2007 VCL\Property/Type Editors Description: Steps: [QC Short Description] 1. Start BDS 2. File / New / Win32 VCL Forms App 3. Add a TImageList to a form 4. double click ImageList to Make the openpicture dialog resizeable for the TImageList component editor bring up the Component Editor 5. press the "Add" button to add a image/icon to the list. act: The dialog that comes up can not resized. exp: it is resizable [QC Description] Please make the Openfile dialog for the "Add" function on the ImageList component editor resizeable. The TOpenPictureDialog that is used can be resized nowadays, this should be easy to fix.

Why is this needed? Its annoying when you have to add images/icons that are larger then 16x16 or use detailed view to see a preview of bitmaps etc.. There will be a lot to scroll and it gets harder to find that file your looking for. QC Entry 40110 QC #: Date Reported: Area: 40232 2/9/2007 IDE\Dialogs\Project Options Description: Steps: [QC Short Description] Please sort compiler messages list

[QC Description] In Project Options|Compiler Messages the list of compiler messages is unsorted. As the list grows, it becomes quite difficult to find the one you are looking for. QC Entry 40232 QC #: Date Reported: Area: 40284 2/11/2007 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] The Project Manager always expands all items

[QC Description] Using Spacely, when opening a Project Group with several Projects, all items in all projects are visible. Highly irritating.

In Delphi 2006, the Project Manager remembered what was open. QC Entry 40284 QC #: Date Reported: Area: 40305 2/12/2007 IDE\Startup/Shutdown Description: Steps: [QC Short Description] 1. Install BDS with all personalities (C++, C#, Win32, .NET). 2. Create a Win32 project and save it. 3. Close Doubleclicking project or group should only load Win32 personality BDS. 4. Doubleclick the .bdsproj file. Wait while BDS loads all unneccesary personalities.

[QC Description] When launching a Delphi Win32 project by doubleclicking its .bdsproj or .bdsgroup file, BDS should only load the personality the project uses, to save some loading-time.

Alternatively, a configurator tool could be produced that allowed creating a launcher for this purpose.

I did try to modify Windows File Types, but with no success.

Manually creating a shortcut pointing to bds.exe does make it possible to launch using a single personality, but I don't have time to create a large number of such shortcuts. QC Entry 40305 QC #: Date Reported: Area: 40803 2/18/2007 Compiler\Delphi\Language Description: Steps: [QC Short Description] Allow Array Usage with Typed Pointer types

[QC Description] Allow Array Usage with Typed Pointer types.

If Cp is PChar then Cp[44] is allowed (using Cp as an array type), I would like other typed pointer types to also allow that syntax.

For instance, if Dp is PDouble, then Dp[44] should be allowed. Compare this to Inc(Dp). This is allowed, and moves the pointer Dp SizeOf(Double) forward. QC Entry 40803 QC #: Date Reported: Area: 40817 2/18/2007 Debugger\CPU Description: Steps: [QC Short Description] -Start Spacely -Create a console application and change it to: program Project1; {$APPTYPE CONSOLE} uses "Trace into" does not reliable work in the CPU view SysUtils; begin end. -Place a breakpoint at the line with "begin" -Run the application -When the debugger stops at the breakpoint open the "Entire CPU" view. -Now use "Trace into" to step from instruction to instruction up to [QC Description] "call @InitExe" -The next "Trace into" will not step into the desired function but instead will execute the The "Trace into" function of the debugger does not reliable work in the CPU view. One cannot step into "special" complete application. functions like @InitExe.

QC Entry 40817 QC #: Date Reported: Area: 41034 2/21/2007 Database\DBExpress Description: Steps: [QC Short Description] None Please support Firebird database with the DBExpress driver

[QC Description] Please support Firebird database with the DBExpress driver. A huge percent of the Delphi community are Firebird users and are claiming for this.

Or at least help the Firebird team to implement this support in DBX4. QC Entry 41034 QC #: Date Reported: Area: 41231 2/23/2007 Install\User Interface Description: Steps: [QC Short Description] On Vista: 1. Look in Install folder 2. Change to Icon view 3. Look at Setup.exe icon. At 48x48 it looks pretty bad Install icon looks bad at 48x48

[QC Description] The install icon looks pretty bad on Vista at 48x48. This is an issue because for an application to really look like a "Vista" app it needs to have a high color 48x48 icon. QC Entry 41231 QC #: Date Reported: Area: 41258 2/24/2007 IDE\Code Editor\Keymapping Description: Steps: [QC Short Description] 1. Start Spacely. 2. File/New/VCL Forms App. 3. After form appears, hit F12 to switch to Editor. 4. Click on a Add a keystroke to close all other tabs few units, and open them with Control+Enter. 5. Now, you want to close all but the currently open unit. You *have* to use the mouse to do it, cannot use the keyboard. [QC Description] When you have multiple files open in the editor, right-clicking on the tabs gives a local menu which has one option: Close all other tabs. There is no keystroke for it currently. Suggestion: Add one, for example Control+Shift+F4 (Control+F4 closes the currently open file). QC Entry 41258 QC #: Date Reported: Area: 41584 3/1/2007 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] GetComputerNameEx not available in Windows.pas

[QC Description] There is a function in Kernel32 named GetComputerNameEx which would be nice to have built into Windows.pas. QC Entry 41584 QC #: Date Reported: Area: 41632 3/2/2007 Documentation\Help Output Description: Steps: [QC Short Description] Incorrect method names in TSQLConnection help Fixed in Weaver

[QC Description] ms-help://embarcadero.rs2010/vcl/SqlExpr.TSQLConnection.CommitFreeAndNil.html The methods CommitFreeAndNil and RollbackFreeAndNil appear as CommitAndFree and RollbackAndFreel in the help of TSQLConnection methods. ms-help://embarcadero.rs2010/vcl/SqlExpr.TSQLConnection.RollbackFreeAndNil.html QC Entry 41632 QC #: Date Reported: Area: 41835 3/4/2007 Documentation\Help Output Description: Steps: [QC Short Description] References to C# and .Net deleted in Remote Debugger References ms-help://embarcadero.rs2010/rad/Preparing_Files_for_Remote_Debugging.html [QC Description] ms-help://borland.bds5/devcommon/remotedebugprepfiles_xml.html Note, we cannot provide a Delphi-only help, though improved filtering should help. Preparing Files for Remote Debugging

Topic includes references to C++, C# and Delphi for .NET language which is correct for BDS, but not for Delphi 2007 which is only for Delphi for Win32 QC Entry 41835 QC #: Date Reported: Area: 42122 3/8/2007 Documentation\Online Help Description: Steps: [QC Short Description] The help for the memory manager is outdated and (in some places) wrong

[QC Description] The online help for the memory manager should be updated to reflect the changes since the memory manager was replaced in BDS 2006.

Example: ms-help://borland.bds5/devcommon/memorymanagementov_xml.html still refers to AllocMemCount and AllocMemSize, which no longer work.

Attached is suggested documentation for the new memory manager. QC Entry 42122 QC #: Date Reported: Area: 42168 3/8/2007 IDE\Tool Palette Description: Steps: [QC Short Description] Add ability to rename category in tool palette

[QC Description] Add ability to rename category in tool palette QC Entry 42168 QC #: Date Reported: Area: 42169 3/8/2007 Documentation Description: Steps: [QC Short Description] There is a lot of entries missed in Help Index

[QC Description] There is a lot of entries missed in Help Index. For example Length, StrPas, StrToInt BlockRead, BlockWrite FloatToStr, Flush Assigned it looks like everything from System.pas completelly missed QC Entry 42169 QC #: Date Reported: Area: 42310 3/10/2007 IDE\Code Completion Description: Steps: [QC Short Description] Press Ctrl+Space in any event handler (for a form) to invoke Code Insight. Try to scroll the list using the mouse Add support for scrolling lists displayed by Code Insight using the mouse wheel wheel. It doesn't work!

[QC Description] When code insight displays lists (properties, methods, etc) after typing a dot or being invoked manually, it should be possible to scroll the list using the mouse wheel, in addition to scrolling using the middle-mouse button (autoscroll). QC Entry 42310 QC #: Date Reported: Area: 42385 3/12/2007 VCL\Graphics Description: Steps: [QC Short Description] var Source, Target: TGIFImage; Bitmap: TBitmap; begin Source := TGIFImage.Create; Target := TGIFImage.Assign(TGIFImage) adds two copies of each frame instead of only one TGIFImage.Create; Bitmap := TBitmap.Create; // Load a bitmap - any bitmap Bitmap.LoadFromFile ('test.bmp'); // Convert bitmap to GIF with single frame. Source.Assign(Bitmap); ASSERT(Source.Images.Count [QC Description] = 1, 'Wrong number of frames in source'); // Copy GIF to GIF Target.Assign(Source); ASSERT When copying one GIF to another, via the TGIFImage.Assign method, the target GIF ends up containing each of (Target.Images.Count = 1, 'Wrong number of frames in target'); end; // Exp: No error // Act: Assertion faillure: the source frames twice. Wrong number of frames in target

The cause of the problem is that the code in TGIFImage.Assign assumes that TGIFFrame.Create doesn't add the frame to the parent TGIFImage and that TGIFImage.Add does. This was true in the old version but not in the new.

The following modification fixes the problem (+ means add line, - means delete line): procedure TGIFImage.Assign(Source: TPersistent); ... for i := 0 to TGIFImage(Source).Images.Count-1 do begin {-} Image := TGIFFrame.Create(Self); {-} Image.Assign(TGIFImage(Source).Images[i]); {-} Add(Image); {+} Add(TGIFImage(Source).Images[i]); Progress(Self, psRunning, MulDiv(i+1, 100, TGIFImage(Source).Images.Count), False, Rect(0,0,0,0), sProgressCopying); end; ... QC Entry 42385 QC #: Date Reported: Area: 42389 3/12/2007 VCL\Graphics Description: Steps: [QC Short Description] TGIFImage and TGIFFrame should provide means to free the cached bitmap, mask and palette GDI objects.

[QC Description] This functionality is needed by applications that can potentially load and display large number of GIFs.

Since an animated GIF can contain a large number of frames, and each frames uses up to two bitmap handles and one palette handle, apllications that needs to display arbitrary number of animated GIFs must be able to limit the GDI resource usage.

Most of the required functionality already exist, it just need to be made accesible.

The following proposed change introduces two public methods, TGIFImage.Dormant and TGIFFrame.Dormant. The methods releases cached GDI resources.

1) Introduce the TGIFFrame FreePalette strict protected method and the Dormant public method: procedure TGIFFrame.FreePalette; begin if (FLocalPalette <> 0) then begin DeleteObject(FLocalPalette); FLocalPalette := 0; end; end; procedure TGIFFrame.Dormant; begin FreeBitmap; FreeMask; FreePalette; end;

2) Introduce the TGIFImage FreePalette and FreeBitmap strict protected methods and the Dormant public method: procedure TGIFImage.FreeBitmap; begin StopDraw;

FreeAndNil(FBitmap); end; procedure TGIFImage.FreePalette; begin if (FGlobalPalette <> 0) then begin DeleteObject(FGlobalPalette); FGlobalPalette := 0; end; end; procedure TGIFImage.Dormant; var i: integer; begin FreeBitmap; FreePalette; for i := 0 to FImages.Count-1 do FImages[i].Dormant; end;

QC Entry 42389 QC #: Date Reported: Area: 42577 3/14/2007 VCL Description: Steps: [QC Short Description] SetWindowLongPtr not supported

[QC Description] Certain Win32 API functions are still not supported. One of these is SetWindowLongPtr

added by Sysop. <<<<<<<<<<<<< The declaration for SetWindowLongPtr has been added since Delphi 2009. >>>>>>>>>>>>> QC Entry 42577 QC #: Date Reported: Area: 42891 3/20/2007 Compiler Description: Steps: [QC Short Description] 1. Start IDE, create a new console project and paste the following code: program Project1; {$APPTYPE F2084 Internal Error: AV0542F601-R00000000-0 CONSOLE} uses SysUtils; type { INTERNAL ERROR if GetItemCount is commented out ([DCC Error] Project1.dpr(13): F2084 Internal Error: AV0542F601-R00000000-0). There should be a more graceful error [QC Description] message } IUpdateableItemInfo = interface( IInterface ) // function GetItemCount: Integer; property ItemCount: Compiling the console program shown in Steps leads to the internal error. Integer read GetItemCount; end; begin try WriteLn( 'hello' ); ReadLn; except on E:Exception do Writeln Of course there is an error in the code, but there should be a more graceful message. (E.Classname, ': ', E.Message); end; end. 2. Compile exp: compiler error about undeclared identifer GetItemCount act: internal error F2084 QC Entry 42891 QC #: Date Reported: Area: 42929 3/21/2007 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] right-click in blank area of PM for General context menu (toolbar, show path, etc. [optinal - right-click at a While need 2 click on context menu of undocked PM different location in PM and Exp results will now occur] move mouse over menu Exp: Selection highlight will move with mouse Act: no selection highlight Click on a menu item Exp: Item will be checked or unchecked Act: [QC Description] Selection highlight shows and begins to track mouse movements Click on item again - now item is Click on a blank area for its general context menu checked/unchecked (for show toolbar, statusbar, etc). While the mouse-coursor is moving the highlighting is change dinamically as expected, the checked/nonchecked status of a highlighted item will change at the 2nd click on it. QC Entry 42929 QC #: Date Reported: Area: 42974 3/21/2007 IDE\Dialogs\Environment Options Description: Steps: [QC Short Description] Start Delphi 2007 Tools, Options Click around in the options tree and notice some ot the options screens seem Improve Tools, Options UI (allow dialog to resize or other UI changes) cramped in the existing small dialog (see the list in the Description for details) I've attached screenshots of how this dialog looks once it is made resizable, and I think the results are nicer [QC Description] I've listed all of the options areas of the Tools Options dialog that I consider more difficult to use because the UI seems cramped inside the existing smallish dialog. I believe an alternate UI for those areas of the settings, or allowing this dialog to resize would make this dialog more usable.

The first 4(*) items in the list would give me a significant benefit, because I believe developers use them more frequently.

Tools (Environment) Options (Ignoring Together) ------Significant Benefit (central portion could resize, less scrolling, etc.): - Library Win32 (path lists)* - Environment Variables (variable lists)* - Color (syntax preview)* - Language Exceptions (exception list)* - Native OS Exceptions (exception list) - Event Log (color listbox very cramped)

Minor Benefit: - Environment Options (paths) - Object Inspector (color listbox) - Explorer (explorer categories) - CodeGear Debuggers (paths)

Little/No Benefit: - Tool Palette - Colors - Type Library - VCL Designer - Editor Options - Source Options (could resize, but large enough now) - Display - Key mappings (could resize, but large enough now) - Code Insight - Debugger Options

I'm happy to accept a better/alternate UI instead of resizing, if CodeGear can come up with one that performs the same function in less space, but resizing is the bet option I've imagined so far. QC 9751 kind of requested this (in the title at least), but was marked as a duplicate of an only vaguely related bug. QC Entry 42974 QC #: Date Reported: Area: 43075 3/23/2007 IDE Description: Steps: [QC Short Description] When Setup.exe is not present, and the IDE is set to check for updates, the message show in the Auto Run pane is not correct

[QC Description] It says:

"Setup.exe(1): The window does not have scroll bars"

Double clicking that message does show the proper message. QC Entry 43075 QC #: Date Reported: Area: 43200 3/25/2007 Database\dbExpressCore Description: Steps: *** See Resolution thread on what will be fixed and what could be reproduced. -Steve [QA Note] I'm still trying to put together a reproducible test case [/QA] [QC Short Description] dbxadapt30 does not communicate all connection parameters to driver 1. put connection on form, connect to a dbx3 driver 2. put query on form [QC Description] 3. set breakpoint in driver's Connection.SetOption method to see what it gets BDS2006 communicates the following connection parameters to a driver during connecting: 4. execute query 5. see only the following options set: 1. eConnCommitRetain - eConnCommitRetain 2. eConnAutoCommit - eConnTxnIsoLevel (always 0!) 3. eConnTxnIsoLevel - eConnTrimchar 4. eConnTrimChar 5. eConnCustomInfo all other are missing. 6. eConnTimeOut 7. eConnBlobSize

Delphi2007/dbxadapt30 only communicates the following parameters:

1. eConnCommitRetain 3. eConnTxnIsoLevel (always 0!) 4. eConnTrimchar makes working with dbx3 drivers a problem. Especially the Transaction Isolation level is always 0 (xilReadCommited) and there is no way to set it to DirtyRead. QC Entry 43200 QC #: Date Reported: Area: 43212 3/25/2007 Database\TParams Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_249213 DB.Pas/TParam.GetDataSize,GetData and SetData do not handleftLargeInt [QA Notes] [QC Description] This issues existed in BDS 2006 as well, but has a test case submitted. While TField does support Int64/ftLargeInt data type, TParam does not handle these yet. See TDBXBugsSuite.Native for reproducible test case: TDBXBugsSuite.Native.exe -s:oRaid_249213 TParam.GetDataSize, TParam.GetData and TParam.SetData all are missing cases for ftLargeInt. [/QA Notes] QC Entry 43212 1. put TSQLQuery on a form 2. connect it to a driver that support ftlargeInt 3. execute a query that inserts a int64 via parameters (set the parameters datatype to ftLargeInt) 4. message is: field "xxx" is of an unsupported type. QC #: Date Reported: Area: 43213 3/25/2007 IDE\Dialogs\Environment Options Description: Steps: [QC Short Description] 01) Start Delphi 2007 02) File->New->VCL Forms Application - Delphi for Win32 03) File->Save All 04) Create User defined Environment Variables are semi-accessible until restart of IDE a new folder named TEST 05) Select that folder 06) Create a new folder named SRC 07) Create a new folder named OUT 08) Select the SRC folder and accept file name defaults for both unit and project You should now [QC Description] have a TEST\SRC and TEST\OUT with the files saved in TEST\SRC 09) Tools->Options->Environment Options->Environment Variables 10) Click New on the bottom and add a new Environment Variable named There is *no* mention, nor in the dialog that allows to define them, nor in the help file of this behavior. PRJ with the value set to the full path of the SRC folder created in step 4 11) Close that dialog and go to Project->Options->Directories/Conditionals 12) Set "Output directory" and "Unit output directory" to this: $(PRJ) Also, some "parts" of the IDE accept that variable instantly (see step 14), while others require a restart for that \..\OUT 13) Close and do a Project->Build Project (Shift-F9) Exp.: Generated DCU/EXE to be in the OUT folder variable to be in effect, hence the "bug" report. inside TEST; Act.: Generated files were created inside \OUT (from the root of that drive) 14) Press F9 (or Project->Run) Exp.: The generated EXE to be executed Act.: Error message shown in attached See steps for detailed instructions on how to see this behavior. FM43213A.PNG (Could not find program, '...Projects\TEST\OUT\Project1.exe') The compiler completely QC Entry 43213 ignored the $(TEST) variable, but the IDE tried to use it to run the program. QC #: Date Reported: Area: 43484 3/30/2007 Compiler\Delphi Description: Steps: [QC Short Description] // This works : {$TYPEINFO ON} {$IFOPT M-} {$MESSAGE FATAL 'TYPEINFO shouldn''t be off here!'} METHODINFO OFF incorrectly also sets TYPEINFO OFF {$ENDIF} // This failes : {$TYPEINFO ON} {$METHODINFO OFF} {$IFOPT M-} {$MESSAGE FATAL 'TYPEINFO shouldn''t be off here!'} {$ENDIF} [QC Description] The compiler makes a mistake when METHODINFO is turned off; TYPEINFO is incorrectly turned off also!

PS: How can one detect if METHODINFO is on or off? This seems to be impossible (just like HINTS and WARNINGS cannot be detected for years now...) QC Entry 43484 QC #: Date Reported: Area: 43613 4/1/2007 IDE\Unit Testing\Test Case Wizard Description: Steps: [QC Short Description] Compile and run the attached project from within the IDE. DUnit Test application leaks memory when run as console application Act: A memory leak report from FastMM (UnitTest_MemoryManager_EventLog.txt) [QC Description] Exp: No report TestTestRunner.RunRegisteredTests returns an instance of TTestResult which is not freed.

The code generated by the Dunit Wizard look like this. begin Application.Initialize; if IsConsole then TextTestRunner.RunRegisteredTests else GUITestRunner.RunRegisteredTests; end.

It should probably look something like this instead. begin Application.Initialize; if IsConsole then with TextTestRunner.RunRegisteredTests do Free else GUITestRunner.RunRegisteredTests; end.

QC Entry 43613 QC #: Date Reported: Area: 43703 4/3/2007 Debugger\Breakpoints Description: Steps: [QC Short Description] Open the Breakpoint List (View>Debug windows>Breakpoints). Notice the big toolbar taking up mutch space. Possibility to hide toolbar in breakpoint window Try to hide the toolbar.

[QC Description] The toolbar in the breakpoint window takes up the space of two breakpoints. Those that knows the keyboard keys to create new breakpoints etc. may not want to use up space on this toolbar.

There is possibility to remove the captions on the toolbar, but this does not help because the toolbar still has the same vertical size.

If a possibility for hiding the toolbar was provided (mutch like the existing possibility to hide columnheader inside the watch list), that would give more room for listing breakpoints without having to scroll.

Screenshot of breakpoint window and watchlist attached. QC Entry 43703 QC #: Date Reported: Area: 43762 2/28/2007 IDE\Start Page Description: Steps: Personality is being reported as "other" when you Show Recent Projects + Install latest build + Create a couple of projects + Click File | Close All + Go to the welcome page + Click Show Recent Projects link + Examine the project list for the projects you created //exp: Personality: Delphi Win32 //act: Personality: other QC #: Date Reported: Area: 44304 4/12/2007 IDE Description: Steps: [QC Short Description] 1. Make sure you have a project open, so there will be a project name for the macro to expand. 2. Go to Tools > Macro expansions in Configure Tools don't expand Configure Tools... 3. Click Add... 4. For Title, type "Test" (no quotes). 5. For Program, type "cmd.exe" (no quotes). 6. For Parameters, type "/k echo /path:$PATH($PROJECT)" (no quotes). 7. OK out of everything. 8. [QC Description] Go to Tools > Test. This will run the ECHO command, and then leave a command prompt open so you can see When you add an item to Configure Tools and try to add macro expansions like $PATH($PROJECT) or ECHO's output. Expected: should output something like "/path:C:\Documents and Settings\UserName\My $EDNAME, they only work when preceded by a space. This makes it impossible to launch certain tools from the Documents\Borland Studio Projects\". Actual: outputs "/path:$PATH". If you put a space between "/path:" and Tools menu. "$PATH($PROJECT)", it expands the path as expected; however, some external tools (e.g. TortoiseProc.exe, part of TortoiseSVN) require that there be no space after "/path:". (It doesn't get any better when you try to For example, TortoiseSVN requires a parameter of the form /path:c:\path\filename. This would require a make Delphi quote the path correctly...) command-line parameter of the form

/path:$PATH($PROJECT) but this doesn't work: Delphi simply passes the literal text "/path:$PATH" on the command line, instead of expanding it to "/path:c:\svn\myproject". (It's not clear what happens to the "($PROJECT)" part of the command line.) QC Entry 44304 QC #: Date Reported: Area: 45050 4/25/2007 IDE\Start Page Description: Steps: [QC Short Description] Environment: XP - sp2 IE -7 1)Create a new project and save it in the desktop. 2)Close the IDE. 3)Delete the No way to remove dead project links in start page newly created project from the desktop. 4)Open the IDE and click the non-existing project link. Expected: An Error msg about the missing project file and link from the page getting removed. Actual : Error msg without the [QC Description] link getting removed from the start page. When a project is delete from the disk, there is no way to remove its link from the start page. When I click on the non existence project link, an error msg comes up but the project name is not removed from the welcome page's project list. QC Entry 45050

Changed to Delphi as this affects all Personalities. QC #: Date Reported: Area: 45072 4/26/2007 Compiler\Delphi\Language Description: Steps: [QC Short Description] I would like to be able to write code for Delphi/Win32 that looks like the following example (Singleton pattern). Class constructors in Delphi/Win32 Currently, I have to make the class var "private" instead of "strict private", and initialize it in the unit initialization section. This works, but it's poor encapsulation: the code for my class is not all with the class, and I have to use [QC Description] a weak visibility specifier (private) instead of a properly encapsulated visibility (strict private). ------unit It would be nice if Delphi for Win32 supported the "class constructor" syntax that is already supported in Delphi Comparers; interface type IComparer = interface function Compare(A, B: string): Integer; end; for .NET. TDefaultComparer = class(TInterfacedObject, IComparer) strict private class var FInstance: IComparer; public class constructor Create; function Compare(A, B: string): Integer; class property Instance: IComparer read This would basically be another "initialization" section (and run at the same time as all other "initialization" FInstance; end; implementation uses SysUtils; { TDefaultComparer } function TDefaultComparer.Compare(A, sections), but it would be scoped to the class, and therefore better encapsulated (both with regards to member B: string): Integer; begin Result := AnsiCompareStr(A, B); end; class constructor TDefaultComparer.Create; visibility, and just from the viewpoint of having all of the code that relates to the class as part of the class). begin // run at the same time as all unit initialization, // but has access to strict private & strict protected members FInstance := TDefaultComparer.Create; end; end. This would be particularly helpful for implementing the Singleton pattern for simple and/or null objects. See Steps. QC Entry 45072 QC #: Date Reported: Area: 45125 4/27/2007 IDE\Tool Palette Description: Steps: [QC Short Description] From Nick: Ideas for implementation could be to have the hint on the Tool Palette show the package, or the hint Show package for component on the form designer?

[QC Description] The hint could tell them: Please make it possible to start from a component, and find which package FILE (.bpl) contains it; at the moment it is difficult to determine which BPLs need distributing/installing on anothe IDE to provide the component. Unit name Runtime package RAised as I use a few JVCL comonents, and currently end up installing everything as I can't determine which Designtime Package packages I actually need. QC Entry 45125 QC #: Date Reported: Area: 45243 3/14/2007 Install Description: Steps: Registered DisplayName of Uninstallation is just "RAD Studio", isn't it "CodeGear RAD Studio"? // see attachment or 1. Install 11.0.2627.5503.1 2. Invoke Uninstall from Control Panel // ACT: see RAD Studio // EXP: see CodeGear RAD Studio QC #: Date Reported: Area: 46095 5/16/2007 IDE\Code Editor Description: Steps: [QC Short Description] 1. Open a file (.h or .cpp) in code editor 2. Right click the page, select "Read Only" It's better to give some Show some notification when file is readonly visual feedback when file is readonly. for example, changing its icon or simply showing "[ReadOnly]" in the page tab. [QC Description] There is no visual feedback when file is readonly. QC Entry 46095

NOTE: it says Read Only at the bottom of the editor QC #: Date Reported: Area: 46143 5/17/2007 IDE\Open Tools API Description: Steps: [QC Short Description] Attempt to create a custom key binding that provides features available in current keybindings, such as : Toggle Folding API is severely limited. Current: Ctrl+Shift+K T. Expand All: Ctrl+Shift+K A. Collapse All: They make this one painful; you have to specify what you want to collapse. Collapse all classes: Ctrl+Shift+K C. Collapse all methods: Ctrl+Shift+K M. [QC Description] Collapse namespace/unit: Ctrl+Shift+K N. Collapse nested procedures: Ctrl+Shift+K P. Collapse regions: It is impossible to use the current Open Tools API to create a custom keybinding that affects code folding. Ctrl+Shift+K R. The IOTAElideActions interface fails to provide adequate functionality.

IOTAElideActions does not let you determine in the nearest block is folded or not, and does not provide any of the following options:

Collapse all classes Collapse all methods Collapse namespace/unit Collapse nested procedures Collapse regions

Since you can not determine if the current folding block is folded or not, toggling functionatly can't be provided either. QC Entry 46143 QC #: Date Reported: Area: 46198 5/18/2007 IDE\Structure Pane Description: Steps: [QC Short Description] Start Spacely, open a VCL App Structure Pane is not Refreshed on it first display (Code view) Tools | Options | Editor Options | Code Insight, disable Error Insight and close Delphi. Start Spacely [QC Description] From the Main menu, create a new VCL Application Form - Delphi for Win32 Structure pane is not Refreshed on it first display (Code view) Press F12 Key to display the Code + Code Structure View

I've disabled Error Insight Act : Structure view is empty I'm using the default layout Expt : Should display all the Objects QC Entry 46198 Workarraound : Press twice F12 (to Display the Form and then the Code). Structure view is now refreshed QC #: Date Reported: Area: 46310 5/21/2007 Internet\XML\Data Binding Description: Steps: [QC Short Description] Open the attached Word document with screenshots of the structure of the attached XSD files. 1. Try first the XML Data Binding doesn't create valid source on derived element XML Data Binding Wizard with the attached file DelphiXSDText.xsd. The code produced will not compile. 2. The next file, DelphiXSDTest2.xsd, has a dummy element added - and then everything is ok. [QC Description] Look at the attached files and Steps.

This problem seems to be apparent only when deriving complex types. QC Entry 46310 QC #: Date Reported: Area: 46313 5/21/2007 Internet\XML\Data Binding Description: Steps: [QC Short Description] 1. Run the wizard on the attachedfile: DelphiXSDTestDerived.xsd. You will then se that the code for the XML Data Binding fails when including and deriving BaseType complex element, from the file DelphiXSDTestBase.xsd, is not included in the generated unit. The code will terefore not compile. [QC Description] The wizard will fail to create the source for the base class in the unit, when the element is derived from another Nick Adds: included XSD. This is true only if extending the base element. Actually, when opening the file, I get repeated errors: QC Entry 46313 ------Error ------The system cannot locate the object specified.

Line: 0

------OK Details >> ------

QC #: Date Reported: Area: 46527 5/24/2007 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Missing Windows API Calls

[QC Description] Many of the "Newer" windows API calls are missing completely from the codegear sources.. They are available using the JEDI Windows API headers (JWA), but these cause other issues (such as incompatible calling types with the windows.pas unit).

Missing Functions: (not meant to be a complete list) 1. Replacefile - (in source already) 2. WinSock2 calls (yes these are in the Indy libs, but why not in a "regular" delphi winsock2 header unit) 3. UnregisterWaitEx - (in source already) 4. DeleteTimerQueueTimer 5. RegisterWaitForSingleObject - (in source already) 6. CreateTimerQueueTimer 7. GetComputerNameEx - (in source already) 8. VerifyVersionInfo 9. UnregisterWait - (in source already)

Basically it appears that much of what M$ documents as requiring _WIN32_WINNT to be defined as 0x0500 (or higher) has no entry in the delphi units..

QC Entry 46527 QC #: Date Reported: Area: 46922 6/1/2007 Install\Files Description: Steps: HelpInstf and ExtCtrls are debug DCU. Compare the files in lib and lib\debug

Old descritpion // other steps [QC Short Description] 1. Launch Delphi2007(German or French or Japanese edition). 493 DCUs are wrongly installed for German installation 2. File | New | VCL Form Application - Delphi for Win32 3. Project | Options | Compiler [QC Description] Confirm not checking to 'Use debug DCUs' in debugging. In the German installation of Delphi 2007 Prof. there are 493 DCU files wrongly installed. 4. Down [F7] or Run | Trace Into Debugger is tracing in Sysint.pas. 489 DCU files in the lib and lib\debug directory are identical (English edition is not tracing in Sysinit.pas)

4 DCU files in lib and lib\debug directory have smaller debug DCUs (what indicates that there is something stange because debug units normally are larger due to the additional debug information) QC Entry 46922

// Comment C.Yonezawa Japanese Edition is same too. Perhaps French will be same too. QC #: Date Reported: Area: 46942 6/2/2007 IDE\Help Description: Steps: [QC Short Description] Open the help index. Type in TTransactionDesc and read the topic. Then wonder where to find out what these No help about dbExpress isolation levels isolation level each mean...

[QC Description] The help about TTransactionDesc mentiones the IsolationLevel property but offere no clue where one can find out the values and their exact meanings of the different isolation levels for the different supplied dbExpress drivers. QC Entry 46942 QC #: Date Reported: Area: 47242 6/8/2007 IDE\Code Editor Description: Steps: [QC Short Description] close delphi Possible AV when shutting down the IDE

[QC Description] In certain cases, an AV will occur when shutting down the IDE.

The attachments are from an automated incident report. Zugriffsverletzung bei Adresse 209D35A3 in Modul 'coreide100.bpl'. Lesen von Adresse 00000018.

QC Entry 47242 QC #: Date Reported: Area: 47654 6/17/2007 Install\Files Description: Steps: [QC Short Description] Easier way to get files for command line compilation in a different language

[QC Description] I don't think that I am the only one that needs the english lib files for command line compilation but wants to use a non english IDE. The IDE is the german one in my case and I need the english lib files for the JEDI VCS binaries.

I order to get the english files I had installed D2007 in a virtual machine and that is very time consuming.

It would be good if the installer had an option (or options) to install all necessary files for command line compilation into a separate directory.

QC Entry 47654 QC #: Date Reported: Area: 47956 6/22/2007 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] 1. Create the following directories: C:\MyPackage C:\MyPackage\Subdir 2. Click File | New | Package - Delphi Random paths are prepended to .dcp references for Win32. 3. Click File | Save All. Save the package as: C:\MyPackage\Package1.dproj 4. With the IDE still open, view Package1.dproj in Notepad. Notice the line: No problem yet... [QC Description] 5. Back in Delphi, click File | New | Unit - Delphi for Win32. 6. Click File | Save. Save the file under the Subdir Inside .dproj files, random paths are prepended to .dcp references when a package is saved. directory as: C:\MyPackage\Subdir\Unit1.pas 7. Click File | Save All. 8. View Package1.dproj in Notepad. This time we see: Notice This is a new issue with Delphi 2007's .dproj files. It didn't happen with Delphi 2006's .bdsproj files. how "rtl.dcp" has changed to "Subdir\rtl.dcp". Obviously this is wrong. rtl.dcp isn't located under Subdir; it's in the Delphi "lib" directory. Now try this: 1. Close and reopen the Delphi IDE. 2. Click File | Reopen | See Steps for details. C:\MyPackage\Package1.dproj. 3. In the Project Manager pane, right-click Package1.bpl and click Save. 4. QC Entry 47956 View Package1.dproj in Notepad. Now we see: So apparently it just prepends the current directory onto .dcp references? Expected behavior: It should always write "rtl.dcp" with no path. QC #: Date Reported: Area: 48227 6/28/2007 Database Description: Steps: [QC Short Description] Compile the attached program below. Duplicate "DecimalSeparator" See the following unexpected compile-time error. [QC Description] duplicity "DecimalSeparator" Error: E2036 Variable required

SysUtils line 624 var - DecimalSeparator: Char;

SqlConst line 57 const - DECIMALSEPARATOR = 'Decimal Separator'; { Do not localize } program BTS252023; QC Entry 48227 {$APPTYPE CONSOLE}

(JJS: Not seen in build 14.0.3455.22156) uses SysUtils, SqlConst;

begin if @SysUtils.DecimalSeparator = @DecimalSeparator then WriteLn('PASS') else WriteLn('FAIL - DecimalSeparator redeclared in SqlConst'); end.

QC #: Date Reported: Area: 48593 7/5/2007 Documentation Description: Steps: [QC Short Description] Type "AssignFile" into 'Look for' exp: Found the keyword for the I/O routin act: No link to Type AssignFile, while No link to AssignFile and related keywords ms-help://borland.bds5/devcommon/standardroutinesov_xml.html exists in the documentation. This page give a list of Input and output procedures and functions , but index seem to be lack of issues to have a link to these [QC Description] keywords. Type "AssignFile" into 'Look for' QC Entry 48593 QC #: Date Reported: Area: 48605 7/5/2007 Compiler\Delphi\Code Generation/Optimization Description: Steps: REGRESSION FROM DELPHI 7 Compile and run the following Win32 console program: //------program Project2; {$APPTYPE CONSOLE} uses SysUtils; {$OVERFLOWCHECKS ON} var I: Integer = - [QC Short Description] MaxInt - 1; begin try I := -I; Writeln(I); except on E: Exception do Writeln(E.Classname, ': ', E.Message); end; Negation of -MaxInt-1 does not cause integer overflow error. Readln; end. //------exp output: EIntOverflow: Integer overflow act output: -2147483648 [QC Description] If you negate a value of -MaxInt - 1, overflow is not checked, and no overflow error is generated, even if overflow checks are on.

Looking at the CPU window, one sees that no overflow checking code is generated: neg dword ptr [I] instead of: neg dword ptr [I] jno +$5 call @IntOver

In D7, the error checking code is generated and the program will cause an overflow error. QC Entry 48605 QC #: Date Reported: Area: 49323 7/19/2007 IDE\Dialogs\Project Options Description: Steps: [QC Short Description] Change compiler options for all projects in a group at once

[QC Description] I have a projectgroup with about 20 projects, all using the same compiler settings. If one setting have to be changed, it must be applied manually to all 20 projects. I like to change the settings for all the projects at one time. The existing possibility of using an include file is not preferred, because all the projects have to include that file and it's not directly clear wich settings are used by the compiler. QC Entry 49323 QC #: Date Reported: Area: 49625 7/26/2007 Documentation\Online Help Description: Steps: [QC Short Description] Open online help topic ms-help://borland.bds5/delphivclwin32/!!VARIABLES_Variants.html exp: links to Many unit constants and variables lack links to their explanation decriptions of variables act: no links

[QC Description] One example: ms-help://borland.bds5/delphivclwin32/!!VARIABLES_Variants.html

<< Name Description BooleanToStringRule This is variable Variants.BooleanToStringRule. ChangeAnyProc This is variable Variants.ChangeAnyProc. ClearAnyProc This is variable Variants.ClearAnyProc. EmptyParam This is variable Variants.EmptyParam. NullAsStringValue This is variable Variants.NullAsStringValue.

Yeah well, I guess we would like to know what they contain, so they should be linked to the topics. E.g. BooleanToStringRule should link to: ms-help://borland.bds5/delphivclwin32/Variants_BooleanToStringRule1.html

Etc. QC Entry 49625 QC #: Date Reported: Area: 49897 8/1/2007 Documentation Description: Steps: [QC Short Description] ms-help://borland.bds5/devcommon/declarationsandstatements_xml.html Iteration Over Containers Using For statements (JJS: See workaround on the QA tab for an example that compiles) [QC Description] This part of code generate a compiler error message:

// Iterating over a dynamic array IDynArray := IArray1; for I in IDynArray do begin // Do something with I... end;

[DCC Error] uMain.pas(80): E2010 Incompatible types: 'TGenericIntArray' and 'Array' QC Entry 49897 QC #: Date Reported: Area: 49996 8/3/2007 Compiler\Delphi\Language Description: Steps: [QC Short Description] Closures / lambda / anonymous functions. (Functional programming)

[QC Description] Please implement closures / lambda / anonymous functions. Because the topic is (I presume) widely known, I don't insist now in benefits or in syntax descriptions. Of course, this can be implemented in Delphi using a CG like Boehm. Related to this, explore also this possibility to have unmanaged program elements and managed ones - but this is another topic.

My small proposal is to use an attribute like 'closure' (syntax is subject to change, of course) which will create behind the scenes an object which will be passed, as needed. For ex.: function Func1(aStr: string; aInt: integer): string; closure;

Will create internally something similar with the following structure

TFunc1 = class(TBaseClosure) ... Public _Context: somepointer; //the pointer to the context in which the code is executed aStr: string; //the parameters with the appropriate type aInt: integer; Execute: string; // the result has the appropriate type //for a procedure is a method here with no result end;

{var} Func1: TFunc1;

In short, we can see a closure declaration like a much more concise way to declare classes.

If someone has in his code ShowMessage(Func1('Test', 1)); the compiler will check if Func1 points to nil, if yes, then create the object, load the parameters in the object's fields, (or pass a pointer there if we speak about variable parameters) and execute the code returning the result (if appropriate). In fact, it's a usual way to simulate the closures, but without the overhead which is required from the programmer's POV regarding the object's lifecycle management, class declaration, code flexibility aso. As we saw, the 'closures' are created automatically at first call; they can be freed manually by invoking Func1.Free, which also must set the Func1 pointer to 'nil' in order to allow their safe re-creation on a new, possible call. If they aren't freed, the compiler must free them at the program termination. Also, explore the possibility of freeing them earlier (when they got out of scope etc.) but, imho, because, usually, the overhead by not freeing them is very little (in normal conditions), by simply freeing them at the program termination is already a very good solution.

Hth. QC Entry 49996 QC #: Date Reported: Area: 50261 8/8/2007 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] System.pas calls _isNECWindows function in the initialization section

[QC Description] System.pas calls _isNECWindows function in the initialization section. _isNECWindows in turn calls GetKeyboardType(), which should not be called in an initialization section of a dll (exe is Ok). This results in application hang under certain conditions (not readily reproducible, depends on the current Windows state at the moment).

Firstly, it is not safe to call *any* Windows API function in a dll loader section, secondly, AFAIK that function only applies to Windows 95.

Below is call stack of outlook.exe loading OutSpy.dll (written in Delphi) which in turn calls GetKeyboardType from the system.pas initialization section:

> ntdll.dll!_KiFastSystemCallRet@0() Line 547 Asm ntdll.dll!_ZwWaitForSingleObject@12() Line 2371 + 0xc bytes Asm ntdll.dll!RtlpWaitOnCriticalSection(_RTL_CRITICAL_SECTION * CriticalSection=0x00000000, long Increment=4) Line 619 C ntdll.dll!RtlEnterCriticalSection(_RTL_CRITICAL_SECTION * CriticalSection=0x77ce8078) Line 870 C rpcrt4.dll!LoadableTransportInfo(unsigned short * DllName=0x00254908, unsigned short * RpcProtocolSequence=0x002546c0, TRANS_INFO * * pTransInfo=0x0013cb4c) Line 2688 C++ rpcrt4.dll!OsfMapRpcProtocolSequence(int ServerSideFlag=2443528, unsigned short * RpcProtocolSequence=0x002546c0, TRANS_INFO * * ClientTransInfo=0x0013cb4c) Line 16150 C++ rpcrt4.dll!DCE_BINDING::CreateBindingHandle(long * Status=0x0013cb64) Line 1739 C++ rpcrt4.dll!RpcBindingFromStringBindingW(unsigned short * StringBinding=0x002407d0, void * * Binding=0x0013cbe8) Line 268 C++ advapi32.dll!RpcpBindRpc(unsigned short * ServerName=0x00000000, unsigned short * ServiceName=0x77f642e4, unsigned short * NetworkOptions=0x00000000, void * * pBindingHandle=0x0013cbe8) Line 223 + 0xa bytes C advapi32.dll!PLSAPR_SERVER_NAME_bind(unsigned short * ServerName=0x00000000) Line 70 C rpcrt4.dll!GenericHandleMgr(const _MIDL_STUB_DESC * pStubDesc=0x77f618b8, unsigned char * ArgPtr=0x00000000, const unsigned char * pFormat=0x77f639be, unsigned int Flags=8, void * * pGenericHandle=0x0013cd94) Line 141 + 0x4 bytes C++ rpcrt4.dll!ExplicitBindHandleMgr(const _MIDL_STUB_DESC * pStubDesc=0x77f618b8, unsigned char * ArgPtr=0x0013d030, const unsigned char * pFormat=0x77f639be, void * * pSavedGenericHandle=0x0013cd94) Line 387 C++ rpcrt4.dll!NdrClientCall2(const _MIDL_STUB_DESC * pStubDescriptor=0x77f618b8, const unsigned char * pFormat=0x77f639b4, ...) Line 1005 + 0xd bytes C++ advapi32.dll!LsarOpenPolicy2(unsigned short * SystemName=0x00000000, _LSAPR_OBJECT_ATTRIBUTES * ObjectAttributes=0x0013d09c, unsigned long DesiredAccess=2048, void * * PolicyHandle=0x0013d05c) Line 857 + 0x16 bytes C advapi32.dll!LsaOpenPolicy(_UNICODE_STRING * SystemName=0x00000000, _OBJECT_ATTRIBUTES * ObjectAttributes=0x0013d09c, unsigned long DesiredAccess=2048, void * * PolicyHandle=0x0013d0d8) Line 249 + 0xe bytes C advapi32.dll!LookupAccountNameInternal(const unsigned short * lpSystemName=0x00000000, const unsigned short * lpAccountName=0x771f3f9c, void * Sid=0x00248410, unsigned long * cbSid=0x0013d140, unsigned short * ReferencedDomainName=0x002541e0, unsigned long * cchReferencedDomainName=0x0013d144, _SID_NAME_USE * peUse=0x0013d13c, int fUnicode=1) Line 7150 C advapi32.dll!LookupAccountNameW(const unsigned short * lpSystemName=0x00000000, const unsigned short * lpAccountName=0x771f3f9c, void * Sid=0x00248410, unsigned long * cbSid=0x0013d140, unsigned short * ReferencedDomainName=0x002541e0, unsigned long * cchReferencedDomainName=0x0013d144, _SID_NAME_USE * peUse=0x0013d13c) Line 7600 C rpcrt4.dll!RpcpLookupAccountNameDirect(unsigned short * ServerPrincipalName=0x771f3f9c, void * * Sid=0x0013d188) Line 220 + 0x19 bytes C++ rpcrt4.dll!RpcpLookupAccountName(unsigned short * ServerPrincipalName=0x771f3f9c, int * fCache=0x0013d184, void * * Sid=0x0013d188) Line 328 + 0x9 bytes C++ rpcrt4.dll!LRPC_BINDING_HANDLE::SetAuthInformation(unsigned short * ServerPrincipalName=0x771f3f9c, unsigned long AuthenticationLevel=6, unsigned long AuthenticationService=10, void * AuthIdentity=0x00000000, void * OriginalAuthIdentity=0x00000000, unsigned long AuthorizationService=0, SECURITY_CREDENTIALS * Credentials=0x00000000, unsigned long ImpersonationType=3, unsigned long IdentityTracking=1, unsigned long Capabilities=1, unsigned long AuthFlags=1, unsigned long AdditionalTransportCredentialsType=0, void * AdditionalCredentials=0x00000000, void * Sid=0x00000000) Line 1176 C++ rpcrt4.dll!RpcBindingSetAuthInfoExW(void * Binding=0x0023d1a8, unsigned short * ServerPrincName=0x771f3f9c, unsigned long AuthnLevel=6, unsigned long AuthnSvc=10, void * AuthIdentity=0x00000000, unsigned long AuthzSvc=0, _RPC_SECURITY_QOS * SecurityQOS=0x00000000) Line 1264 + 0x1f bytes C++ winsta.dll!WinStationOpenLocalServer() Line 598 + 0x18 bytes C winsta.dll!RpcLocalAutoBind() Line 671 C winsta.dll!WinStationQueryInformationW(void * hServer=0x00000000, unsigned long LogonId=4294967295, _WINSTATIONINFOCLASS WinStationInformationClass=WinStationClient, void * pWinStationInformation=0x0013d2d4, unsigned long WinStationInformationLength=2296, unsigned long * pReturnLength=0x0013d2d0) Line 2361 + 0x14 bytes C user32.dll!GetClientKeyboardType(_CLIENTKEYBOARDTYPE * KeyboardType=0x0013dbdc) Line 3369 + 0x1e bytes C user32.dll!GetKeyboardType(int nTypeFlags=0) Line 3402 + 0x9 bytes C

OutSpy.dll!04193c5a()

[Frames below may be incorrect and/or missing, no symbols loaded for OutSpy.dll]

OutSpy.dll!041972ae()

OutSpy.dll!0419498c()

OutSpy.dll!04194a78()

OutSpy.dll!041974d5()

OutSpy.dll!04338b00() ntdll.dll!$$$00005() Line 136 Asm ntdll.dll!LdrpRunInitializeRoutines(_CONTEXT * Context=0x00000000) Line 1183 + 0x10 bytes C ntdll.dll!LdrpLoadDll(unsigned long Flags=0, const unsigned short * DllPath=0x00254ac8, unsigned long * DllCharacteristics=0x0013e2ec, const _UNICODE_STRING * DllName=0x0013e2cc, void * * DllHandle=0x0013e2e8, unsigned char RunInitRoutines='') Line 524 + 0x6 bytes C ntdll.dll!LdrLoadDll(const unsigned short * DllPath=0x00254ac8, unsigned long * DllCharacteristics=0x0013e2ec, const _UNICODE_STRING * DllName=0x0013e2cc, void * * DllHandle=0x0013e2e8) Line 227 + 0x1b bytes C kernel32.dll!LoadLibraryExW(const unsigned short * lpwLibFileName=0x0013e550, void * hFile=0x00000000, unsigned long dwFlags=0) Line 507 + 0x15 bytes C kernel32.dll!LoadLibraryW(const unsigned short * lpwLibFileName=0x0013e550) Line 626 C

OLMAPI32.DLL!HrLoadProviderDllW(const unsigned short * wzDllName=0x0013e550, HINSTANCE__ * * phinst=0x0171f414) Line 7034 + 0xa bytes C

OLMAPI32.DLL!HrLoadProviderDllA(const char * szDllName=0x00250990, HINSTANCE__ * * phinst=0x0171f414) Line 7017 + 0x10 bytes C

OUTLOOK.EXE!HrSubstLoadLibrary(const char * szPathParam=0x00250990, HINSTANCE__ * * phinstResult=0x0171f414, const char * pszSharDir=0x00000000, unsigned long ulMiscFlags=145) Line 996 + 0xd bytes C++

OUTLOOK.EXE!ExtensionEntry::HrLoadExtLibrary() Line 2630 + 0x2f bytes C++

OUTLOOK.EXE!ExtensionEntry::EICaponeExtensionEntry::LoadExchExt(IExchExt * * peex=0x0171a33c) Line 2686 + 0x8 bytes C++

OUTLOOK.EXE!RenExtOnCapone::HrEnsureInstalled(IRenCallback * prcb=0x00ca6610) Line 653 + 0x2b bytes C++

OUTLOOK.EXE!RenExtOnCapone::Install(IRenCallback * prcb=0x00ca6610, const __MIDL_IRenExtensionEntry_0006 * prec=0x01712634, IRenExtensionSite * prextsite=0x00ca3468) Line 489 + 0xf bytes C++

OUTLOOK.EXE!ExtensionSite::EnsureLoaded() Line 522 + 0x33 bytes C++

OUTLOOK.EXE!ExtensionSite::EnsureLoaded(IRenCallback * prcb=0x00ca6610) Line 345 + 0xf bytes C++

OUTLOOK.EXE!ExtensionSite::DelayInstall(IRenCallback * prcb=0x00ca6610) Line 308 C++

OUTLOOK.EXE!EventManager::HrPopulateExtensionManager(IRenCallback * prcb=0x00ca6610, int fUpdateOnly=0, unsigned long ulEvtidPopulate=1, IRenExtensionEntry * preePopulate=0x00000000, int fLoadedPopulate=0) Line 537 C++

OUTLOOK.EXE!EventManager::HrInit(unsigned long ulEvtidPopulate=1, IRenExtensionEntry * preePopulate=0x00000000, int fLoadedPopulate=0) Line 592 + 0x1d bytes C++

OUTLOOK.EXE!EventManager::HrInit(unsigned long ulEvtidPopulate=1) Line 629 C++

OUTLOOK.EXE!EventManager::EIRenApplicationEvents::OnStartup(IRenApplicationCallback * pacb=0x00ca6610) Line 924 C++

OUTLOOK.EXE!DelayInitExtensions(IRenCallback * prcb=0x0316202c) Line 357 C++

OUTLOOK.EXE!EventManager::HrPopulateExtensionManager(IRenCallback * prcb=0x0316202c, int fUpdateOnly=0, unsigned long ulEvtidPopulate=134217728, IRenExtensionEntry * preePopulate=0x00000000, int fLoadedPopulate=0) Line 331 C++

OUTLOOK.EXE!EventManager::HrInit(unsigned long ulEvtidPopulate=134217728, IRenExtensionEntry * preePopulate=0x00000000, int fLoadedPopulate=0) Line 592 + 0x1d bytes C++

OUTLOOK.EXE!EventManager::HrInit(unsigned long ulEvtidPopulate=134217728) Line 629 C++

OUTLOOK.EXE!EventManager::EIRenSessionEvents::OnLogon(IRenSessionCallback * pscb=0x0316202c) Line 1073 C++

OUTLOOK.EXE!MapiNamespace::MapiLogon(unsigned long ulUIParam=592406, const char * szProfile=0x00000000, const char * szPassword=0x00000000, unsigned long flFlags=36905) Line 10838 C++

OUTLOOK.EXE!MapiNamespace::MapiNamespace() Line 1451 + 0x1e bytes C++

OUTLOOK.EXE!HrGetPrimarySession(int fCreate=1, IMAPISession * * ppmsess=0x0013ed20, int fRequired=1) Line 1058 + 0x22 bytes C++

OUTLOOK.EXE!GetPrimaryMapiNamespace(int fCreate=1, IExplorerNamespace * * ppns=0x0171b2f4, int fRequired=1) Line 1130 + 0x16 bytes C++

OUTLOOK.EXE!ExplorerObject::HrGetNamespace(const _GUID & clsidNS={...}, IExplorerNamespace * * ppxns=0x0013edd0, int fLoad=1) Line 4529 + 0x18 bytes C++

OUTLOOK.EXE!BaseExplorFrame::HrGetNamespace(const _GUID & clsidNS={...}, IExplorerNamespace * * ppxns=0x0013edd0) Line 1034 C++

OUTLOOK.EXE!ExplorerFrame::ShowFolder(_GUID clsidNamespace={...}, const wchar_t * wzUrl=0x00000000, __MIDL___MIDL_itf_xtypes_0000_0002 * peidFolder=0x00000000, __MIDL___MIDL_itf_xtypes_0000_0002 * peidHint=0x00000000, int nCmdShow=-1, int wbcid=-1, unsigned long dwXfsfFlags=0, __MIDL___MIDL_itf_xtypes_0000_0002 * * ppeidNew=0x00000000, IUnknown * * ppunk=0x00000000) Line 8352 + 0x15 bytes C++

OUTLOOK.EXE!BaseExplorFrame::EIExplorerFrame::ShowFolder(_GUID clsidNamespace={...}, const wchar_t * wzUrl=0x00000000, __MIDL___MIDL_itf_xtypes_0000_0002 * peidFolder=0x00000000, __MIDL___MIDL_itf_xtypes_0000_0002 * peidHint=0x00000000, int nCmdShow=-1, int wbcid=-1, unsigned long dwXfsfFlags=0, __MIDL___MIDL_itf_xtypes_0000_0002 * * ppeidNew=0x00000000, IUnknown * * ppunk=0x00000000) Line 2702 C++

OUTLOOK.EXE!LaunchRen(int nCmdShow=-1, wchar_t * pwzCmdLine=0x00ca3074, int fFirstLaunch=1, IExplorerFrame * * ppexp=0x0013feb0, void * hEvent=0x00000000) Line 6602 + 0x5d bytes C++

OUTLOOK.EXE!RenInitInstance(int nCmdShow=1, const char * pszCmdLineAnsi=0x001624c2) Line 3565 + 0x1a bytes C++

OUTLOOK.EXE!RenLibDLL::InitInstance() Line 387 + 0x13 bytes C++

OUTLOOK.EXE!WinMain(HINSTANCE__ * hInstance=0x30000000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x001624c2, int nCmdShow=1) Line 271 + 0xd bytes C++

OUTLOOK.EXE!__tmainCRTStartup() Line 578 + 0x1d bytes C kernel32.dll!BaseProcessStart(unsigned long (void)* lpStartAddress=0x301d9900) Line 813 + 0x3 bytes QC Entry 50261 QC #: Date Reported: Area: 50327 8/10/2007 Database\ADO Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_263745 TADODataSet throws "invalid variant operation" exception =or= [QC Description] Technical stuff Take a look at the example source code (attachment) and you can see everything works fine with an access database/tables. OS...... : Windows XP SP2 and Windows Vista Business MDAC...... : 2.81.1117.0 Try the same thing with MS-SQL 2005 tables where the primary keys are BIGINT and the foreign key ADDR_ID Compiler...: Delphi 2007 for Win32 (11.0.2709.7128) in the second table is also an BIGINT. Database...: MS-SQL Server 2005 Developer and Express with SP2 (9.0.3042) QC Entry 50327

Debugging

--> ADODB.PAS

Failure in

procedure TCustomADODataSet.RefreshParams;

in sub function

function MasterFieldsChanged: boolean; { .. } if Parameters.ParamByName(MasterField.FieldName).Value <> MasterField.Value then // <-- This creates the "invalid variant operation" { ... }

How to solve?

Seems to be a problem with trying to compare an varDecimal with varInt64? QC #: Date Reported: Area: 50430 8/13/2007 VCL\Win 32 Controls\TListView Description: Steps: [QC Short Description] - Drop a TPagecontrol on a form and add 2 Tabsheets - Drop a TListview on the second Tabsheet, set TListview loses items if not visible in front ViewStyle to vsICON - Create a TImagelist and add some Images; associate the Listview with the Imagelist - Add some items to the Listview - Compile and run - everything works fine, items in the Listivew are there - [QC Description] Make the first Tabsheet the default; save the project again; close all, reopen the project, compile and run - all A TListview loses the items if it is not visible in front. items in the Lsitview are gone. Sample Project is attached. QC Entry 50430 QC #: Date Reported: Area: 50593 8/15/2007 IDE\Search\Find in Files Description: Steps: [QC Short Description] Search Results needs a "Close All" option

[QC Description] If you do a lot of searches with the "Display results in separate tab" option enabled, you can end up with a lot of tabs active in the search results window at one time. There is no "Close all tabs" or "Close all other tabs" options anywhere, though. It would be nice if there were such options available. It is very tedious (especially on a laptop) to have to right-click on each tab and close them individually. QC Entry 50593 QC #: Date Reported: Area: 51299 8/30/2007 IDE\Start Page Description: Steps: [QC Short Description] 1. The single most obvious feed - DelphiFeeds.com is not there (how did they miss that one) Welcome page feeds need cleanup 2. The overlapping menus system doesn't work very well. For example, on a 1024x768 display with all dockable [QC Description] areas of the IDE unpinned (collapsed) the English Community Blogs extend beyond the bottom of the screen A couple of things are wrong with the feeds on the welcome page at the moment. and one cannot get to the links at the bottom in any obvious way. Either trim them down, support scrolling or show multiple collumns. I've attached a screen shot (englishblogs.png). ---- #2 UPDATE: Cannot reproduce even in 800x600 ------

3. Some of the blogs that are listed have been dead for years and some don't load at all. Of the ones I can access (point 2), these all have issues: 3.1. Brad Prendergast, Dan Miser doesn't seem to load at all -- #3.1 Update: Cannot reproduce as these have been removed -----

3.2. Daniel Wischnewski, Deepak Shenoy and Holger Flick hasn't updated it this year (not too bad, I suppose) -- #3.1 Update: Cannot reproduce . Updates are appearing just fine. ----

3.3 Erwien Saputra last posted in 2006, saying that it is "definitely" his last post - in fact he is not using Delphi anymore! ----- #3.2 Update: User should be removed. RSS Feed no longer active -----

3.4. Jake Jacobson's blog doesn't load correctly - you see lots of CSS markup instead of text (could of course be his own fault, but then his blogs should not show). ----- #3.4 Update: Cannot reproduce. User has been removed. ------

4. How about a "Beta Bloggers" feed? Probably, it should be a CodeGear feed that aggregates the feeds from everyone Nick has approved as Beta Bloggers. That way it can be maintained as new beta bloggers are added and old ones go away. QC Entry 51299

QC #: Date Reported: Area: 51427 8/31/2007 RTL\Delphi\RTL Exceptions Description: Steps: [QC Short Description] Run this code: program Project1; uses Windows, SysUtils; begin try raise Exception.Create('xxx'); except Halt Calling Halt in 'except' or 'finally' forcibly displays the exception message, and causes process to return wrong (5); end; end. Expected results (what happened in Delphi 2.0 through 2006): 1. The process should return with exit code an exit code of 5. Actual results on Delphi 2007: 1. A message box is displayed: ------Application Error ------Exception Exception in module Project1.exe at 00055753. xxx. ------OK ------2. The process returns with an exit code of 1, not 5. (JJS: Seems related to 255308 but reproducible with D2007 December Update)

[QC Description] This is a new problem introduced in Delphi 2007 (and still repro with the Dec2007 update installed):

If Halt is called inside an 'except' or 'finally' block, the current exception's message is forcibly displayed on the screen, and the process returns with an exit code of 1 instead of the exit code specified in the Halt call.

The cause appears to be these lines in SysUtils' DoneException procedure, which are new to Delphi 2007: if ExceptObject <> nil then ExceptHandler(ExceptObject, ExceptAddr);

I assume the intention there is to ensure that any new exceptions raised during termination are brought to the attention of the user.

In my case, however (see the example code), the exception was raised before termination commenced. DoneException should ignore such pre-existing exceptions. And it certainly should not be changing my exit code from 5 to 1. QC Entry 51427 QC #: Date Reported: Area: 51976 9/13/2007 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] [reported initially to BASM newsgroup by Thorsten Engler, Nexus Database Systems] Just a warning for Codegen for IN test is buggy everyone... This program crashes: >>>>> program InCrash; {$APPTYPE CONSOLE} uses Windows, SysUtils; type TEnum = (e0, e1, e2, e3, e4, e5, e6, e7); TSet = set of TEnum; TRecord = record FieldA : array[0..4091] of [QC Description] Byte; FieldB : Boolean; FieldC : Boolean; FieldD : Boolean; SetField : TSet; end; PRecord = ^TRecord; var e : faulty codegen for IN can result in memory access across page boundaries with access violations as a result TEnum; p : PRecord; Old : Cardinal; begin {$C+} try Assert(SizeOf(TRecord) = 4096); p := VirtualAlloc(nil, 64 * QC Entry 51976 1024, MEM_COMMIT, PAGE_NOACCESS); Assert(Assigned(p)); Assert(VirtualProtect(p, 4096, PAGE_READWRITE, Old)); p.SetField := [e0]; e := e0; if e in p.SetField then ; except on E:Exception do [Tester Recommended] Writeln(E.Classname, ': ', E.Message); end; end. <<<<< The if e in ... compiles to : InCrash.dpr.36: if e in p.SetField then 004091C6 3C07 cmp al,$07 004091C8 770A jnbe $004091d4 004091CA 83E07F and eax,$7f 004091CD 0FA383FF0F0000 bt [ebx+$00000fff],eax From Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2A: Instruction Set Reference, A-M: >>>>> When accessing a bit in memory, the processor may access 4 bytes starting from the memory address for a 32-bit operand size, using by the following relationship: Effective Address + (4 x (BitOffset DIV 32)) Or, it may access 2 bytes starting from the memory address for a 16-bit operand, using this relationship: Effective Address + (2 x (BitOffset DIV 16)) It may do so even when only a single byte needs to be accessed to reach the given bit. When using this bit addressing mechanism, software should avoid referencing areas of memory close to address space holes. In particular, it should avoid references to memory-mapped I/O registers. Instead, software should use the MOV instructions to load from or store to these addresses, and use the register form of these instructions to manipulate the data. <<<<< The compiler should recognize that the start of the set it wants to check is less then 4 bytes from the end of the containing type and should use a single byte mov to read the value into a register first. And before someone says that the example above is not realistic, the problem can also be seen by just having an object with a byte sized set as last field which is preceded by 3 other byte sized fields and the memory that's allocated for the object just happens to be in front of a page boundary... Cheers, Thorsten -- QC #: Date Reported: Area: 52290 9/20/2007 Documentation Description: Steps: [QC Short Description] Changescale fails in some instances which have been traced to the following: 1. Changescale is dependent on Screen Scaling and Changescale the "Border Style" property of forms. When BorderStyle is "Single" the user can not resize the form manually - and Changescale feels free to adjust form size as would be expected. However, if a form's BorderStyle is [QC Description] "Sizeable", changescale fails, as if believing the user can take care of sizing. The developer does not expect Poor documentation of managing form scaling for various user screen resolutions has produced many the form sizing to fail. 2. Changescale is sensative to columns in a DBGrid which have been sized by the newsgroup threads with rare satisfactory resolutions. developer. Changescale will fail on such columns. This can result in a DBGrid component and Form being adjusted by Changescale, but the Columns in the DBGrid Not being resized. (BTW, the developer can not Failure is now traced to undocumented behavior in "Changescale". Documentation of this statement should be remove the column sizing through normal use of the IDE. So, this problem is not easily corrected. In Form Text completed. mode the developer can remove the Width statement on the column definition.)

Functionality change may not be desireable, but accurate documentation would help. QC Entry 52290 QC #: Date Reported: Area: 52439 9/24/2007 Database\Data Aware Controls\TDBNavigator Description: Steps: [QC Short Description] //make sure windows is themed 1. Create a VCL VCL App 2. Drop two DbNavigators, set Flat=True in one of DbNavigator paints incorrectly when flat=true in themed mode them, leave Flat=False in the second for comparison. 3. Drop a TDataSource and a TClientDataSet, linking the datasource to the clientdataset and both navigators to the datasource. 4. Right click on the clientdataset and [QC Description] choose Load from MyBase table. Choose employee.xml from Common Files \CodeGear Shared\Data (or any When you use a TDbNavigator in themed mode with Flat=True it paints incorrectly, not showing other data). 5. Run the application and click Last and First. exp: Flat navigator should paint buttons as disabled enabled/disabled when appropriate. act: Buttons paint incorrently. state. QC Entry 52439 QC #: Date Reported: Area: 52448 9/24/2007 IDE\Start Page Description: Steps: [QC Short Description] ------UPDATED ------Welcome Page gets corrupted after Close All - install Tiburon build 3056 - start "CodeGear RAD Studio" [QC Description] - choose Tools - Option - Environment Options Sometimes when I select "Close All" the Welcome Page gets corrupted. Now I was able to provide steps to - in Autosave Options check "Editor files" and "Project desktop" reproduce this. - close dialog with OK QC Entry 52448 - create a new VCL Forms Application and save it with all defaults - make sure "Form1" is visible in the embedded designer - exit IDE (via File - Exit or close button) - restart "CodeGear RAD Studio" ("Form1" should be visible now) - choose File - Close All ------ORIGINAL ------start IDE - make sure "Auto Save" is set for "Editor Files" and "Project Desktop" - open or (create and save) a project - close IDE - start IDE (project should be open now - this seems to be the trigger) - select "File - Close All"

exp: see proper Welcome Page act: Welcome Page corrupted (f.i. "TCodeGear.Create" visible on top right) QC #: Date Reported: Area: 52593 9/26/2007 Documentation\Online Help\Object Pascal Description: Steps: [QC Short Description] Error in description of dynamic arrays

[QC Description] ms-help://borland.bds5/devcommon/structuredtypes_xml.html

In the section about dynamic arrays, search this sentence: "In the case of a zero-length array, High returns 1 (with the anomalous consequence that High < Low)."

In this case, High returns -1.

It should read: "In the case of a zero-length array, High returns -1 (with the anomalous consequence that High < Low)." QC Entry 52593 QC #: Date Reported: Area: 52848 10/2/2007 Documentation\Online Help\VCL Description: Steps: [QC Short Description] Go to this page in the online documentation: ms-help://borland.bds5/delphivclwin32/!! Documentation missing for several TThread methods MEMBEROVERVIEW_Classes_TThread.html click on any of the listed members Exp: Help Act: Description This is Queue, a member of class TThread. [QC Description] The TThread threading class has some methods where the documentation is missing.

Specifically: public methods - Queue RemoveQueuedEvents StaticQueue StaticSynchronize Synchronize

Synchronize is probably the most important of those. QC Entry 52848 QC #: Date Reported: Area: 53454 10/15/2007 IDE\Search\Find in Files Description: Steps: [QC Short Description] Press ALT-S, F, SHIFT-TAB in the code editor after coding a few hours. I think I have usually done some Invalid pointer / list out of bounds etc when Search/Find in files Search / Find in files before the error occurs. It happens on a daily basis, but I can't produce the exact steps to reproduce it. SYSOP: When problem happens, it has this kind of call stack: Access violation at address [QC Description] $209f8860 in module coreide100.bpl. Read of address 00000018 [209F8860]{coreide100.bpl} After some editing, compiling and searching, I often get an invalid pointer operation with a following 'List out of EdTrackr.TEdTracker.GetCount (Line 171, "EdTrackr.pas" + 0) + $0 [209F89CA]{coreide100.bpl} bounds', and sometimes other consequential errors just as I open the Search / Find in files dialog. EdTrackr.TEdTracker.IndexOfData (Line 223, "EdTrackr.pas" + 1) + $2 [20A1312A]{coreide100.bpl} MsgLines.TFileEntry.Remove (Line 876, "MsgLines.pas" + 3) + $B [20A132DC]{coreide100.bpl} It occurs when I press ALT-S, F, SHIFT-TAB MsgLines.TFileBuffer.RemoveLine (Line 956, "MsgLines.pas" + 4) + $5 [20A137A8]{coreide100.bpl} MsgLines.TLineBuffer.RemoveAllFileMessageLines (Line 1121, "MsgLines.pas" + 4) + $11 [20A1377B] I must always restart Delphi afterwards. {coreide100.bpl} MsgLines.TLineBuffer.RemoveAllFileMessageLines (Line 1119, "MsgLines.pas" + 2) + $D [20A138AD]{coreide100.bpl} MsgLines.TLineBuffer.Clear (Line 1161, "MsgLines.pas" + 6) + $4 [20A1422C] I had the same problem with Delphi 5. {coreide100.bpl} MsgLines.TLineBufferList.RemoveList (Line 1468, "MsgLines.pas" + 6) + $4 [20963607] {coreide100.bpl} FileFind.TThreadSearch.Create (Line 153, "FileFind.pas" + 6) + $A [209643C9] I suspect the message window to be somehow involved. {coreide100.bpl} FileFind.TProjectFileSearch.Create (Line 574, "FileFind.pas" + 5) + $F [20964FF6] QC Entry 53454 {coreide100.bpl} FileFind.DoFindInFiles (Line 817, "FileFind.pas" + 11) + $15 [209B5019]{coreide100.bpl} EditorControl.TCustomEditControl.Search (Line 5752, "EditorControl.pas" + 30) + $53 [20006A3F]{rtl100.bpl } System.TObject.Dispatch (Line 9284, "sys\system.pas" + 8) + $0 [209B822C]{coreide100.bpl} EditorControl.TEditControl.CMControlCommand (Line 7311, "EditorControl.pas" + 6) + $0 [2013C4F3] {vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6 [20142615]{vcl100.bpl } Controls.TWinControl.CMChildKey (Line 8375, "Controls.pas" + 1) + $C [2013C4F3]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6 [2014076A]{vcl100.bpl } Controls.TWinControl.DefaultHandler (Line 7334, "Controls.pas" + 23) + $17 [2013C4F3]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6 [20140673]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6 [2013FD9C]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6 [20040DD4]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0 [209A2D42]{coreide100.bpl} VClient.SendWindowMsg (Line 2683, "VClient.pas" + 2) + $10 [209A19D8]{coreide100.bpl} VClient.SendWindowMsgProc (Line 1599, "VClient.pas" + 1) + $D [2093DE36]{coreide100.bpl} IDEKbd.@interpret_bmi_macro$qqrp5BMI_tpcp11CmdMapTableppc (Line 39, "bmi.cpp" + 14) + $5 [2093CA32]{coreide100.bpl} IDEKbd... (Line 586, "IDEKbd.pas" + 0) + $16E [209A044C]{coreide100.bpl} VClient.CmdStringProc (Line 504, "VClient.pas" + 5) + $17 [2015EAED]{vcl100.bpl } Forms.TraverseClients (Line 5968, "Forms.pas" + 5) + $2D [2093E593]{coreide100.bpl} IDEKbd.@LookUpKey$qqrp11KeyMapTableul (Line 101, "keymap.cpp" + 6) + $4 [20A0C198]{coreide100.bpl} KbClient.TIDEKBDFrameAPI.MapAndEvalInternal (Line 842, "KbClient.pas" + 10) + $11 [20A0BC1D] {coreide100.bpl} KbClient.HandleKey (Line 572, "KbClient.pas" + 6) + $12 [20A0BC8F]{coreide100.bpl} KbClient.HandleKey (Line 578, "KbClient.pas" + 12) + $19 [20A0C11E]{coreide100.bpl} KbClient.TIDEKBDFrameAPI.ProcessKeyStroke (Line 820, "KbClient.pas" + 238) + $1 [20140673]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6 [20A0CC60]{coreide100.bpl} KbClient.TIDEKBDChildAPI.ProcessKeyStroke (Line 1367, "KbClient.pas" + 14) + $16 [209B6E28] {coreide100.bpl} EditorControl.TCustomEditControl.DoKeyDown (Line 6853, "EditorControl.pas" + 6) + $18 [209ADA2A]{coreide100.bpl} EditorControl.TCustomEditControl.CNKeyDown (Line 1961, "EditorControl.pas" + 17) + $4 [2013C4F3]{vcl100.bpl } Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6 [20159E5F] {vcl100.bpl } Forms.TCustomForm.WndProc (Line 3512, "Forms.pas" + 136) + $5 [20D1972A] {designide100.bpl} DeskUtil.SetFocusHook (Line 435, "DeskUtil.pas" + 4) + $C [2013C180]{vcl100.bpl } Controls.TControl.Perform (Line 5021, "Controls.pas" + 5) + $C [201640BD]{vcl100.bpl } Forms.TApplication.DispatchAction (Line 9022, "Forms.pas" + 9) + $A [20161B6F]{vcl100.bpl } Forms.TApplication.WndProc (Line 7769, "Forms.pas" + 82) + $E [20140673]{vcl100.bpl } Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6 [2013FD9C]{vcl100.bpl } Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6 [20040DD4]{rtl100.bpl } Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0 [20162328]{vcl100.bpl } Forms.TApplication.IsKeyMsg (Line 8020, "Forms.pas" + 22) + $12 [201623BE]{vcl100.bpl } Forms.TApplication.IsHintMsg (Line 8040, "Forms.pas" + 3) + $2 [201625A5]{vcl100.bpl } Forms.TApplication.ProcessMessage (Line 8097, "Forms.pas" + 15) + $32 [2016260A]{vcl100.bpl } Forms.TApplication.HandleMessage (Line 8124, "Forms.pas" + 1) + $4 [201628FF]{vcl100.bpl } Forms.TApplication.Run (Line 8223, "Forms.pas" + 20) + $3 [00422976]{bds.exe } bds.bds (Line 195, "" + 7) + $7 QC #: Date Reported: Area: 54331 11/2/2007 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] {$APPTYPE CONSOLE} uses SysUtils; procedure s; var a0, a1, a2, a3, a4, a5, a6: Integer; begin a0 := 1; a1 := SysUtils.Abort raise an "Access Viaolation" exception a0 + 1; a2 := a0 + a1 + 1; a3 := a0 + a1 + a2 + 1; a4 := a0 + a1 + a2 + a3 + 1; a5 := a0 + a1 + a2 + a3 + a4 + 1; a6 := a0 + a1 + a2 + a3 + a4 + a5 + 1; if a0 + a1 + a2 + a3 + a4 + a5 + a6 + 1 <> 0 then SysUtils.Abort; end; (JJS: Reproducible with the integration build but not with the developer build) begin try s except on EAbort do end; Writeln('OK'); end.

[QC Description] SysUtils.Abort may cause an AV exception if a call to the Abort is maked from a procedure, that uses EBP as a local variable.

Source for SysUtils.Abort in 2006: procedure Abort; function ReturnAddr: Pointer; asm MOV EAX,[EBP + 4] end; begin raise EAbort.CreateRes(@SOperationAborted) at ReturnAddr; end;

Source in Delphi 4 procedure Abort; function ReturnAddr: Pointer; asm MOV EAX,[EBP - 4] end; begin raise EAbort.Create(SOperationAborted) at ReturnAddr; end;

The defference is that Delphi 4 version has a compiler-generated local variable for loading resource string. So compiler saves old value of EBP and assigns it to ESP.

But in Delphi 2006 resource string is acceessed by a @ reference and there is no need in such a local variable and value if EBP is preserved and it has a value from the calling procedure.

Sometimes it can hold a local variable. QC Entry 54331 QC #: Date Reported: Area: 54904 11/15/2007 IDE\Code Editor Description: Steps: [QC Short Description] Right click in editor window, and select "Toggle Bookmark". The bookmark in the margin is dark green, with a Bookmark Icon small - unreadable - black digit.

[QC Description] Please change the color of the bookmark icon in the gutter to a lighter color, so the black text would be more readable. Having numbered bookmarks is a great advantage over VS approach, but only if the small text would be readable..

This is annoying since BCB5! QC Entry 54904 QC #: Date Reported: Area: 55121 11/21/2007 IDE\Block Completion Description: Steps: [QC Short Description] Type in the following record declaration: longintx = record public class operator Add(a, b: longintx): longintx; Broken block completion on Operator method implementations inline; end; Type in (manually) the following record implementation: class operator longintx.Add(a, b: longintx): longintx; begin Then press Return. Result: block completion does *not* complete the block by adding "end;" as [QC Description] it should. Block completion does not work in Operator method implementations QC Entry 55121 QC #: Date Reported: Area: 55221 11/24/2007 Compiler\Delphi\Language Description: Steps: [QC Short Description] // Principale use CSumContainerElt = concept ( record ) // restrict its use with record (or value type) class Generics in Delphi32 operator Add( const Left,Right : TSelf ); // TSelf : type who is implementing the concept function ToString : string; class property NullValue : TSelf; end; TSumContainer< TElt : CSumContainerElt > = class(TObject) [QC Description] private FArrayElt : array of TElt; public function Sum : TElt; function ToString : string; // Other members ... end; (sorry for my English) function TSumContainer.Sum: TElt; var Elt : TElt; begin Result := TElt.NullValue; for Elt in FArrayElt do According to the Delphi roadmap (http://dn.codegear.com/article/36620), generics (or "parameterized types") will Result := Result + Elt; end; function TSumContainer.ToString: string; var Elt : TElt; begin Result := ''; for be availiable in Delphi "Tibur n". Elt in FArrayElt do Result := Result + Elt.ToString; end; //Use TMyRecord = record ( CSumContainerElt ) // or create a key word ex "assume" : class ( ancestor, interfaces ) assume ( concepts ... ) private FNumber : But .Net generics have many restrictions ; this kind of code is not allowed : Cardinal; class function GetNullValue : TMyRecord; public class property NullValue : TMyRecord read TGenericSum = class GetNullValue; class operator Add( const Left,Right : TMyRecord ); function WriteString : string; class function Sum(const Left,Right: Type): Type; static; CSumContainerElt.ToString = WriteString; // Like for interface (in case of mutiple concept assumed // or if you end; can't change the class/record but providing a method matching with a concept method expected) end; THelpInt = record helper for Integer ( CSumContainerElt ) private class function GetNullValue : Integer; public function class function TGenericSum.Sum(const Left,Right: Type): Type; ToString : string; class property NullValue : Integer read GetNullValue; end; TSumMyRecord = begin TSumContainer; TSumInteger = TSumContainer; Result := Left + Right; // Has Type an operator Add ??? end;

C++ templates permit this but generate complexes errors cases if a type can't use with a template (verifications are do only when the code for a template is creating).

.Net constraints are a good idea but extend them will produce hard reading code : TMyGeneric //help !

So what i propose : a new key word to specifie what kind of type is allowed for the generic. The next C++ standard can also introduce this feature (http://www.open- std.org/jtc1/sc22/wg21/docs/papers/2006/n2081.pdf).

With this generics in Delphi would be as powerfull as C++ template but with a easy to read code.

This new key word would work as interfaces but only at compiling time and could be used with class, record, class helper and record helper.

Exemples of possible use (with a "concept" key word) below.

QC Entry 55221 QC #: Date Reported: Area: 55550 12/4/2007 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] Run the following Test Case: BcdMultiply return invalid result for negative operand program BTS256690; [QC Description] If we use BcdMultiply to multiply 2 BCD values: 0 and -1. The return result is 0 with negative sign. However, we {$APPTYPE CONSOLE} expect it is 0 without negative sign. QC Entry 55550 uses FmtBCD;

var B1, B2: TBcd; Counter: Integer = 0;

begin if BcdCompare(VarToBcd(0), VarToBcd(0)) = 0 then Inc(Counter) else WriteLn('FAIL #1');

B1 := VarToBcd(0); BcdMultiply(B1, VarToBcd(-1), B2); if BcdCompare(B2, VarToBcd(0)) = 0 then Inc(Counter) else WriteLn('FAIL #2 B2=', BCDToStr(B2));

if Counter = 2 then WriteLn('PASS');

end. QC #: Date Reported: Area: 55863 12/11/2007 Documentation Description: Steps: [QC Short Description] 1. Navigate to the Help Topic: ms-help://borland.bds5/devcommon/modelview_xml.html 2. Look at the See Also See Also links for the Model View Window aren't linked section of the help topic exp: All See Also links can be navigated act: Some See Also links are not links

[QC Description] When viewing the Model View Window topic, some of the See Also links are not actually links. QC Entry 55863 QC #: Date Reported: Area: 56062 12/17/2007 IDE\Docking Description: Steps: [QC Short Description] 1. Launch BDS without anything opened (except welcome page) 2. Trigger "View" -> "Dock Edit Window" Exp: The "dock edit window" feature fails to dock the edit window is undocked Act: the edit window is undocked :) 3. Trigger an other time "View" -> "Dock Edit Window" Exp: the edit window is docked Act: the main window is enlarged but area stays gray, main window [QC Description] has to be maximized/restored in order to be workable.

The "Dock Edit Window" in the View menu can successfully undock editor. Problems appear when attempting to dock the editor window: client area is empty and gray.

Reproduced with Delphi 2007 and RAD Studio 2007 on different systems (Windows 2000, Windows XP32, Windows Vista).

Screeshot and steps are part of this report QC Entry 56062 QC #: Date Reported: Area: 56230 12/20/2007 IDE\Structure Pane Description: Steps: [QC Short Description] 1. Open structure pane. 2. Right click on Properties. 3. Unable to rename function in Explorer Options pane. Ability to rename functions in the structure pane.

[QC Description] Ability to rename functions in the structure pane. QC Entry 56230 QC #: Date Reported: Area: 56714 1/8/2008 IDE Description: Steps: [QC Short Description] Create a directory: c:\Path with Spaces\bin Check for quotes in "Tools/Configure Tools..." dialog Copy any .exe into that directory

[QC Description] Tools | Configure Tools This is a really minor thing and not actually a bug, but I thought I'd report it anyway: Click Add.. Give any title While adding a "tool" application in the "Configure Tools" dialog, I pasted the path to the program from a link on For Program, give "c:\Path with Spaces\bin\.exe". Be sure to include the surrounding double quotes the desktop. It was pasted as is, including the enclosing quote characters: Click OK Click Close "c:\Program Files\...\some_tool.exe" From the main IDE Tools menu choose the item you jsut added

The IDE couldn't run it, apparently because it saved the link with the quotes and then tried to enclose it into EXP: the program runs another pair of quotes before launching the app. After going back to the "Configure Tools" dlg and manually ACT: You get the following error message: removing the quotes, all worked fine. ------I know it was really my fault and the delimiters should not be there in the first place, but it was really easy to Error make such a mistake. Wouldn't it be nice to include a simplest check to remove the outer level quotes, if any, ------before storing the data? Unable to execute '""c:\Path with Spaces\bin\LicenseManager.exe""' (Error 2) ------QC Entry 56714 OK ------QC #: Date Reported: Area: 56893 1/12/2008 Compiler\Delphi\Language Description: Steps: [QC Short Description] Compile and run the attached application below. with <> ".": Syntax ambiguity?! See the following output indicating failure. [QC Description] Use "with .. do" statement allows write access to fields of read-only properties of record type. FAIL #1 - Read Only property altered QC Entry 56893 FAIL #2 - Compile time error expected

[Tester Recommended] Note that since a compile time error was expected, that the program compiles is a problem. The property MyRecord on the line marked #1 is clearly a read-only record. Consequently, the assignment on the line marked #2 governed by the "with..do" statement should produce a compile time error and does produce a compile time error with the .NET compiler. Enabling the line marked #3 produces the expected compile time message but as you see does not involve a "with..do".

program BTS257191;

{##COMERR: Error: E2064 Left side cannot be assigned to}

{$APPTYPE CONSOLE}

uses SysUtils;

type TMyRecord = record Field1, Field2 : integer; end;

TMyClass = class(TObject) strict private { private declarations } fMyRecord:TMyRecord; protected { protected declarations } public { public declarations } property MyRecord : TMyRecord read fMyRecord; // #1 procedure InitMyRecord; published { published declarations } end; var MyClass : TMyClass; { TMyClass }

procedure TMyClass.InitMyRecord; begin fMyRecord.Field1:=1; fMyRecord.Field2:=2; end;

begin MyClass:=TMyClass.Create; MyClass.InitMyRecord;

//Compiler eats this ?! with MyClass, MyRecord do Field1:=2; //#2

//Here compiler fails //MyClass.MyRecord.Field1:=2; //#3

if MyClass.MyRecord.Field1 = 2 then writeLn('FAIL #1 - Read Only property altered');

WriteLn('FAIL #2 - Compile time error expected'); end. QC #: Date Reported: Area: 56935 1/14/2008 Internet\WebSnap Description: Steps: [QC Short Description] build an ISAPI application with Multipart form data, use IIS, Send big file, stop suddenly the connection ... see ISAPI BUG / MULTIPART FORM DATA the cpu raise to 100% for ever !

[QC Description] i don't know if this bug is still in Delphi 2005 - 2006 - 2007. in the object TMultipartContentParser: procedure TMultipartContentParser.BufferContent; var L, R: Integer; P: PChar; begin if (WebRequest.ContentLength > 0) and (FContentBuffer = '') then begin FContentBuffer := WebRequest.Content; if Length(WebRequest.Content) < WebRequest.ContentLength then begin L := Length(FContentBuffer); SetLength(FContentBuffer, WebRequest.ContentLength); P := PChar(FContentBuffer) + L; while L < WebRequest.ContentLength do begin R := WebRequest.ReadClient(P^, WebRequest.ContentLength - L); if R = 0 then break; Inc(L, R); Inc(P, R); end; end; end; end;

you see the instruction : while L < WebRequest.ContentLength do begin R := WebRequest.ReadClient(P^, WebRequest.ContentLength - L); if R = 0 then break; Inc(L, R); Inc(P, R); end;

It's a disaster ! in some condition this will result as an indefinitly loop (with 100% CPU usage)

I gave you one indice : function TISAPIRequest.ReadClient(var Buffer; Count: Integer): Integer; begin Result := Count; if not ECB.ReadClient(ECB.ConnID, @Buffer, DWORD(Result)) then Result := -1; end; so you understand :) the function ReadClient give a result of -1 and not 0 if she not success !!!!!!!!!! so while L < WebRequest.ContentLength do begin R := WebRequest.ReadClient(P^, WebRequest.ContentLength - L); if R = 0 then break; Inc(L, R); Inc(P, R); end;

Give an infinite loop if the client for exemple send a big file and stop suddenly the connection because the condition (if R = 0 then break;) will be never true st phane Vander Clock

QC Entry 56935 QC #: Date Reported: Area: 56985 1/15/2008 Database\DBExpress\TSQLDataSet Description: Steps: Statements reprepared on every call to ExecSQL. TDBXWeaverBugsSuite.native.db.test.exe connection=fbconnection -s:TestRaid_257237

[QC Short Description] or ExecSql sets Prepared to false. See attached test program. I was able to reproduce the issue using drivers delivered with RAD studio and FireBird 1.5 with fbclient.dll. SqlExpr.* (pas, dcu, dcuil, hpp) dbexpress4100.* (bpl, dcp, lib, bpi) [QC Description] Borland.VclDbExpress.* (dll, dcpil, pdb) Calling TSqlDataSet.ExecSQL closes the statement and set's Prepared to false.

This was working fine in Delphi 6.0.

FSqlDataSet := TSQLDataSet.Create(nil); FSQLDataSet.SQLConnection := ASqlConnection; FSQLDataSet.CommandText := 'insert .....'; FSQLDataSet.Prepared := ADoPrepare;

while [ data available ] do begin // set params FSQLDataSet.Params.ParamByName('PSomething').AsInteger := Random(12);

// insert the record. Here Prepared is set to false FSQLDataSet.ExecSQL end;

// Francois Piette It's not a DBX driver problem. It apears with CodeGear supplyed driver, Upscene Firebird driver and with Corelab Oracle driver as well. QC Entry 56985 QC #: Date Reported: Area: 56992 1/15/2008 SOAP\WSDL Importer Description: Steps: [QC Short Description] Use the attached WSDL and run it through the WSDLImporter Function Results changed to TSOAPAttachment

[QC Description] Having a function with TSOAPAttachment as result, results in all functions having TSOAPAttachment as result.

Example:

IIPSScriptManager [WSDL] (urn:UIPSTypes-IIPSScriptManager) unsignedShort CreateScript(TIPSScriptType ScriptType, unsignedShort ScriptID) void DeleteScript(unsignedShort ScriptID) void SetFile(unsignedShort ScriptID, string ScriptFile) unsignedShort GetScriptID(string ScriptName) boolean ScriptExists(unsignedShort ScriptID) void CheckScript(unsignedShort ScriptID) TIPSScript GetScript(unsignedShort ScriptID) TIPSScripts GetScripts(TScriptIDs ScriptIDs) TScriptIDs GetScriptList() base64Binary DownloadScript(unsignedShort ScriptID) void UploadScript(unsignedShort ScriptID, base64Binary Data)

Generates:

IIPSScriptManager = interface(IInvokable) ['{4B5040E7-8619-0246-2314-C94617BC1F64}'] function CreateScript(const ScriptType: TIPSScriptType; const ScriptID: Word): TSOAPAttachment; stdcall; procedure DeleteScript(const ScriptID: Word); stdcall; procedure SetFile(const ScriptID: Word; const ScriptFile: WideString); stdcall; function GetScriptID(const ScriptName: WideString): TSOAPAttachment; stdcall; function ScriptExists(const ScriptID: Word): TSOAPAttachment; stdcall; procedure CheckScript(const ScriptID: Word); stdcall; function GetScript(const ScriptID: Word): TSOAPAttachment; stdcall; function GetScripts(const ScriptIDs: TScriptIDs): TSOAPAttachment; stdcall; function GetScriptList: TSOAPAttachment; stdcall; function DownloadScript(const ScriptID: Word): TSOAPAttachment; stdcall; procedure UploadScript(const ScriptID: Word; const Data: TSOAPAttachment); stdcall; end; QC Entry 56992 QC #: Date Reported: Area: 57496 1/27/2008 IDE\Form Designer Description: Steps: [QC Short Description] Modifier to disable snap to grid and designer guidelines while moving/sizing a control

[QC Description] When moving/sizing a control, I seemed to me that Ctrl/Shift/Alt or any combination of them have no effect. (Shift & control show guidelines when a control is selected, but while moving/sizing, no effect).

It would be nice if they could be used to temporarily turn off (or on depending on global settings) snap to grid and guidelines, as, while they are often quite useful, sometimes snap & guidelines can be quite annoying.

Additionnaly, it'd be even nicer to be able to disable them temporarily only for horizontal aligning/snapping or vertical one, using different combination of modifiers (ok, I know there are not so many modifiers ;) I like using Win key as modifier) QC Entry 57496 QC #: Date Reported: Area: 58117 2/12/2008 Documentation\Online Help\VCL Description: Steps: [QC Short Description] TDataSet.Filter Help

[QC Description] In the examples, "State" is the name of a field and should not be linked to TDataSet.State.

"SettingTheFilterProperty" should be "Setting The Filter Property" QC Entry 58117

// Francois Piette Same in french version. QC #: Date Reported: Area: 58473 2/19/2008 Database\dbExpressCore Description: Steps: [QC Short Description] 1) sample 1 ********* Needs any dbx driver which correct returns information on NCHAR (DbxType := For field of the type NCHAR when call ApplyUpdates is not indicated SubType (fldstFIXED) fldZSTRING; DbxSubType := fldstFIXED;). For instance drivers corelab or dbxoodbc or other. Example for MSSQL (dbxoodbc version 3.100 at 2008-02-24): CREATE TABLE dbx_test_nchar ( -- INT [f_bigint] bigint NOT [QC Description] NULL, -- NCHAR [f_nchar_1] nchar(1) NULL, [f_nchar_3] nchar(3) NULL, [f_nchar_128] nchar(128) NULL, For field of the type NCHAR when call ApplyUpdates is not indicated SubType (fldstFIXED). [f_nchar_129] nchar(129) NULL, [f_nchar_254] nchar(254) NULL, [f_nchar_255] nchar(255) NULL, From for this impossible processing the mode TrimChar in dbx-driver. [f_nchar_256] nchar(256) NULL, [f_nchar_355] nchar(355) NULL, [f_nchar_2048] nchar(2048) NULL, PRIMARY KEY f_bigint ); For request below, create simple form for editing (SQLQuery-Provider-CDS- fixed: DataSource-DBGrid): select * from dbx_test_nchar; Install the point of the interruption into Delphi 2007/2006: SQLExpr.pas: procedure SetProcedureParams( Or in code dbx driver on procedure to installation parameter SQLExpr.pas: ISQLCommand30.setParameter (TSqlCommandOdbc.setParameter for dbxoodbc) You see that information on subtype is absent (uSubType = 0). 2) sample 2 ********** open sample from qc 58678: - run app - press button D2007: "ReConnect" - select query "select * from dbx_test_char" - press button "Open CDS" - change any char column ... and press button "Apply CDS" and see value of uSubType on procedure SetProcedureParams( DbxOpenOdbc.pas:TSqlCommandOdbc.setParameter ... iSubType := 0; //if iFldType in [TDBXDataTypes.BlobType, TDBXDataTypes.AnsiStringType] then // OLD LINE. if iFldType in [TDBXDataTypes.BlobType, TDBXDataTypes.AnsiStringType, TDBXDataTypes.WideStringType] then // FIXED LINE. iSubType := Word(FldSubTypeMap[Param.DataType]) else if iFldType = TDBXDataTypes.UnknownType then ... D2006: ... procedure SetProcedureParams( ... iSubType := 0; //if iFldType in [fldBlob, fldZString] then // OLD LINE. if iFldType in [fldBlob, fldZString, fldWIDESTRING] then // FIXED LINE. iSubType := Word(FldSubTypeMap[Params[I].DataType]) else if iFldType = fldUNKNOWN then ... QC Entry 58473 QC #: Date Reported: Area: 58540 2/21/2008 IDE\Menus Description: Steps: [QC Short Description] see descr Designer-specific commends in Edit menu remain enabled in editor

[QC Description] There is a number of commands in "Edit..." submenu (of the main menu) that are specific to the form designer: these are all commands starting from "Align to grid..." and below.

When editing a unit (not even a form), all these commands remain visible and many of them ("Align...", "Size..." and all below them) are even enabled, although they obviously can't do anything useful in this context.

Solution: hide these commands when not in Designer. QC Entry 58540 QC #: Date Reported: Area: 58622 2/23/2008 IDE\Memory Issues Description: Steps: [QC Short Description] (1) Launch Delphi 2007 on Windows Vista wit 4 GB of RAM installed Delphi 2007 About Box doesn't display more than 2 GB of memory available (2) Display IDE dialog box (3) Notice that it displays 2 097 152 KB of memory installed instead of 3 142 676 KB [QC Description] Delphi 2007 about box displays the wrong number of memory available when PC got more than 2 GB of RAM // Francois Piette installed. See attached screen dump showing side by side about box and Vista system informations.

Implementation tip: When calling the Windows API, GlobalMemoryStatusEx should be used instead of GlobalMemoryStatus. QC Entry 58622 QC #: Date Reported: Area: 58955 3/1/2008 Install\User Interface Description: Steps: [QC Short Description] Go to http://members.codegear.com and log in. Choose to see registered products. Select your serial number Allow pasting of serial number/key during install. and press Ctrl-C Install Rad Studio When prompted for serial number press Ctrl-V Only the first edit will be pasted to. [QC Description] Four edit boxes are used to enter you serial number during install. We can copy our serial number from our account on the CodeGear website or from an email received but we have to enter each piece of the serial number in the four edit boxes. It would be convenient that whatever box we were in we could press to paste our serial. What is in the clipboard would be parsed and entered into the correct edit boxes. QC Entry 58955 QC #: Date Reported: Area: 59251 3/9/2008 IDE\Refactoring\Find References Description: Steps: [QC Short Description] see descr. Hint for "Delete" button says "Refactor"

[QC Description] In the toolbar of the "Find references" result panel there are two buttons: "Delete" and "Delete All".

The popup hint for the "Delete" button is incorrect: it says "Refactor", should be something like "Remove the selected reference". QC Entry 59251

// Uwe Schuster I can repeat that in the english and german version.

// Francois Piette I can reproduce in the french version for the delete button. It says "Refactoring (suppr)" which is misleading. I suggest "Supprimer sélection". QC #: Date Reported: Area: 59963 3/26/2008 VCL\Core VCL Classes\TForm Description: Steps: [QC Short Description] Compile & run the attached program. Also, read the instructions on the forms. PopupMode=pmExplicit doesn't handle correctly the closing of forms in certain cases ref:238588, possible dup. [QC Description] Hi,

When a (secondary) form has the PopupMode=pmExplicit and PopupParent the main form, then, if, while the 2ndary form is open, the focus is switched to another program and back, by closing the 2ndary form (which implicitly should bring the focus to the Delphi application), the main form is sent in back to the program which was focused at some moment in time. Compile & run the attached program. Be sure to read the instructions written on the forms to reproduce the bug. (Note: The behavior is the same even I assign the properties in code or in OI, at design-time).

QC Entry 59963 QC #: Date Reported: Area: 60125 3/29/2008 IDE\File Handling Description: Steps: [QC Short Description] 1. Create a new folder 2. In the folder, create or copy a file named "__history" 3. Launch RAD studio 4. Create IDE error when __history folder can't be created a new Delphi VCL forms application 5. Save the project into the new folder 6. Do any change in the project, such as resizing the form 7. Save the project again. => You get the error Expected: The IDE should tell the user [QC Description] that in cannot create the folder "__history" because that name is already used. Impossible de renommer 'Y:\FPiette\CodeGear\Q1-2008\Tests\Raid240161\Unit1.dfm' en 'Y:\FPiette\CodeGear\Q1-2008\Tests\Raid240161\__history\Unit1.dfm.~1~'

"__history" was a file instead of a folder. See attached stack trace QC Entry 60125 QC #: Date Reported: Area: 60175 3/31/2008 ActiveX\Type Library Editor Description: Steps: [QC Short Description] 1) Create a remote datamodule with some interfaces 2) Implement some methods 3) Rename the interfaces Renaming interfaces in a remote datamodule will trash source files Expected: Source files are update accordingly Result: Source files methods are not update correctly and get trashed. [QC Description] After renaming some interfaces in a remote datamodule with some child datamodules, the source files where trashed. Here some examples:

What was class procedure TADMINQueryEngine.UpdateRegistry became, after renaming IADMINQueryEngine to IS3DQueryEngine class procedure TS3DQueryEnS3DQueryEnginetry

function TADMINQueryEngine.ExecuteSearch became function TS3DQueryEngiS3DQueryEngine

function TADMINQueryEngine.GetSessionFileData became

TS3DQueryEngineS3DQueryEngineata

It looks something went wrong in refactoring, it looks it repeats parts of the new string and overwrites the old one partially.

Also a datamodule is turned into a form. It contains form properties (open in in text view) QC Entry 60175 QC #: Date Reported: Area: 60211 4/1/2008 Documentation\IDE Help Contexts Description: Steps: [QC Short Description] 1. open help 2. enter the URL given 3. see it exists 2x AddModuleUnloadProc nearly empty and twice in the overview

[QC Description] The description of AddModuleUnloadProc is "This is... of ..." and it's listed 2 times in ms-help://borland.bds5/delphivclwin32/!!FUNCTIONS_System.html QC Entry 60211 QC #: Date Reported: Area: 60534 4/7/2008 Documentation\IDE Help Contexts Description: Steps: [QC Short Description] SetLastError not properly documented

[QC Description] ms-help://borland.bds5/delphivclwin32/!!FUNCTIONS_System.html says only "This is System.SetLastError" QC Entry 60534 QC #: Date Reported: Area: 60729 4/10/2008 Database\ADO Description: Steps: [QC Short Description] drop a ADOConnection on a form and add 2 buttons and attach the following code. procedure TParameters.ParseSQL error leading to Parameter object is improperly defined on valid SQL TForm1.Button1Click(Sender: TObject); var Query: TADOQuery; begin //Colon breaks because of presence of preceeding Double quote in lateral string Query := TADOQuery.Create(nil); try Query.Connection := [QC Description] ADOConnection1; Query.SQL.Add(' Select '' Hello this is a Colon " : " '' '); Query.Open; finally Query.Free; end; TParameters.ParseSQL has a bug in detecting termination of Literals which can cause subsequent misdiagnosis end; procedure TForm1.Button2Click(Sender: TObject); var Query: TADOQuery; begin //Colon fine here of the : character as the start of a parameter leading to a "Parameter object is improperly defined. Inconsistent or Query := TADOQuery.Create(nil); try Query.Connection := ADOConnection1; Query.SQL.Add(' Select '' Hello incomplete information was provided" Exception. this is a Colon : '' '); Query.Open; finally Query.Free; end; end; Button 1 should now demonstrate the bug.

This bug seems to be present in all versions of ADODB.pas (seen in Delphi6 and 2007). QC Entry 60729 QC #: Date Reported: Area: 60817 4/12/2008 VCL\Standard Controls\TLabel Description: Steps: [QC Short Description] 1. Create a new VCL Win32 Application 2. Use the tool palette to select the TLabel item 3. Press Enter in the TLabel does not autosize if added by pressing ENTER in the tool palette focused tool palette Expected: The Label appears on the form and the autosize property causes the width and height to fit the text. Actual: The Label appears on the form but the autosize property isn't taken into account. [QC Description] The Label's width and height do not fit. The TLabel does not autosize if it is added by pressing ENTER in the tool palette. This causes the TLabel have a wrong width and height until the form is closed and reopened.

This also affects TDBText and other autosized controls. QC Entry 60817 QC #: Date Reported: Area: 61216 4/21/2008 IDE Description: Steps: [QC Short Description] Resources not needed in the IDE

[QC Description] Opening various files in a Resource Editor I found:

BDS.EXE There is a Bitmap called "SPLASH16" than contains the old Delphi 7 look at feel splash screen. It shows Borland with no mention of CodeGear.

CoreIDE120.bpl There is a Bitmap called WIZARDDEFAULT that is black and white logo of Borland Vertical. Maybe should be CodeGear if used.

BDSLauncher.exe Contains all of the BB* Resources, which since I don't think this can display anything, it may be linking in too much.

We just recently reduced our EXE sizes here by doing audits on our resouce files and found several images that were old and not needed, so I hoping this small list might help.

-- QC Entry 61216 QC #: Date Reported: Area: 61378 4/24/2008 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] see QC61372 and QC61376 for steps showing unexpected behavior in C++ personality. Please add Alphabetize option/options to PM and eliminate all forced alphabetization

[QC Description] Please eliminate all automatic and uncontrollable alpahabetization in Project Manager for all personalities.

Currently in Delphi alphabetization is automatic and enforced at all times. I prefer to keep libs, resource files, etc together at the bottom of the list since I cannot edit thes files in the IDE. Others may wish to group files by topic. PM does not allow reording files at all in the Delphi personality.

In C++, the situation is worse because the order of files in PM controls the build order. User can drag and drop files into a different order, but the files are realphabetized every time a new file is added to the project QC61376 or when the view is changed QC61372.

I would like to see all forced reordering of the PM file list eliminated and optional alphabetization implemented instead. Ideally this would include an option to alphabetize now as well as an option to turn on automatic alphabetization as currently enforced in Delphi. QC Entry 61378 QC #: Date Reported: Area: 62347 5/20/2008 Documentation Description: Steps: [QC Short Description] TControlBar.RowSnap help useless

[QC Description] ms-help://borland.bds5/delphivclwin32/ExtCtrls_TControlBar_RowSnap.html is useless as it only says "This is member..." QC Entry 62347 QC #: Date Reported: Area: 62348 5/20/2008 Documentation Description: Steps: [QC Short Description] TControlBar.RowSize useless

[QC Description] ms-help://borland.bds5/delphivclwin32/ExtCtrls_TControlBar_RowSize.html is useless it says "This is member of..." QC Entry 62348 QC #: Date Reported: Area: 62562 5/25/2008 Database\DBExpress Description: Steps: [ASE] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=aseconnection -s:TestRaid_260834

[QC Short Description] -or- Memory leak when ExecSQL using dbexpress TSQLconnection / TSQLQuery with ASE (dbxase30.dll) Simple Delphi 2007 test application source is attached which reproduces the problem. [QC Description] This establishes runtime TSQLConnection and TSQLQuery component, and attempts to truncate then write When using dbxpress TSQLConnection / TSQLQuery with Sybase ASE (using dbxase30.dll) in Deplhi 2007, a 1000 unique records to a database table called dse_trpprc, which comprises two char fields (trp, prctyp). This memory leak occurs with each call to ExecSQL. 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 The issue appears to be related to dbxase30.dll (Sybase ASE), as the same test application does not produce a TSQLQuery makes no difference. memory leak if the TSQLConnection is instead associated with the 3rd party dbexpca400.dll (from Peter Example output from the dbxase30.dll ASE connection using the test application is as follows (demonstrating a Sawatzki) and connected to an AS/400 database. memory leak): -- Including "ReportMemoryLeaksOnShutdown:=true;" in the test application FormCreate, does not report any Start Mem: 3,988 K - End Mem: 6,204 K - Consumed: 2,216 K memory leaks on shutdown, despite the application having consumed and not released additional memory for Start Mem: 6,212 K - End Mem: 6,216 K - Consumed: 4 K each ExecSQL call. 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 The leaked memory is also not released even after Free'ing the TSQLQuery object that was used to invoke the Start Mem: 6,228 K - End Mem: 6,232 K - Consumed: 4 K ExecSQL call (perhaps further confirming the issue exists with dbxase30.dll?). The memory is only released Start Mem: 6,232 K - End Mem: 6,240 K - Consumed: 8 K upon termination of the application. Start Mem: 6,240 K - End Mem: 6,244 K - Consumed: 4 K QC Entry 62562 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: 62671 5/28/2008 Documentation Description: Steps: [QC Short Description] Help for WM_User useless

[QC Description] This topic: ms-help://borland.bds5/delphivclwin32/Messages_WM_USER.html is useless as it says only "This is..:". Good that the Windows SDK provides a more usefull help topic which is listed as well. QC Entry 62671 QC #: Date Reported: Area: 62794 6/1/2008 IDE\Code Completion Description: Steps: [QC Short Description] 1. Open the attached project, or create a console application and paste in this code: program BugFinder; Code completion doesn't work inside classes {$APPTYPE CONSOLE} type TSomeType = (stOne, stTwo); TTestCodeCompletion = class(TObject) public function GetSomeType: TSo // PUT CURSOR AT END OF THIS LINE end; function NonClassGetSomeType: [QC Description] TSo begin end. 2. Position the cursor at the end of the marked line and press Ctrl-Space to invoke code Code completion doesn't see other types declared in the same type section when invoked from within a class completion // EXP: TSomeType to show in the code completion list // ACT: Nothing happens If you place the declaration. cursor at the end of the line function NonClassGetSomeType: TSo and press Ctrl-Space to invoke code QC Entry 62794 completion, it works as expected. If you insert a new 'type' line after TSomeType = (stOne, stTwo); code completion also works. QC #: Date Reported: Area: 62797 6/1/2008 IDE\Code Completion Description: Steps: [QC Short Description] 1. Open the attached project, or create a console application and paste in this code: program BugFinder; Code completion fails when a type name has been completed {$APPTYPE CONSOLE} type TSome = (sOne, sTwo); TSomeType = (stOne, stTwo); var Something: TSome // PUT THE CURSOR HERE function GetSomething: TSome begin end. 2. Put the cursor after TSome on the [QC Description] marked line, and press Ctrl-Space to invoke code completion. //EXP: the code completion list should show If code completion is invoked in a variable declaration at a point where the text so far forms the complete name TSome and TSomeType //ACT: nothing happens If you put the cursor at the end of the line function of an existing type, it fails to show alternatives that start with that name. GetSomething: TSome and press Ctrl-Space to invoke code completion, the expected behaviour is seen.

It doesn't have the same problem in a function declaration. QC Entry 62797 QC #: Date Reported: Area: 63083 6/9/2008 RTL\Delphi Description: Steps: [QC Short Description] Add TStringBuilder.Clear method.

[QC Description] As an alternative to setting Length to 0 on a TStringBuilder, it would be more intuitive to call a Clear method that does the same thing.

(Perhaps a class helper could do the same thing for the .NET StringBuilder. I'll QC this seperately.) QC Entry 63083 QC #: Date Reported: Area: 63088 6/9/2008 VCL Description: Steps: [QC Short Description] Missing INLINE opportunities

[QC Description] Control.TWinControl.DisableAlign seems like a good INLINE candidate.

Control.TWinControl.GetParentBackground seems like a good INLINE candidate.

Graphics.TBrush.GetColor seems like a good INLINE candidate.

Graphics.TBrush.GetStyle seems like a good INLINE candidate.

Graphics.TPen.GetColor seems like a good INLINE candidate.

Graphics.TPen.GetWidth seems like a good INLINE candidate.

Graphics.TFont.GetStyle seems like a good INLINE candidate.

Graphics.TFont.GetHeight seems like a good INLINE candidate.

Forms.TScreen.GetFormCount seems like a good INLINE candidate.

Forms.TScreen.GetCustomFormCount seems like a good INLINE candidate. QC Entry 63088 QC #: Date Reported: Area: 63089 6/9/2008 RTL Description: Steps: [QC Short Description] Missing INLINE opportunities

[QC Description] System.TObject.ClassType seems like a good INLINE candidate.

System.TObject.ClassInfo seems like a good INLINE candidate.

Classes.TCollection.GetCount seems like a good INLINE candidate.

Types.Point seems like a good INLINE candidate.

Types.RectWidth and Types.RectHeight seem like good INLINE candidates and are in fact marked INLINE, but only in the IMPLEMENTATION and neither are in fact inlined e.g. when called from Controls.TCustomHint.SetHintSize. QC Entry 63089 QC #: Date Reported: Area: 63126 6/10/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] 1. Get build 3079 and type the code at the bottom in a unit 2. Compile Exp: Compilation succeeds Act: Compilation succeeds 3. Observe Generic constrained on "class" can access TObject methods but Error Insight says it Error Insight Exp: No error indicated Act: 4 errors: GetHahCode is not declared cannot ======interface type IEquatable = interface function Equals(Other: T): Boolean; end; IEqualityComparer = interface function Equals(A, B: [QC Description] T): Boolean; function GetHashCode(Obj: T): Integer; end; TEquatable = class(TInterfacedObject, IEquatable, QC61237 has been fixed and the compiler is happy with the code in the issue. IEqualityComparer) public { IEquatable } function Equals(Other: T): Boolean; overload; { IEqualityComparer } function Equals However, the very same example code gives an error in Error Insight saying (A, B: T): Boolean; overload; function GetHashCode2(Obj: T): Integer; function IEqualityComparer.GetHashCode = GetHashCode2; GetHashCode is an undeclared identifier. end; implementation //=== { TEquatable } ======function TEquatable.Equals QC Entry 63126 (Other: T): Boolean; begin if Other = nil then Result := False else Result := GetHashCode = Other.GetHashCode; end; function TEquatable.Equals(A, B: T): Boolean; begin if A = nil then Result := B = nil else if B = nil then Result := False else Result := A.GetHashCode = B.GetHashCode; end; function TEquatable.GetHashCode2(Obj: T): Integer; begin if Obj = nil then Result := 0 else Result := Obj.GetHashCode; end; QC #: Date Reported: Area: 63188 6/11/2008 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] - start Tiburon - create a new Delphi.Win32 project - enter "c:\MySearchPath" into "Search path" on the page for Project options: search path -> MSBuild "-I" and "-U" are correct, but "-O" and "-R" are not the node "Delphi Compiler" in the project options - enter "c:\MyNewResourcePath" into "Include file search path" on the page for the node "Resource Compiler"\"Directories and Conditionals" (this is just to check if this [QC Description] path ends up somehow in -R option -> it doesn't and I don't expect that) - compile - switch to the "Output" tab in While using the source version of the JVCL I noticed that the IDE does not add the search path to the -O and -R the message pane - copy the "dcc32.exe" line and paste it into notepad.exe (or any other tool where you can option in the MSBuild command line. In fact of the incorrect -R option the resource files could not better read and re-format it) expected: -Ic:\MySearchPath; -Oc:\MySearchPath; - be found and I had to add the resource file path to the library path to get it compiling. Rc:\MySearchPath; -Uc:\MySearchPath; actual: -Ic:\MySearchPath; - O -R -Uc:\MySearchPath; Delphi 2007:

-I; -O; -R; -U;

Tiburon:

-I; -O -R -U; QC Entry 63188 QC #: Date Reported: Area: 63324 6/15/2008 IDE\Code Completion Description: Steps: [QC Short Description] 1. Activate the "Auto Invoke" option in the Tools/Options.../Code Insight page. 2. Create a new VCL application CodeInsight AutoInvoke is shown when pressing Ctrl+Y (Delete line) 3. Double click on the form (to create a OnCreate event handler) 4. Press Ctrl+Y (delete line) Expected: No code insight listbox should be shown Actual: The code insight listbox appears [QC Description] If you activate the CodeInsight AutoInvoke option and then you press the Ctrl+Y (delete line) shortcut in an empty line that is followed by a non-empty line the CodeInsight listbox is displayed.

Solution: Ctrl+Y should be treated like the arrow keys and not show the code insight listbox. Maybe there are other shortcuts that have the same problem. QC Entry 63324 QC #: Date Reported: Area: 63336 6/15/2008 IDE Description: Steps: [QC Short Description] Close Delphi Open the registry key HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Session\ Set Blank DesktopName key prevents IDE from displaying DesktopName value to "" Restart Delphi You will only see the Windows Caption bar and the welcome page. No Menus, No Toolbar, No Palette, No Object Inspector, Project Manager etc [QC Description] The desktop for the design time IDe is stored in

HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Session\DesktopName

If this value is blank, then the Windows Caption bar of the IDE displays, along with the Welcome page. Nothing else is displayed - and there is no way of accessing the "Save Desktop" combobox, as the menu bar and toolbars are not shown either.

Entering "Default Layout" into the registry value fixes the problem.

QC Entry 63336 QC #: Date Reported: Area: 63474 6/18/2008 Compiler\Delphi\Language Description: Steps: [QC Short Description] Compile the attached application below. Compiler failure with PChar and char literals See the following unexpected compile-time error. [QC Description] The following code generates an Error: E2008 Incompatible types [DCC Error] ... E2008 Incompatible types

program BTS261179; var x: PChar; {$APPTYPE CONSOLE} begin x := '.'; uses if x <> '.' then; //Error here SysUtils; end; var It compiles and works fine under Delphi 2007. It doesn't generate pretty code (it creates a temporary short string Counter: Integer = 0; from the PChar), but it works nonetheless. procedure DoIt; Casting '.' as PChar('.') makes the problem go away. The compiler shoudl have done this itself. var QC Entry 63474 x: PChar; begin [Tester Recommended] x := '.'; if x <> '.' then //Error here WriteLn('FAIL') else WriteLn('PASS'); end;

begin try DoIt; except on E: Exception do WriteLN('FAIL Exception=', E.ClassName, '/', E.Message); end; end. QC #: Date Reported: Area: 63540 6/20/2008 RTL\Delphi Description: Steps: [QC Short Description] var A: TList; B: TList; begin A.Items[0] := nil; // compiles B.Items[0] := nil; // does not compile because TList: "Item" property should be named "Items" the property is misnamed end.

[QC Description] On TList, the "Item" property should be named "Items" for consistency with existing list classes (TList, TInterfaceList, TCollection, etc.).

Change: property Item[Index: Integer]: T read GetItem write SetItem; default; to: property Items[Index: Integer]: T read GetItem write SetItem; default; QC Entry 63540 QC #: Date Reported: Area: 63619 6/23/2008 IDE\Structure Pane Description: Steps: [QC Short Description] 1) Create a type library 2) Select the _TLB.pas file Expected: the structure pane shows the interfaces Actual: Structure pane does not show anything in a *_TLB.pas file the structure pane does not show anything

[QC Description] When the active editor tab is a type library pas file (*_TLB.pas), the structure pane does not show anything, QC Entry 63619 QC #: Date Reported: Area: 64414 7/13/2008 RTL\Delphi\Pascal Strings Description: Steps: [QC Short Description] program BTS262144; Replacement string comparison routines {$APPTYPE CONSOLE} [QC Description] Attached are suggested replacement functions for _LStrCmp, _UStrCmp, as well as suggested implementations uses for _UStrEqual and _LStrEqual (that currently redirect to _UStrCmp and _LStrCmp). They have been tested by SysUtils; myself as well as participants of the Tiburon field test. procedure DoTest; Please replace the existing four functions in system.pas in order to improve string handling performance. var a, b: AnsiString; QC Entry 64414 begin a := 'abc'; b := 'abbc'; if a <= b then WriteLn('FAIL') else WriteLn('PASS'); 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: 64453 7/14/2008 RTL\Delphi Description: Steps: [QC Short Description] TList should have First, Last and Move methods like TList

[QC Description] The TList class in Generics.Collections does not have First, Last and Move methods like TList in the Classes unit does. This makes migrating code from TList to TList more work than it should be. QC Entry 64453 QC #: Date Reported: Area: 64484 7/15/2008 RTL\Delphi\RTL Exceptions Description: Steps: [QC Short Description] 1. Create a new VCL application 2. Put the following code into the OnCreate event handler 3. Execute the SysUtils.Abort can raise an AccessViolation application procedure TForm1.FormCreate(Sender: TObject); begin {1} asm push ebp; mov ebp, 1; end; // this could be done by the optimizer {2} Abort; {3} asm pop ebp; end; end; Expected: Abort raises an EAbort [QC Description] exception at address {2} Actual: Abort crashes with an access violation because [EBP+4] fails. The SysUtils.Abort procedure can raise an AccessViolation if compiler uses the EBP register in the caller for a variable. Furthermore the Abort::ReturnAddress function doesn't return the return address of Abort but the return address of the caller. This is because SysUtils.Abort doesn't have a stack frame. QC Entry 64484 QC #: Date Reported: Area: 64625 7/19/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] 1. Run Delphi 2. Create a new application. 3. Dop a button on the form, and double-click it. 4. Examine the TObject is shown as Undeclared Identifier code window.

[QC Description] In the code below, TObject is shown with the red squiggly underline, and the tooltip "Undeclared identifier 'TObject'" unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); // <== undeclared identifier TObject private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation

{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); // <== undeclared identifier TObject begin (TButton(Sender)).Caption := 'Click'; end; end. QC Entry 64625 QC #: Date Reported: Area: 64642 7/20/2008 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] The Runtime, Design time, and combined(runtime/design time) packages have the same icons in the project The design time packages are not distinguishable in the project manager manager. This makes it difficult to figure out which package from the project group has to be installed. 1. Open a project group containing Design Time and Runtime packages. 2. They all have the same icon. There is no [QC Description] visual difference between them, and you have to try them one by one to see which one can be installed in the The Runtime, and Design time packages have the same icons in the project manager. IDE, and which one can't. QC Entry 64642 QC #: Date Reported: Area: 64836 7/25/2008 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] 1. Create a project group with multiple packages dependant on each other. 2. Build and install all the packages. Rebuilding packages in a project group. 3. Make a change in a class name in the hierarchy of dependencies and start a "Build All". The build will go very slow as the packages are uninstalled installed all the time during the build, and a number or errors will [QC Description] popup. When rebuilding the packages in a project group every package is uninstalled prior to its rebuild, and installed immediately after that. This makes the rebuild enormously slow as all dependant packages are also reinstalled over and over again often taking longer than the compilation itself. In addition when a change is made in a class name in a package and the package is recompiled all dependant packages start throwing a massive amount of popup error messages. All those problems can be fixed if when "rebuilding all" the packages in the project group are uninstalled first and installed after the full rebuild is finished. The rebuild process will be significantly faster and there will be no annoying popup error messages. QC Entry 64836 QC #: Date Reported: Area: 64967 7/29/2008 IDE\Code Browsing Description: Steps: [QC Short Description] In attached examples control click doesn't work. Attached project contains Ctrl+Click doesn't work with project attached (because of unit aliases) standard new unit and 2 new uses in Implementation section and FormCreate event handler which contains one line. QC Entry 64967 Unit RT_Types contains only 2 uses and nothing else.

To reproduce open attached project open the Messages view. COMPILE - This is the necessary step to reproduce. and ctrl-click on word Contnrs. Nothing happend.

you will see message: [Pascal Fatal Error] Unit2.pas(23): F1026 File not found: 'WinProcs.dcu'

the same happend if you ctrl+click on ExtractFilePath word.

I belive it is realted to unit aliases WinProcs and WinTypes in RT_Types. QC #: Date Reported: Area: 64994 7/30/2008 Documentation\Help Output Description: Steps: [QC Short Description] Try to use formatCurr('%m', 2.1). The result is "%m" without quotes. (This example is from a post in FormatCurr help entry is wrong. borland.public.delphi.language.delphi.general by "kei") on 2008-07-30

[QC Description] The Help entry for FormatCurr Function says "For information on the format strings, see Format Strings." Which is wrong.

Maybe it should say "For information on the format strings, see FormatFloat."

--JohnH QC Entry 64994 QC #: Date Reported: Area: 65047 7/31/2008 IDE\Block Completion Description: Steps: [QC Short Description] 1. Create a new VCL application 2. Add an initialization block to the unit 3. Write "begin" in the initialization "begin" is not completed in the initialization and finalization block. block and press ENTER Expected: Block Completion adds the missing "end;" Actual: Nothing happens 4. Remove the "begin" 4. Add a finalization block to the unit 5. Write "begin" in the finalization block and press [QC Description] ENTER Expected: Block Completion adds the missing "end;" Actual: Nothing happens Block Completion doesn't complete the "begin" in the initialization and finalization block. QC Entry 65047 QC #: Date Reported: Area: 65112 8/1/2008 Database\TParams Description: Steps: [QC Short Description] TParam.SetAsVariant does not use TFieldType introduced in D2009

[QC Description] Current code in TParam.SetAsVariant has following case statement: case VarType(Value) of varSmallint, varShortInt, varByte: FDataType := ftSmallInt; varWord, varInteger: FDataType := ftInteger; varCurrency: FDataType := ftBCD; varLongWord, varSingle, varDouble: FDataType := ftFloat; varDate: FDataType := ftDateTime; varBoolean: FDataType := ftBoolean; varString, varOleStr: if FDataType <> ftFixedChar then FDataType := ftString; varInt64: FDataType := ftLargeInt; else

It ignores TFieldType introduced in D2009. The more correct code should be: case VarType(Value) of varSmallint: FDataType := ftSmallInt; varShortInt: FDataType := ftShortInt; varByte: FDataType := ftByte; varInteger: FDataType := ftInteger; varWord: FDataType := ftWord; ...... etc

BTW, the same may be applied to the VarTypeToDataType function. QC Entry 65112 QC #: Date Reported: Area: 65226 8/4/2008 RTL\Delphi\Pascal Strings Description: Steps: [QC Short Description] Test #1: {$ASSERTIONS ON} var U: UnicodeString; A: AnsiString; begin // _NewAnsiString test -- this correctly _LStrFromPWCharLen writes 0 into codePage field sets codePage=DefaultSystemCodePage SetLength(A, 1); // These succeed: Assert(StringCodePage(A) <> 0); Assert(StringCodePage(A) = DefaultSystemCodePage); // _LStrFromPWCharLen test -- this incorrectly sets [QC Description] codePage=0 U := 'test'; A := U; // These fail: Assert(StringCodePage(A) <> 0); Assert(StringCodePage(A) = When a UnicodeString is assigned to an AnsiString, _LStrFromPWCharLen writes 0 in the AnsiString's code DefaultSystemCodePage); end. Actual result: The second set of assertions fail. Expected result: No assertion page field. failures. ======Test #2: {$ASSERTIONS ON} var A: AnsiString; This is inconsistent with _NewAnsiString, which initializes the code page field to DefaultSystemCodePage. (0 is U: UnicodeString; begin Assert(DefaultSystemCodePage = 1252); DefaultSystemCodePage := 1251; // translated to DefaultSystemCodePage internally.) Cyrillic // Initialize the AnsiString SetLength(A, 1); A[1] := #212; // Convert ANSI -> Unicode U := A; Assert(U = #$0424); // Convert Unicode -> ANSI A := U; Assert(A[1] = #212); // Convert ANSI -> Unicode again U := A; As a consequence of this bug, string conversions do not round-trip correctly when a custom Assert(U = #$0424); // Assertion fails! end. Actual result: The last assertion fails. Expected result: No assertion DefaultSystemCodePage setting is used. (See Test #2) failures.

Suggested fix: procedure _LStrFromPWCharLen(var Dest: AnsiString; Source: PWideChar; Length: Integer; CodePage: Word); var DestLen: Integer; begin if Length <= 0 then begin _LStrClr(Dest); Exit; end;

// ADD THESE TWO LINES: if CodePage = 0 then CodePage := DefaultSystemCodePage; DestLen := CharFromWChar(nil, 0, Source, Length, CodePage); SetLength(Dest, DestLen); if DestLen > 0 then begin CharFromWChar(Pointer(Dest), DestLen, Source, Length, CodePage); PStrRec(Integer(Pointer(Dest)) - skew).codePage := CodePage; end else _LStrClr(Dest); end; QC Entry 65226 QC #: Date Reported: Area: 65233 8/4/2008 Database\DBExpress Description: Steps: [QC Short Description] [see description] Need to provide an easy way to specify port number in DSProxyGen

[QC Description] There is no way to specify a non-default connection string in the command-line DSProxyGen.exe. As people will be migrating a suite of existing Datasnap applications, the easiest way will be to assign a new port to each application so as to not conflict with the default 211. In order to generate the new proxy code, they will need to specify the correct port to allow the connection to pick up the right app server. QC Entry 65233

[added second parameter] The first argument is the output file name. The second parameter is the connection string, e.g.: -c:driver=datasnap;port=211 QC #: Date Reported: Area: 65318 8/5/2008 Debugger\Debugger UI Description: Steps: [QC Short Description] 1. Create new VCL Form Application 2. Double click on form 3. Paste this: Raise Exception.Create(''); 4. Run Show Execution Point is not enabled when program stopped on exception program and program will stop on that line. Expected: Menu Run|Show executing Point is enabled Actually: Menu Run|Show executing Point is disabled. Really annoying QC Entry 65318 QC #: Date Reported: Area: 65320 8/5/2008 Debugger\Watches Description: Steps: [QC Short Description] 1. Add a single item to the Watch List. 2. Click over into the code editor (to remove the focus from the Watch Watch List item appears to have focus, but doesn't List). 3. Click back into the Watch List, but in an empty area below the item. The item in the Watch List changes color from grey to blue, seemingly indicating that it has the focus. 4. Press Delete on the keyboard. Nothing [QC Description] happens. 5. Click directly on the item, somewhere in the Value column. The appearance of the item doesn't See Steps. change at all, but now it *really* has the focus. 6. Press Delete on the keyboard. This time, the item is deleted. Expected result: Pressing Delete in Step 4 should have deleted the item. If the item is going to be drawn in a This didn't happen in older versions of Delphi that used a plain list box for the Watch List. "focused" color, then it really should have the focus. QC Entry 65320 QC #: Date Reported: Area: 65406 8/7/2008 VCL\Additional Controls\TStringGrid Description: Steps: [QC Short Description] Themes for TStringGrid and TDBGrid controls

[QC Description] The TStringGrid and TDBGrid controls badly need support for the Windows XP themes. They are almost last controls in VCL that lack a modern appearance. QC Entry 65406 QC #: Date Reported: Area: 65415 8/7/2008 VCL\Standard Controls\TComboBox Description: Steps: [QC Short Description] On XP or above with themes enabled: Create a new application Add a TComboBox and TEdit control to the TextHint doesn't show in ComboBox main form. For both controls, make sure the Text property is empty. For both controls, enter some text in the TextHint property. Run the application. Change the focus between the controls. Note the background of each [QC Description] control. Expected: The TextHint text should show in both controls at design time and in the unfocused control at When you set the TextHint in a TComboBox, it doesn't show at design or run time. run time. Actual: TextHint shows for the TEdit control, but not the TComboBox. QC Entry 65415 QC #: Date Reported: Area: 65455 8/8/2008 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] - New Project | Package - Save with default name Package1.bpl - New Project | Package - IDE create agais New Package Project always create Package1.bpl Package1.bpl - Save with a different name - Package2.bpl - New Project | Package - IDE create agais Package1.bpl and so one. If the project is not saved, IDE create the new packages as package1, package2, [QC Description] package3... With a opened project group, adding a new package project, it always is created as Package1.bpl, if the project IS saved. QC Entry 65455

QC #: Date Reported: Area: 65458 8/8/2008 Documentation\Online Help\VCL Description: Steps: [QC Short Description] TComboBox - Clarify TextHint property as Vista and above only

[QC Description] The TextHint property works in XP or later for edit controls, but only in Vista or later for TComboBox.

Please add a clarification to the help for TextHint under TComboBox for this. QC Entry 65458 QC #: Date Reported: Area: 65459 8/8/2008 Documentation\Online Help\VCL Description: Steps: [QC Short Description] Clarify behaviour of TEdit.NumbersOnly property (it still allows non-numeric data)

[QC Description] When the NumbersOnly property is set, non numeric values can still be assigned to the TEdit programatically or pasted into the control by the user. This is expected behaviour according to microsoft's documentation on ES_NUMBER style: http://msdn.microsoft.com/en-us/library/bb775464.aspx

Please add a clarification to the help for NumbersOnly under TEdit for this. QC Entry 65459 QC #: Date Reported: Area: 65544 8/11/2008 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] 1. Open a project group with multiple C++ Builder projects. 2. Remove a project from the group. 3. The "Save Deleting a project from a project group does not mark it as unsaved. All" button remains disabled and prevents saving the changes in the group.

[QC Description] After deleting a project from a project group the "Save All" button remains disabled. QC Entry 65544 QC #: Date Reported: Area: 65680 8/14/2008 Database\DBExpress\TFMTBcd Description: Steps: [Informix] TDBXTiburonBugsSuite.Native.DB.Test.exe connection=informixconnection -s:TestRaid_264520

[QC Short Description] TBCDField error size 255

[QC Description] For some BCD fields where the value is calculated using sum, nvl or sub-query in

TCustomSQLDataSet.AddFieldDesc the iunits2 has value 255. That is out of bounds and the DataSet tries to define the field with size of 255. The result is 'Invalid field size'.

By debugging and changing the field size to 32 (On informix IDS server I don't know whenever the max value depeneds on server type) the program worked ok. With value higher of 32 also results 'BCD overflow'.

However I can't find a way to change this behaviour. Please if someone could give me a hint how to replace the 255 with 32 in source. It would help me a lot as I must soon deploy the application to a client.

A simple query to fail: select b/a from example2 create table example2 (a integer, b decimal(16,2) ) ;

Now I've uploaded the source of the first example. I hope this will help to reproduce the problem. QC Entry 65680 QC #: Date Reported: Area: 65728 8/16/2008 Documentation\Online Help Description: Steps: [QC Short Description] AnsiStrings name-space doesn't exist.

[QC Description] AnsiStrings name space doesn't exist. Moreover, the example of defining the function included in it doesn't exist.

Ex. function AnsiCompareStr(const S1, S2: AnsiString): Integer; QC Entry 65728 QC #: Date Reported: Area: 65767 8/18/2008 RTL\Delphi\File Management Description: Steps: [QC Short Description] Some Programms look in ONE single file. One Create the file for Writing it, all others can read the file. Open OpenFile, CreateFile with TFileStream or SysUtils.CreateFile dont honor fmShareDenyWrite, it's impossible to new file with delph, shared mode deny WRITE , tfilestream or else... dont close file. lockfilehandle := read an already opened File from an other programm!!!! TFileStream.Create(s, fmCreate OR fmShareDenyWrite ); <==== fmShareDeny* will be ignored Open the same file for READ only with another delphi programm... dont work... FSlockfilehandle := TFileStream.Create [QC Description] (Filename, fmOpenRead or fmShareDenyWrite ); <=== NO HANDLE!!!! FSlockfilehandle.Read (macbuffer^,sizeof(macbuffer^)) FSlockfilehandle := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite );

Don't Work! sysutils.FileOpen(Filename,fmOpenRead or fmShareDenyWrite );

Don't Work!

...\source\Win32\rtl\sys\Sysutils.pas

There is a function not allready out-programmed!!!

function FileOpen(const FileName: string; Mode: LongWord): Integer;

{ FileCreate creates a new file by the specified name. If the return value is positive, the function was successful and the value is the file handle of the new file. A return value of -1 indicates that an error occurred. On Linux, this calls FileCreate(FileName, DEFFILEMODE) to create the file with read and write access for the current user only. } function FileCreate(const FileName: string): Integer; overload; inline;

{ This second version of FileCreate lets you specify the access rights to put on the newly created file. The access rights parameter is ignored on Win32 } function FileCreate(const FileName: string; Rights: Integer): Integer; overload; inline;

{ FileRead reads Count bytes from the file given by Handle into the buffer specified by Buffer. The return value is the number of bytes actually read; it is less than Count if the end of the file was reached. The return value is -1 if an error occurred. }

function FileCreate(const FileName: string): Integer; {$IFDEF MSWINDOWS} begin Result := Integer(CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)); end; {$ENDIF} {$IFDEF LINUX} begin Result := FileCreate(FileName, FileAccessRights); end; {$ENDIF} function FileCreate(const FileName: string; Rights: Integer): Integer; {$IFDEF MSWINDOWS} begin Result := FileCreate(FileName); <<======HERE IS MISSING CODE!!! end; {$ENDIF} {$IFDEF LINUX} begin Result := Integer(open(PChar(FileName), O_RDWR or O_CREAT or O_TRUNC, Rights)); end; QC Entry 65767 QC #: Date Reported: Area: 65837 8/19/2008 Documentation\IDE Help Contexts Description: Steps: [QC Short Description] TItemChange problems

[QC Description] Description for csState is incomplete.

Links in See Also are messed up (and these aren't links at all): TListItem TListItem TCustomViewItem TListItem TListItem TCustomViewItem TListItem TCustomViewItem TCustomViewItem TCustomViewControl TCustomListView TCustomListview

QC Entry 65837 QC #: Date Reported: Area: 65839 8/19/2008 Documentation\IDE Help Contexts Description: Steps: [QC Short Description] TList.Notify - no help

[QC Description] At least no entry in the Index, as well as for other protected members of TList. QC Entry 65839 QC #: Date Reported: Area: 65949 8/21/2008 RTL\Delphi Description: Steps: [QC Short Description] Test #1 - Negative values: var S: TStringBuilder; begin try S := TStringBuilder.Create; S.Length := - TStringBuilder.set_Length allows negative length and mishandles capacity-expansion failure 100000000; // no exception! S[S.Length-1] := 'a'; // Access violation / heap corruption except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end. Test #2 - Length left at new value following EOutOfMemory: [QC Description] var S: TStringBuilder; begin try S := TStringBuilder.Create; try // This raises EOutOfMemory on my VM with 384 TStringBuilder.set_Length issues: MB RAM. // On a system with more memory, you'll probably have to issue a few // large GetMem's first for this to fail. S.Length := $1FFFFFF0; except on EOutOfMemory do Writeln('Caught EOutOfMemory. S.Length = $', - It silently accepts a negative Value. It should raise an exception as .NET does. (Note that Append can feed IntToHex(S.Length, 1)); end; if S.Length <> 0 then S[S.Length-1] := 'a'; // Access violation / heap corruption negative Values to set_Length when "Length := Length + ..." overflows.) except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end.

- It updates FLength *before* expanding the capacity. Problem there is, if ExpandCapacity raises EOutOfMemory, FLength will be left holding the new value. This can lead to heap corruption if the application tries to write FLength bytes afterward.

- In ExpandCapacity, "Length * 2" could overflow. It should fall back to setting a capacity of Length in that case.

Suggested fixes attached on Workaround tab. QC Entry 65949 QC #: Date Reported: Area: 66017 8/23/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] File, New VCL Forms Application SHow form source Overwrite the entire "type" source line with this: type Error insight fails to parse some procedure declarations with directives (stdcall, etc.) TMyProc = function(Foo: Boolean): Boolean stdcall; Error insight reports this error: type TMyProc = function (Foo: Boolean): Boolean stdcall; The project compiles fine. You can also duplicate this by opening [QC Description] ToolsAPI.pas and the above error is triggered twice. Error insight fails to parse some procedure declarations with directives, such as this one: type TMyProc = function(Foo: Boolean): Boolean stdcall; The resulting error is: Expected ; but received an identifier 'stdcall' at line 9 (9:48) QC Entry 66017 QC #: Date Reported: Area: 66035 8/24/2008 Database\Data Aware Controls\TDBRichEdit Description: Steps: [QC Short Description] To test it, do a simple app with a TDataSet, TDBGrid and a TDBRichEdit connected to one of TDataSet's fields. TDBRichEdit doesn't save it's changes in certain circumstances Add two buttons with the following OnClick handlers: procedure TfrmMain.Button1Click(Sender: TObject); begin with DBRichEdit1.Paragraph do Alignment:=taCenter; end; procedure TfrmMain.Button2Click(Sender: TObject); [QC Description] begin with DBRichEdit1.SelAttributes do Size:=Size+5; end; Add some records. Make sure that you fill in Hi, something in the rich edit. Commit. Go to any record which has some text in the DB rich edit. Make sure that TDataSet is in dsBrowse state (look at TDBGrid indicator). Make a selection. Press the Button1 once and If we have a TDBRichEdit bound to a field F1 and F1's TDataSet is in dsBrowse mode, then by using Button2 several times. The text must be centered and the font selection size must grow. Note that the SelAttributes and/or Paragraph properties in order to change the RTF format, the F1.DataSet doesn't enter in TDBGrid's indicator remains unchanged. Go to another record (in order to "save" the data). Return back. EXP: edit mode and the changes are not saved. The changes must be persisted. The font size must be bigger. Alignment: Centered. ACTUAL: The changes are not saved. See steps for how to reproduce the problem.

Proposed fix: ------

Add to TDBRichEdit the RichEdit unit to the Uses clause in order to allow you to add the following private procedures (the messages are defined in RichEdit.pas): procedure EMSetCharFormat(var Message: TMessage); message EM_SETCHARFORMAT; procedure EMSetParaFormat(var Message: TMessage); message EM_SETPARAFORMAT; with the bodies procedure TDBRichEdit.EMSetCharFormat(var Message: TMessage); begin BeginEditing; inherited; end; procedure TDBRichEdit.EMSetParaFormat(var Message: TMessage); begin BeginEditing; inherited; end;

- implemented & tested in 3155.

HTH & TIA QC Entry 66035 QC #: Date Reported: Area: 66151 8/28/2008 Database\dbExpressCore Description: Steps: [Oracle] CodeGear™ RAD Studio 2007 Version 11.0.2902.10471 Copyright © 2007

[QC Short Description] Oracle 10G Database - Delphi RAD Studio 2007 (WIN32 VCL and VCL.NET) DBExpress Problems Oracle 10G driver Database Table [QC Description] >>>>>Urgent >>>> Oracle 10G select on NUMERIC; FLOAT; DATE ; BINARY_DOUBLE Fields results in ERROR TABLE TESTORACLE On Vista ID - NUMERIC 10 Primary Key Connect to Oracle Database is OK Matchcode VARCHAR2(30) select VARCHAR2 is OK CHANGED DATE PRICE FLOAT QC Entry 66151 PRICE2 BINARY_DOUBLE

one row with ID = 1; MATCHCODE = Test; Changed = 12.12.2008; PRICE = 1; PRICE2 = 1;

var dmodul.quleer1: TSQLQuery; //with TSQLConnection;

//Connect to Oracle 10G is OK on Vista Business Client / Server Vista Business

dmodul.quleer1.Close; dmodul.quleer1.SQL.Clear; dmodul.quleer1.SQL.Add('select MATCHCODE FROM TESTORACLE WHERE ID = 1'); dmodul.quleer1.open;

---> Test --->>>>>>OK

dmodul.quleer1.Close; dmodul.quleer1.SQL.Clear; dmodul.quleer1.SQL.Add('select ID FROM TESTORACLE WHERE ID = 1'); dmodul.quleer1.open;

---> Error --->>>>>>Operation can not be used

dmodul.quleer1.Close; dmodul.quleer1.SQL.Clear; dmodul.quleer1.SQL.Add('select PRICE FROM TESTORACLE WHERE ID = 1'); dmodul.quleer1.open;

---> Error --->>>>>>Operation can not be used

dmodul.quleer1.Close; dmodul.quleer1.SQL.Clear; dmodul.quleer1.SQL.Add('select CHANGED FROM TESTORACLE WHERE ID = 1'); dmodul.quleer1.open;

---> Error --->>>>>>Operation can not be used

dmodul.quleer1.Close; dmodul.quleer1.SQL.Clear; dmodul.quleer1.SQL.Add('select PRICE2 FROM TESTORACLE WHERE ID = 1'); dmodul.quleer1.open;

---> Error --->>>>>>ORA-01036: Variable name/ Number is unvalid QC #: Date Reported: Area: 66242 8/30/2008 Install Description: Steps: [QC Short Description] Install Rad Studio Check that this empty directory exists: C:\Documents and Settings\All Users\Application Installer creates directories with both the Embarcadero and CodeGear name and one is empty Data\CodeGear [Note: The exact location depends on your Windows edition- the quoted path is for W2K]

[QC Description] After the install completes, there are two directories under All Users, each with different company names:

C:\Documents and Settings\All Users\Application Data\Embarcadero C:\Documents and Settings\All Users\Application Data\CodeGear

The CodeGear one is empty, so it probably shouldn't even be created. The Embarcadero one has the license details. This is with a clean W2K VM, so it isn't leftovers from an old install. QC Entry 66242 QC #: Date Reported: Area: 66304 9/1/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] compile test code compiler allows bad inherited; call in generic consructors See that compilation w/o error. [QC Description] See that the code runs w/o failure. The following code will compile and run, despite the fact that the ancestor class has none of the constructors the line When generics are not being used the following error expected. inherited; should be calling. Error: E2008 Incompatible types

[Tester Recommended] program BTS264944;

{$APPTYPE CONSOLE}

uses SysUtils, Generics.Collections;

type TMyList = class(TList) constructor Create(const abool : Boolean); overload; constructor Create(const aStr : string); overload; constructor Create(const aFloat : double); overload; end; var thelist : TMyList;

{ TMyList }

constructor TMyList.Create(const aStr : string); begin inherited; //<--no such method end;

constructor TMyList.Create(const abool: Boolean); begin inherited; //<--no such method end;

constructor TMyList.Create(const aFloat: double); begin inherited; //<--no such method end;

begin try { TODO -oUser -cConsole Main : Insert code here } thelist := TMyList.Create(True); thelist.Free; WriteLn('PASS'); except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end. QC #: Date Reported: Area: 66307 9/1/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] open Generics.Collection in the IDE Structure view does not recognize 'override' on generic methods

[QC Description] Opening unit Generics.Collections in the IDE shows 10 instances of an error stating that an overloaded method must be marked with the overload directive.

The errors are found at the implementation declaration. The methods are marked as overloaded in the interface section.

It appears that the structure view can't relate the implementation back to the interface declaration for this directive QC Entry 66307 QC #: Date Reported: Area: 66318 9/2/2008 Database\Core VCL\Lookup Description: Steps: [QC Short Description] TDBXBugsTiburonBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_265035 DBExpress and ClientDataSet can't locate record with Chinese ----- QC Entry 66318 1. add sqlconnection, sqltabel, datasetprovider, clientdataset, datasource, and dbgrid into form. 2. connect them to an interbase db. 3. add edit and button to the form. 4. write code: procedure TForm1.Button1Click(Sender: TObject); begin if ClientDataSet1.Locate('CHARFIELD', edit1.text, []) then showmessage('Found'); end;

then run it.

I used a table with an unicode column. I can see the date by DBGrid, and I can edit or insert it. But, ClientDataSet just can locate English string. can't work with Greek, Hebrew, and Chinese. I copy the string from DBGrid to Edit directly, but it can't work too. QC #: Date Reported: Area: 66366 9/3/2008 Database\DBExpress\TSQLStoredProc Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.test.exe connection=oracleconnection -s:TestRaid_265163 Error using a TSQLStoredProc in Oracle 10g: ''Identifier (package.proc) must be declared'

[QC Description] This error occur because there is a bug in dbExpress components. The solution is down, for anyone who is interested.

When I call a procedure inside a package of another owner, using a TSQLStoredProc component, I always get a error 'Identifier (package.proc) must be declared' because It doesn´t put the owner of the package in front of the procedure calling, like OWNER.PACKAGE.PROCEDURE (I saw this in the TSQLMonitor component). If I remove the schema name property, I get a List index out of bounds (0) error. QC Entry 66366

Steve Axtell -- Possible solution:

The problem occurs because of coding in TSQLStoredProc.PrepareStatement.

Look for if FPackageName <> '' then SQLText := QuoteIdentifier(FPackageName + '.' + FNativeCommand, true); and replace it with if FPackageName <> '' then begin if FSchemaName <> '' then SQLText := QuoteIdentifier(FSchemaName + '.' + FPackageName + '.' + FNativeCommand, true) else SQLText := QuoteIdentifier(FPackageName + '.' + FNativeCommand, true); end;

QC #: Date Reported: Area: 66374 9/3/2008 IDE\Dialogs\Project Options Description: Steps: [QC Short Description] open project settings go to version informations see the top label at the checkbox Label at Checkbox to enable Versionsinformations is truncated in german loc

[QC Description] In Project settings the is a label truncated. the label is for the checkbox which enabled the versioninformations.

German Text of the Label: Versionsinformationen in das Projekt übe

last word is truncated - maybe it is "übernehmen". QC Entry 66374 QC #: Date Reported: Area: 66403 9/4/2008 IDE\Class Completion Description: Steps: [QC Short Description] 1. Load up the simple project in this attachment 2. In the PyroScripting unit, put cursor on one of the classes Class Completion fails if a variant record is in the unit interface and try to do class completion 3. You will see the error I'm talking about 4. Comment out the TPyroScriptStackInfo record and go to #2, it will then work. [QC Description] If you invoke class completion in a unit that has a record with a variant part, it will display false error in the record. Comment out/remove the variant record and it works as expected.

QC Entry 66403 QC #: Date Reported: Area: 66426 9/5/2008 Database\Data Aware Controls\TDBRichEdit Description: Steps: [QC Short Description] TDBXTiburonBugsSuite.managed.db.test.exe connection=BLACKFISHSQLCONNECTION - TDBRichEdit forces its DataSet to be in editing state when the application starts s:TestRaid_265189

[QC Description] --or-- Hi, 1. Make a simple DB app with a TDataSet descendant. Put a TDBRichEdit on the main form and link it to one of if the following conditions applies: the fields. Make sure that TDataSet instance is open by setting Active := True.

1. The DataSet is opened at design time. (ie. when we start the app, the DataSet is already Active). 2. Run the application. Add some records. Commit if necesary. Close. 2. We have on the form a TDBRichEdit visible /and/ already bound to a field from above DataSet... 3. (Re)run the app. You'll see that the TDataSet's state is dsEdit. (You can see this by, eg. putting a TDBGrid ...then the DataSet is already in the Edit state when the app starts. and/or TDBNavigator on form or inspecting the property directly in code - something like if DataSet1.State=dsEdit then ShowMessage('problem');). The cause is that Note: The above behavior should be seen also at step 2, but I didn't tested it. a.) We have procedure TDBRichEdit.EMSetCharFormat(var Message: TMessage); begin BeginEditing; inherited; end;

...which is needed in order to save the DBRichEdit's formatting and b.) TCustomRichEdit (the ancestor of TDBRichEdit) has the nasty behavior to send to itself EM_SETCHARFORMAT as a result of its initialization process (if you have time, see TCustomRichEdit.CreateWnd for details). In fact the 'problematic' code is procedure TTextAttributes.SetAttributes(var Format: TCharFormat2); var Flag: Longint; begin if FType = atSelected then Flag := SCF_SELECTION else Flag := 0; if RichEdit.HandleAllocated then SendStructMessage(RichEdit.Handle, EM_SETCHARFORMAT, Flag, Format); end;

...which is called when TCustomRichEdit sets it's DefaultAttributes.

Proposed fix: ------

Add the following lines (marked bellow with //+) in TDBRichEdit's class interface:

TDBRichEdit = class(TCustomRichEdit) private FCreatingWnd: integer; //+ ... protected procedure CreateWnd; override; //+ ...

...and in the class implementation add: procedure TDBRichEdit.CreateWnd; begin inc(FCreatingWnd); try inherited; finally dec(FCreatingWnd); end; end;

...as well as replace the old TDBRichEdit.EMSetCharFormat with: procedure TDBRichEdit.EMSetCharFormat(var Message: TMessage); begin if FCreatingWnd=0 then BeginEditing; inherited; end;

-8<------8<---- Implemented & tested in FT .3163

...Of course you can declare FCreatingWnd as a Boolean but imho having an integer is a more flexible solution.

HTH. QC Entry 66426 QC #: Date Reported: Area: 66432 9/5/2008 IDE\Object Inspector Description: Steps: [QC Short Description] 1) File -> New -> VCL Forms Application (Delphi for Win32) 2) Select the form 3) Select the Cursor property in Some object inspector dropdows extend beyond the screen edges. the OI 4) Click the dropdown for the Cursor property Notice how the dropdown list extends beyond the top or bottom of the screen. [QC Description] The maximum number of items in a dropdown in the OI was recently increased from 8 to 20. Unfortunately this causes some custom-drawn property lists with large items to extend beyond the edges of the screen. Example: TControl.Cursor.

I recommend the maximum number of items in an OI dropdown to be reduced from 20 to 16. QC Entry 66432 QC #: Date Reported: Area: 66465 9/6/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] - compile this test case //--- begin test case --- program E2010GenericsBooleanArraySelfRef; {$APPTYPE E2010 Incompatible types with an explizit Boolean array as member with itself as type CONSOLE} type THashTreeNode = class FalseTrueNode: array [Boolean] of THashTreeNode; end; THashTree = class public procedure UseSelfRef; end; procedure THashTree.UseSelfRef; var Probe: [QC Description] THashTreeNode; begin Probe := Probe.FalseTrueNode[True]; end; begin WriteLn('PASS'); end. //--- end Since build 3163 using an explizit Boolean array as member with itself as type does produce E2010 test case --- - expected: it compiles - actual: with build 3163 and higher Error: E2010 Incompatible types: 'THashTreeNode.T>' and 'THashTreeNode' with build 3155 and 3158 it compiles - type exchange "FalseTrueNode: array [Boolean] of THashTreeNode" by "FalseTrueNode: array [0..1] of THashTreeNode = class THashTreeNode;" (Boolean -> 0..1) and "Probe := Probe.FalseTrueNode[True];" by "Probe := FalseTrueNode: array [Boolean] of THashTreeNode; Probe.FalseTrueNode[1];" (True -> 1) - compile - expected: it doesn't compile if E2010 is by intention - actual: it end; compiles

Note that it works with the following members

FalseTrueNode: array [0..1] of THashTreeNode;

FalseNode: THashTreeNode;

-> see steps

-> for more information see "[3168] Generic self-referencing tree node no longer compiles" in .tiburon.delphi.compiler (2008/09/05; Message-ID: ) QC Entry 66465

[Tester Recommended] QC #: Date Reported: Area: 66473 9/6/2008 IDE\File Handling Description: Steps: [QC Short Description] In build 3155, I try this: File, New, Package Then, in ProjectGroup1, Package1, right click, Add, and I see the Search path to add unit: not work dialog Add, Add Unit. I Browse to my directory of units, and insert my file. Then, if I want add another unit: ProjectGroup1, Package1, right click, Add, and I see the dialog Add, Add Unit. I see in Search path my previous QC Entry 66473 directory, but, if I click on Browse, I start from ".....\RAD Studio\Projects". Expected: Browse in the path indicated. I not remember if this bug is present in previous build or version. If not, it can be a "nice to have". Request of QC from: [email protected] QC #: Date Reported: Area: 66541 9/9/2008 Documentation\IDE Help Contexts Description: Steps: [QC Short Description] Description of the function return for TSQLConnection.ExecuteDirect is incorrect

[QC Description] Text from help:

"ExecuteDirect returns 0 if the command was successfully executed. Otherwise, it returns a dbExpress error code."

But as per sources: function TSQLConnection.ExecuteDirect(const SQL: WideString): Integer; ... Result := Integer(Command.RowsAffected); ...

So it's the number of rows affected that is returned, not 0. QC Entry 66541 QC #: Date Reported: Area: 66549 7/29/1997 IDE\Code Editor Description: Steps: Delphi does not understand comments that are put by the end of the file (see Steps). Comment such as in the Create new form/module, add initialization code as below. example will invariably be pushed above new event handlers, instead of remaining with the initialization. In other words, Delphi is not parsing the unit correctly. [...]

{ This is a comment, belongs to the constructs below }

initialization { stuff }

finalization { stuff }

end.

Then add FormCreate. It will be inserted after the comment preceding the initialization part.

{ This is a comment, belongs to the constructs below } procedure TForm1.FormCreate(...); begin . . . end; QC #: Date Reported: Area: 66562 9/10/2008 Documentation Description: Steps: [QC Short Description] Try to find help for TPair, TList, TDictionary in help. Generics.Collections is missing in help

[QC Description] Unit Generics.Collections should be documented. QC Entry 66562 QC #: Date Reported: Area: 66572 9/10/2008 SOAP\WSDL Importer Description: Steps: [QC Short Description] 1. Import WSDL file with enumerations with values with same name. 2. Get compiler errors. enumerations contain values with same name

[QC Description] When importing the Cisco Call Manager WSDL, the generated Pascal code contains multiple enumerations with values with the same name. Ie. XConnectedPBX = (None, ...); XFDLChannel = (..., None);

Version 2.2 (rev 10138) of wsdlimp 2.2 named them None, None2, None3 etc. QC Entry 66572 QC #: Date Reported: Area: 66597 9/10/2008 VCL\Ribbon Controls Description: Steps: [QC Short Description] 1) Start a new VCL Application 2) Add a new frame 3) Drop a TRibbon component on the frame 4) Add the Access Violation when using TRibbon in a frame frame to the applcation's default form 5) Run Application crashes with EAccessViolation.

[QC Description] Please see steps. QC Entry 66597 QC #: Date Reported: Area: 66652 5/3/2008 IDE\Code Editor\Help Insight Description: Steps: [QC Short Description] 1) Create a new application. 2) Paste the following function in the implementation section: function Test: Help Insight displays the wrong data types. PChar; // <-- PAnsiChar var dest: PChar; // <-- PAnsiChar begin //function Utf8Encode(const WS: WideString): UTF8String; UTF8Encode(''); // <-- return type System.String //function UCS4StringToWideString(const S: [QC Description] UCS4String): WideString; UCS4StringToWideString(''); // <-- Parameter type System.$$8, return type Help Insight doesn't seem updated with the new data types for PChar, widestring, UTF8String and UCS4String. System.String //function WideStringToUCS4String(const S: WideString): UCS4String; WideStringToUCS4String The steps has a function with a list of examples with the type displayed in comments. The correct code is run (''); // <-- Parameter type System.$$8, return type System.String //function UnicodeStringToUCS4String(const and code completion displays the correct stuff, only help insight is wrong. S: UnicodeString): UCS4String; UnicodeStringToUCS4String(''); // Parameter type Void Type, return type System.$$9, in the system unit the parameter type is still wrong and it says it overrides itself I didn't include all as every single function with these data types displays the wrong info. Note that most of them (System.UnicodeStringToUCS4String), may be because of magic though ;) //function PUCS4Chars(const S: do not show the wrong data type in system.pas, only outside it. UCS4String): PUCS4Char; PUCS4Chars(''); // Parameter type System.$$10 //function Utf8ToAnsi(const S: UTF8String): string; Utf8ToAnsi(''); // Parameter type System.String, no return type shown, and should this QC Entry 61688 function really return a unicode string? the code inside it seems to be lacking //function AnsiToUtf8(const S: string): UTF8String; AnsiToUtf8(''); // Parameter type Void Type, return type System.String end; QC #: Date Reported: Area: 66685 9/15/2008 11:23:14 AM SOAP Description: Steps: [QC Short Description] Search the whole sources folder for the substring "[1], Length(" Missing multiplication with SizeOf(Char) Any occurance that uses arrays containing anything wider than a byte (like UnicodeString) should be fixed, [QC Description] by adding a multiplication with SizeOf(elementtype). I found occurences of this sort of construct :

TStream.Write(UnicodeString[1], Length(UnicodeString));

As far as I understand, this misses the SizeOf(WideChar) multiplication.

After I hit the first occurance, I searched the whole sources folder for the substring "[1], Length(", and look what I found :

D:\Temp\CodeGear_RAD Studio_6.0_source_3168.2\Win32\soap\InvokeRegistry.pas 2400 FSourceStream.Write(Value[1], Length(Value));

D:\Temp\CodeGear_RAD Studio_6.0_source_3168.2\Win32\soap\OPToSOAPDomConv.pas 634 Stream.Write(Request[1], Length(Request) * 2); 1546 Stream.Write(Resp[1], Length(Resp));

D:\Temp\CodeGear_RAD Studio_6.0_source_3168.2\Win32\soap\SOAPAttach.pas 422 AStream.Write(AValue[1], Length(AValue)); 613 ADestStream.Write(SLine[1], Length(SLine)); 829 Stream.Write(Attachment.SourceString[1], Length(Attachment.SourceString)); QC Entry 66685 QC #: Date Reported: Area: 66685 9/15/2008 11:14:28 AM AddOn\Interbase components Description: Steps: [QC Short Description] Search the whole sources folder for the substring "[1], Length(" Missing multiplication with SizeOf(Char) Any occurance that uses arrays containing anything wider than a byte (like UnicodeString) should be fixed, [QC Description] by adding a multiplication with SizeOf(elementtype). I found an occurence of this sort of construct :

TStream.Write(UnicodeString[1], Length(UnicodeString));

As far as I understand, this misses the SizeOf(WideChar) multiplication.

After I hit the first occurance, I searched the whole sources folder for the substring "[1], Length(", and look what I found :

D:\Temp\CodeGear_RAD Studio_6.0_source_3168.2\Win32\IBX\IBSQL.pas 2081 FFile.Write(st[1], Length(st)); 2102 BytesWritten := FFile.Write(st[1], Length(st));

QC #: Date Reported: Area: 66685 9/15/2008 11:10:30 AM Database\Data Aware Controls Description: Steps: [QC Short Description] Search the whole sources folder for the substring "[1], Length(" Missing multiplications with SizeOf(Char) Any occurance that uses arrays containing anything wider than a byte (like UnicodeString) should be fixed, [QC Description] by adding a multiplication with SizeOf(elementtype). I found an occurence of this sort of construct :

TStream.Write(UnicodeString[1], Length(UnicodeString));

As far as I understand, this misses the SizeOf(WideChar) multiplication.

After I hit the first occurance, I searched the whole sources folder for the substring "[1], Length(", and look what I found :

D:\Temp\CodeGear_RAD Studio_6.0_source_3168.2\Win32\db\DBCtrls.pas 2019 if PasswordChar <> #0 then FillChar(S[1], Length(S), PasswordChar);

QC #: Date Reported: Area: 66701 9/12/2008 Database\DBExpress\TSQLQuery Description: Steps: [Prism and Weaver] TDBXWeaverBugsSuite.Native.Db.Test.exe connection=mssqlconnection -s:TestRaid_265531 Error:No value for parameter. -or- [QC Description] Create 2 Fields in a database:fa integer,fb string.both can be Null. Any Database,create a Table named "NEW_TABLE",and 2 fields: Code: fa integer, SQLQuery1.Close; SQLQuery1.SQL.Clear; fb string. SQLQuery1.SQL.Add('insert into NEW_TABLE values(:pafa,:pafb)'); this 2 fields can be null. SQLQuery1.ParamByName('pafa').AsInteger := 1; use dbx connect to the database. SQLQuery1.ParamByName('pafb').Value := Null; use a TSQLQuery:SQLQuery1. SQLQuery1.ExecSQL; if you run this code: Error:No value for parameter 'pafb'. SQLQuery1.Close; SQLQuery1.SQL.Clear; No error occer while use dbgo,or other none dbx controls. SQLQuery1.SQL.Add('insert into NEW_TABLE values(:pafa,:pafb)'); QC Entry 66701 SQLQuery1.ParamByName('pafa').AsInteger := 1; SQLQuery1.ParamByName('pafb').Value := Null; SQLQuery1.ExecSQL;

An error occur:No value for parameter 'pafb'.

if you use dbgo(ADO),no error occur,other database connect controls not occur this error,but dbx occur this error. QC #: Date Reported: Area: 66703 9/12/2008 AddOn\IntraWeb Description: Steps: [QC Short Description] extract attached project and run IWButton1AsyncClick transfer Unicode incorrectly. Once running: [QC Description] 1. Select Execute from file Menu. put 2 controls on form:IWLabel1,IWButton1. EXP: Webpage launched if you write: 2. Click on buttons procedure TIWForm1.IWButton1AsyncClick(Sender: TObject; Exp: No '?' marks, expect kanji and hiragana characters. EventParams: TStringList); begin IWLabel1.Caption := 'abc'; end; It run OK! but if you write: procedure TIWForm1.IWButton1AsyncClick(Sender: TObject; EventParams: TStringList); begin IWLabel1.Caption := '??'; //Chinese charactor:#20013#25991. end; It can not show correctly! If you save this web page,you will find that the html is coded in utf-8,but the javascript file is coded in ansi! TIWServerController.CharSet,only accept capital letter like "UTF-8",but "utf-8" cann't be accepted? QC Entry 66703 QC #: Date Reported: Area: 66733 9/13/2008 IDE\Code Editor Description: Steps: [QC Short Description] 1. Create a new Delphi Win32 console application 2. Right-click into the editor 3. Main menu | Edit | Select All 4. Copy and Paste code editor bug Main menu | Edit | Copy 5. Main menu | Edit | Paste

[QC Description] In some cases the editor appends clipboard data instead of overwrite selected text. The same happens in D2007 as well. See steps to reproduce. QC Entry 66733 QC #: Date Reported: Area: 66745 9/14/2008 Documentation\IDE Help Contexts Description: Steps: [QC Short Description] Missing documentation for FileAge

[QC Description] The Description section (including Examples) describes the deprecated function parameters and return values; there is no information on the new function parameters and values (I can guess what FileDateTime parameter does, but what is the return value of the second function?). QC Entry 66745 QC #: Date Reported: Area: 66810 9/15/2008 VCL\Win 32 Controls\TTreeView Description: Steps: [QC Short Description] 1. Drop a TTreeView on a form. 2. Populate the tree with several nodes. Be sure that at least one node has TTreeView.SaveToFile does not support TEncoding Unicode characters in its caption. I suggest putting the Unicode characters in the first node as the problem will be more obvious. 3. Drop a button on the form - Caption = Save. 4. Write an event handler for the button and [QC Description] call TreeView1.SaveToFile( ) specifying a file name. 5. Drop another button on the form - Caption = Load. 6. There is only one version of the TTreeView.SaveToFile method, and it does NOT take a TEncoding parameter. Write an event handler for the Load button and call TreeView1.LoadFromFile() specifying the same file name from step 4. 7. Run the program. Click the Save button. Check the resulting file. The text is readable by The problem with this is that if the tree nodes contain any Unicode characters in their captions, the resulting file Notepad, but there is no BOM in the file. Next, Click the Load button. The nodes are not correctly loaded and cannot be successfully loaded back into the tree. the tree is corrupted.

The root cause of the problem is in the TTreeStrings.SaveTreeToStream method. This method scans through the nodes of the tree basically creating a string for each node prefixed by a tab character for every level deep in the tree the node is, and followed by a CR-LF to indicate the end of line. Each string is then written to the stream. The correct number of bytes is written because the ByteLength( NodeStr) method is used.

However, what is missing is that since no encoding is used, there is no BOM at the beginning of the file.

So, when you go and use the TTreeView.LoadFromFile method, which calls TTreeStrings.LoadTreeFromStream, there is no BOM in the file, and so the load thinks the data is Ansi data, and this causes the file to be processed incorrectly.

----

One way to solve this problem is to use a temporary string list inside the SaveTreeToStrings method instead of writing directly to the stream. That is, use the temporary string list to build up the list of node items (no need to use EndOfLine because it is in a string list.) Then at the end, use the TStringList.SaveToFile method to save the file. Of course, you would also have to add overloaded methods for TTreeView.SaveToFile and TTreeView.LoadFromFile to accept TEncoding parameters. But these would get passed to the string list method calls. The same is true for the LoadTreeFromStream method, but in that case, the method already uses a temp string list to load the file/stream. QC Entry 66810 QC #: Date Reported: Area: 66812 9/15/2008 VCL\Standard Controls\TComboBox Description: Steps: [QC Short Description] - Unzip attached project to its own directory - Start Delphi 2009 - Open the .dpr or .dproj file of the project - Pres D2009 ComboBox not working with Lithuanian strings and ecUpperCase Run {F9} Act: 'Access violation at address 7C80CF3A in module 'kernel32.dll'. Write of address 00465B38'. The error does not happen if Combobox1.CharSet is set to ecNormal. [QC Description] If combobox contains Lithuanian strings, say

Items.Strings = ( 'NORD/LB' 'VB' 'SNORAS' 'SAMPO' #138'B' 'PAREX' 'HANSA' 'LITAS') and CharCase is set to 'ecNormal' then with ComboBox1 do begin Clear; AddItem( 'Test', NIL ); end; runs in 'Access violation at address 7C80CF3A in module 'kernel32.dll'. Write of address 00465B38'. QC Entry 66812 QC #: Date Reported: Area: 66856 9/16/2008 IDE\Object Inspector Description: Steps: [QC Short Description] 1. Copy the attached Default Layout2.dst file into %APPDATA%\CodeGear\BDS\7.0 Separator line of Object Inspector between property name and value not in the correct position when use 2. Start IDE with the Default Layout. customize desktop layout 3. New VCL Forms application (to make OI show something) 4. Switch back and forth between Default Layout and Default Layout2. [QC Description] Separator line of Object Inspector between property name and value not in the correct position when use When switching from Default Layout2 to Default Layout you'll will see the separator line of object Inspector not customize desktop layout. in correct position, column width of property name is large, proerty value is small. If you reload Default Layout QC Entry 66856 (without switching), you'll see it use the correct position. QC #: Date Reported: Area: 66864 9/16/2008 SOAP Description: Steps: [QC Short Description] Try to import a SOAP v1.2 of WCF server in Delphi 2009. This will become more important, so please add Add SOAP 1.2 support to importer and clients support for this in Win32 clients.

[QC Description] Although Win32 web service servers are currently marked as deprecated, it the web service clients are also falling behind with their lack of SOAP v1.2 support.

Please add SOAP v1.2 support to the WSDL importer and Delphi Win32 SOAP clients, followed - if possible - by MTOM, the items that are lacking the most in Delphi's Win32 SOAP Framework in order to interoperate with other SOAP solutions/frameworks/stacks out there. QC Entry 66864 QC #: Date Reported: Area: 66867 9/17/2008 Internet\Indy Description: Steps: [QC Short Description] Create a new application, and place a TIdSMTP, and TIdMessage components, and a TButton. On the button Problem sending emails with IdSMTP and TIdAttachment click, place the following code, and change the Host / Email appropriatelly... procedure TForm1.Button1Click (Sender: TObject); begin IdSMTP.Host := 'smtp.somemailserver.com.au'; IdSMTP.Port := 25; IdSMTP.Connect; [QC Description] IdMessage.Clear; IdMessage.From.Address := '[email protected]'; IdMessage.Recipients.Add.Address := In D2007, using Indy (TIdMessage), we had this code: '[email protected]'; IdMessage.Body.Text := 'This is a sample message body!'; IdMessage.Subject := 'This is a sample subject!'; TIdAttachmentFile.Create(IdMessage.MessageParts, 'C:\Test_File_0001.txt'); IdSMTP.Send TIdAttachmentFile.Create(IdMessage.MessageParts, 'C:\Test_File_001.txt'); (IdMessage); IdSMTP.Disconnect; ShowMessage('Message Send Completed!'); end;

When the file was received in Outlook - the attachment was named correctly "Test_File_001.txt".

However, with D2009 - it appears it gives it a random name - such as "ATT00003.dat" / "ATT00008.dat" etc.

More importantly, it changes the description to DAT - so if your original file was an excel, pdf etc - they all get changed to "*.dat" - making it impossible for user to open the attachment. QC Entry 66867 QC #: Date Reported: Area: 66869 9/17/2008 Midas Description: Steps: [QC Short Description] TDBXTiburonBugsSuite.Native.DB.Test.exe connection=MSSQLCONNECTION -s:oTestRaid_265351 TClientDataSet.SetOptionalParam is not working --- [QC Description] We have use TClientDataSet.SetOptionalParam methods to add custom information to a data packet. However, var D: TClientDataSet; this function is not working at all in Delphi 2009. It is working fine in Delphi 2007 or below. V: variant; begin Please run the test case below to replay. D := TClientDataSet.Create(nil); QC Entry 66869 try D.FieldDefs.Add('Name', ftString, 20); D.CreateDataSet;

D.SetOptionalParam('ID', 'A01', True); V := D.GetOptionalParam('ID'); CheckEquals('A01', V);

D.SetOptionalParam('ID', '001', True); V := D.GetOptionalParam('ID'); CheckEquals('001', V); finally D.Free; end; end; QC #: Date Reported: Area: 66892 9/17/2008 VCL\Core VCL Classes\TApplication Description: Steps: [QC Short Description] - make sure there's a program running (Windows Explorer, for example) - run the attached program - Click the Closing forms deactivates the application button, Form 2 appears - Click the button on Form 2 --> Form3 appears - Close Form 3 - Close Form 2 Expected: the program is now still the active application (ie. it has focus) Observed: the program which was [QC Description] running before starting the test program is now active. Closing two forms in the test app deactives the program. Any other running app will become active. The test app now appears behind the "other" app.

Tested on XP and Vista. It works fine with D2007. QC Entry 66892 QC #: Date Reported: Area: 66908 9/17/2008 Compiler\Delphi Description: Steps: [QC Short Description] Open attached project I cannot debug because source lines which a debugger shows is illegal Ctrl-F9 [QC Description] Note that the blue dots in EnumeratorTest.pas appear on lines within the comment I cannot debug because source lines which a debugger shows is illegal I can set a break point on comment line this sample. F8 to debug QC Entry 66908 Note that the blue dots in EnumeratorTest.pas appear on lines within the comment QC #: Date Reported: Area: 66910 9/17/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. Generic Type compile check is ambigous. See that it compiles even though compile-time errors are expected. [QC Description] Though I do not implement Addref in Generic Type, a compilation error does not occur. QC Entry 66910 program BTS265356; { Generics implementing interfaces do not produce expected errors [Tester Recommended] }

{##COMERR: Error: E2003 Undeclared identifier: 'QueryInterface'} {##COMERR: Error: E2003 Undeclared identifier: '_AddRef') {##COMERR: Error: E2003 Undeclared identifier: '_Release')

{$APPTYPE CONSOLE}

type TTest = class(TObject, IInterface) end;

begin WriteLn('FAIL - Compile-time error expected'); end.

QC #: Date Reported: Area: 66961 9/18/2008 Documentation Description: Steps: [QC Short Description] Navigate to the ExtendedSelect property for the TListBox class. ms- ExtendedSelect is not documented help://borland.bds5/delphivclwin32/StdCtrls_TListBox_ExtendedSelect.html

[QC Description] The ExtendedSelect property for TListBox is not documented. ms-help://borland.bds5/delphivclwin32/StdCtrls_TListBox_ExtendedSelect.html QC Entry 66961 QC #: Date Reported: Area: 66969 9/19/2008 Debugger\CPU Description: Steps: [QC Short Description] Go to the disassembly view in the middle of a long procedure, scroll up until disassembly gets out of sync. Try Go to address in disassembly view not honoured to resync with a go to address, nothing will happen.

[QC Description] When in the CPU disassembly view, there is an option to go to an address, and disassemble there. In D7 and previous the disassembly view would jump to that address, no question asked.

In D2009, the disassembly view doesn't change if the address is within the disassembly scope, meaning that if instruction disassembly got out of sync (after scrolling up f.i.) it won't resynchronize and disassemble the instruction at the goto address. QC Entry 66969 QC #: Date Reported: Area: 67040 9/22/2008 Compiler\Delphi\Execution Description: Steps: [QC Short Description] 1. Download and install the TPerlRegEx component from http://www.regular-expressions.info/delphi.html Attempting to build application with TPerlRegEx causes "Internal Error" (you may need to fix an invalid path that comes is already setup in the project options) EDIT: I also have the same problem with the version on the Partner DVD. [QC Description] Attemping to build an application using the TPerlRegEx component from http://www.regular- (JJS: See attached .zip file previously downloaded) expressions.info/delphi.html causes Internal Error: L4077 QC Entry 67040 2. Create a new VCL Forms applications. 3. Add the TPerlRegEx directory to your apps Search Path in the project options. [Tester Recommended] 4. Add a TPerlRegEx component to your form and build your project.

You should get an [DCC Fatal Error] F2084 Internal Error: L4077 error. QC #: Date Reported: Area: 67044 9/22/2008 Documentation Description: Steps: [QC Short Description] SysUtils.CharInSet help topic contains no information

[QC Description] The help topic titled "SysUtils.CharInSet Function" contains the function prototype (which is good) but the description reads:

This is function SysUtils.CharInSet.

... which is not at all helpful. QC Entry 67044 QC #: Date Reported: Area: 67102 9/23/2008 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] Enter this code into a new Delphi console project: program Project141; {$APPTYPE CONSOLE} uses SysUtils; Comparing PChar to single char literal fails in Delphi 2009 procedure Test; var P: PChar; begin P := '@'; if P <> '@' then Writeln('@ <> @') else Writeln('@ = @'); end; begin try Test; Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. And run it. [QC Description] Exp: output '@ = @' Act: output '@ <> @' If you do: var P: PChar; begin P := '@'; // all is fine, point PChar to literal if P <> '@' then // here it goes wrong etc...

It appears that the comparison tries to compare a UnicodeString and a ShortString without any conversion of either of them. This does not happen if you use, say, 'Hello', instead of '@'.

Take a look at the CPU view:

Project141.dpr.12: P := '@'; 0040A915 B894A94000 mov eax,$0040a994 0040A91A 8945FC mov [ebp-$04],eax Project141.dpr.13: if P <> '@' then 0040A91D 8D45F8 lea eax,[ebp-$08] 0040A920 8B55FC mov edx,[ebp-$04] 0040A923 E850A9FFFF call @UStrFromPWChar 0040A928 8B45F8 mov eax,[ebp-$08] 0040A92B BA98A94000 mov edx,$0040a998 0040A930 33C9 xor ecx,ecx 0040A932 8A08 mov cl,[eax] 0040A934 41 inc ecx 0040A935 E8028BFFFF call @AStrCmp 0040A93A 741B jz $0040a957

As you can see, P is converted to a UnicodeString, and that is passed to AStrCmp as one of the parameters, which is incorrect! The other parameter, the string at address $0040a998, is a short string (bytes 01 40 00).

QC Entry 67102 QC #: Date Reported: Area: 67121 9/24/2008 Database\DBExpress Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_265464 D2009 dbExpress wrongly uses WideString where D20007 used String I can't know what you need to reproduce it because I don't know what mechanism dbExpress uses to decide if [QC Description] a database is Unicode. Our Oracle applications in D2007 use String for *all* fields of all tables and stored procedures, never WideString. I think it's very likely that if you create a Oracle10g database with characterset WE8ISO8859P15 and connect using this client: Just recompiling in D2009 *all* querys and stored procedures fail with type mismatch errors "expecting String actual WideString". http://download.oracle.com/otn/nt/instantclient/10204/instantclient-basic-win32-10.2.0.4.zip

My guess is that D2009 is wrongly identifying our database as Unicode. I don't know how D2009 identifies if an you can reproduce it. Oracle10 database is Unicode-enabled or not, but in our case it must be doing it the wrong way. I think the right way should be something like:

SELECT value FROM nls_database_parameters where parameter = 'NLS_CHARACTERSET'

In our database that query returns WE8ISO8859P15. Unless that query returns UTF8, UTF16... you shouldn't force us to use Widestrings.

For us using Widestrings throughout all our applications, combined with QC 4790 is a real showstopper.

(An alternative solution would be to add a property SqlConnection.UseUnicode with values Always/Never/Default, so users could decide themselves if they want to use WideStrings).

Example of a query in D2007: object ConexionOracle: TSQLConnection ConnectionName = 'Oracledesarrollo' DriverName = 'Oracle' GetDriverFunc = 'getSQLDriverORACLE' LibraryName = 'dbxora30.dll' Params.Strings = ( 'DriverName=Oracle' 'DriverUnit=DBXDynalink'

'DriverPackageLoader=TDBXDynalinkDriverLoader,DBXDynalinkDriver10' + '0.bpl'

'DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borla' + 'nd.Data.DbxDynalinkDriver,Version=11.0.5000.0,Culture=neutral,Pu' + 'blicKeyToken=91d62ebb5b0d1b1b'

'MetaDataPackageLoader=TDBXOracleMetaDataCommandFactory,DbxReadOn' + 'lyMetaData100.bpl'

'MetaDataAssemblyLoader=Borland.Data.TDBXOracleMetaDataCommandFac' + 'tory,Borland.Data.DbxReadOnlyMetaData,Version=11.0.5000.0,Cultur' + 'e=neutral,PublicKeyToken=91d62ebb5b0d1b1b' 'DataBase=DESARROLLO' 'User_Name=xxxx' 'Password=xxxxx' 'BlobSize=-1' 'ErrorResourceFile=' 'LocaleCode=0000' 'Oracle TransIsolation=ReadCommited' 'RowsetSize=20' 'OS Authentication=False' 'Multiple Transaction=False' 'Trim Char=False' 'Decimal Separator=,') TableScope = [tsSynonym, tsTable, tsView] VendorLib = 'OCI.DLL' Left = 88 Top = 24 end object QRoles: TSQLQuery MaxBlobSize = -1 Params = <> SQL.Strings = ( 'SELECT ROLE' 'FROM SESSION_ROLES' '') SQLConnection = ConexionOracle Left = 216 Top = 24 object QRolesROLE: TStringField FieldName = 'ROLE' Size = 30 end end

As you can see, the field is returned as string. If I try to repeat that in D2009 I get this:

object SQLConnection1: TSQLConnection ConnectionName = 'Oracledesarrollo' DriverName = 'ORACLE' GetDriverFunc = 'getSQLDriverORACLE' LibraryName = 'dbxora.dll' Params.Strings = ( 'drivername=ORACLE' 'database=DESARROLLO' 'user_name=XXXXX' 'password=XXXXX' 'blobsize=-1' 'localecode=0000' 'oracle transisolation=ReadCommited' 'rowsetsize=20' 'os authentication=False' 'multiple transaction=False' 'trim char=False' 'decimal separator=,') VendorLib = 'oci.dll' Connected = True Left = 128 Top = 80 end object SQLQuery1: TSQLQuery MaxBlobSize = -1 Params = <> SQL.Strings = ( 'SELECT ROLE' 'FROM SESSION_ROLES') SQLConnection = SQLConnection1 Left = 216 Top = 80 object SQLQuery1ROLE: TWideStringField FieldName = 'ROLE' Required = True Size = 30 end end

QC Entry 67121 QC #: Date Reported: Area: 67146 9/24/2008 Documentation\Online Help\Main help Description: Steps: [QC Short Description] Missing Unicode documentation

[QC Description] Project Options|Compiling has this:

Long strings by default Delphi for Win32 only. This option (equivalent to the $H directive) controls the meaning of the reserved word string when used alone in a type declaration. The generic type string can represent either a long, dynamically-allocated string (the fundamental type AnsiString) or a short, statically allocated string (the fundamental type ShortString). By default, Delphi defines the generic string type to be the long AnsiString. All components in the component libraries are compiled in this state. If you write components, they should also use long strings, as should any code that receives data from component library string-type properties. The disabled (equivalent to {$H-}) state is mostly useful for using code from versions of Delphi that used short strings by default. You can locally override the meaning of string-type definitions to ensure generation of short strings. You can also change declarations of short string types to string[255] or ShortString, which are unambiguous and independent of the enabled option. Default = True

Which needs updating for Unicode strings. QC Entry 67146 QC #: Date Reported: Area: 67150 9/24/2008 RTL Description: Steps: [QC Short Description] Open the ACLAPI.pas and check the declarations of any of the functions. Incorrect Declaration for multiple functions in ACLAPI library

[QC Description] The function SetNamedSecurityInfoW - the file name (first parameter) is declared as PAnsiChar. So is the GetNameSecurityInfoW, and pretty much all of the other functions in the ACLAPI library...

All the functions ending with W should be declared as PChar - not PAnsiChar. QC Entry 67150 QC #: Date Reported: Area: 67158 9/25/2008 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Incorrect declarations in AccCtrl.pas

[QC Description] ACTRL_ACCESS_ENTRYW = packed record Trustee: TRUSTEE_W; fAccessFlags: ULONG; Access: ACCESS_RIGHTS; ProvSpecificAccess: ACCESS_RIGHTS; Inheritance: INHERIT_FLAGS; => lpInheritProperty: PAnsiChar; end;

ACTRL_PROPERTY_ENTRYW = packed record => lpProperty: PAnsiChar; pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTW; fListFlags: ULONG; end;

TRUSTEE_ACCESSW = packed record => lpProperty: PAnsiChar; Access: ACCESS_RIGHTS; fAccessFlags: ULONG; fReturnedAccess: ULONG; end;

And more... QC Entry 67158 QC #: Date Reported: Area: 67173 9/25/2008 Documentation\Online Help\VCL Description: Steps: [QC Short Description] Open help, index of TSQLConnection TSQLConnection Properties missing DBXConnection

[QC Description] In the help file, the TSQLConnection list of properties is missing DBXConnection. QC Entry 67173 QC #: Date Reported: Area: 67193 9/26/2008 IDE\Dialogs\Environment Options Description: Steps: [QC Short Description] Start IDE Cannot use environement variables in Shared Repository and Default project paths Tools | Options | Environment Variables Click New button [QC Description] Variable name: FOOVAR I'm trying to use an environment variable in the IDE options dialog at: Variable value: c:\ OK Environment Options - Directories - Shared Repository / Default project like: $(DELPHI120DATA) OK Tools | Options | Environment Options After pressing OK I first get this error: For "Default project" enter $(FOOVAR) OK Error: Default project directory $(DELPHI120DATA)\ is invalid.. Details: [5001BE04]{rtl120.bpl } SysUtils.ForceDirectories (Line 6573, Error "SysUtils.pas" + 6) + $2 [..]

The directory is not invalid. It exists on the harddisk and is accessible. When pressing the three bullet button on the right side of the edit, it correctly opens the location where the variable points to.

After confirming this error dialog and pressing OK to close the options dialog, I get an AV:

Error : Access violation at address 21092194 in module 'itecore120.bpl'. Read of address 00000008. Details: [21092194]{itecore120.bpl} ITEGridFont.TITEGridFonts.GetCount (Line 107, "ITEGridFont.pas" + 0) + $0 [210928EA]{itecore120.bpl} ITEGridFont.TITEGridFonts.Merge (Line 246, "ITEGridFont.pas" + 2) + $2 [..]

Could you please check this?

Michael QC Entry 67193 QC #: Date Reported: Area: 67207 9/26/2008 VCL\Graphics Description: Steps: [QC Short Description] In attached file TGifImage is saved incorrectly after assigning TIcon or TMetafile

[QC Description] TGifImage contains wrong image (usually with large black areas) after assigning TIcon or TMetafile to it, saving to file and reloading. (This file already contains wrong image) QC Entry 67207 QC #: Date Reported: Area: 67220 9/26/2008 VCL\Win 32 Controls\TTreeView Description: Steps: [QC Short Description] Proposed solution (see also the Workaround for complete details): const Encoding: TEncoding = nil Add TreeView doesn't load Unicode files Encoding parameter to the following routines in ComCtrls.pas: TCustomTreeView.LoadFromFile (lines 1520 and 11414) Call LoadFromStream (line 11420) TCustomTreeView.LoadFromStream (lines 1521 and 11426) [QC Description] Call LoadTreeFromStream (line 11430) TTreeStrings.LoadTreeFromStream (lines 10015) The LoadFromFile The TTreeview is unable to load itself from Unicode files. You can have nodes with Unicode Text, and save this would pass it to LoadFromStream which would pass it to LoadTreeFromStream which could then pass it on to correctly. But when you load them, they will be loaded as ASCII which shows garbage in the treeview of course. the List.LoadFromStream (line 10027). I'm not sure if the same is also needed for the SaveToFile, since that seems to work fine. Cause: TTreeView LoadFromFile, implemented as TCustomTreeView.LoadFromFile has no Encoding parameter and calls TCustomTreeView.LoadFromStream which in turn calls TTreeStrings.LoadTreeFromStream, again passing no Encoding.

LoadTreeFromStream uses a List.LoadFromStream, passing no Encoding (this is the place where an Encoding could be passed). QC Entry 67220 QC #: Date Reported: Area: 67233 9/26/2008 Database\dbExpressCore Description: Steps: [QC Short Description] 1. Create a new VCL application 2. Drop a TSQLConnection (SQLConnection1) instance and define properties AutoUnloadDriver is not working as is for Interbase connection. To enable AutoUnloadDriver, add a new param (AutoUnloadDriver=True) into SQLConnection.Params 3. Drop a TButton (Button1) and write OnClick event: SQLConnection1.Open; 4. Drop [QC Description] another TButton (Button2) and write OnClick event: SQLConnection1.Close; 5. Run the application in debug In Delphi 2009 DBX4 framework, there is a new property TDBXPropertyNames.AutoUnloadDriver. This is state mode. Make sure you bring out a "Event Log" debug window to trace how the database connection dll is loaded in the DBXCommon.pas about the property: and unloaded. 6. Press Button1 to open the database connection, the Event Log windows will show database connection library has loaded. 7. Press Button2 to Close the database connection, the event log windows show "If set to true, dynalink drivers will automatically unload their dll, when there are no longer any open connections nothing about the database connection library. 8. Close the application will only unload the database that use the driver." connection library.

I expect setting the property to true will make the database connection library to be unloaded when connection is closed.

However, I find no way to activate this function thru current DBX4 implementation.

After tracing the DBX source code, I found the cause of the problem. The Dynalink Driver class has the following constructor: constructor TDBXDynalinkDriver.Create(DBXDriverDef: TDBXDriverDef; DBXDriverLoader: TDBXDynalinkDriverCommonLoaderClass); begin inherited Create(DBXDriverDef); FDriverLoaderClass := DBXDriverLoader; // '' makes this the default command factory. // AddCommandFactory('', CreateDynalinkCommand); if (DriverProperties = nil) or not DriverProperties.GetBoolean(TDBXPropertyNames.AutoUnloadDriver) then CacheUntilFinalization; end;

To make AutoUnloadDriver work as it should, the clue is to avoid invoke CacheUntilFinalization in the constructor. In order to do that, we must make sure DriverProperties is not nil and AutoUnloadDriver property has value "True". QC Entry 67233 QC #: Date Reported: Area: 67235 9/26/2008 VCL\Standard Controls Description: Steps: [QC Short Description] Create a form. Set the forms MinWidth and MinHeight constraints. Resize the form from either the top border or Resize from Left or Top pushes the window with constraints. left border. Once you reach min constraints, the window will start pushing or moving in the direction of the drag. It looks like the code below is in TForm but limited by the FSizeChanging boolean that is not used anywhere. [QC Description] My guess is that FSizeChanging was suppose to be set during WMEnterSizeMove or something like that. Just Resizing a from from the left or top sizer causes the form to move if the form has minimum constraints. a guess. This is my solution below that ignores that flag. procedure TsdForm.WMGetMinMaxInfo(var Message: QC Entry 67235 TWMGetMinMaxInfo); begin inherited; with Message.MinMaxInfo^, Constraints do begin with ptMinTrackSize do begin if MinWidth > 0 then X := MinWidth; if MinHeight > 0 then Y := MinHeight; end; with ptMaxTrackSize do begin if MaxWidth > 0 then X := MaxWidth; if MaxHeight > 0 then Y := MaxHeight; end; end; end; QC #: Date Reported: Area: 67272 9/28/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile and run the attached application below. TObjectList - Access violation See the following program output indicating failure. [QC Description] When creating TObjectList without Comparer, inherited Create to TList is not called (don't know why) FAIL - Exception=EAccessViolation/Access violation at address 00413531 in module and Comparer is not created. It leads to Access violation when Comparer is called - e.g. in IndexOf, Remove, 'BTS266107.exe'. Read of address 00000000 etc. QC Entry 67272 program BTS266107;

[Tester Recommended] {$APPTYPE CONSOLE}

uses SysUtils, Generics.Collections;

var List: TObjectList; Obj: TObject;

begin try try List := TObjectList.Create; Obj := TObject.Create; List.Add(Obj); List.IndexOf(Obj); WriteLn('PASS'); finally List.Free; end; except On E: Exception do WriteLn('FAIL - Exception=', E.ClassName, '/', E.Message); end; end. QC #: Date Reported: Area: 67276 9/28/2008 Compiler Description: Steps: [QC Short Description] write the code: type TMyAnomMethod = reference to procedure; var b: TMyAnomMethod = procedure() begin Error if you try to initialize an anonymous method when declared. 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; [QC Description] var c: TMyRecord = (anomMethod: procedure() begin end); The same Internal error occurs. 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 QC #: Date Reported: Area: 67327 9/30/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached program (copied below). //EXP: no error //ACT: [DCC Error] VeryStrictPrivacy.dpr(15): Too strict privacy with generics E2361 Cannot access private symbol TGenericObject.DoSomethingPrivate program VeryStrictPrivacy; {$APPTYPE CONSOLE} type TGenericObject = class(TObject) strict private procedure [QC Description] DoSomethingPrivate; public procedure DoSomething(const Generic: TGenericObject); end; procedure If generic classes define a method as strict private, they TGenericObject.DoSomething(const Generic: TGenericObject); begin Generic.DoSomethingPrivate; can't use it on parameters themselves. end; procedure TGenericObject.DoSomethingPrivate; begin end; begin end. QC Entry 67327

[Tester Recommended] QC #: Date Reported: Area: 67355 9/30/2008 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] 1. Open and run the attached project Expected: No memory leak Actual: Two memory leaks. TDictionary leaks memory

[QC Description] The TDictionary class leaks the memory for the "Keys" and "Values" property. Once accessed the collection objects aren't released. QC Entry 67355 QC #: Date Reported: Area: 67376 10/1/2008 Internet\XML Description: Steps: [QC Short Description] XML Binding Wizard should use UnicodeString

[QC Description] XML Binding Wizard generates Units using WideString for DOMString Property Type.

I think XmlBinding Wizard should use UnicodeStrings because DomString = UnicodeString in Delphi 2009. QC Entry 67376 QC #: Date Reported: Area: 67377 10/1/2008 Documentation Description: Steps: [QC Short Description] Many classes, methods, properties, Events, procedures and function do not have descriptions in Delphi 2009 Help

[QC Description] Many, Many, many classes, methods, properties, Events, procedures and functions do not have descriptions in Delphi 2009 Help.

For Example, All Help Topics for AnsiStrings Unit has no descriptions. Why? QC Entry 67377 QC #: Date Reported: Area: 67423 10/1/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] If you try to compile the following code: TMyClass2=class; TMyClass1 = class(TComponent) Forward declared classes cannot act as generic constraint end; TMyClass2 = class(TComponent) end; You get error E2510 "Type "TMyClass2" is not a valid constraint", but if you reverse position of TMyClass1 & TMyClass2 it compiles ok. [QC Description] If you have a class that is positioned below a generic class (in the source file), but that acts as a constraint, you should be able to use a forward declaration to allow it to work, but it doesn't compile. QC Entry 67423

[Tester Recommended] QC #: Date Reported: Area: 67434 10/2/2008 Internet\XML Description: Steps: [QC Short Description] TXMLDocument can not pharse XML document with non-english characters.

[QC Description] When the following codes are executing, an error poped up with message : "Invalid character in the document".

There are some Chinese text encoded by UTF8 in the document, and the codes are:

XMLDocument.XML.clear; XMLDocument.XML.LoadFromFile(XMLFilename); XMLDocument.Active := True; or

XMLDocument.XML.clear; XMLDocument.XML.LoadFromFile(XMLFilename, TEncoding.UTF8); XMLDocument.Active := True;

Once the XMLDocument.Active is set to True, the error poped up. I can image the problem is caused by TStrings and XMLDocument internal logic conflicted.

Because classic XMLDocument used TStrings as AnsiString list, but TStrings were replaced with "TUnicodeString", so the XMLDocument logic will get unicode string to "DECODE" again.....

Therefore this error will poped up..... Please fix it ASAP, because TXMLDocument is used very frequently. QC Entry 67434 QC #: Date Reported: Area: 67469 10/2/2008 IDE\Project Management Description: Steps: [QC Short Description] See attached files. IDE is not able to open unit displayed in the contains section Open package OldPackage.dpk and validate the convertion. In the project manager, double click on the MyUnit > you will get an exception. [QC Description] IDE is not able to open unit displayed in the contains section . Open package OldPackage.dpk with notepad and look at the contains level

It specialy appears after converting pacakages having unit listed in the contains section without the .pas contains extension and / or without 'In ' string MyUnit; <=== should be either MyUnit.pas or MyUnit in 'MyUnit.pas'

This is a regression since this used to worked under Delphi version prior to D2009 Now open package OldPackage.dproj with notepad and check near the QC Entry 67469 ... <=== unit name is stored without the .pas extention. Delphi 2009 doesn't like it ! ...

Alternate Steps (from Mark E): 1) Open OldPackage.dpk 2) Open a file in another directory using File | Open Note: Step 2 forces the current directory to change 3) Press Ctrl-F12 and type MyUnit and press Enter. //exp: MyUnit opens. //act: MyUnit not found. QC #: Date Reported: Area: 67485 10/3/2008 Midas\TClientDataSet Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_265735 Property TClientDataSet Filter does not support UNICODE

[QC Description] Property TClientDataSet Filter does not support UNICODE (see attachment) QC Entry 67485

Note from Tomohiro Takahashi <<<<<<<< Please see comments at QC for more detail. >>>>>>>> QC #: Date Reported: Area: 67523 10/4/2008 IDE\Translation Tools\Resource DLL Wizard Description: Steps: description update>>> 1. Create VCL form application Delphi, Cpp. Error compiling resource DLL project if there are include files inside RC-file. 2. Add RC file with any include to project: for example, file Strings.rc

___Strings.rc___ >>> #include "strings.h" [QC Short Description] STRINGTABLE { Error compiling resource DLL projects IDS_PROJNAME "TEST PROJECT" [QC Description] } String resources, added to resource DLL projects are not compiled QC Entry 67523 ___Strings.h___ #define IDS_PROJNAME 2000

3. Add new language to project: Project->Languages->Add 4. Compile resource DLL with new language

Result: compile error [Error] E1026 File not found 'Strings.res' // see on disk into localized project folder: only *.rc, *.rcn files are there; and path to *.h file is not changed into RC file, so it is not found

Workaround: manually copy strings.h into localized project folder.

Note: there is similar behaviour if RC file contains include file from standart include directory of RAD Studio: for reproduce e.g add #include into any rc file and execute same steps QC #: Date Reported: Area: 67558 10/5/2008 VCL Description: Steps: [QC Short Description] 1. Create TDictionary object with capacity as 0, 2 Call AddOrSetValue to add pair 3. TDictionary class's AddOrSetValue will generate access violation AddOrSetValue will generate access violation 4. The pair enumerator is also wrong, it will access one more non-exist pair. for example the following code will generate access violation var aDIC : TDictionary; aEnum : TDictionary.TPairEnumerator; begin aDIC := TDictionary.Create (0); try aDIC.AddOrSetValue('Test', '111'); aEnum := aDIC.GetEnumerator; while (aEnum.MoveNext) do begin ListBox1.Items.Add(aEnum.Current.Key + ' : ' + aEnum.Current.Value); end; finally aDIC.Free; end; end; Note from Tomohiro Takahashi Please see the attached example <<<<<<<< In addition, MoveNext returns True twice. Please see comments at QC for more information. >>>>>>>> QC #: Date Reported: Area: 67560 12/7/2005 Debugger\Local Variables View Description: Steps: [QC Short Description] Ive attached a project open the project and in the unit1, Ive added a comment. Place a break pointon the code While monitoring arrays/lists in items if you expand they are collapsed on step that says big.items[i].items[j]:=j; Run the code, expand in the local variables view the big, then items, then (1) then items. press F8 watch it collapse QC Entry 22052 QC #: Date Reported: Area: 67596 10/6/2008 IDE\Code Editor Description: Steps: [QC Short Description] 1. Inside the editor write the following codes : aSL := TStringList.Create; aSL.Add('??'); aSL.Add('?????'); When use editor's Surround | tryf to reformat codes, all Chinese characters become meanless characters aSL.Add('??'); aSL.Add('???'); aSL.Add('???????'); aSL.Free; 2. Inside the editor selects all the above codes , right click the mouse and select surround | tryf to reformat the codes. 3. The editor will produce codes like the QC Entry 67596 following try aSL := TStringList.Create; aSL.Add('???'); aSL.Add('????????); aSL.Add('???'); aSL.Add('?????); aSL.Add('???????????); aSL.Free; finally end;????'); aSL.Free; end; All TC/SC Chinese characters become meanless characters Please see the attached example QC #: Date Reported: Area: 67603 10/7/2008 VCL\Standard Controls\TListBox Description: Steps: [QC Short Description] I've attached a zip files which contains a screen shot of this problem for a quick review. Moreover, the subfolder Problem with trancparency of PNG files in TImageList (black borders) IMG contains those images which do not work properly. But those are just sample files as others do not work either. I provided some units which show the problem after opening in the IDE: 1) Unit31 was given to me by [QC Description] Rudy Velthuis who tried to reproduce this issue. He used some PNG files from the GlyFX subfolder installed Hi, with D2009. You will noticed that there are no black borders on the top toolbar I've added a new image list (MyImageList) and added the files from the attached IMG subfolder and did get no black borders, too, as could I'm adding some PNG files to a TImageList (24 x 24, ColorDepth cd32bit) to show them up in a TToolbar. be seen in the lower toolbar. 2) So I've created a new form (Unit32) and *copied* the image list (MyImageList) from Unit31 to it - no drawing issues either. 3) I've created a new form (Unit33), added a *new* image list, After loading the image files into the image list, I noticed that all images have got a black border instead of a inserted the PNG files from IMG subfolder and voila, black border are there. So there is really no way to transparent area. reproduce this problem for sure, however Rudy stated he got black borders in Unit33 on his machine, as well. I even tried to solve this on a different Windows installation with different graphics drivers, to no avail either. I Using Windows XP Pro, SP2/SP3. Themes are enabled for the application and in Windows of course. also tried different PNG files, those from the GlyFX subfolder, but did get those black borders again. Of course, I mentioned it already in the description, I do have Themes enabled and have set the image size and color This has already been discussed in the CG newsgroups (non-tech, 'PNGComponents question') without any depth before adding any images. OTH, I have used exactly those images in Turbo Delphi Pro with a third party solution yet (Oct. 7 2008) component TPngImageList and TPngObject (the unit CG has include into D2009 to add PNG support) which QC Entry 67603 work without those issues. So I assume that the PNG files themselves are not buggy in any way. Just for the records: this issue is visible in the IDE *and* during runtime. Using one of those images with a TImage control works perfectly without any black borders. Michael QC #: Date Reported: Area: 67638 10/7/2008 Internet\XML Description: Steps: [QC Short Description] XmlDocument1.XML.Text = Memo1.Text; then XmlDocument1.Active := True; it will rasie Exception if Text has TXMLDocument.XML can't work with unicodestring Chinese Chars.

[QC Description] When I do this XmlDocument1.XML.Text = Memo1.Text , it can't work. I look into VCL and found that TXMLDocument.LoadData use TStringStream.Create(FXMLStrings.Text) to cast unicodestring to ansistring again, why don't call LoadFromXML(s : string) directly without a casting? QC Entry 67638 QC #: Date Reported: Area: 67644 10/7/2008 VCL\Ribbon Controls Description: Steps: [QC Short Description] Open, compile and run RibbonDemo project Ribbon form's caption is flickering while resizing the form Resize

[QC Description] Act : Ribbon form's caption is flickering Ribbon form's caption is flickering while resizing the form Expt : Ribbon form's caption shouldn't flicker QC Entry 67644 // note: if you change the window's width by clicking at the left margin, you can see the form's caption flickering. If you use the right margin instead, this will not happen. QC #: Date Reported: Area: 67645 10/8/2008 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Example code: DrawFlags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT; if FState in [bsDown, DrawFrameControl() declaration wrong bsExclusive] then DrawFlags := DrawFlags or DFCS_PUSHED; DrawFrameControl(Canvas.Handle, PaintRect, DFC_BUTTON, DrawFlags); The passed rectangle PaintRect is changed after the call to DrawFrameControl(), [QC Description] but the parameter is defined as const. The DrawFrameControl() function is wrong defined in the Windows.pas file. The second parameter (the rectangle) should be a LPRECT but is declared as const TRect. The WinAPI still changes the passed rectangle, but this is confusing because of the const declaration.

The WinAPI can change the rectangle to exclude the regions drawn by the function by passing the DFCS_ADJUSTRECT parameter. Normally the LPVOID parameter are defined as var TRect, but not here. QC Entry 67645 QC #: Date Reported: Area: 67651 10/8/2008 Install Description: Steps: [QC Short Description] 'CodeGear\RAD Studio\6.0' folder is created on all user's application data folder, but not used.

[QC Description] After installation of Delphi 2009/C++Builder 2009, "C:\Documents and Settings\All Users\Application Data\CodeGear\RAD Studio\6.0"(Win2K) folder is created by installer,but these folder tree is empty and not used. QC Entry 67651 QC #: Date Reported: Area: 67652 10/8/2008 Documentation\Online Help\Programmers guide Description: Steps: [QC Short Description] Help | CodeGear Help Navigate to URL: ms- Typo in description of Anonymous Methods/Functions help://embarcadero.rs2009/devcommon/anonymousmethods_xml.htm

[QC Description] Hi,

I've just found a small typo in the documentation of Anonymous Methods: ms-help://embarcadero.rs2009/devcommon/anonymousmethods_xml.html

The first example coding says uses MakeAdder as function name: function MakeAdder(y: Integer): TFuncOfInt; but the explanation below tells us about MakeAddr (note the missing 'e'):

"The function MakeAddr returns a function that it declares with no name: an anonymous method. " [..]

A next section "Anonymous Methods Variable Binding", however, correctly uses the name MakeAdder.

So please adjust either the first usage or the later one. QC Entry 67652 QC #: Date Reported: Area: 67665 10/8/2008 Internet\XML Description: Steps: [QC Short Description] Create the following xml document TXMLDocument.SaveToXMLStrings bug with encoded documents Create a sample project with the following code xml:= TXMLDocument.Create(nil); xml.LoadFromFile('d:\temp\n.xml'); xml.active := true; [QC Description] xml.xml.text := xml.xml.text; xml.active := true; // EXCEPTION TXMLDocument.SaveToXMLStrings corrupts the xml strings.While in d2007 with ansistrings the result was a utf- 8 encoded string, now we end up with a unicode string causing the failure when settings the xml.active := true since the xmlstrings do not contains valid xml (eg utf-8 encoded ansi strings). The greek text should be utf-8 encoded and not plain unicode characters as they are now.

I think that all TXMLDocument.SaveToXML methods needs to be rewritten since the result expected is actually ansi text (encoded or not) and not unicode text QC Entry 67665 QC #: Date Reported: Area: 67674 10/8/2008 AddOn\RAVE Description: Steps: [QC Short Description] Rave freezes when printing RTF

[QC Description] When printing RTF data from a database with Rave Reports, Rave gives the impression it has frozen, however, when the Processes are checked the Memory Usage of Rave continues to rise until the process is killed.

This worked fine under BDS2006, I set the project up twice to test, one under BDS2006 the other under D2009, the latter fails. QC Entry 67674 QC #: Date Reported: Area: 67694 10/8/2008 VCL\Dialog Controls\TPageSetupDialog Description: Steps: [QC Short Description] 1. Set up two printers in Windows. 2. Drop a TPageSetupDialog component. 3. Run this code: Printer dialogs shown for wrong printer Printer.PrinterIndex := 0; PageSetupDialog1.Execute; Printer.PrinterIndex := 1; PageSetupDialog1.Execute; Expected result: It should show two Page Setup dialogs in succession, one for the first printer, then another for [QC Description] the second printer. (Click the "Printer..." button to see which printer each dialog is associated with.) Actual Printer dialog components (e.g. TPageSetupDialog) do not respect Printer.PrinterIndex. This is a new regression result: It shows two Page Setup dialogs *for the same printer*. The setting of PrinterIndex is effectively ignored. in Delphi 2009.

Cause:

The GetPrinter function in Dialogs incorrectly initializes the Offset fields of the returned DeviceNames record as byte offsets, when, according to MSDN, they should be character offsets:

"wDriverOffset Offset, in characters, from the beginning of this structure..."

Fix:

Replace Longint() casts with character pointer subtraction: wDriverOffset := Longint(Offset) - Longint(DevNames); -> wDriverOffset := Offset - PChar(DevNames); QC Entry 67694 QC #: Date Reported: Area: 67700 10/9/2008 Debugger\Evaluator View Description: Steps: [QC Short Description] Open the dialog with Ctrl+F7 or menu, try typing in # via AltGr + 3 keys, or Ctrl+Alt+3 keys, nothing happens. Can't enter # in evaluate/modify dialog

[QC Description] The # character end a few others characters (at least the tild '~', opening accolade '{' and euro sign '€') can't be entered in the evaluate modify dialog (the Ctrl+F7).

This is on an AZERTY keyboard.

Other AltGr characters can be entered without issue (such as @, closing accolade {, ). QC Entry 67700 QC #: Date Reported: Area: 67709 10/9/2008 Midas\TClientDataSet Description: Steps: [QC Short Description] Call TClientDataSet.Locate with MidasLib in uses list. Please refer to the attachment for further information. TClientDataSet.Locate memory leak detected

[QC Description] The application reports memory leak upon application termination whenever TClientDataSet.Locate function is being called, with MIDASLIB in uses list.

There is no memory leak if MIDASLIB is not in uses list. QC Entry 67709 QC #: Date Reported: Area: 67713 10/9/2008 VCL\Win 32 Controls\TTreeView Description: Steps: [QC Short Description] 1) Put a TTreeView control on a form 2) Set Tooltips property to true 3) Try to write an OnHint event handler to OnHint event is missing (although documented) making Tooltips property useless change the tooltip for each item Expected: An OnHint event handler is available in the object inspector (or at least via code..) Actual: No such event is available. [QC Description] The TTreeView control implementation does not handle TVN_GETINFOTIP message and do not raise - nor implements an OnHint event, although the Tooltips documentation talks about that event. QC Entry 67713 QC #: Date Reported: Area: 67726 10/9/2008 RTL\Delphi\Thread support Description: Steps: [QC Short Description] drop a button on a VCL Forms application with this code: procedure TForm1.Button1Click(Sender: TObject); AV on closing after calling CurrentThread begin if TThread.CurrentThread.ThreadID = System.MainThreadID then ShowMessage('current thread = main thread'); end; Run the application, Click the button. On closing the application you get an AV: ------QC Entry 67726 --- Application Error ------Exception EAccessViolation in module ntdll.dll at 0001B1FA. Access violation at address 7C91B1FA in module 'ntdll.dll'. Write of address 00000010. QC #: Date Reported: Area: 67762 10/10/2008 Compiler\Delphi\Language Description: Steps: [QC Short Description] Compile the attached application below. Class identifier is not recognized as class in type constraint in generics program BTS266080; [QC Description] The very common task is to use object list with object of specified type. Usually it can be done by using {$APPTYPE CONSOLE} TObjectList. There is the following declaration in Generics.Collections.pas: uses type Generics.Collections; TObjectList = class(TList) type Here TObjectList is a TList descendant with more restrictive type constraint. TSomeAbstractClass = class end; Now, suppose that we need a list of objects with additional functionality. For example, new class can provide search by specific properties of the objects in the list: TSomeAbstractClassList = class(TObjectList) end; type TSomeClass = class(...) begin property SomeCoolProp: TSomeType; WriteLn('PASS'); // PASS on compile // end; end.

You'll get "[DCC Error] Unit1.pas(32): E2511 Type parameter 'T' must be a class type". TSomeClassList = class(TObjectList) function FindBySomeCoolProp(const AValue: TSomeType): TSomeClass; Expected result: the compilation will be successfull. end; P.S. The generic type TObjectList has "class" constraint => T in TObjectList is required to be any class. "T: And what if TSomeClass is actually some abstract class like TStrings? Real work will be implemented in it's TSomeAbstractClass" explictly says that T is a class (it is TSomeAbstractClass class or one of it's descendants. And we need the list of TSomeClass's descendants. So it is naturally to make TSomeClassList to descendants). be some generic class: type TSomeClass = class(...) property SomeCoolProp: TSomeType; end;

TSomeClassList = class(TObjectList) function FindBySomeCoolProp(const AValue: TSomeType): T; end;

Here TSomeClassList is a TObjectList descendant with more restrictive type constraint. It is the same situation as "TList -> TList" + "TObjectList -> TObjectList". Just replaced TObjectList with TSomeClassList and TList with TObjectList.

The problem is that the last declaration above will not compile - see steps to reproduce and a workaround. QC Entry 67762

[Tester Recommended] QC #: Date Reported: Area: 67766 10/10/2008 VCL\Additional Controls\TCategoryPanelGroup Description: Steps: [QC Short Description] Create a new VCL Application Add a TCategoryPanelGroup Add 3 panels to this TCategoryPanelGroup (so TCategoryPanelGroup scrollbar painting issues that a scroll is dislayed) Compile and run the project Move the app around the desktop including off screen act : the scroll bar for the category panel turns gray and fails to repaint until you hover the mouse over it. ext : the [QC Description] scroll bar should be correctly drawn The scroll bar for the category panel turns gray and fails to repaint when part of the CatregoryPanelGroup goes off screen QC Entry 67766 QC #: Date Reported: Area: 67866 10/13/2008 VCL Description: Steps: [QC Short Description] 1. Place a TImageList component on the form 2. Set TImageList's width and height properties to 300 3. Double TImageList will hang IDE click the ImageList 4. The IDE will hang

QC Entry 67866

Theming off, and you might need to set the size to a much larger value. -TG QC #: Date Reported: Area: 67891 10/14/2008 Database\TField\TStringField\TWideStringField Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_265858 TWideStringField.IsNull returns wrong result Run the attached sample and click Test. See how the AnsiStringIsNull and WideStringIsNull fields are filled. [QC Description] TWideStringField.IsNull method provides wrong results in Delphi 2009, and works differently in comparison to The attached archive also contains screenshots with the results for different Delphi versions. previous Delphi versions.

When assigning an empty string to a WideStringField it returns True in 2009, but False in 2007. QC Entry 67891 QC #: Date Reported: Area: 67922 10/15/2008 IDE\Project Management Description: Steps: [QC Short Description] The Welcome page does not offer any option to maintain the listed projects

[QC Description] Hi, the Welcome page in Delphi 2009 does not offer any option/tool to maintain the listed projects.

Currently I've got some projects which are already deleted from harddisk and are still listed on the Welcome page under 'Recently Opened Projects' with the text 'File not found or access denied.'

OTH I would like to remove one or another manually and cannot do this right now.

While the Favorites section offer such an option it would be helpful to have a similar option for the 'Recently Opened Projects'.

Michael QC Entry 67922 QC #: Date Reported: Area: 67993 10/16/2008 AddOn\Interbase components Description: Steps: [QC Short Description] 1. Place TIBDatabase and TIBDatabaseInfo components on form 2. Connect TIBDatabase to some database TIBDatabaseInfo.Version and TIBDatabaseinfo.DBSiteName cause AV 3. Connect TIBDatabaseInfo to TIBDatabase 4. Execute TIBDatabase.Version and TIBDatabase.DBSiteName, each cause an AV [QC Description] Calling TIBDatabaseInfo.Version or TIBDatabaseinfo.DBSiteName results in AV in Kernel32.

Fix1: in function TIBDatabaseInfo.GetDBSiteName change result := AnsiString(PByte(@local_buffer[6 + Int(local_buffer[4])])); to result := AnsiString(PAnsiChar(@local_buffer[6 + Int(local_buffer[4])]));

Fix 2: in function TIBDatabaseInfo.GetVersion change result := AnsiString(PByte(@local_buffer[5])); to result := AnsiString(PAnsiChar(@local_buffer[5]));

QC Entry 67993 QC #: Date Reported: Area: 68007 10/17/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below with the following command-line. Internal Error URW1023 (overload + inline) dcc32 -b BTS265985.dpr [QC Description] Please see attached project: See the following compile-time error indicating failure.

TPluginModules = class abstract(TInterfacedObject, IRegisterPluginV1) Fatal: F2084 Internal Error: URW1135 ... function Add(const AModule: TPluginModule): Integer; overload; inline; ... function Add(const AFileName: String): TPluginModule; overload; inline; program BTS265985; ... end; {$APPTYPE CONSOLE}

... uses uBTS265985b; _Plugins.Add('C:\TestPlugin.dll'); begin There is a problem with the second version of Add method. You will get internal error for this code. If you remove WriteLn('PASS'); "inline" from second Add -> compilation will be successfull. end. QC Entry 68007

[Tester Recommended] unit uBTS265985a;

interface

uses Generics.Collections;

type TPluginModules = class(TObject) FList: TList; procedure Add; inline; end;

implementation

procedure TPluginModules.Add; var Plugin: Integer; begin for Plugin in FList do; end;

end.

unit uBTS265985b;

interface

uses uBTS265985a;

implementation

procedure Test; begin TPluginModules(nil).Add; end;

end. QC #: Date Reported: Area: 68024 10/17/2008 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] TList.Exchange() and TList.Move() Missing

[QC Description] The TList.Exchange() method is missing in Delphi 2009. There are 2 primary reasons why this is a highly visible problem:

1. It means that TList lacks source-level interface compatibility with TList. Anyone wanting to migrate their code from TList to TList will end up needing to reimplement these missing methods. (Aside: Exchange() and Move() aren't the only missing methods, there's others. And it'd be nice if the new methods from TList could be implemented in TList.)

2. This is the real deal-breaker. Anyone trying to reimplement Exchange() or Move() in TList themselves will end up triggering notifications that didn't occur with TList. This is particularly problematic with anyone using TObjectList with OwnsObjects = True (which it is by default). The common idiom of procedure TMyObjectList.Exchange(const Index1, Index2: T); var Tmp: T; begin Tmp := Items[Index1]; Items[Index1] := Items[Index2]; Items[Index2] := Tmp; end; is going to cause Notify() to be called and trigger the freeing of the objects being exchanged.

For the particular case of TObjectList one could cache the current value of OwnsObjects and make sure to turn it off before doing the swap. However, this doesn't help anyone who might be using something from the TList heirarchy to do more complex notifications, whether it be by subclassing TList with a custom Notify implementation or using the new OnNotify property afforded by TList.

What's more, this apparently can't be implemented via class helpers, as the following code will cause the compiler to throw the following error: [Pascal Error] afGenerics.pas(9): E2508 type parameters not allowed on this type type TListHelper = class helper for TList procedure Exchange(Index1, Index2: Integer); procedure Move(CurIndex, NewIndex: Integer); end; QC Entry 68024 QC #: Date Reported: Area: 68031 10/17/2008 Midas\TClientDataSet Description: Steps: [QC Short Description] Run the attached application. ftWideMemo data loss

[QC Description] When Loading an ftWideMemo field from an xml file, if the field contains unicode characters followed by ansi characters the last ansicharacter is truncated.

This code illustrates the problem. var f : tfielddef; s : string; cds : tclientdataset; begin cds := tclientdataset.Create(nil); f := cds.FieldDefs.AddFieldDef; f.Name := 'field1'; f.DataType := ftWideMemo; cds.CreateDataSet; s := #964#949#963#964 + 'x'; cds.Open; cds.Append; cds['field1'] := s; cds.Post;

//saving using any encoding is OK - the problem is during loading of data cds.SaveToFile('test.xml', dfxml); //cds.SaveToFile('test.xml', dfXMLUTF8); //cds.SaveToFile('test.xml', dfBinary); cds.loadfromfile('test.xml'); //PROBLEM HERE cds.open; if s = cds['field1'] then showmessage('OK') //EXPECTED RESULT else showmessage( cds['field1'] + ' <> ' + s); //ACTUAL RESULT end; QC Entry 68031 QC #: Date Reported: Area: 68045 10/18/2008 Database\ADO Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_265947 TADOQuery/Table converts empty string to null ==or== [QC Description] The command Connect a TADOTable to any table (e.g. MS Access, MS SQL Server) that has at least a varchar field and one adotable1['varchar_field'] := ''; row. converts the empty string to null Open the table, edit the varchar field and assign an empty string to it. This is not desirable and it is different from D7 and D2007. QC Entry 68045 e.g. adotable1.open; adotable1.edit; adotable1['varchar_field'] := ''; adotable1.post;

if adotable1['varchar_field'] = '' then showmessage('OK') //expected else showmessage('PROBLEM') //actual

QC #: Date Reported: Area: 68068 10/18/2008 VCL\Standard Controls\TListBox Description: Steps: [QC Short Description] - Select File -> New -> VCL Forms Application from the menu. - Put a ListBox on the form. - Insert this code to Missing test in TListBoxStrings.Insert, causes the box to lose object the OnCreate event handler of the form. ListBox1.Items.InsertObject(-1, 'SomeString', Self); Assert (ListBox1.Items.Objects[ListBox1.Items.IndexOf('SomeString')] <> nil, 'Object is nil'); Expected: nothing [QC Description] happens Actual: assertion fails. If you execute code like "aListBox.Items.InsertObject(-1, 'SomeString', aObject)" the string 'SomeString' is happily inserted to the list box but the object is lost.

The cause for this is ; TListBoxStrings.Insert does not test for a condition of Index being -1, since it is perfectly legal to send LB_INSERTSTRING with -1. But TListBoxStrings.PutObject tests if Index is -1 and silently exits if it is. (It is still legal to send LB_SETITEMDATA with -1, but I think the programmer would have thought this would have an undesirable outcome). The correct approach should be to override InsertObject and make the "-1" test there, or, allow "-1" to be Item Index as there is nothing wrong with this with WinApi.

It is not common to call InsertObject with -1 but it occurs with drag-drop list boxes if you drop an item too near to the bottom of the box.

Note: Hunting for bugs like this is really difficult as it really occurs very infrequently and seemingly randomly, _and_ however you are prepared for error logs and else you won't have any logs of mouse coordinates or visuals when the exception log is posted to you. This one has haunted me a little too long.

More Info: I further pursued the matter, and found out that the reason of the bug is exactly as I commented to Mr. Tomohiro Takahashi. To duplicate it here;

While you are dragging an object, the existence of a valid drop target is determined by controls.DragFindTarget. DragFindTarget calls DragFindWindow, and it calls "WindowFromPoint" with the current mouse coordinates. So if you have a WinControl under the pointer, you have a valid Target.

Since we are inserting an object to a ListBox we call ItemAtPos function of the ListBox to find out the position to insert. We pass False to Existing, since -the documentation states- "If Existing is set to false, ItemAtPos returns the index of the last item in the list box plus one." Even if there are no items in the box it will return 0. Fine, we can insert there.

TCustomListBox.ItemAtPos executes a test in the very beginning of the procedure and returns -1 if the test fails. This test is "if PtInRect(ClientRect, Pos) then". Notice the "ClientRect" in the test. A standard List Box has *2* pixels width/height of NonClientArea at its edges. (This is on W2K, other OS or theming can slightly change the area). So it is perfectly possible, though rare, a user at times can drop his item at the very edge; where we have a valid Target, but ItemAtPos, despite the documentation and design, returns -1. And, when we execute ListBox.Items.InsertObject, we have our string inserted, but not our *Object*.

I have attached a project which clearly demonstrates the bug at large. (Please don't run it in a VM. At least Virtual PC does seem to override the default mouse behaviour.) Regards. QC Entry 68068 QC #: Date Reported: Area: 68103 10/20/2008 AddOn\Interbase components Description: Steps: [QC Short Description] Create database in Interbase with one table. In table create two columns - first Integer with autoinc and second IBX and Char field - "Division by zero" VarChar 20 Charset WIN1250 Collate PXW_PLK Add few rows in column with test data. Create sample VCL aplication in Delphi 2009 with TIBDatabase, TIBQuery and TIBTransaction. Connect TIBDatabase to created [QC Description] database and set active to true. In TIBQuery set SQL property to "select * from table" and try set active to true. In table with any string field - for example VarChar, when Charset is set to WIN1250 and Collate is set to PXW_PLK - when I try to set active to True I get error: "Division by zero" I found that when collate is PXW_PLK IBCustomDataset return always zero as lenght of field - but I don't know why. QC Entry 68103 QC #: Date Reported: Area: 68147 10/21/2008 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] GetSystemMetrics(SM_MEDIACENTER) always returns 0 on Windows Media Center Edition, but should return SM_MEDIACENTER constant in Windows.pas has invalid value nonzero. GetSystemMetrics(87) works as expected, returning non-zero on Windows Media Center.

[QC Description] SM_MEDIACENTER constant is defined in windows.pas as $87 but should be 87.

In Microsoft WinUser.h it is defined as:

#define SM_MEDIACENTER 87

In Windows.pas it is defined as:

SM_MEDIACENTER = $87 ;

QC Entry 68147 QC #: Date Reported: Area: 68155 10/22/2008 Documentation Description: Steps: [QC Short Description] Help on TStrings.LoadFromFile does not tell anything about Encoding parameter

[QC Description] The help on TStrings / TStringList (..) LoadFromFile does not tell anything about the encoding parameter: ms-help://embarcadero.rs2009/delphivclwin32/[email protected]

This should be added for completeness and of course for first time users of the help and D2009 IDE.

The example used on this page should alos be updated to show the usage of the encoding parameter!

Found in the English version of D2009 help. QC Entry 68155 QC #: Date Reported: Area: 68176 10/22/2008 Internet\Controls\TClientSocket Description: Steps: [QC Short Description] TCustomWinSocket.ReceiveText failure by result string type

[QC Description] I think The result type of TCustomWinSocket.ReceiveText should be 'AnsiString', but declared as 'string'.

ReceiveText sets result string length by internally called ReceiveBuf, and ReceiveBuf returns byte length, not Char length.

By this wrong type of ReceiveText result, the data read from ReceiveText is broken.

In case of SendText, the param type is AnsiString, there seems no problem. QC Entry 68176 QC #: Date Reported: Area: 68274 10/25/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile and run the attached application below. Generics: Compiler generates ill-formed assembler code "lea eax,ah" / "lea eax,quiet_dl" See the following exception error at runtime when the code generated for the line marked #1 executes. [QC Description] The compiler generates ill-formed assembler code "lea eax,ah" and "lea eax,quiet_dl" when doing some generic FAIL ExceptionEExternalException: External exception C000001D tricks to overcome the "class constraint is no TObject" bug. QC Entry 68274 A similar case where "lea eax, quiet_dl" is generated is attached.

[Tester Recommended] program BTS266163A;

{$APPTYPE CONSOLE}

uses SysUtils, Contnrs;

type TItem = class(TObject) S: string; end;

TMyList = class(TObjectList) private procedure SetItem(Index: Integer; const Value: TKey); public property Items[Index: Integer]: TKey write SetItem; end;

var { This must be a global variable } l: TMyList;

function KeyAsObject(const Key): TObject; begin Result := TObject(Key); end;

procedure TMyList.SetItem(Index: Integer; const Value: TKey); begin inherited Items[Index] := KeyAsObject(Value); //#1 => lea eax,ah end;

begin try l := TMyList.Create; l.Add(nil); l.Items[0] := TItem.Create; l.Free; WriteLn('PASS'); except on E:Exception do Writeln('FAIL Exception', E.Classname, ': ', E.Message); end; end.

QC #: Date Reported: Area: 68284 10/26/2008 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] Obsolete FPU Fix in System.pas

[QC Description] Obsolete functions in RTL (here System.pas) should be removed.

Delphi 2009 is not supporting Win9x anymore and in this case _FpuMaskInit as a fix for a Japanese Win95 bug is deprecated.

This applies for the following functions in System.pas: function GetKeyboardType(nTypeFlag: Integer): Integer; stdcall; function _isNECWindows: Boolean; procedure _FpuMaskInit; QC Entry 68284 QC #: Date Reported: Area: 68305 10/27/2008 AddOn\RAVE Description: Steps: [QC Short Description] Add a TRvSystem component and a TButton to a form. Add "rvsystem1.Execute;" to the button's onclick event. Rave print Setup button caused access violation Run the program. Click the button Hit "Setup"

[QC Description] If I execute a TRvSystem component and then hit "Setup" I get an access violation. QC Entry 68305 QC #: Date Reported: Area: 68336 10/28/2008 AddOn\Interbase components Description: Steps: [QC Short Description] IBEvents.Events.Clear; IBEvents.Events.Add('USAGE_OUT'); IBEvents.Registered := TRUE; TIBEvents does not work with Delphi 2009

[QC Description] Compiling on Vista, TIBEvents does not work. Works fine on the same source code compiled using Delphi 2007. QC Entry 68336

-- Reported fix from newsgroups: unit IBEvents.pas

[..] function EBP(Index: Integer): PByte; var Event : AnsiString; begin Inc(Index, (EventGroup * IB_MAX_EVENT_BLOCK)); if (Index > Parent.FEvents.Count) then Result := nil else begin Event := Parent.FEvents[Index - 1]; Result := PByte(Event); end; end; QC #: Date Reported: Area: 68349 10/28/2008 Compiler\Delphi\Anonymous Methods Description: Steps: [QC Short Description] program BTS266182; Internal error : AV21B9CC2E-W00000002-1 {$APPTYPE CONSOLE} [QC Description] Any non-whitespace text ahead of the keywords procedure or function in the declaration of an anonymous uses method causes an internal error at compile-time. SysUtils; type QC Entry 68349 // TObjectProc = reference to procedure(x: Integer) of object; Erreur E2029 TObjectProc = reference to class procedure(x: Integer); [Tester Recommended] var V: TObjectProc;

begin try V := procedure(Sender: TObject) begin WriteLn('FAIL - Compile-time error expected; end; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end.

QC #: Date Reported: Area: 68362 10/28/2008 IDE\Dialogs\Project Options Description: Steps: [QC Short Description] Windows XP sp2 Clasic look (win 2000 like) 24" Screen 1920x1200 Extra large font 144DPI Open the dialog Dialog is to big for the screen more then onece.

[QC Description] The first time the dialog is opened it has the right size, but the second time it is opened it is to big for the screen. QC Entry 68362 QC #: Date Reported: Area: 68368 10/28/2008 Documentation Description: Steps: [QC Short Description] TDrawItemEvent is documented at this link ms- TDrawItemEvent contains documentation for TScrollEvent help://embarcadero.rs2009/delphivclwin32/StdCtrls_TDrawItemEvent.html TScrollEvent is documented at the following link ms-help://embarcadero.rs2009/delphivclwin32/StdCtrls_TScrollEvent.html [QC Description] The documentation for TDrawItemEvent actually contains the help content for TScrollEvent.

There is no documentation for TScrollEvent at all. QC Entry 68368 QC #: Date Reported: Area: 68377 10/29/2008 AddOn\Interbase components Description: Steps: [QC Short Description] Connect a TDataSetProvider to a TIBSQL and the TDataSetProvider to a TClientDataSet. Make some changes TIBQuery and TClientDataSet to the data in the TClientDataSet. Then call TClientDataSet.ApplyUpdates(0).

[QC Description] Applying updates to a ClientDataSet connected to a TIBSQL through a TDataSetProvider will give the following error message in Delphi 2009:

"Project ... raised exception class EIBClientError with message Unsupported feature".

added by Sysop <<<< ... a TIBSQL through a ... should be ... a TIBQuery through a ... >>>> QC Entry 68377 QC #: Date Reported: Area: 68400 10/29/2008 Documentation Description: Steps: [QC Short Description] Controls.TDragMessage is not documented

[QC Description] Controls.TDragMessage is not documented ms-help://borland.bds5/delphivclwin32/Controls_TDragMode.html QC Entry 68400 QC #: Date Reported: Area: 68435 10/30/2008 Documentation Description: Steps: [QC Short Description] The IDesignerHook.PaintMenu method is not documented

[QC Description] The IDesignerHook.PaintMenu method is not documented.

Here: ms-help://borland.bds5/delphivclwin32/!!MEMBEROVERVIEW_Forms_IDesignerHook.html

And: ms-help://borland.bds5/delphivclwin32/Forms_IDesignerHook_PaintMenu.html QC Entry 68435 QC #: Date Reported: Area: 68462 10/31/2008 Compiler Description: Steps: [QC Short Description] Compile and run the attached test case. Using Old Style Objects causes AV errors at runtime. See the following program output indicating failure. [QC Description] After defining a type as object with virtual procedures, any object derived from that fails to call own or virtual FAIL #1 procedures. Class works fine. FAIL #2 QC Entry 68462 Failure occurs in uBTS266268A.pas on the lines marked #1 and #2.

unit uBTS266268A;

interface

uses SysUtils, uBTS266268B;

procedure DoIt;

type DrvdObj = object(myBaseObj) constructor Init(myName : String; myLen : Word); destructor Done; virtual; function SomeFunc ( Var Rec ) : Boolean; virtual; final; end;

SomeRecType = Record abc : Array [1..111] of Byte; end;

var A : Integer; Counter: Integer;

implementation

Constructor DrvdObj.Init(myName : String; myLen: Word); Begin myBaseObj.Init(myName, Sizeof(SomeRecType),338); a := 1; end;

Destructor DrvdObj.Done; begin myBaseObj.done; a := 0; end;

Function DrvdObj.SomeFunc ( Var Rec ) : Boolean; Begin Vari := 321; Result:=True; End;

procedure DoIt; Var DrvdObjPntr : ^DrvdObj; SomeRec : SomeRecType; begin new(DrvdObjPntr,init('',0)); try DrvdObjPntr^.SomeFunc(SomeRec); //#1 except on E: Exception do WriteLn('FAIL #1'); end; try dispose(DrvdObjPntr,done); //#2 except on E: Exception do WriteLn('FAIL #2'); end; end;

end.

Here's uBTS266268b.pas with the base object declaration.

unit uBTS266268B;

interface type myBaseObj = Object private public Vari : Integer;

constructor Init(myName : String; myLen, myID : Word); destructor done; virtual;

Function SomeFunc ( Var Rec ) : Boolean; virtual; end;

implementation

constructor myBaseObj.Init(myName : String; myLen, myID : Word); begin Vari := 555; End;

destructor myBaseObj.Done; begin Vari := 777; End;

Function myBaseObj.SomeFunc ( Var Rec ) : Boolean; begin Vari := 123; Result := False; End;

end. QC #: Date Reported: Area: 68473 10/31/2008 IDE\Project Management Description: Steps: [QC Short Description] New VCL Forms application AV on IDE startup when default project options contains a reference to a named option set. Project | Configuration Manager Select the project, right click, and choose "new OptionSet..." [QC Description] Name and save it AV on IDE startup when default project options contains a reference to a named option set. Close Configuration Manager Project | Options --- Original Automated Report Follows --- Click "default" radio button Click OK Access violation at address 21560F69 in module 'delphicoreide120.bpl'. Read of address 00000000. Restart IDE

I have installed ReportBuilder 11 and MyDac 570. I made one build options file and deleted some runtime libraries from Windows System related to ReportBuilder. QC Entry 68473 QC #: Date Reported: Area: 68492 11/1/2008 Database\ADO Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_266288 Assign TParam to TParameter ==or= [QC Description] Exception occurs if TParam (DataType = ftInteger and Value = 1) assign to TParameter. procedure TForm1.Button1Click(Sender: TObject); Error Message: "Arguments are the wrong type, are out of accetable range, or are in conflict with one another". var c1: TParams; This error occurs in TDataSetProvider and i can't migrate our project from D2007 to D2009. c2: TParameters; We have multitier application with TClientDataSet -> TRemoteDataModule -> TDataSetProvider -> TADOQuery. p1: TParam; TClientDataSet doesn't open if CommandText has params like as 'EXEC spProcedure :PARAM' and param's p2: TParameter; DataType is ftInteger and Value is 1) begin c1 := TParams.Create(TParam); I have developed simple example project. try QC Entry 68492 p1 := c1.CreateParam(ftInteger, 'TEST', ptInput); p1.Value := 1;

c2 := TParameters.Create(ADOCommand1, TParameter); try p2 := TParameter.Create(c2); p2.Assign(p1); // Exception!!!! finally c2.Free; end; finally c1.Free; end; end; QC #: Date Reported: Area: 68551 11/4/2008 Database\DataSnap Description: Steps: [QC Short Description] 1. Create a VCL Application 2. Create a Server Mdoule. 3. Inside Server Module's public interface declare two TDSServerModule can not export public Chinese named procedure/function correctly functions, one in English and the other in Chinese as follows : function GetSpeaker : TDataSet; //This funciton is the same as GetSpeaker, //Tt is just that the function name is in Traditional Chinese function ????? : QC Entry 68551 TDataSet; 4. Use DSServer, DSTCPServerTransport and DSServerClass export the Server Module 5. Create a VCL Client Application, use SQLConnection connect to the DataSnap Server 6. Drop a SqlServerMethod on the form, select its ServerMethodName property 7. The ServerMethodName property Editor shows all exported Server Methods 8. The Server Method ????? become meanless characters 9. Click SQLConnection , select Generate DataSnap client classes, it will also generate wrong codes and can not compile like the followings: function Tdssm???Client.???????: TDataSet; begin if F???????Command = nil then begin F??????? Command := FDBXConnection.CreateCommand; F???????Command.CommandType := TDBXCommandTypes.DSServerMethod; F???????Command.Text := 'Tdssm???.???????'; F??????? Command.Prepare; end; F???????Command.ExecuteUpdate; Result := TCustomSQLDataSet.Create(nil, F???????Command.Parameters[0].Value.GetDBXReader(False), True); Result.Open; if FInstanceOwner then F???????Command.FreeOnExecute(Result); end; QC #: Date Reported: Area: 68606 11/5/2008 VCL\Graphics Description: Steps: [QC Short Description] This project does not compile program Project1; {$APPTYPE CONSOLE} uses Jpeg in 'C:\Program I can't compile jpeg.pas Files\CodeGear\RAD Studio\6.0\source\Win32\vcl\Imaging\JPGImage\Jpeg.pas'; begin end. even if I add $(BDS)\source\Win32\vcl\Imaging\JPGImage\obj to the project search path. [QC Description] This .dpr does not compile program Project1;

{$APPTYPE CONSOLE} uses Graphics in 'C:\Program Files\CodeGear\RAD Studio\6.0\source\Win32\vcl\Graphics.pas', Jpeg; begin end.

It fails with the error F2051, jpeg unit was compiled with a different version of Graphics.Tgraphic.Equals

This happens too if I don't specify the path for Graphics.pas but add $(BDS)\source\Win32\vcl to the project search path.

I tried to change the project to program Project1;

{$APPTYPE CONSOLE} uses Graphics in 'C:\Program Files\CodeGear\RAD Studio\6.0\source\Win32\vcl\Graphics.pas', Jpeg in 'C:\Program Files\CodeGear\RAD Studio\6.0\source\Win32\vcl\Imaging\JPGImage\Jpeg.pas'; begin end. but it fails too because it cannot find .obj files, even if I add $(BDS)\source\Win32\vcl\Imaging\JPGImage\obj to the project search path.

The only workaround I found is to copy all the .obj files from $(BDS)\source\Win32\vcl\Imaging\JPGImage\obj to $(BDS)\source\Win32\vcl\Imaging\JPGImage

Michel Terrisse QC Entry 68606 QC #: Date Reported: Area: 68616 11/5/2008 Database\ADO Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_266369 TAdoStoredProc returns parameter's value without decimal places 1. create a simple stored proc in mssqlserver which returs a numeric value [QC Description] TAdoStoredProc invokes simple stored proc in MsSqlServer which returns a decimal value create procedure [dbo].[test] (@t1 numeric(12,2), @t2 numeric(12,2) output) as (ex. 150.55) begin set @t2 = @t1 + 0.55; In D2009 TAdoStoredProc returns 15055 instead of 150.55. end;

In D2007 TAdoStoredProc returns correct value (ex. 150.55) 2. Create a simple form with two TEdit and one TButton object

QC Entry 68616 3. Attach this code in Tbutton.OnClick event

procedure TForm1.Button1Click(Sender: TObject); Note from Tomohiro Takahashi var <<<<<<<<<< SP: TAdoStoredProc; Please see comment and workaround at QC. begin If a instance of TAdoStoredProc is created at Design Time, we get correct value. SP := TAdoStoredProc.Create(Self); >>>>>>>>>> SP.Connection := AdoConnection1; SP.ProcedureName := 'Test'; SP.Parameters.Refresh;

SP.Parameters.ParamByName('@t1').Value := StrToFloat(Edit1.Text) ; SP.Parameters.ParamByName('@t2').Value := null;

SP.ExecProc; Edit2.Text := SP.Parameters.ParamByName('@t2').Value; SP.Free; end;

4. run the project .

Enter value in Edit1. (ex. 150) Press the button. Edit2 shows 15055 instead of 150.55 ! QC #: Date Reported: Area: 68627 11/5/2008 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] try to drag any item in the project manager to a new place. The IDE does not allow it to be dropped. Cant alter position of files in project (build order)

[QC Description] There is no way to change the build order of files inside a project. The drag and drop functionality has been broken. QC Entry 68627 QC #: Date Reported: Area: 68635 11/5/2008 IDE\Code Editor Description: Steps: [QC Short Description] Go to the implementation of some method, type the name of some object, type in dot, wait half a second until Typed after dot characters do not appear in editor mouse pointer changes to hourglass (code insight kicks in) and at this moment continue typing. You will notice that characters you were typing while mouse pointer was hourglass do not appear in the editor. Perhaps you [QC Description] need to have a large project open so that it takes significant time for code insight to build the list of identifiers. If you have code insight active and are typing in the editor, quite often straight after you type in dot and continue None of previous Delphi versions had this gotcha and this one is quite annoying. typing, a few characters that were supposed to appear after dot, do not appear. QC Entry 68635 QC #: Date Reported: Area: 68666 11/6/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below, see the following error at compile-time indicating failure. F2084 / Internal error : AV04D9B00D-R00000000-0 on generics with an internal enumeration type Fatal: F2084 Internal Error: AV004356ED-R00000000-0 [QC Description] The following code will fail to compile with F2084 / Internal error : AV04D9B00D-R00000000-0. program BTS266380; QC Entry 68666 {$APPTYPE CONSOLE} [Tester Recommended] TYPE G = CLASS PUBLIC Type Argh = (a,b); PROCEDURE InternalError; END;

procedure G.InternalError; var x : Argh; begin x := b; end;

begin WriteLn('PASS'); //PASS on compile// end.

QC #: Date Reported: Area: 68685 11/7/2008 Database\dbExpressCore Description: Steps: [QC Short Description] TDBXTiburonBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_267173 TDBXDriverRegistry.UnregisterDriverClass is malfunction ==or== [QC Description] A method "TDBXDriverRegistry.UnregisterDriverClass" in unit DBXCommon.pas isn't programming correctly: Run the following code to show the error: class procedure TDBXDriverRegistry.UnregisterDriverClass(DriverName: String); var S: TStringList; var begin Index: Integer; // Using memory connection factory begin TDBXConnectionFactory.SetConnectionFactory(TDBXMemoryConnectionFactory.Create); if DBXDriverRegistry.FDriverClasses.Find(DriverName, Index) then begin // Register driver classes DBXDriverRegistry.FDriverClasses.Delete(Index); TDBXDriverRegistry.RegisterDriverClass('C', TDBXDynalinkDriverNative); end; TDBXDriverRegistry.RegisterDriverClass('B', TDBXDynalinkDriverNative); end; TDBXDriverRegistry.RegisterDriverClass('A', TDBXDynalinkDriverNative);

FDriverClasses.Find will only function well if the string list is sorted. However, FDriverClasses never get sorted. // Display Registered Classes S := TStringList.Create; QC Entry 68685 try TDBXConnectionFactory.GetConnectionFactory.GetRegisteredDriverNames(S); ShowMessage(S.Text); finally S.Free; end;

// Unregister driver classes TDBXDriverRegistry.UnregisterDriverClass('C'); TDBXDriverRegistry.UnregisterDriverClass('B'); TDBXDriverRegistry.UnregisterDriverClass('A');

// Display Registered Classes again (expected empty) S := TStringList.Create; try TDBXConnectionFactory.GetConnectionFactory.GetRegisteredDriverNames(S); ShowMessage(S.Text); finally S.Free; end; end;

The example purposely register the driver name in unsorted manner to show the problem. If the name are registered in order (e.g.: A, B, C), it works fine. QC #: Date Reported: Area: 68693 11/7/2008 Debugger\CPU Description: Steps: [QC Short Description] Make a new Win32 Delphi VCL project and add this code. TWord128 = packed record I1,I2,I3,I4,I5,I6,I7,I8 : SSSE3 Instructions PMULHRSW is Disassembled Incorrectly SmallInt; end; function SSSE3_PMULHRSW(var Word128a, Word128b : TWord128) : TWord128; asm movupd xmm0, [Word128a] movupd xmm1, [Word128b] pmulhrsw xmm0, xmm1 movupd [Result], xmm0 end; [QC Description] procedure TForm1.Button3Click(Sender: TObject); var Word128a, Word128b, ResWord128 : TWord128; begin The SSSE3 instruction PMULHRSW is disassembled incorrectly. Word128a.I1 := 1 shl 8; Word128a.I2 := 2 shl 8; Word128a.I3 := 3 shl 8; Word128a.I4 := 4 shl 8; Word128a.I5 := 5 shl 8; Word128a.I6 := 6 shl 8; Word128a.I7 := 7 shl 8; Word128a.I8 := 8 shl 8; Unit1.pas.112: pmulhrsw xmm0, xmm1 Word128b.I1 := 1 shl 8; Word128b.I2 := 2 shl 8; Word128b.I3 := 3 shl 8; Word128b.I4 := 4 shl 8; 660F380BC166 palignr xmm0,xmm1,$66 Word128b.I5 := 5 shl 8; Word128b.I6 := 6 shl 8; Word128b.I7 := 7 shl 8; Word128b.I8 := 8 shl 8; ResWord128 := SSSE3_PMULHRSW(Word128a, Word128b); end; The Intel reference manual http://download.intel.com/design/processor/manuals/253667.pdf p. 4-184

Opcode Instruction 64-Bit Mode Compat/ Leg Mode Description 0F 38 0B /r PMULHRSW mm1, mm2/m64 Valid Valid Multiply 16-bit signed words, scale and round signed doublewords, pack high 16 bits to MM1. 66 0F 38 0B /r PMULHRSW xmm1, xmm2/m128 Valid Valid Multiply 16-bit signed words, scale and round signed doublewords, pack high 16 bits to XMM1.

It looks like the opcode is correct and the bug is in the CPU view disassembler.

The version operating on MMX registers has the same problem

Unit1.pas.115: pmulhrsw mm0, mm1 00465FE8 0F380BC10F palignr xmm0,xmm1,$0f QC Entry 68693 QC #: Date Reported: Area: 68694 11/7/2008 Debugger\CPU Description: Steps: [QC Short Description] Make a new Delphi Win32 project and add this code type TInt128 = packed record I1,I2,I3,I4 : Integer; end; SSSE3 Instructions PHSUBD is Disassembled Incorrectly function SSSE3_PHSUBD(var Int128a, Int128b : TInt128) : TInt128; asm movupd xmm0, [Int128a] movupd xmm1, [Int128b] phsubd xmm0, xmm1 movupd [Result], xmm0 end; var Int128a, Int128b, ResInt128 : TInt128; [QC Description] begin ResInt128 := SSSE3_PHSUBD(Int128a, Int128b); end; phsubd is disassembled into phsubsd

Unit1.pas.132: phsubd xmm0, xmm1 00466010 660F3806C1 phsubsd xmm0,xmm1

There exist no instruction called phsubsd.

Best regards Dennis QC Entry 68694 QC #: Date Reported: Area: 68730 11/8/2008 VCL\Win 32 Controls\TPageControl Description: Steps: [QC Short Description] 1) Create a new project, make runtime themes enabled in Project Options. 2) Add a TPageControl on the form. TLabel is not painted on a themed, double-buffered TTabSheet in Vista 3) Add one TTabSheet to the page control. Set TTabSheet.DoubleBuffered := True; 4) Drop TLabel on the TTabSheet. TLabel will not be visible. Setting DoubleBuffered to False makes the label visible again. [QC Description] In Windows Vista, when enabling runtime themes in a project, all labels placed directly on a TTabSheet control which has DoubleBuffered property set to True will be invisible.

I'm not an expert on internals of VCL, but looking at WM_PAINT handler of TWinControl, there is the following code: if not FDoubleBuffered or (Message.DC <> 0) then ... else begin if DwmCompositionEnabled then begin // Use DWM methods when in Vista DC := BeginPaint(Handle, PS); try PaintBuffer := BeginBufferedPaint(DC, PS.rcPaint, BPBF_COMPOSITED, nil, MemDC); if PaintBuffer <> 0 then try Perform(WM_ERASEBKGND, MemDC, MemDC); Perform(WM_PRINTCLIENT, MemDC, PRF_CLIENT); if not (Self is TCustomForm) then BufferedPaintMakeOpaque(PaintBuffer, PS.rcPaint); finally EndBufferedPaint(PaintBuffer, True); end; finally EndPaint(Handle, PS); end; end else begin // Draw in memory when not in Vista // .. Perform(WM_ERASEBKGND, MemDC, MemDC); Message.DC := MemDC; WMPaint(Message); Message.DC := 0; // ... end; end;

So when not in Vista, WM_ERASEBKGRD and WM_PAINT messages are sent while in other OSes WM_ERASEBKGRD and WM_PRINTCLIENT are sent.

As I understand, child controls are drawn in WM_PAINT, not in WM_PRINTCLIENT so TLabel is never drawn. QC Entry 68730 QC #: Date Reported: Area: 68743 11/9/2008 IDE Description: Steps: [QC Short Description] In a new project Resource Manager loses assigned resource names 1) open the Resource Manager [QC Description] 2) click Add Resource Resource names assigned to newly added resources are lost 3) Change assigned name of resource QC Entry 68743 4) Click OK to exit Resource Manager

Re-Open the Resource Manager - the assigned resource identifier names are lost.

1) Change the resource identifier names again 2) Click OK to exit Resource Manager

Re-Open the Resource Manager - assigned resource identifier names are now stored correctly.

NOTE: If you save the project after step 4, then the name is saved. QC #: Date Reported: Area: 68752 11/10/2008 Database\TParams Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_266480 TParam.GetDataSize return incorrect value for Blob data type Run the following in Delphi 2009: [QC Description] If we have a TParam object (Q) of ftBlob and we assign a string to it: var P: TParams; Q: TParam; Q.Value := 'TEST'; i, j: integer; begin Invoke Q.GetDataSize will return 4. But if invoke TParams.AsBytes it would return a TBytes of length 8. P := TParams.Create; try This create a problem in procedure SetQueryProcParams of SqlExpr.pas: Q := P.CreateParam(ftBlob, 'Blob', ptInput); Q.Value := 'TEST'; procedure SetQueryProcParams(const Sender: TSQLConnection; const Command: TDBXCommand; const Params: TParams; ProcParams: TList = nil); i := Q.GetDataSize; begin j := Length(Q.AsBytes); ... finally ftBlob, ftGraphic..ftTypedBinary,ftOraBlob,ftOraClob: P.Free; begin end; Buffer := TDBByteBuffer.Create(Param.GetDataSize); end; Buffer.Append(Param.AsBytes); ExtractedBytes := Buffer.GetBytes; variable i return 4 Value.SetDynamicBytes(0, ExtractedBytes, 0, Length(ExtractedBytes)); variable j return 8 end; ... end;

Invoke "Buffer.Append(Param.AsBytes)" will always raise ERangeError exception with message 'CheckSpace'.

The reason is simple. Buffer is allocated 4 bytes of space but we later append 8 bytes of data to it and thus the ERangeError was raised.

I am not sure if this is a bug or it is by design. Should we let the program decide the encoding of string data store into a blob field? If we let the program decide, the blob field data may not accessible by legacy program that always treat the blob field string data as ANSI encoding. QC Entry 68752 QC #: Date Reported: Area: 68763 11/10/2008 VCL\Core VCL Classes Description: Steps: [QC Short Description] 1) Load and install MyPackage.dpk 2) Create a new VCL Win32 application 3) Add a TMyComp to the form 4) UTF8String published properties corrupts their text Try to enter text *not* in the active codepage (e.g. Chinese) into the MyProp property of the component Expected: The Chinese text is accepted and displays correctly. Actual: The Chinese characters are replaced [QC Description] with question marks. Attempting to type any characters outside the active codepage into a UTF8String property in the object inspector corrupts the text, and replaces the characters with question marks.

It appears that the RTL is unable to stream UTF8String published properties to and from form resources.

See attachments in conjunction with "Steps" for an example. QC Entry 68763 QC #: Date Reported: Area: 68766 11/10/2008 VCL\Core VCL Classes\TWinControl Description: Steps: [QC Short Description] uses imm procedure TForm1.FormCreate(Sender: TObject); begin SetImeMode(Handle,imHira); SetImeCompositionWindow doesnt work on Vista SetImeCompositionWindow(Font,0,0); //type key with IME(japanese) end; the newest sample can download from this link http://hp.vector.co.jp/authors/VA015390/delphi/zip/imm32bug.zip [QC Description] SetImeCompositionWindow doesnt support Font effect. it seems that Imm32SetCompositionFont has bug. if it change to ImmSetCompositionFont(w), it works well. QC Entry 68766 QC #: Date Reported: Area: 68785 11/10/2008 AddOn\TChart\TChart Description: Steps: [QC Short Description] ->Create new project TBarSeries (part of TChart) do not work at all! ->Add a TChart to project -> add a TBarseries to TChart [QC Description] -> Do sth. like An endless loop of EInvalidOp "invalid floationg point operation" is raised when working with the included TChart Series1.Clear; and a TBarSeries. Series1.AddXY(4,5,'',clYellow); Series1.AddXY(5,6,'',clYellow); This is VERY annoying because we have several old projects that use a TBarSeries, an update of TChart in ->Try to zoom into the TChart Update 2 would be appreciated! -> Now, endless loop of Exceptions is raised QC Entry 68785 To zoom: To zoom in on a Chart, press the right mousebutton at the top left hand corner of the area you wish to zoom in on and, maintaining the mousebutton pressed, drag out the rectangle to the bottom righthand corner of the zoom area. Releasing the mousebutton will force the Chart to redraw the area selected.

QC #: Date Reported: Area: 68899 11/13/2008 Internet\Indy Description: Steps: [QC Short Description] TIdTCPStream.Read() doesn't work

[QC Description] There is a buggy line in TIdTCPStream.Read (Indy 10):

Move(TempBuff,Buffer,Count); wich gives you the address of the TempBuff dynamic array and some random memory garbage instead of content.

It should be

Move(TempBuff[0],Buffer,Count); or something like that. QC Entry 68899 QC #: Date Reported: Area: 68906 11/13/2008 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] Compile the attached application below. sizeof for old style static objects is broken See the following program output indicating failure. [QC Description] The built-in function sizeof crashes with old style static objects, if the object is derived from an other object in an 4 other type section (or an other unit). Likewise, an assignment of one instance of such an object to another 4 crashes, too. FAIL Exception=EAccessViolation/Access violation at address 0040AA63 in module 'bts266670.exe'. Read of QC Entry 68906 address FFFFFFF8

program bts2666670;

{$APPTYPE CONSOLE}

uses SysUtils;

type basic = object id : integer; end;

type {<- this is the offending statement} obj = object (basic) end;

var o : obj; x : record o : obj; end;

o1, o2 : obj;

procedure DoIt; begin try writeln (sizeof (obj)); {works as expected} writeln (sizeof (x)); {works as well} writeln (sizeof (o)); {crashes} o1 := o2; {crashes too} WriteLn('PASS'); except on E: Exception do WriteLn('FAIL Exception=', E.ClassName, '/', E.Message); end; end;

begin DoIt; end. QC #: Date Reported: Area: 68924 11/14/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] program bts266671; F2084 Internal Error: AV04C854E9-R00000000-0 {$APPTYPE CONSOLE} [QC Description] I've got this message uses SysUtils; [DCC Fatal Error] Unit43.pas(42): F2084 Internal Error: AV04C854E9-R00000000-0 type when trying to compile the following code: TRecordList = class public see "Steps to Reproduce Section" type PT = ^T; private The interesting part is that if I comment this line. FItems: array of T; function GetItem(Index: Integer): PT; TMonitorList = TRecordList; procedure SetItem(Index: Integer; const Value: PT); protected it compiles just fine. public QC Entry 68924 property Items[Index: Integer]: PT READ GetItem WRITE SetItem; DEFAULT; end; [Tester Recommended] TMonitorList = TRecordList; // #1 //

{ TRecordList }

function TRecordList.GetItem(Index: Integer): PT; begin Result := @FItems[Index]; end;

procedure TRecordList.SetItem(Index: Integer; const Value: PT); begin FItems[Index] := Value^; end;

begin WriteLn('PASS'); //PASS on compile // end. QC #: Date Reported: Area: 68942 11/14/2008 IDE\Form Designer Description: Steps: [QC Short Description] Create a Delphi VCL app and drop a button on the form IDE should tell what form the non available component was Save all and close the project In an external editor, edit the unit's .pas and .dfm files [QC Description] -- In both the .pas and the .dfm, change "TButton" to "TNonExistentComponent" If the IDE tries to laod a project at startup (possibly also when the IDE was already running) and this project -- Save the files contains a component for which the IDE thinks it's not available some error message with ignore, cancel abotr or Back in the IDE, reopen the project so occurs. This dialogue names the not avaliable component, but doesn't say in which form. Note the "Error Reading Form" message: If would be great to also mention the form containing this component QC Entry 68942 "Class TNonExistentComponent not found....."

This error message doesn't tell you which form was being loaded. QC #: Date Reported: Area: 69029 11/17/2008 Debugger\CPU Description: Steps: [QC Short Description] Create a new Win32 Delphi project and add this code function SSE4_ROUNDSD(X : Double) : Double; asm SSE4 Instructions ROUNDSD is Disassembled Incorrectly movsd xmm1, [X] roundsd xmm0, xmm1, 1 movsd [Result], xmm0 end; SSE4_ROUNDSD(7);

[QC Description] roundsd is disassembled into rounsd

Unit1.pas.358: roundsd xmm0, xmm1, 1 0046623F 660F3A0BC101 rounsd xmm0,xmm1,$01

There exist no instruction called rounsd.

Best regards Dennis Christensen QC Entry 69029 QC #: Date Reported: Area: 69054 11/18/2008 VCL\Additional Controls Description: Steps: [QC Short Description] 1. Put a TTrayIcon on the form 2. Set a timeout value of 3000 3. Call ShowBalloon. Note that the icon must be TTrayIcon BalloonHint problem active.

[QC Description] TTrayIcon' Balloon hint will never time out. No matter what the interval it will never automatically close. It will dissappear after a random amount of time (usually after 10 seconds), no matter the value of BalloonTimeout. QC Entry 69054 QC #: Date Reported: Area: 69062 11/18/2008 Internet\Controls\TWebBrowser Description: Steps: [Weaver only] (JJS: See attached project file)

[QC Short Description] 1. Start with a fresh VCL Forms application. When using the TWebBrowser.OnFileDownload event, you will get an access violation. All of the times. 2. Drop a TButton and a TWebBrowser 3. Hook this code to the Button1.OnClick event: [QC Description] ------procedure TForm1.Button1Click(Sender: TObject); Debugger Exception Notification begin ------WebBrowser1.Navigate('http://www.codegear.com/images/em/embarcadero.gif'); Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address end; 004734C0 in module 'Project1.exe'. Read of address 0000FFFF'. ------4. Hook this code to the WebBrowser.OnFileDownload event: Break Continue Help ------procedure TForm1.WebBrowser1FileDownload(ASender: TObject; var Cancel: WordBool); begin This bug is present at least in Delphi 2007 and Delphi 2009. try QC Entry 69062 Caption := IntToStr(Ord(Cancel)); except on E: Exception do Caption := Format('%s:%s', [E.ClassName, E.Message]); end; end;

5. Run the application. 6. Press the button

The access violation is caused because the method entry code generated for TForm1.WebBrowser1FileDownload is wrong. QC #: Date Reported: Area: 69065 11/18/2008 VCL\Ribbon Controls Description: Steps: [QC Short Description] Create new VCL Forms Application Add TRibbon, TButton and TRvProject components Set ProjectFile Ribbon control conflicts with Rave and DB Units property to simple, single page .rav file (no data components) add button click handler to execute report Project runs as expected Add DbGrids to main form uses clause Project now crashes with EAccessViolation 'at [QC Description] address 0040D3A0 in module Project1.exe. Read of address 006B0073' Adding a TRibbon control (no panels/groups etc) to a single form application that contains an ActionManager component raises an access violation exception when attempting to execute a rave report.

The error may also be dependent on the presence of a network printer (in my case called: 'LaserJet 1329 on ARGSRV1'). I have seen other reports relating to Rave failures and printers (mainly concerning a crash when trying to invoke the rave editor). However, this problem can be rectified by removing the ribbon component and the ribbon units from the uses clause.

NB. Just deleting the Ribbon and setting the ActionManager style back to standard does not remove the problem. To remove the problem, the Ribbon and RibbonLunaStyleActnCtrls units must also be removed from the uses clause.

Also: a simple application with only a single ribbon control, a rave project component and a button (to action the report) will allow the rave report to execute correctly, even if the network printer is in place. However, if I add DBGrids into the main form uses clause, the same access violation exception occurs.

It seems to me that a conflict is occurring at a fairly fundamental level. QC Entry 69065 QC #: Date Reported: Area: 69086 11/19/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] See attached project. Open the project and open the unit named 'data.tabelliste.pas'. Please note that the Error insight undeclared identifier on working generic list project must be open! If you open the unit by itself, no errors are visible!

[QC Description] Attached project contains a generic list using a record as template. The added methods of the list generates several errors in error insight but the code compiles and works fine. QC Entry 69086 QC #: Date Reported: Area: 69112 11/19/2008 VCL\Additional Controls\TSpeedButton Description: Steps: [QC Short Description] 1. Extract the attached project 2. Compile and start it under Vista Expected: Both speed buttons are painted TSpeedButton is painted black on a panel on a sheet of glass correctly Actual: SpeedButton1 has a black border and SpeedButton2 is black.

[QC Description] If you put a TSpeedButton on a double buffered panel that is on a sheet of glass form, the SpeedButton is painted with a black border. And if you set the SpeedButton to Flat=True, the whole button is painted as a black filled rectangle.

This is because "csGlassPaint in ControlState" returns true even if the control is painted on an opaque panel. QC Entry 69112 QC #: Date Reported: Area: 69116 11/19/2008 ActiveX\Type Library Editor Description: Steps: [QC Short Description] New ActiveX Library New ActiveForm You will see down the bottom of the type library that there is an Alias Adding a new ActiveForm to a ActiveX Library adds strange Aliases PPUserType1 and sometimes PPUserType2. Hit refresh you will see PPUserType3.

[QC Description] Adding a new ActiveForm to a ActiveX Library adds Alias "PPUserType1" to the Type Library. It has Type = IFontDisp** and Guid = 0

This also happens when I hit refresh on my existing type library. This is alot more annoying as it never stops adding these Aliases. I just manually removed 50 "PPUserTypeXXX" from my type library. QC Entry 69116

//regression in behavior QC #: Date Reported: Area: 69119 11/19/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] I have a ZeroMemory call in one of my own units. I clicked "Find Declaraction" on that, then on the FillChar in Overloaded procedure TMonitor.Enter not marked as overloaded in System unit the ZeroMemory routine. I then noticed the overload error message in the Structure treeview.

[QC Description] Viewing System.pas the Structure view displays the message "Overloaded procedure 'TMonitor.Enter' must be marked with the 'overload' directive at line 10698(10698:16)". QC Entry 69119 QC #: Date Reported: Area: 69120 11/19/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] added by Sysop. <<<<< ; is missing at declarations for TThreadStartRoutine TWaitOrTimerCallback Expected ; but recieved 'stdcall' on TThreadStartRoutine and TWaitOrTimerCallback in Windows unit TFNHookProc stdcall appears twice and ; is missing at declaration for TFNAbortProc >>>>>

[QC Description] Viewing the Windows unit, four error messages display in the Structure treeview:

Expected ; but recieved an identifier 'stdcall' at line 1818(1818:71).

Expected ; but recieved an identifier 'stdcall' at line 1819(1819:73).

Expected ; but recieved an identifier 'stdcall' at line 16835(16835:56).

Expected ; but recieved an identifier 'stdcall' at line 18653(18653:83). QC Entry 69120 QC #: Date Reported: Area: 69124 11/19/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] Expected ; but recieved an identifier 'stdcall' in Dialogs unit

[QC Description] When viewing Dialogs unit, one error message is reported in Structure pane as below.

Expected ; but recieved an identifier 'stdcall' at line 1385 (1385:48)

This is due to lack of ; at declaration of TDialogFunc = function(var DialogData): Bool stdcall; QC Entry 69124 QC #: Date Reported: Area: 69149 11/20/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] (JJS: Simplified test case from Uwe Schuster) Delphi 2009 compiler can hang when using generics Compile the following, see that compilation hangs. [QC Description] when adding line after a source with generics IDE hangs. program BTS266866; QC Entry 69149 {$APPTYPE CONSOLE} [Tester Recommended] uses Generics.Collections;

type TSynZeilen = TList>;

begin WriteLn('PASS'); //PASS on compile end.

I played a little bit more with it and when I exchange TList in the example with

TList = class(TObject);

then I get

F2084 Internal Error: G7198

//--- program Project2;

{$APPTYPE CONSOLE}

type TList = class(TObject); TSynZeilen = TList>;

begin WriteLn('PASS'); end. //---

Steps: - dcc32 project2.dpr

expected: it compiles actual: project2.dpr(9) Fatal: F2084 Internal Error: G7198

(Original Steps)

new project: ------program Project1;

{$APPTYPE CONSOLE}

uses SysUtils, Classes, Generics.Collections;

type TDingsNr = 1..4; TSynErgebnis = class end; TSynErgebnisse = TList; TSynWort = class end; TSynFeld = TList; TSynZeile = array[TDingsNr] of TSynFeld; TSynZeilen = TList; //when adding a "(" the next line or compile die IDE hangs

begin try { TODO -oEntwickler -cKonsole Main : Hier Code einfügen } except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; Writeln('Ende'); end. ------when adding a "(" afer line 28 or compile die IDE hangs QC #: Date Reported: Area: 69175 11/20/2008 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] Open SysUtils or select "Find Declaration" on a SysUtils identifier in a uses list of another unit. Expected ; but recieved =, and expected EOF but recieved 'FindClose' in SysUtils

[QC Description] Viewing the SysUtils source the Structure treeview displays two errors:

Expected ; but recieved = at line 6416(6416:48).

Expected the end of file but recieved an identifier 'FindClose' at line 6427(6427:13). QC Entry 69175 QC #: Date Reported: Area: 69214 11/22/2008 Debugger\CPU Description: Steps: [QC Short Description] - start Delphi 2009 - create a new console application - paste the following code into the .dpr source program SSE4.2 instruction CRC32 is unknown (disassembled as DB $...) ProjectCRC32Test; {$APPTYPE CONSOLE} begin asm CRC32 eax, ebx end; end. - put a breakpoint on the CRC32 line (7) - run (the debugger should now stop on the CRC32 line) - show the CPU View (CTRL+ALT+C) [QC Description] or the Disassembly View (CTRL+ALT+D) - have a look at the highlighted lines expected: .: The SSE4.2 instruction CRC32 does compile, but the CPU View does not know it - it get disassembled as DB CRC32 eax, ebx

crc32 eax, ebx actual: .: CRC32 eax, ebx
$... db $f2 $0f $38 $f1

The CPU View show this:

ProjectCRC32Test.dpr.7: CRC32 eax, ebx 004040C8 F20F38F1 db $f2 $0f $38 $f1 QC Entry 69214 QC #: Date Reported: Area: 69242 11/24/2008 Documentation\Online Help\VCL Description: Steps: [QC Short Description] TComponent missing documentation

[QC Description] The documentation is missing for the following members of TComponent ms-help://embarcadero.rs2009/delphivclwin32/!!MEMBEROVERVIEW_Classes_TComponent.html

Public methods - ExecuteAction HasParent UpdateAction

Protected methods GetChildren ReadState SetAncestor SetChildOrder SetParentComponent WriteState

Protected fields FComponentStyle

Topic urls ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/Classes_TComponent_HasParent.html ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms- help://embarcadero.rs2009/delphivclwin32/Classes_TComponent_GetChildren@[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/Classes_TComponent_SetChildOrder@[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/Classes_TComponent_FComponentStyle.html QC Entry 69242 QC #: Date Reported: Area: 69278 11/24/2008 RTL Description: Steps: [QC Short Description] Function comobj.GetRegStringValue returns incorrectly sized String

[QC Description] Function GetRegStringValue within comobj.pas calls the windows API RegQueryValueEx which returns a number of bytes not the length of the string. This means that the result needs to be adjusted by the SizeOf (Char).

The workaround shows the mended code. QC Entry 69278 QC #: Date Reported: Area: 69294 11/25/2008 VCL\Win 32 Controls\TProgressBar Description: Steps: [QC Short Description] 1) Create a new vcl form project (with manifest) 2) Drop TProgressBar on the form 3) Set style to pbstMarquee TProgressBar fails with PBS_MARQUEE and disabled Themes Run the application e.g. under Vista with designed themes (Aero). Marquee is working fine. Now set the Vista style to "Classic themes" or click on the executable to disable theming using the Application Compatibility [QC Description] Layer. Expected: Marquee still working Currently: Empty ProgressBar shown The TProgressBar fails with Style pbstMarquee and disabled Themes where it is supported natively.

Verified a manual PBS_MARQUEE to be working with "Classic Theme" in Vista and D2006. Only Manifest and ComCtrls 6 are needed but not the enabled Visual Styles as implemented in VCL. QC Entry 69294 QC #: Date Reported: Area: 69303 11/25/2008 VCL Description: Steps: [QC Short Description] Clipboard.AsText := 'some really long string that causes a memory error, say 40+MB in size'; If Bugs in TClipboard.SetBuffer() SetClipboardData() fails, the clipboard is not updated, and no error is raised.

[QC Description] TClipboard.SetBuffer() does not check the return value of SetClipboardData(). If SetClipboardData() fails, such as when GetLastError() returns ERROR_NOT_ENOUGH_MEMORY, the allocated memory is not freed and no Exception is raised to the caller. QC Entry 69303 QC #: Date Reported: Area: 69334 11/26/2008 Documentation\Online Help\VCL Description: Steps: [QC Short Description] TContainedAction missing documentation

[QC Description] Some of the members of the TContainedAction are not documented.

Url to member list overview: ms-help://embarcadero.rs2009/delphivclwin32/!!MEMBEROVERVIEW_ActnList_TContainedAction.html

The following members are not documented.

Protected methods - ReadState

Public methods - SetParentComponent

Individual topic urls: ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms- help://embarcadero.rs2009/delphivclwin32/[email protected]

QC Entry 69334 QC #: Date Reported: Area: 69409 11/28/2008 Database\Data Access Controls\TDatabase Description: Steps: [QC Short Description] Drop a TDatabase, TTable and a TButton on a form Set the TDatabse DatabaseName to 'LocalDB' Set the Getting or Setting TDatabase Directory property fails TDatabase AliasName to a DBDEMOS Set the TTable DatabaseName to 'LocalDB' and set it's TableName to customer.db In the Buttons OnClick event add this code Table1.Open; ShowMessage(Database1.Directory); [QC Description] Run it and click the button. The table is opened but the message dialog (Ctrl C copied to paste here) shows ----- There are string handling issues with TDatabase GetDirectory and SetDirectory. ------Project1 ------??????????????????????????????????????????????????" << note: this was originally chinese, wingdings type characters ------OK ------If Attempting to read the Directory property returns what appears to be an uninitialized string of characters. you also add an AfterConnect event handler on the TDatabase and add the following code Database1.Directory := 'C:\Program Files\Common Files\CodeGear Shared\Data'; You still get a similar result Setting the property to a known path and subsequently reading it back gives the same obscure results. as before when clicking the button So you can't read or write the Directory property. Note: After initial submission of this report, the strange characters (some chinese, wingdings type stuff etc.) changed to all This worked fine under D2007 question marks QC Entry 69409 QC #: Date Reported: Area: 69413 11/28/2008 Database\Data Access Controls\TTable Description: Steps: [QC Short Description] Drop a TDatabase, TTable and a TButton on a form Set the TDatabse DatabaseName to 'LocalDB' Set the TTable.Exists always returns False TDatabase AliasName to a DBDEMOS Set the TTable DatabaseName to 'LocalDB' and set it's TableName to customer.db In the Buttons OnClick event add this code ShowMessage('Table1.Exists = ' + BoolToStr [QC Description] (Table1.Exists, True)); Run it and click the button. It always results in Table1.Exists = False A lot of conditional This is related to QC report number 69409 because the code in TTable.GetFileName relies on the database opening of tables is based on this and it's a complete showstopper for me. Directory property which does not contain a valid string.

This worked fine under D2007

See also Raid# 266976, which causes this bug too.

QC Entry 69413 QC #: Date Reported: Area: 69432 11/29/2008 Database\Data Access Controls\TTable Description: Steps: [QC Short Description] I tried the following The GetPAnsiChar is as follows function GetPAnsiChar(const S: string): PAnsiChar; begin if Error opening table when field has a DefaultExpression S <> '' then Result := PAnsiChar(AnsiString(S)) else Result := ''; end; But if I replace the original line with this: StrCopy(ADataSources.szSQLExprImport, PAnsiChar(AnsiString(Field.DefaultExpression))); Then the error [QC Description] doesn't occur any more and ADataSources.szSQLExprImport always contains a valid value (FALSE in my There seems to be an issue with the GetDefaultExpression function in the TBDEDataSet.ConstraintCallBack case) Now, this looks to me to be doing exactly the same thing but I think something is going wrong when function in the DBTables unit. calling GetPAnsiChar instead which causes it to return the corrupt string. I've spent ages trying to replicate it outside the main application but cannot do so. It only raises the error when I run the big application with lots of I was getting the following error when opening the TTable which has persistent fields and two of them tables/queries open If pushed I could probably send you a screen vid of the situation happening in the (TBooleanFields) have a DefaultExpression set to FALSE. debugger.

"Preparation of field default failed. Token not found. Token: €€€€€€Ì << these look like euro symbols and accented characters Line Number: 1"

I traced into the above function and found that after calling this line:

StrCopy(ADataSources.szSQLExprImport, GetPAnsiChar(Field.DefaultExpression));

The value in ADataSources.szSQLExprImport is all corrupt characters.

If I remove the DefaultExpressions from the two fields, the table opens without error.

I cannot replicate this in a simple test project but within a large application with several tables, queries, datamodules, etc. the error happens every time. The strange characters can vary each time though.

This worked fine under D2007

QC Entry 69432 QC #: Date Reported: Area: 69438 11/29/2008 AddOn\Interbase components Description: Steps: [QC Short Description] Create Interbase Database Application with TIBDataBase TIBQuery Query is : SELECT Incorrect FieldByName().AsString length RDB$DEPENDENCIES.RDB$DEPENDENT_NAME AS TRIGGER_NAME, RDB$DEPENDENCIES.RDB$DEPENDED_ON_NAME AS TRIGGER_TABLE, QC Entry 69438 RDB$DEPENDENCIES.RDB$FIELD_NAME AS TRIGGER_FIELD, RDB$TRIGGERS.RDB$TRIGGER_SOURCE AS TRIGGER_DDL FROM RDB$DEPENDENCIES INNER JOIN RDB$TRIGGERS ON (RDB$DEPENDENCIES.RDB$DEPENDENT_NAME = RDB$TRIGGERS.RDB$TRIGGER_NAME) WHERE (RDB$TRIGGERS.RDB$FLAGS = 1) AND (RDB$TRIGGERS.RDB$TRIGGER_TYPE = 1) In Delphi 2006/2007, FieldByName ('TRIGGER_TABLE').AsString give correct result (length of string >= 20), with Delphi 2009 FieldByName ().AsString return only 10 car. QC #: Date Reported: Area: 69440 11/29/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. F2084 Internal Error: L2084 with "array of no T" as field in a generic class expected: it compiles [QC Description] actual: Fatal: F2084 Internal Error: L2084 It seems that it is not possible to use a dynamic array of a concrete type (for exam. Integer or string) as field in a generic class Note if you turn it into a normal class it compiles.

TRangeCheckGenericClassTest = class(TObject) program BTS266956; FNormalFieldArray: array of Integer; //<- leads to L2084 end; {$APPTYPE CONSOLE}

-> see steps type QC Entry 69440 TRangeCheckGenericClassTest = class(TObject) private (JJS: Expected to fail with Update3 unless a new solution devised per Barry) FNormalFieldArray: array of Integer; end; [Tester Recommended] begin TRangeCheckGenericClassTest.Create; WriteLn('PASS'); end. QC #: Date Reported: Area: 69456 11/30/2008 IDE\Code Editor Description: Steps: [QC Short Description] Thread stacktrace (reconstructed): TGraphicObject.Lock <= Deadlock TFont.SetStyle IDE Deadlock when updating the the editor views EditorBuffer.TEditBuffer.UpdateViews :20835992 coreide120.@Editorbuffer@TEditBuffer@DoCheckSetBreakpointables$qqro + 0x1a :20836413 [QC Description] coreide120.@Editorbuffer@TEditBuffer@ProjectStateChanged$qqrp14System@TObject + 0x2b :20b86e94 The TEditorBuffer.UpdateViews method is called from the background thread but accesses the editor's canvas. TEvent.Send + $28 :2077801a The dead lock occurs because the main thread is blocked by the lock that the background parser owns. coreide120.@Projectmodule@TBaseProject@SetProjectState$qqr50System@% QC Entry 69456 Set$t22Codemgr@TProjectStates$iuc$0$iuc$6% + 0x32 :207790a7 coreide120.@Projectmodule@TCustomCodeIProject@SetProjectState$qqr50System@% Set$t22Codemgr@TProjectStates$iuc$0$iuc$6% + 0x13 :2161dfa2 delphicoreide120.SetKibitzedSinceCompiled + 0xaa .NET Code QC #: Date Reported: Area: 69461 11/30/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. Generic type incompatible with itself across units. See the following compile-time error indicating [QC Description] failure. 've got a TDictionary that stores a bunch of objects indexed by name, and I'd like to be able to examine all of the objects. So I tried this: BTS266981.dpr(19) Error: E2010 Incompatible var enumerator: TMyObject; types: begin 'TPair' for enumerator in myDictionary do and 'TPair'

But that wouldn't compile. "Incompatible types: 'TMyObject' and 'TPair' unit uBTS266981;

So I tried it a bit differently: interface var enumerator: TPair; uses Generics.Collections; That didn't compile either. This error message is even stranger: Incompatible types: 'TPair' and 'TPair'. type It gets worse. I tried to create a wrapper class around the dictionary that would handle the data retrieval internally. But now I can't call any of its methods. Any method call, even ones with no parameters, gets this: TMyObject = class(TObject) private [DCC Error] E2010 Incompatible types: FIntValue: Integer; 'TMyDictionary.TKey,MyUnit.TMyDictionary.TIndex,MyUnit.TMyDictionary.TValue>' public and 'TMyDictionary' constructor Create(AValue: Integer); property IntValue: Integer read FIntValue; This is a complete show-stopper. Anyone know how to fix this? end; QC Entry 69461 TMyDictionary = TDictionary;

TMyContainer = class(TObject) private FDictionary: TMyDictionary; public constructor Create; property Dictionary: TMyDictionary read FDictionary; end;

implementation

constructor TMyContainer.Create; begin inherited Create; FDictionary := TMyDictionary.Create; end;

constructor TMyObject.Create(AValue: Integer); begin FIntValue := AValue; end;

end.

program BTS266981;

{$APPTYPE CONSOLE}

uses SysUtils, Generics.Collections, uBTS266981;

var Pair: TPair; MyObject: TMyObject; myContainer: TMyContainer; begin myContainer := TMyContainer.Create; myContainer.Dictionary.Add('One', TMyObject.Create(1)); myContainer.Dictionary.Add('Two', TMyObject.Create(2)); myContainer.Dictionary.Add('Three', TMyObject.Create(3)); for Pair in myContainer.Dictionary do Writeln('Key=' + Pair.Key + ' IntValue=' + IntToStr(Pair.Value.IntValue)); for MyObject in myContainer.Dictionary.Values do Writeln('IntValue=' + IntToStr (MyObject.IntValue)); WriteLn('PASS'); // PASS on compile end.

QC #: Date Reported: Area: 69462 11/30/2008 SOAP\Client Applications Description: Steps: [QC Short Description] OS : Windows XP SP3 1. Start delphi 2009 IDE (with update1). 2. Open SOAP Datamodule Demo project Midas raise "variant or safe array is locked" error in demo project group, for example : C:\Documents and Settings\All Users\Documents\RAD Studio\6.0\Demos\DelphiWin32 \VCLWin32\WebServices\SOAPDataModule\SOAPDataModule.groupproj 3. Build server application QC Entry 69462 (SOAPDMServerWAD.exe) 4. Start "Web App debugger" application from menu (tools->Web App debugger) and change service port to 1024, then start the service. 5. start server Application (SOAPDMServerWAD.exe) from Windows file manager. 6. Build and run client application (SOAPDMClient.exe), click "Connect" button. Delphi IDE debuger will raise a access violation error ( from module midas.dll ) and error message string is "Variant or safe array is locked". Note : I have been tried to use "midaslib" unit in both projects to avoid the discrepancy of midas.dll, but still not work. QC #: Date Reported: Area: 69477 12/1/2008 Compiler\Delphi Description: Steps: [QC Short Description] Compile the attached program below. F2084 Internal Error: C4539 with -$R+ and a "array of T" as field in a generics class and a special code construct Note that range checking {$R+} is enabled.

[QC Description] expected: it compiles While doing some "array of T" range check tests I found the attached extrem corner case which leads to a actual: Fatal: F2084 Internal Error: C4539 C4539 error. Note it compiles with one of the following modification: -> see steps - no range checks QC Entry 69477 - changing FGenericsFieldArray[0] := ASingleValue; [Tester Recommended] into FGenericsFieldArray[0] := FGenericsFieldArray[1]; - removing the call of DoSomethingWithFieldArray - removing the parameter of DoSomethingWithFieldArray - using a local array - using an array with a fixed size - using string or AnsiString (not ShortString!) as type means TRangeCheckGenericClassTest.Create; instead of TRangeCheckGenericClassTest.Create;

Futhermore calling SetLength in a constructor or the method has no influence.

{$R+} program BTS266970;

{$APPTYPE CONSOLE}

type TRangeCheckGenericClassTest = class(TObject) private FGenericsFieldArray: array of T; procedure DoSomethingWithFieldArray(AValue: array of T); public procedure GenericsRangeCheckWithFieldArray(ASingleValue: T); end;

procedure TRangeCheckGenericClassTest.DoSomethingWithFieldArray(AValue: array of T); begin end;

procedure TRangeCheckGenericClassTest.GenericsRangeCheckWithFieldArray(ASingleValue: T); begin DoSomethingWithFieldArray(FGenericsFieldArray); FGenericsFieldArray[0] := ASingleValue; end;

begin TRangeCheckGenericClassTest.Create; WriteLn('PASS'); end. QC #: Date Reported: Area: 69497 12/1/2008 VCL\Ribbon Controls Description: Steps: [QC Short Description] Refer to description for problem location and fix. End Ellipsis setting doesn't work for csText type commands on the ribbon

[QC Description] There is a typo in the TRibbonTextControl.DrawText method of the RibbonActnCtrls.pas unit.

The following case statement: case LTextProps.EllipsisPosition of epPathEllipsis: LFlags := LFlags or DT_PATH_ELLIPSIS; epEndEllipsis: LFlags := LFlags or DT_PATH_ELLIPSIS; epWordEllipsis: LFlags := LFlags or DT_WORD_ELLIPSIS; end; should be: case LTextProps.EllipsisPosition of epPathEllipsis: LFlags := LFlags or DT_PATH_ELLIPSIS; epEndEllipsis: LFlags := LFlags or DT_END_ELLIPSIS; // FIX HERE epWordEllipsis: LFlags := LFlags or DT_WORD_ELLIPSIS; end; QC Entry 69497 QC #: Date Reported: Area: 69498 12/1/2008 VCL\Ribbon Controls Description: Steps: [QC Short Description] Run the Ribbon Demo Application Change to the Control Types tab Resize the form so that the Spin Edit group Incorrect group alignment caused by csText controls on a ribbon becomes collapsed Resize the form so that the Spin Edit group is expanded Resize the form so that the Spin Edit group becomes collapsed Resize the form so that the Spin Edit group is expanded exp: Spin Edit group is [QC Description] still aligned correctly act: It isn't aligned correctly If the ribbon has csText controls on it, such as the Control Types tab in the shipped Ribbon Demo application, then resizing the form can cause the group to misalign.

The fix is to add the following line (as last line in method) to the TRibbonTextControl.CalcBounds method.

Height := 22;

NOTE: This fix is not Large Font supportive, however the ribbon doesn't support large fonts so this isn't an issue (until the next major release perhaps).

NOTE: This is an item first mentioned in the following report (which actually contains three separate items).

Report No: 67923 Status: Reported Bug in Ribbon and fade in fade out missed http://qc.codegear.com/wc/qcmain.aspx?d=67923 QC Entry 69498 QC #: Date Reported: Area: 69533 12/2/2008 VCL\Dialog Controls\TOpenPictureDialog Description: Steps: [QC Short Description] Create a new VCL forms project, add a TOpenPictureDialog and a button. Execute the open dialog from the TOpenPictureDialog raises EInvalidGraphic on selecting a LNK file (single click) button. Run the application, click the button, use the open dialog to browse to a *.lnk file and single-click that file. You should now get a EInvalidGraphic exception. [QC Description] I get a "Debugger Exception Notification" dialog when selecting or highlighting a *.LNK link file in a TOpenPictureDialog dialog. Exception notification message: Project Project1.exe raised exception class EInvalidGraphic with message 'Unknown picture file extension (.lnk)'.

Open dialog options seem to be ignored, such as the ofNoReadOnlyReturn option. Same exception regardless of options.

If I click Continue on the exception notification dialog, my application continues as if nothing had happened. I have to select the LNK file again to reach its target, which happens without any further exceptions.

The preview feature of TOpenPictureDialog may be what causes the exception. QC Entry 69533

(SB) Note: The exception only occurs when debugging, not at runtime. QC #: Date Reported: Area: 69555 12/3/2008 Database\DataSnap\Server Description: Steps: [QC Short Description] 1. Create a datasnap 2009 application 2. use the invocation lifecycle 3. enable reportmemoryleaksonshutdown "Invocation" life cycle leaks memory or debug the application

[QC Description] If you use the "Invocation" life cycle in a Datanspa 2009 server, the destruction code doens't free the object (created for each request) unless you manually handle the OnDestroyInstance event handle of the Server class and destroy the instance.

I have a demo (also in my book) that shows this.

This is quite significant: every single invocation leaks the server side object (which can as well be a data module!)

QC Entry 69555 QC #: Date Reported: Area: 69571 12/3/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile and run the attached application. Missing high bound range checks with non var "array of" as method parameter in a generic class See the following program output indicating failure. [QC Description] In a generics class high bound range checks does not exist for non var "array of" method parameters although FAIL #3 the same does work in a normal class. FAIL #5 FAIL procedure TRangeCheckNormalClassTest.NormalRangeCheckWithArrayAsParam(AValue: array of Integer; ASingleValue: Integer); In the attached test case, the code below establishes a dynamic array of 1024 elements. The methods begin NormalMethod and GenericMethod are expected to generate an ERangeError. The failure output noted AValue[1024] := ASingleValue; //<- high bound check does work here indicates that range errors are not generated for methods of a generic class, but do occur as expected for end; classes not involving generics. procedure TRangeCheckGenericClassTest.NormalRangeCheckWithArrayAsParam(AValue: array of Integer; function DoTest: Boolean; ASingleValue: Integer); var begin MyClass: TMyClass; AValue[1024] := ASingleValue; //<- missing high bound check here GenericClass: TGenericClass; end; IntegerArray: array of Integer; TestValue: Integer; -> see steps begin QC Entry 69571 SetLength(IntegerArray, 1024); TestValue := 4096; [Tester Recommended] MyClass := TMyClass.Create; try try MyClass.NormalMethod(IntegerArray, TestValue); WriteLn('FAIL #1'); except on E: Exception do if E is ERangeError then Inc(Counter) else WriteLn('FAIL #2 - E=', E.ClassName, '/', E.Message); end; finally MyClass.Free; end;

GenericClass := TGenericClass.Create; try try GenericClass.NormalMethod(IntegerArray, TestValue); WriteLn('FAIL #3'); except on E: Exception do if E is ERangeError then Inc(Counter) else WriteLn('FAIL #4 - E=', E.ClassName, '/', E.Message); end;

try GenericClass.GenericMethod(IntegerArray, TestValue); WriteLn('FAIL #5'); except on E: Exception do if E is ERangeError then Inc(Counter) else WriteLn('FAIL #6 - E=', E.ClassName, '/', E.Message); end; finally GenericClass.Free; end; QC #: Date Reported: Area: 69583 12/4/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile and run the attached application below. Generics.Collections: TList.Delete crashes for records See the following program output indicating failure. (JJS: See also RAID 267603 related to TStack<>) FAIL - Exception=EAccessViolation/Access violation at address 00414CAC in module [QC Description] 'BTS267070.exe'. Write of address 00000000 If the generic list is used with a record type, it will crash when Delete() is called. A very simple example would be: program BTS267070; { Generics.Collections: TList.Delete crashes for records } type TSomething = record {$APPTYPE CONSOLE} Value: Integer; end; uses TSomethingList = class(TList) Generics.Collections, end; SysUtils; procedure RunTest(); type var TSomething = record LList: TSomethingList; Value: Integer; LSomething: TSomething; end; begin LList := TSomethingList.Create(); TSomethingList = class(TList) LList.Add(LSomething); end; LList.Delete(0); LList.Free(); procedure RunTest(); end; var LList: TSomethingList; An Access Violation will occur in TList.DoDelete, in line 765, where FItems[Index] := Default(T); LSomething: TSomething; begin The Default method is either not documented, or documented somewhere I can't find. Either way, the code LList := TSomethingList.Create(); would work if this call was not there. try QC Entry 69583 LList.Add(LSomething); WriteLn('Added'); LList.Delete(0); WriteLn('PASS - Deleted'); finally LList.Free(); end; end;

begin try RunTest(); except on E: Exception do WriteLn('FAIL - Exception=', E.ClassName, '/', E.Message); end; end. QC #: Date Reported: Area: 69696 12/8/2008 IDE\Search\Find in Files Description: Steps: [QC Short Description] Use find in files. Using Find in Files sometimes generates AV's and List Index errors. Bug logged in response to discussion in thread: [QC Description] Find in Files fails after using it a few times and doesn't work again until you restart Delphi. https://forums.codegear.com/thread.jspa?threadID=6208&tstart=0 QC Entry 69696 Stack traces given (attached) and also here:

https://forums.codegear.com/message.jspa?messageID=47888#47888

QC #: Date Reported: Area: 69700 12/8/2008 Database\TField Description: Steps: [QC Short Description] Examine DBReg.pas and look for these new field types in the RegisterFields call: New field types added in Delphi 2009 are not registered. This includes TLongWordField, TShortintField, TByteField, and TExtendedField. RegisterFields([TStringField, TIntegerField, TSmallintField, TWordField, TFloatField, TCurrencyField, TBCDField, TFMTBcdField, TBooleanField, TDateField, [QC Description] TVarBytesField, TBytesField, TTimeField, TDateTimeField, TSQLTimeStampField, TByteField, arguably the most useful field for storing enumerated types, is not registered. TBlobField, TMemoField, TGraphicField, TAutoIncField, TLargeIntField, QC Entry 69700 TADTField, TArrayField, TDataSetField, TReferenceField, TAggregateField, TWideStringField, TVariantField, TGuidField, TInterfaceField, TIDispatchField, TWideMemoField]);

QC #: Date Reported: Area: 69717 12/8/2008 IDE Description: Steps: [QC Short Description] Tools | Configure Tools Tools menu loses sort order Add For Title give "abc" [QC Description] For Program, give "abc" When you add tools in the Configure Tool window and arrange them in a particular order for convenience they Click OK always appear sorted alphabetically when the IDE is restarted. Note that the "abc" tool is at the bottom of the list QC Entry 69717 Click Close Look at the Tools menu in the IDE Note that the "abc" tool is at the bottom of the menu This is a regression Shut down and restart the IDE Look at the Tools menu in the IDE Note that the "abc" tool is no longer at the bottom of the menu QC #: Date Reported: Area: 69752 12/9/2008 RTL\Delphi Description: Steps: [QC Short Description] Compile and run the attached application below. ToUpper and ToLower with NullString See the following program output indicating failure. [QC Description] The new functions ToUpper() and ToLower() (from the Character unit) raise an exception if the input is an empty FAIL #1 - ToUpper Exception=EOSError/System Error. Code: 87. or null string. A better behavior would be to return an empty string, just the way the older UpperCase() and The parameter is incorrect LowerCase() functions work. FAIL #2 - ToLower Exception=EOSError/System Error. Code: 87. QC Entry 69752 The parameter is incorrect

program BTS267234;

{$APPTYPE CONSOLE}

uses SysUtils, Character;

var Counter: Integer = 0;

procedure DoIt; begin try ToUpper(''); Inc(Counter); except on E: Exception do WriteLn('FAIL #1 - ToUpper Exception=', E.ClassName, '/', E.Message); end;

try ToLower(''); Inc(Counter); except on E: Exception do WriteLn('FAIL #2 - ToLower Exception=', E.ClassName, '/', E.Message); end;

if Counter = 2 then WriteLn('PASS'); end;

begin DoIt; end. QC #: Date Reported: Area: 69799 12/11/2008 Internet\Controls\TXMLDocument Description: Steps: [QC Short Description] run the code below (it is also in the attachment) expected: EXMLDocError: Element "foo" does not contain a TXMLNode.CheckTextNode passes DOMNode.nodeName to SNotSingleTextNode but the nodeName does not single text node actual: EXMLDocError: Element does not contain a single text node program appear in the error message SNotSingleTextNodeProject; {$APPTYPE CONSOLE} uses ComObj, SysUtils, XMLDoc, XMLIntf; type TLogic = class(TObject) public class procedure Logic; static; end; const SFoo = 'foo'; SBar = 'bar'; class procedure [QC Description] TLogic.Logic; var XmlDocument: IXMLDocument; FooNode: IXMLNode; Bar1Node: IXMLNode; Bar2Node: TXMLNode.CheckTextNode passes DOMNode.nodeName to SNotSingleTextNode but the nodeName does not IXMLNode; FooText: string; begin // setup an XmlDocument of which the root node cannot get provide the Text appear in the error message. property XmlDocument := TXMLDocument.Create(nil); XmlDocument.Active := True; FooNode := XmlDocument.AddChild(SFoo); // by adding two elements to the FooNode, FooNode.Text becomes invalid The reason is that the SNotSingleTextNode format mask does not contain any parameters; Bar1Node := FooNode.AddChild(SBar); Bar2Node := FooNode.AddChild(SBar); // since FooNode.Text is the passed nodeName therefore does not end up in the error message. invalid, an EXMLDocError will be thrown, using SNotSingleTextNode as format mask. // check if that EXMLDocError contains the name of FooNode which is passed by TXMLNode.CheckTextNode FooText := So SNotSingleTextNode should be changed from FooNode.Text; end; begin try try // COM needs to be initialized, so: // Manually call InitProc as only WebBroker SNotSingleTextNode = 'Element does not contain a single text node'; and Forms do this automatically if InitProc <> nil then TProcedure(InitProc); TLogic.Logic(); // throw the to exception except { expected: EXMLDocError: Element "foo" does not contain a single text node actual: SNotSingleTextNode = 'Element "%s" does not contain a single text node'; EXMLDocError: Element does not contain a single text node TXMLNode.CheckTextNode passes DOMNode.nodeName to SNotSingleTextNode but the nodeName does not appear in the error message. The This can be done, as TXMLNode.CheckTextNode is the only place in the VCL where SNotSingleTextNode is reason is that the SNotSingleTextNode format mask does not contain any parameters; the passed nodeName used. therefore does not end up in the error message. So SNotSingleTextNode should be changed from SNotSingleTextNode = 'Element does not contain a single text node'; to SNotSingleTextNode = 'Element "%s" QC Entry 69799 does not contain a single text node'; This can be done, as TXMLNode.CheckTextNode is the only place in the VCL where SNotSingleTextNode is used. } on E: Exception do Writeln(E.Classname, ': ', E.Message); end; finally Write('Press the key...'); Readln; end; end. QC #: Date Reported: Area: 69812 12/11/2008 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] Error in documentation for function StartsStr in unit StrUtils

[QC Description] The url for the page in question is: ms-help://embarcadero.rs2009/delphivclwin32/StrUtils_StartsStr.html

At the top of the page the header contains the following text:

"Enter a short sentence, starting with a verb, that states the basic purpose of the property."

I expected to find something along the lines of:

"StartsStr determines if the substring ASubText begins the string AText using a case sensitive algorithm. If ASubText matches the beginning of AText, the result is true, otherwise it is false."

That would be consistent with the documentation for StartsText. (I just copy and pasted it and changed case insensitive to read case sensitive and fixed a small typo.)

QC Entry 69812 QC #: Date Reported: Area: 69859 12/12/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached program below. unsafe implict type cast in generic classes See that it unexpectedly compiles successfully. [QC Description] see steps Note that Line #1 is accepted even though the FObj field may not be a TItem, the result type of GetAsItem. QC Entry 69859 program BTS267319; [Tester Recommended] {$APPTYPE CONSOLE}

uses SysUtils;

var Caption: String;

type TForm = class Name: String; end;

type TList = class(Tobject) FObj: T; end; TItem = class i: Integer; S: string; end; TOtherClass = class class function GetAsItem(L: TList): TItem; end;

class function TOtherClass.GetAsItem(L: TList): TItem; begin //!!!!!! it's unsafe cast. Error expected. // L.FObj - may be not inherits from TItem; Result := L.FObj; //#1// end;

procedure DoIt; var L: TList; Item: TItem; begin L := TList.Create; try L.FObj := TForm.Create; //(nil); L.FObj.Name := 'MyFormName'; Item := TOtherClass.GetAsItem(L); Caption := Item.S; // #2 // WriteLn('FAIL #1 - Caption=(', Caption,')'); finally L.FObj.Free; L.Free; end; end;

begin try DoIt; except on E: Exception do WriteLn('FAIL - Exception=', E.ClassName, '/', E.Message); end; end. QC #: Date Reported: Area: 69878 12/14/2008 AddOn\Interbase components Description: Steps: [QC Short Description] Hello, I think, there is a bug. I can not mirgrate my Delphi program vom RAD Studio Delphi 2007 to RAD Studio Exception EOutOfMemory when connected with Firebird 2009 Update 1. With RAD Studio Delphi 2007 it runs. Some tables are open and one table i got the error Exception EOutOfMemory with 50 records. !!! procedure TForm3.Button1Click(Sender: TObject); begin [QC Description] IDSPo.Active := True; end; Under windows XP SP3 To reproduce the error : 1. Install Firebird-2.0.3.12981-1- Win32.exe (standard install with no modification) sysdba masterkey 2. Create a directory c:\avfb and store AVFB.GDB and others change PC05:C:\avfb\AVFB.GDB in TIBDatabase to your Computer 3. Run the test- added by Sysop program EXception EoutOfMemory occurs What can I do ? Best regards Frank <<<<<<<<<<< Same fatal error occurs with InterBase 2009. >>>>>>>>>>> QC Entry 69878 QC #: Date Reported: Area: 70019 12/18/2008 RTL\Delphi Description: Steps: [QC Short Description] 1. launch Delphi 2009 on Japanese OS 2. create VCL form application 3. add ComboBox and Button 4. add On Japanese OS, EraNames array for Japanese locale are corrupted. OnCLick event handler for the button as below ------procedure TForm1.Button1Click(Sender: TObject); begin ComboBox1.Items.Add(EraNames[1]); ComboBox1.Items.Add(EraNames[2]); ComboBox1.Items.Add [QC Description] (EraNames[3]); ComboBox1.Items.Add(EraNames[4]); end; ------5. Era names for Japanese locale are On Japanese OS, EraNames array for Japanese locale are corrupted. corrupted... Please see attached screenshot.

Please see Steps and screenshot. QC Entry 70019 QC #: Date Reported: Area: 70022 12/19/2008 RTL\Delphi\ConvUtils Description: Steps: [QC Short Description] This function should return 1 but instead returns 0: function ValBlankStringBug:Integer; var N:Double; System.Val (floating point version) incorrectly sets the code parameter to 0 when the supplied string is empty ValCode:Integer; begin Val('',N,ValCode); Result:=ValCode; end;

[QC Description] The method System.Val should set the Code output parameter to 1 if the supplied string is empty.

However since Unicode was introduced (Delphi 2009) the floating point version of Val now sets the code parameter to 0 - implying that the string is a valid number, which it is not.

I've marked this type 'B' because it has caused us dozens of bugs, including databases returning invalid reports because the user input was misinterpreted.

I believe that the bug is in _ValExt in System.pas line 9252 (just after @@Empty label).

INC ESI should be replaced by:

{$IFNDEF UNICODE} INC ESI {$ELSE} ADD ESI, 2 {$ENDIF} QC Entry 70022 QC #: Date Reported: Area: 70102 12/23/2008 Database\DBExpress\TSqlTimeStamp Description: Steps: [QC Short Description] See attached project. Zero is null in TSQLTimeStampField

[QC Description] I have a required TSQLTimeStampField where I want to store 0 (zero), but I get and exception that this field is required.

The field should accept zero as not null.

After more tests, I noticed that the problem only occurs if you use the .AsDateTime, because the setter clears the field when the value being set is zero. QC Entry 70102 QC #: Date Reported: Area: 70135 12/26/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Try to compile this: ------program Project1; {$APPTYPE CONSOLE} type TGeneric = class Local procedures in generics fail to compile procedure Method; end; procedure TGeneric.Method; procedure Local; begin // Note that it's not even using T end; begin end; begin end. [QC Description] Local procedure and generics don't work together. You always get

[DCC Error] Project1.dpr(12): E2528 Type parameters not allowed on this method

Since there is no help entry for this error, I'm not shure if this is intentional. But in any case it's very annoying and I don't see why local procedures shouldn't work for generics. QC Entry 70135

[Tester Recommended] QC #: Date Reported: Area: 70148 12/27/2008 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Build the following program. The compiler stops and reports error code 1. Then try to build it again. The IDE will Generic class type constraint crashes compiler and IDE terminate without warning. Note: Syntactically, using a generic class type constraint seems valid. The compiler accepts it: the example will compile without errors, if you simply comment out this line var Coll: [QC Description] TCollection>; ------program Project1; {$APPTYPE CONSOLE} type I tried to constrain a generic class type with another generic class. This not only crashes the compiler, but also TInitializer = class procedure SomeMethod( const Value: TValue ); end; TCollection> = class end; procedure TInitializer.SomeMethod( const Value: TValue); begin end; var Coll: TCollection>; begin end. See Steps. QC Entry 70148

[Tester Recommended] QC #: Date Reported: Area: 70183 12/30/2008 Documentation\Online Help\VCL Description: Steps: [QC Short Description] Documentation is missing for these TApplication members

[QC Description] Complete member list url: ms-help://embarcadero.rs2009/delphivclwin32/!!MEMBEROVERVIEW_Forms_TApplication.html

The following members are not documented. public methods - AddPopupForm HookSynchronizeWakeup RemovePopupForm public properties - DefaultFont EnumAllWindowsOnActivateHint ModalLevel ModalPopupMode PopupControlWnd public events - OnGetActiveFormHandle OnGetMainFormHandle protected methods - Idle IsDlgMsg IsHintMsg IsKeyMsg IsMDIMsg IsPreProcessMessage IsShortCut

Using the above order, the individual topic urls are as follows: ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/Forms_TApplication_HookSynchronizeWakeup.html ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/Forms_TApplication_DefaultFont.html ms-help://embarcadero.rs2009/delphivclwin32/Forms_TApplication_EnumAllWindowsOnActivateHint.html ms-help://embarcadero.rs2009/delphivclwin32/Forms_TApplication_ModalLevel.html ms-help://embarcadero.rs2009/delphivclwin32/Forms_TApplication_ModalPopupMode.html ms-help://embarcadero.rs2009/delphivclwin32/Forms_TApplication_PopupControlWnd.html ms-help://embarcadero.rs2009/delphivclwin32/Forms_TApplication_OnGetActiveFormHandle.html ms-help://embarcadero.rs2009/delphivclwin32/Forms_TApplication_OnGetMainFormHandle.html ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] ms-help://embarcadero.rs2009/delphivclwin32/[email protected] QC Entry 70183 QC #: Date Reported: Area: 70184 12/30/2008 Debugger\CPU Description: Steps: [QC Short Description] Add the following code to a Delphi 2009 project, and view the compiled code in CPU view: asm jmp @x SSE4.1 instruction INSERTPS is disassembled incorrectly INSERTPS xmm0, xmm1, 7h @x: end; CPU view for the INSERTPS instruction above shows: “

660F3A21C107 insertps xmm0,ecx,$07”, where “ECX” is displayed instead of “XMM1”. [QC Description] In CPU view, the SSE4.1 instruction INSERTPS (Insert Packed Single Precision Floating-Point Value) is disassembled incorrectly.

Correct instructions are expected to be of the format: INSERTPS xmm1,xmm2/m32,imm8 Opcode: 66 0F 3A 21 /r ib

Reference: "Intel 64 and IA-32 Architectures Software Developer's Manual" (September 2008 version, http://www.intel.com/products/processor/manuals/), Volume 2A. QC Entry 70184 QC #: Date Reported: Area: 70188 12/30/2008 VCL\Core VCL Classes\Streaming Description: Steps: [QC Short Description] program Bug; {$APPTYPE CONSOLE} uses SysUtils, Classes, StrUtils; var I, J: Integer; SL: TStringList; MS: TMemoryStream; SR: TStreamReader; S, T: TStreamReader cannot read unicode text files string; Encoding: TEncoding; Pass: Boolean; const MyString = 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test '; MyString2 = [QC Description] #955#955#955#955#955#955#955#955#955#955'Test'#228#228#228#228#228#955#955#955#955#955#955#955#955#955#955#968#968#968#968#968; TStreamReader cannot be used to read a Unicode Textfile line by begin for J := 0 to 9 do begin try case J mod 5 of 0: Encoding := TEncoding.Default; 1: Encoding := TEncoding.UTF8; 2: Encoding := TEncoding.UTF7; 3: line. It's definitely going to challenge your skills of Chinese unless Encoding := TEncoding.Unicode; 4: Encoding := TEncoding.BigEndianUnicode; else raise Exception.Create('Bug in Testprogram'); end; if J <= 4 then T := the file is very small. MyString else T := MyString2; Pass := True; MS := TMemoryStream.Create; try SL := TStringList.Create; try for I := 0 to 1000 do SL.Add(T); SL.SaveToStream(MS, Encoding); finally SL.Free; end; MS.Position := 0; SR := TStreamReader.Create(MS, True); try while not SR.EndOfStream do begin Let's say I have a TextFile with a Unicode BOM and content similar S := SR.ReadLine; if J = 5 then if S = T then Pass := False; if (S <> T) and (J <> 5) then Pass := False; end; finally SR.Free; end; if Pass then Writeln('PASS to ' + Encoding.ClassName + ' ' + IfThen(J < 4, 'MyString', 'MyString2')) else Writeln('FAIL ' + Encoding.ClassName + ' ' + IfThen(J < 4, 'MyString', 'MyString2')); this: finally MS.Free; end; except on E: Exception do WriteLn('FAIL - Exception=', E.ClassName, '/', E.Message); end; end; end. Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test [...]

Then TStreamReader reads something like this: Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test [...] Te? ???? ???? ???? ??? ?? ???? ???? ???? ???? ??? ???? ???? ???? ???? ???? ???? ???? ???? ??? ???? ???? ???? ???? ??? ???? ???? ???? ??

You may also get a "List index out of bounds (1023)" exception.

Output of the demo program:

PASS TMBCSEncoding MyString PASS TUTF8Encoding MyString PASS TUTF7Encoding MyString FAIL - Exception=ERangeError/List index out of bounds (1023) FAIL - Exception=ERangeError/List index out of bounds (1023) PASS TMBCSEncoding MyString2 FAIL TUTF8Encoding MyString2 FAIL TUTF7Encoding MyString2 FAIL TUnicodeEncoding MyString2 FAIL TBigEndianUnicodeEncoding MyString2 QC Entry 70188 QC #: Date Reported: Area: 70197 12/30/2008 VCL Description: Steps: [QC Short Description] 1) Create e new VCL application 2) Drop a TCategoryPanelGroup in the form 3) Add three or more When adding a TCategoryPanel by using CreatePanel to a TCategoryPanelGroup it is inserted in the wrong CategoryPanels (rightclick -> New Panel) 4) Add a button and add the following code. procedure position TForm1.Button1Click(Sender: TObject); var CategoryPanel: TCategoryPanel; begin CategoryPanel := CategoryPanelGroup1.CreatePanel(Self) as TCategoryPanel; CategoryPanel.Caption := 'CategoryPanel' + [QC Description] IntToStr(CategoryPanelGroup1.Panels.Count); end; 5) Compile and run and press the button Actual result: When adding a TCategoryPanel by using CreatePanel to a TCategoryPanelGroup one expects that the newly CategoryPanel1 CategoryPanel2 CategoryPanel4 CategoryPanel3 Expected result: CategoryPanel1 created is added to the end CategoryPanel2 CategoryPanel3 CategoryPanel4 (below) the already existing panels, instead it is inserted before the last panel.

Further more there is a check in that function ... 10574: if FPanels.Count = 0 then ... which is pointless because a Panel was just added to the list and Count will always be > 0.

A corrected version should look something like this: procedure TCustomCategoryPanelGroup.InsertPanel(Panel: TCustomCategoryPanel); var LPanel: TCustomCategoryPanel; begin FPanels.Add(Panel); Panel.FPanelGroup := Self; if FPanels.Count = 1 then // Modified was 0 Panel.Top := 0 else begin LPanel := TCustomCategoryPanel(FPanels[FPanels.Count - 2]); // Modified was [FPanels.Count - 1] Panel.Top := LPanel.Top + LPanel.Height + 1; end; Panel.Left := 0; Panel.Align := alTop; Panel.Alignment := FHeaderAlignment; if not (csLoading in ComponentState) then AutoScrollInView(Panel); end;

[Edit1] Note that the current sort/compare function inverts the list of CategoryPanels.

{$IF DEFINED(CLR)} function ComparePanels(Item1, Item2: TObject): Integer; {$ELSE} function ComparePanels(Item1, Item2: Pointer): Integer; {$IFEND} begin Result := TCustomCategoryPanel(Item2).Top - TCustomCategoryPanel(Item1).Top; if Result > 0 then TCustomCategoryPanel(Item2).PanelGroup.FReorderPanels := True; end;

To make the above change of InsertPanel() more reliable the "compare line" should be changed to ...

Result := TCustomCategoryPanel(Item1).Top - TCustomCategoryPanel(Item2).Top;

... first reaction is that the following line should also be changed to ... if Result < 0 then

... but without further testing that complete statement looks a little strange in a QuickSort algorithm ;-) QC Entry 70197 QC #: Date Reported: Area: 70221 1/2/2009 SOAP Description: Steps: [QC Short Description] 1. Build the demo 2. Run the Web App debugger 3. Run the client, 4. In Register Attachment, 5. Update File SOAP attachments broken/not working -> demo echoservice crashes List, 6. Select a file and download -> Hang.

[QC Description] The demo echoservice ($(BDS)\Demos\DelphiWin32\VCLWin32\WebServices\EchoService is revealing a total failure with soap attachments. The client hangs, consumes all of the virtual memory until a crash out-of-memory occurs.

Hint: The Getheaders Procedure in SoapAttach.pas loops endless.

There seems to be a broken conversion to unicode enabling. The demo in Delphi 2006 works. QC Entry 70221 QC #: Date Reported: Area: 70249 1/4/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below with the following command line. F2084 Internal Error: URW1135 with Inline Auto + generic class with virtual method dcc32 -b --inline:auto BTS267521.dpr [QC Description] Description by Uwe Schuster: It seems that it is not possible to use Code inline control = Auto if you have See the following compile-time error indicating failure. generics classes with virtual methods, because this leads to an URW1135 error. Fatal: F2084 Internal Error: URW1135 (JJS: code inline control is auto by default in the IDE)

-> see steps unit uBTS267521;

interface QC Entry 70249 type [Tester Recommended] TAGenericBaseType = class(TObject) public procedure AMethod; virtual; end;

//this is just to force an instantiation (other option is to create //just an instance of TAGenericBaseType) TByteDerivedType = class(TAGenericBaseType);

implementation

procedure TAGenericBaseType.AMethod; begin end;

end.

program BTS267521;

{$APPTYPE CONSOLE}

uses uBTS267521;

begin WriteLn('PASS'); // Pass on compile end. QC #: Date Reported: Area: 70261 1/4/2009 IDE\Search\Find in Files Description: Steps: [QC Short Description] 0. start Delphi 2009 1. create a new Delphi Win32 console application (or use the attached file [Regression] Regular expressions result representation differs from "Find" representation in editor FindInFilesRegExTest.dpr and go to step 3.) 2. paste the following code into the project source const cProductInf = ' © 2002-2008 JEDI VCS (http://jedivcs.sf.net) - '; SomeTextConst1 = 'program begin something [QC Description] end'; SomeTextConst2 = 'begin something end'; SomeTextConst3 = 'beginsomethingend'; 3. search with "Find" Some days ago I replaced 2008 by 2009 in the JVCS copyright string. I thought afterwards "How could I find for '.*2008.*' or '{.*}2008{.*}' (enable [x] Regular expressions!) expected: the whole string of the constant 2008 occurrences in strings?" (just searching for 2008 would find almost only comments). I tried regular cProductInf is selected actual: as expected 4. do the same with "Find in Files" expected: the whole string of the expressions, that worked, but I didn't understand how "Find in Files" highlights the results. I compared it with constant cProductInf is bold actual: - with '.*2008.*' is the part "2002-2" bold (html like -> ...cProductInf = ' © RAD Studio 2007, noticed that there it is highlighted as expected and so this is regression. 2002-2008 JEDI VCS...) see FiF2008V1Results.png for the result with Delphi 2009 and RAD Studio 2007 - with '{.*}2008{.*}' is the part "2002-2008" bold (html like -> ...cProductInf = ' © 2002-2008 JEDI -> see steps and attached pictures VCS...) see FiF2008V2Results.png 5. repeat 3. and 4. with the following expressions and compare the results QC Entry 70261 of 3. and 4. expressions: begin{.*}end' -> results see FiFBeginEndV1Results.png 'begin{.*}end' -> results see FiFBeginEndV2Results.png '{.*}begin{.*}end' -> results see FiFBeginEndV3Results.png QC #: Date Reported: Area: 70291 1/5/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] - save the attached file GenericsAVConstructorInlineAuto.dpr or the following code - dcc32 --inline:auto F2084 Internal Error: AV00448B63-RFFFF8003-0 with Inline Auto and generic class with constructor/destructor GenericsAVConstructorInlineAuto.dpr expected: it compiles actual: Fatal: F2084 Internal Error: AV00448B63- RFFFF8003-0 If you turn "constructor Create" into "procedure Create1" then the error disappears, but if you [QC Description] turn it into a destructor then the error appears too. - save the attached file GenericsAVDestructorInlineAuto.dpr I tried to compile source\Win32\rtl\common\Generics.Collections.pas with "Code inlining control"=Auto, but that or the following code - dcc32 --inline:auto GenericsAVDestructorInlineAuto.dpr expected: it compiles actual: leads to an internal error. Fatal: F2084 Internal Error: AV00448B63-RFFFF8003-0 - save the attached file GenericsAVAfterDelay.dpr or the following code - copy ..\RAD Studio\6.0\source\Win32\rtl\common\Generics.Collections.pas into the -> see steps directory where you've saved GenericsAVAfterDelay.dpr - dcc32 --inline:auto GenericsAVAfterDelay.dpr QC Entry 70291 expected: it compiles actual: Generics.Collections.pas(1866) GenericsAVAfterDelay.dpr(11) and after some seconds Fatal: F2084 Internal Error: AV00448B63-RFFFF8003-0 //--- GenericsAVConstructorInlineAuto.dpr --- [Tester Recommended] program GenericsAVConstructorInlineAuto; {$APPTYPE CONSOLE} type TDictionary = class(TObject) public constructor Create; end; constructor TDictionary.Create; begin end; begin TDictionary.Create; WriteLn('PASS'); end. //--- GenericsAVDestructorInlineAuto.dpr --- program GenericsAVDestructorInlineAuto; {$APPTYPE CONSOLE} type TDictionary = class(TObject) public destructor Destroy; override; end; destructor TDictionary.Destroy; begin end; begin TDictionary.Create; WriteLn('PASS'); end. //--- GenericsAVAfterDelay.dpr --- program GenericsAVAfterDelay; {$APPTYPE CONSOLE} uses Generics.Collections; begin TDictionary.Create; WriteLn('PASS'); end. QC #: Date Reported: Area: 70297 1/5/2009 VCL\Additional Controls\TSpeedButton Description: Steps: [QC Short Description] Place a TSpeedButton on a form and set its caption to U+00EF using Tahoma as a font, size 8. Note that the First character of caption is clipped left hand side of the diaeresis is clipped off.

[QC Description] The left of the first character is often clipped. The error is generally only one pixel, but it can be a problem especially with charcters with diacriticals.

The problem is also present in TBitBtn.

A standard capital T in Tahoma at 8 point is visibly assymetrical. A character that demonstrates the issue well is a lower case latin small letter I with diaeresis (U+00EF). The left hand dot above the vertical line is generally lost.

The effect is visible with or without themes.

The code measures the required size for the text using the OS DrawText call, and uses the returned rectangle to set the size of a clipping rectangle when displaying it.

It seems the OS clips the text. From the SDK documentation for DrawText: "Note that text with significant overhang may be clipped, for example, an initial "W" in the text string or text that is in italics." There is no matching comment in DrawThemeTextEx which is also used in some circumstances, but it seems to have the same issues as DrawText.

Standard Windows buttons do not suffer the effect.

Possible solutions would be to expand the measured rectangle slightly or to add a DT_NOCLIP flag in the DoDrawText calls in TButtonGlyph.DrawButtonText (Buttons.pas).

The problem was present back in Delphi 7, but was not generally seen because it depends on the font. D7 normally uses MS Sans Serif - and the fault does not show with that, but changing the font to Tahoma makes it perform just the same as current versions of Delphi. QC Entry 70297 QC #: Date Reported: Area: 70414 1/11/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] 1. start Delphi 2009 2. create a new Console Application and paste the following code //--- Interface delegation does not compile within generic classes InterfaceDelegation.dpr --- program InterfaceDelegation; {$APPTYPE CONSOLE} type ISomething = interface end; TDelegation = class(TInterfacedObject, ISomething) private type TSomething = class(TInterfacedObject, [QC Description] ISomething) end; private FSomething: TSomething; public property SomethingIntf: TSomething read I tried to use interface delegation (implements) inside a generic class as workaround for another problem, but it FSomething implements ISomething; end; begin WriteLn('PASS'); end. //--- 3. compile expected: it compiles does not compile - I get the error actual: it compiles 4. turn "TDelegation" into "TDelegation" TDelegation = class(TInterfacedObject, ISomething) -> TDelegation = class(TInterfacedObject, ISomething) 5. compile again expected: it compiles [DCC Error] InterfaceDelegation.dpr(17): E2259 Implements clause only allowed for properties of class or actual: [DCC Error] InterfaceDelegation.dpr(17): E2259 Implements clause only allowed for properties of class interface type or interface type

-> see steps QC Entry 70414

[Tester Recommended] QC #: Date Reported: Area: 70421 1/11/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] function FileIsVirtual(FileName: string): Boolean; // returns true if file has been virtualized by Vista var Attr: Fileattribute FILE_ATTRIBUTE_VIRTUAL missing from windows.pas Cardinal; begin Attr := FileGetAttr(FileName); if Attr <> INVALID_FILE_ATTRIBUTES then Result := Attr and FILE_ATTRIBUTE_VIRTUAL <> 0 else Result := False; end; [QC Description] Please add FILE_ATTRIBUTE_VIRTUAL = $10000; to windows.pas

WinNT.h: #define FILE_ATTRIBUTE_VIRTUAL 0x00010000

FILE_ATTRIBUTE_VIRTUAL can be used to detect if a file has been virtualized by Vista. In that case the file is stored in the VirtualStore folder. QC Entry 70421 QC #: Date Reported: Area: 70489 1/13/2009 Compiler\Delphi Description: Steps: [QC Short Description] - start Delphi 2009 - save the attached file ErrorE2431Test.dpr or the following code - compile expected: ...nicht Typo in DE translation of the message for the compiler error E2431 zugegriffen... [DCC Fehler] ErrorE2431Test.dpr(20): E2431 for-in-Anweisung arbeitet nicht mit Kollektionstyp 'TSomething', weil 'TSomething' kein Element für 'GetEnumerator' enthält oder darauf nicht zugegriffen werden [QC Description] kann actual: ...nicht zugegirffen... [DCC Fehler] ErrorE2431Test.dpr(20): E2431 for-in-Anweisung arbeitet nicht The translation of mit Kollektionstyp 'TSomething', weil 'TSomething' kein Element für 'GetEnumerator' enthält oder darauf nicht zugegirffen werden kann - dcc32 ErrorE2431Test.dpr expected: ...nicht zugegriffen... ErrorE2431Test.dpr(20) "E2431 for-in statement cannot operate on collection type '%s' because '%s' does not contain a member for '%s', Fehler: E2431 for-in-Anweisung arbeitet nicht mit Kollektionstyp 'TSomething', weil 'TSomething' kein Element or it is inaccessible" für 'GetEnumerator' enthält oder darauf nicht zugegriffen werden kann actual: ...nicht zugegirffen... ErrorE2431Test.dpr(20) Fehler: E2431 for-in-Anweisung arbeitet nicht mit Kollektionstyp 'TSomething', weil has a typo at the end in the translation of inaccessible 'TSomething' kein Element für 'GetEnumerator' enthält oder darauf nicht zugegirffen werden kann program ErrorE2431Test; {$APPTYPE CONSOLE} type TSomething = class(TObject) private function GetEnumerator: "E2431 for-in-Anweisung arbeitet nicht mit Kollektionstyp '%s', weil '%s' kein Element für '%s' enthält oder darauf IEnumerator; end; function TSomething.GetEnumerator: IEnumerator; begin Result := nil; end; var Something: nicht zugegirffen werden kann" TSomething; I: Integer; begin for I in Something do; end.

-> see steps

QC Entry 70489 QC #: Date Reported: Area: 70499 1/14/2009 Database\TField\TNumericField\TIntegerField Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_267657 Easy to fix in VCL: Using wrongly sized TSmallIntField in stead of TIntegerField causes memory overwrite -or- [QC Description] This QC shows how calling IsNull on a the result field of the query below can result in a memory overwrite. 1. Compile and run the attached application. 2. Click the button "Bad IsNull" The normal memory manager does not detect this, so you will see spurious artifacts in your applications. Only the FastMM memory manager in full debug mode detects it reliably. Expected: no error This bug occurs frequently when the datasizes of the underlying DB have changed, but the persistent fields in the application have not yet been corrected yet. Actual: FastMM has detected an error during a FreeMem operation. The block footer has been corrupted. As the IDE has no way of automatically correcting the datatypes of persistent fields, and this error is hard to detect, I have rated it quite high to fix. Notes: The attached application reproduces the issue. It includes FastMM as that is the only way to reproduce it. A. the buttons "Good Value" and "Good IsNull" are to demonstrate that using a persistent TIntegerField works fine The queries in the application accesses the employee.gdb demo database that ships with any Interbase version: B. the button "Bad Value" is to demonstrate that using a persistent TSmallintField for obtaining the Value works fine too Select Max(SALES.QTY_ORDERED) From SALES

The bug can be reproduced with any query returning an integer field; this particular example is just to make it easy to reproduce.

The bug manifests itself when you use Persistent Fields that are of the wrong size.

The expected behaviour is to get some kind of size warning, or an overflow. The actual behaviour is a memory overwrite that can be detected by FastMM.

The solution to resolve the issue is simple

The accompanying application contains two queries: BadSQLQuery and GoodSQLQuery both contain persistent fields: object BadSQLQueryMAX: TSmallintField FieldName = 'MAX' end object GoodSQLQueryMAX: TIntegerField FieldName = 'MAX' end

Behaviour: - obtaining BadSQLQueryMAX.Value: value will overflow - obtaining BadSQLQueryMAX.IsNull: memory overwrite occurs

The cause of the memory overwrite is that: - TField.GetIsNull calls GetData(nil) - The actual field now allocates a buffer that is too short - The actual TDataSet now overwrites this buffer with a value of the native size

Obtaining BadSQLQueryMAX.Value does not generate a memory overwrite because: - TSmallintField is derived from TIntegerField - TIntegerField.GetAsInteger calls GetValue(Result) - the Result os if size LongInt which is large enough to hold the result

Hence the proposed workaround is to introduce TIntegerField.GetIsNull that mimics TIntegerField.GetAsInteger behaviour:

{ Proposed workaround: add the below GetIsNull method to TIntegerField

//MMWIN:MEMBERSCOPY unit _MM_Copy_Buffer_; interface type TIntegerField = class(TNumericField) protected function GetIsNull: Boolean; override; end;

implementation function TIntegerField.GetIsNull: Boolean; var Dummy: LongInt; begin Dummy := -1; Result := not GetValue(Dummy); end;

end. } QC Entry 70499 QC #: Date Reported: Area: 70521 1/14/2009 Database\Data Aware Controls\TDBGrid Description: Steps: [QC Short Description] 1. Open the attached project 2. Start the project (This will copy '12.12.08' into the clipboard) 3. Click into the DBGrid-InplaceEditor ignores pasted text FLD_DATE field in the grid (show inplace editor) 4. Paste the clipboard text into the control by pressing Ctrl+V 5. Use TAB, ENTER or the mouse to leave the edit mode Expected: '12.12.08' is now in the field. Actual: The [QC Description] field is still empty. The DBGrid InplaceEditor ignores text that was pasted from the clipboard if the field has an EditMask.

This is because the TCustomMaskEdit overrides the WM_PASTE (and WM_CUT) message handler and if as mask is specified, the default handler isn't called. The default handler sends a WM_COMMAND(EN_CHANGE) to the parent but without calling the default handler this message isn't sent to the DBGrid and the content of the edit is never copied to the internal InplaceEdit text field. QC Entry 70521 QC #: Date Reported: Area: 70551 1/15/2009 Internet\Indy Description: Steps: [QC Short Description] Added by Sysop <<<<<<<<<<<<<<< sample project is found in the demo folder as '\MailClient\MailDemo.dproj'. random name assigned to attachment file names >>>>>>>>>>>>>>>

[QC Description] a random name is assigned to attachment file names. DSC004.jpg is changed to ATT00242.dat. The file name change renders the attachment unreadable allthough saving the dat file and changing the extension shows the jpg. QC Entry 70551 QC #: Date Reported: Area: 70553 1/15/2009 RTL\Delphi\Other Classes\TStreamReader/TStreamWriter Description: Steps: [QC Short Description] program Bug; {$APPTYPE CONSOLE} uses SysUtils, Classes, StrUtils; var I, J: Integer; SL: TStringList; MS: TMemoryStream; SR: TStreamReader; S, T: TStreamReader hangs in an endless loop string; Encoding: TEncoding; Pass: Boolean; const MyString = 'Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test '; MyString2 = [QC Description] #955#955#955#955#955#955#955#955#955#955'Test'#228#228#228#228#228#955#955#955#955#955#955#955#955#955#955#968#968#968#968#968; If a TStreamReader is created with an encoding that does not begin for J := 0 to 7 do begin try case J mod 4 of 0: Encoding := TEncoding.Default; 1: Encoding := TEncoding.UTF8; 2: Encoding := TEncoding.Unicode; 3: match the encoding of the stream, TStreamReader hangs in an Encoding := TEncoding.BigEndianUnicode; else raise Exception.Create('Bug in Testprogram'); end; if J <= 3 then T := MyString else T := MyString2; Pass := endless loop. True; MS := TMemoryStream.Create; try SL := TStringList.Create; try for I := 0 to 1000 do SL.Add(T); SL.SaveToStream(MS, Encoding); finally SL.Free; end; MS.Position := 0; SR := TStreamReader.Create(MS, TEncoding.UTF8); try while not SR.EndOfStream do begin S := SR.ReadLine; if J = 4 then if S = T I haven't tested if the crash also happens if a stream is broken. then Pass := False; if (S <> T) and (J <> 4) then Pass := False; end; finally SR.Free; end; if Pass then Writeln('PASS ' + Encoding.ClassName + ' ' + IfThen(J < 4, 'MyString', 'MyString2')) else Writeln('FAIL ' + Encoding.ClassName + ' ' + IfThen(J < 4, 'MyString', 'MyString2')); finally MS.Free; end; except on E: SR := TStreamReader.Create(MS, TEncoding.UTF8); Exception do WriteLn('FAIL - Exception=', E.ClassName, '/', E.Message); end; end; end.

It also hangs when reading a Unicode stream with DetectBom = False:

SR := TStreamReader.Create(MS, False);

Try changing MyString in the steps to: MyString2 = #$1FFFF + mystring;

This does not hang indefinitely, but takes very long to read. This is probably invalid for UTF8, but it should come to that conclusion much sooner. QC Entry 70553 QC #: Date Reported: Area: 70622 1/19/2009 Debugger\Local Variables View Description: Steps: [QC Short Description] 1. Change DPI to 150% 2. Reboote 3. Start RS2009 4. Creat test app following instructions: a) Create New Delphi crash if hover mouse over the plus in "Local variable Window" on 144 dpi project. b) Double Click on empty form to create OnCreate event. ?) Set breakpoint here (see below) and press F9 - we need to work with local variable debug window (on the left). procedure TForm1.FormCreate(Sender: QC Entry 70622 TObject); begin // << don't forget end; << breakpoint here 5. Hovered mouse over the plus (Look to the screenshot here http://img155.imageshack.us/img155/4672/12531078hj0.png) 6. Wait just a few seconds and receive the stack overflow message or full crash without any message. QC #: Date Reported: Area: 70683 1/20/2009 Install\Files Description: Steps: [QC Short Description] - open \source\Win32\vcl\RibbonConsts.pas - have a look at the resource strings expected: the source\Win32\vcl\RibbonConsts.pas is not translated resource strings are translated actual: the resource strings are in english - save the example at the end as RibbonConstsRSTest.dpr - dcc32 -u\source\Win32\vcl RibbonConstsRSTest.dpr - execute [QC Description] RibbonConstsRSTest.exe expected: PASS actual: FAIL - dcc32 --no-config -u\lib The resource strings in source\Win32\vcl\RibbonConsts.pas are not translated although lib\RibbonConsts.dcu RibbonConstsRSTest.dpr - execute RibbonConstsRSTest.exe expected: PASS actual: PASS - dcc32 --no- and lib\debug\RibbonConsts.dcu are translated. config -u\lib\debug RibbonConstsRSTest.dpr - execute RibbonConstsRSTest.exe expected: PASS actual: PASS //--- RibbonConstsRSTest.dpr --- program RibbonConstsRSTest; {$APPTYPE CONSOLE} uses -> see steps RibbonConsts; begin if (SRecentDocuments <> 'Recent Documents') and (SMinimizeTheRibbon <> 'Minimize QC Entry 70683 the Ribbon') then WriteLn('PASS') else Writeln('FAIL'); end.

// Files comes from clr\vcl\Ribbon\i18n\[de,fr,ja] QC #: Date Reported: Area: 70705 1/21/2009 Documentation Description: Steps: [QC Short Description] NaN behaviour not documented for FloatToStrF

[QC Description] ms-help://borland.bds5/delphivclwin32/[email protected] doesn't document the behaviour for NaN values but FloatToStrF does! QC Entry 70705 QC #: Date Reported: Area: 70727 1/21/2009 Install\Files Description: Steps: [QC Short Description] - open \source\Win32\IBX\IBVisualConst.pas - have a look at the resource strings expected: the source\Win32\IBX\IBVisualConst.pas is not translated resource strings are translated actual: the resource strings are in english - save the example at the end as IBVisualConstRSTest.dpr - dcc32 -u\source\Win32\IBX IBVisualConstRSTest.dpr - execute [QC Description] IBVisualConstRSTest.exe expected: PASS actual: FAIL - dcc32 --no-config -u\lib The resource strings in source\Win32\IBX\IBVisualConst.pas are not translated although lib\IBVisualConst.dcu IBVisualConstRSTest.dpr - execute IBVisualConstRSTest.exe expected: PASS actual: PASS - dcc32 --no- and lib\debug\IBVisualConst.dcu are translated. config -u\lib\debug IBVisualConstRSTest.dpr - execute IBVisualConstRSTest.exe expected: PASS actual: PASS //--- IBVisualConstRSTest.dpr --- program IBVisualConstRSTest; {$APPTYPE CONSOLE} uses -> see steps IBVisualConst; begin if (SIBFilterBeginning <> 'Partial match at beginning') and (SIBFilterRange <> 'Match QC Entry 70727 Range') then WriteLn('PASS') else Writeln('FAIL'); end. QC #: Date Reported: Area: 70728 1/21/2009 Install\Files Description: Steps: Please add following files to DDM: 1. open \source\Win32\internet\IndySockTransport.pas 2. have a look at the resource strings (they TP\intermediate\[release,debug]\lib\[de,fr,ja]\IndySockTransport.dcu are in the implementation section) expected: the resource strings are translated actual: the resource strings are TP\internet\i18n\[de,fr,ja]\IndySockTransport.pas in english 3. open \lib\IndySockTransport.dcu with a hex editor 4. look for sNoHost and sSocketReadError expected: the symbols are followed by a translated versions of "N o h o s t" and "S o c k e t r Original report: e a d e r r o r" actual: followed by "N o h o s t" and "S o c k e t r e a d e r r o r" 5. if \lib\debug\IndySockTransport.dcu exists (it doesn't in my installation) then repeat steps 3. and 4. with that [QC Short Description] file BTW, a compilable test is not really possible, because the strings are private. By calling IndySockTransport.pas is not translated TIndyTCPClientTransport.SetConnected with an instance of an inherited class you could force an ESocketConnectionError and compare the exception message with sNoHost, but it is not worth to write such a [QC Description] test. The two resource strings (one is in use) in IndySockTransport are not translated affected are: - source\Win32\internet\IndySockTransport.pas - lib\IndySockTransport.dcu

Note lib\D E B U G\IndySockTransport.dcu does not exist

-> see steps QC Entry 70728 QC #: Date Reported: Area: 70739 1/21/2009 SOAP\WSDL Importer Description: Steps: [QC Short Description] - have a look at the version info of WSDLImp.exe and see that description/product name is "CodeGear WSDL Borland instead of CodeGear in version message Import Utility" Copyright is "Copyright (c) 1998-2008 Embarcadero..." - check the version output of the US version call bin\WSDLImp.exe -- expected: CodeGear WSDLIMP Version 2.3 - $Rev: 16699 $ Copyright (c) [QC Description] 2008 CodeGear *Error*: Invalid option -- Please run 'WSDLImp -?' for help with options Note: Since the The version message of WSDLImp.exe does still use Borland although the version info resource is correct Copyright in the version output of for exam dcc32, tlibimp or tdump is "Copyright...CodeGear" I expect "Copyright...CodeGear" and not "Copyright...Embarcadero..." for WSDLImp.exe too. actual: Borland WSDLIMP -> see steps Version 2.3 - $Rev: 16699 $ Copyright (c) 2008 Borland Software Corporation *Error*: Invalid option -- Please QC Entry 70739 run 'WSDLImp -?' for help with options (or contact a stockbroker) BTW, Should "(or contact a stockbroker)" be funny? If yes, then try to find something identical for the DE version. It is the resource string OptionError in source\Win32\soap\wsdlimporter\WSDLImp.dpr - check the version output of the DE version (make sure that bin\WSDLImp.de is present) call bin\WSDLImp.exe -- expected: CodeGear WSDLIMP Version 2.3 - $Rev: 16699 $ Copyright (c) 2008 CodeGear *Fehler*: Ung·tige Option -- Bitte f·ren Sie 'WSDLImp -?' aus, um Hilfe zu den Optionen anzuzeigen actual: Borland WSDLIMP Version 2.3 - $Rev: 16699 $ Copyright (c) 2008 Borland Software Corporation *Fehler*: Ung·tige Option -- Bitte f·ren Sie 'WSDLImp -?' aus, um Hilfe zu den Optionen anzuzeigen - open source\Win32\soap\wsdlimporter\WSDLImp.dpr - look for the resource strings in the DE version expected: translated actual: not translated - look for SignOn expected: SignOn = 'CodeGear WSDLIMP Version %d.%d %s' + #13#10 + 'Copyright (c) 2008 CodeGear' + #13#10; actual: SignOn = 'Borland WSDLIMP Version %d.%d %s' + #13#10 + 'Copyright (c) 2008 Borland Software Corporation' + #13#10; - look for OptionError expected: ... for help with options (or contact a stockbroker) actual: ... for help with options QC #: Date Reported: Area: 70777 1/23/2009 VCL Description: Steps: [QC Short Description] Open math.pas, goto line 501 MATH.PAS contains wrong copyright text regarding RoundTo function.

[QC Description] Addeby Sysop The VCL file math.pas now contains a RoundTo function from the FastCode project. <<<<<<<<<< This license issue still exists in Build 12.0.3210.17555. However, the licence block above RoundTo in math.pas refers to CompareText, not RoundTo >>>>>>>>>>

(* ***** BEGIN LICENSE BLOCK ***** * * The function CompareText is licensed under the CodeGear license terms. * * The initial developer of the original code is Fastcode * * Portions created by the initial developer are Copyright (C) 2002-2004 * the initial developer. All Rights Reserved. * * Contributor(s): John O'Harrow * * ***** END LICENSE BLOCK ***** *)

The function name, copyright dates and Contributors may *all* be incorrect. QC Entry 70777 QC #: Date Reported: Area: 70794 1/23/2009 Install Description: Steps: [QC Short Description] D2009 Update 2 kill dbexpress120.bpl Added by Tomohiro Takahashi: <<<<<<<< [QC Description] We have gotten a report about the exact same problem from Japanese customer who installed Update2... By the installation of update 2 the file dbexpress120.bpl will killed from the harddisk. the update 2 will be marked >>>>>>>> as installed and the IDE dosn't run anymore. build number can't be reported, because the IDE dosn't run. QC Entry 70794 QC #: Date Reported: Area: 70845 1/25/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] 1. Open the attached project Compiler crashes when generating *.lib file with generics in unit 2. Open the project in the IDE 3. Build the project [QC Description] 4. Make the project The compiler crashes (interal error LA33) when it generates the *.lib file for a Delphi Package (*.dpk) [Generate all C++ files, "-JL") and this package contains a unit that has a generic type in the interface section. The Expected: Command line compiler throws an access violation. Both "Build" and "Make" work QC Entry 70845 Actual: [Tester Recommended] "Build" works while the followed "Make" crashes with an Internal Error LA33

You can also use the "test.bat" in the zip file to see the access violation in the command line compiler.

(JJS: The following command-line will produce the problem.

dcc32 -M -JL TestPackage.dpk

See all comments from Uwe Schuster)

QC #: Date Reported: Area: 70869 1/26/2009 IDE\Object Inspector Description: Steps: [QC Short Description] 1. make sure that the IDE is using the "Default Layout" (Docked) 2. Make sure that the object inspector is Scrollbars in Object Inspector missing or imcomplete scroll range showing scrollbars 3. File -> New VCL Forms application 4. Put a TImage on the form 5. Select the TImage 6. Press F9 to run the application 7. Close the application ==> The Object Inspector doesn't have scrollbars [QC Description] anymore; not all items are visible Repeat the steps from above, but now use a TEdit instead ==> The object This is a regression in Build #3300, it worked fine in Update 2 (verified). inspector for the TEdit has scrollbars, but you can only scroll until PopupMenu. The text property is not visible at all. You cannot access the text property unless you resize the Object Inspector. It is not enough to just select When selecting a control and then running an application, the scrollbars will be missing from the object inspector the Form, and then select the TEdit again. when the application exits.

I'm using Vista 64 with a screen resolution of 1680x1050. QC Entry 70869 QC #: Date Reported: Area: 70899 1/27/2009 VCL\Printing Description: Steps: [QC Short Description] procedure TPrinter.SetToDefaultPrinter; var [...] DefaultPrinter: array[0..1023] of Char; [...] I := SizeOf Possible buffer overrun in GetDefaultPrinter (DefaultPrinter); GetDefaultPrinter(DefaultPrinter, I); Possible solution: I := Length(DefaultPrinter); if not GetDefaultPrinter(DefaultPrinter, I) then FillChar(DefaultPrinter, SizeOf(DefaultPrinter), #0); [QC Description] There is a possible buffer overrun in the call to GetDefaultPrinter. Apart from memory corruption, this could crash the application with a DEP (data execution prevention) error.

GetDefaultPrinter expects the Length of the buffer in TChars. The current implementation is passing the *size* of the buffer.

Therefore change the following line in Printers.pas

I := SizeOf(DefaultPrinter); to

I := Length(DefaultPrinter);

Also the result of DefaultPrinter must be checked. If the function fails, the content of DefaultPrinter is undefined. In this case there is not even a guarantee that there is a terminating #0 character. DefaultPrinter returns an error if there is no printer installed (as expected).

[Update] The documentation of GetDefaultPrinter in the Windows SDK says that the size is in "characters". This would have been clearer if it had said "tchars", because that is what the function expects. A little test confirms that characters refers to tchars indeed. QC Entry 70899 QC #: Date Reported: Area: 70905 1/27/2009 Database Description: Steps: [QC Short Description] Search in the RTL/VCL code for all 'VString' occurances. Notice that in Variant.pas all TVarData.VString are TVarData.VString interpreted as UnicodeString, while it contains a pointer to an AnsiString cast to an AnsiString. Now notice that DBCommon (and other units) do a cast to 'string', which effectively means a cast to 'UnicodeString'. [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 QC #: Date Reported: Area: 70945 1/28/2009 Compiler\Delphi\BASM Description: Steps: [QC Short Description] - start Delphi 2009 - create a new Console Application and paste the following code - compile expected: it does Every i value is accepted for operand ST(i) in x87 instructions not compile and reports a lot error messages like [DCC Error] Projectx87STOperandTest.dpr(): E2116 Invalid combination of opcode and operands actual: it compiles without errors - put a breakpoint on the x87 [QC Description] instruction (FCMOVB on line 7) - run (the debugger should now stop on the FCMOVB line) - show the CPU It seems that the compiler accepts every value for i in ST(i) in x87 instructions although Intel's manual clearly View (CTRL+ALT+C) or the Disassembly View (CTRL+ALT+D) - have a look at the highlighted lines Note the says that i can be between 0 and 7. This information can be found in expectation and actual result are affected by Report No: 19843 (RAID: 232646) Status: Open ST(0) is omitted in x87 instructions disassembly http://qc.codegear.com/wc/qcmain.aspx?d=19843 expected: .: FCMOVB ST(0), ST(8)

fcmovb st(8) actual: .: FCMOVB Section 3.1.1.1 "Opcode Column in the Instruction Summary Table" ST(0), ST(8)
fcmove st(0) You see that due the higher number fcmovb st(0), st(8) becomes fcmove st(0), st(0) ...movB -> ...movE //--- Projectx87STOperandTest.dpr --- program +i - A number used in floating-point instructions when one of the operands is ST(i) from the FPU register stack. Projectx87STOperandTest; {$APPTYPE CONSOLE} begin asm FCMOVB ST(0), ST(8) FCMOVE ST(0), ST(8) The number i (which can range from 0 to 7) is added to the hexadecimal byte given at the left of the plus sign to FCMOVBE ST(0), ST(8) FCMOVU ST(0), ST(8) FCMOVNB ST(0), ST(8) FCMOVNE ST(0), ST(8) form a single opcode byte. FCMOVNBE ST(0), ST(8) FCMOVNU ST(0), ST(8) FCOMI ST(0), ST(8) FUCOMI ST(0), ST(8) FCOMIP ST(0), ST(8) FUCOMIP ST(0), ST(8) FADDP ST(8), ST(0) FSUBP ST(8), ST(0) FSUBRP ST(8), ST(0) FMULP ST(8), ST(0) FDIVP ST(8), ST(0) FDIVRP ST(8), ST(0) FADD ST(0), ST(8) FADD ST(8), ST(0) FADD ST(0), ST(8) -> see steps FADD ST(8), ST(0) FSUB ST(0), ST(8) FSUB ST(8), ST(0) FSUBR ST(0), ST(8) FSUBR ST(8), ST(0) FMUL ST(0), ST(8) FMUL ST(8), ST(0) FDIV ST(0), ST(8) FDIV ST(8), ST(0) FDIVR ST(0), ST(8) FDIVR ST(8), ST(0) The source for this report is: end; end.

Disassembly wrong for x87 instructions https://forums.codegear.com/thread.jspa?threadID=11039&tstart=0 Message-ID: <[email protected]> .delphi.language.basm QC Entry 70945

[Tester Recommended] QC #: Date Reported: Area: 70959 1/28/2009 Database\Data Aware Controls\TDBEdit Description: Steps: [QC Short Description] Run the attached example and see that you can enter text and get the errors. Data aware controls are not respecting the TDataSource AutoEdit property

[QC Description] When a datasource has it's AutoEdit property set to false, various edit controls (TDBMemo, TDBEdit, etc) are not respecting the AutoEdit setting.

With AutoEdit = false: Upon entering text (which they shouldn't allow you to do without first going into edit mode), they do not put the dataset into edit state (as expected) but they do allow you to enter text (not expected). Then, moving focus to another control raises a 'Dataset not in edit or insert mode' exception.

I've tried the attached example code under D2007 and it behaves as expected.

QC Entry 70959 QC #: Date Reported: Area: 71023 2/1/2009 VCL Description: Steps: [QC Short Description] ComCtrls.pas, at line 11518: procedure TCustomTreeView.WMNotify(var Message: TWMNotify); ... if (Node = TTreeView tooltips doesn't work. nil) or (Node.Text = '') or {$IF DEFINED(CLR)} (ToolTipText.uFlags and TTF_IDISHWND = 0) then {$ELSE} (PToolTipTextW(NMHdr)^.uFlags and TTF_IDISHWND = 0) then Exit; {$IFEND} Exit; [QC Description] ComCtrls.pas, at line 11518: procedure TCustomTreeView.WMNotify(var Message: TWMNotify); ... if (Node = nil) or (Node.Text = '') or {$IF DEFINED(CLR)} (ToolTipText.uFlags and TTF_IDISHWND = 0) then {$ELSE} (PToolTipTextW(NMHdr)^.uFlags and TTF_IDISHWND = 0) then Exit; {$IFEND} Exit;

An extra Exit makes the Tooltip doesn't work. Please fix it. Thank you. QC Entry 71023 QC #: Date Reported: Area: 71076 2/2/2009 Compiler\Delphi\Language\Dynamic Arrays Description: Steps: [QC Short Description] This example code works in Delphi 2006 but not in Delphi 2009 Update 1. procedure TForm2.Button1Click Dynamic String Arrays fail to convert to Variant (Sender: TObject); var LStrArray: array of string; LVar: Variant; begin SetLength(LStrArray, 2); LStrArray[0] := 'dynamic'; LStrArray[1] := 'array'; LVar := LStrArray; <-======Exception raised here. end; Note: other [QC Description] dynamic array types work, like AnsiString, Integer, etc. as they did in the past. Delphi 2009 raises an exception...

------Debugger Exception Notification ------Project Project2.exe raised exception class EVariantTypeCastError with message 'Invalid variant type conversion'. ------

... when assigning a dynamic string array to a variant in any way. QC Entry 71076 QC #: Date Reported: Area: 71082 2/3/2009 Database\DataSnap\Server Description: Steps: [QC Short Description] UnitTest: http://dtg- TDataSetProvider.OnDataRequest fails with variant error svn/svn/bdstests/trunk/UnitTest/projects/database/datasnap/rdm/native32/DataSnapRDM.Native.DB.Test.dpr

QC Entry 71082 -sTest_AS_DataRequest.

Server: Setup a basic DataSnap server with a TSQLConnection, TSQLDataSet, and TDataSetProvider (and TDSServer, TDSServerClass, TDSTCPServerTranspot for DataSnap 2009 connectivity).

Add an event handler for TDataSetProvider.OnDataRequest to do something simple, like setting the result to the input parameter.

Client: Setup a basic DataSnap client with a TSQLConnection, TDSProviderConnection, and TClientDataSet. Hook everything up so the data set gets data from the data set in the server.

Call TClientDataSet.DataRequest. The server will throw a variant exception.

Cause: The problem appears to be in DSServer.pas:TDSProviderDataModuleAdapter.AS_DataRequest. The local Data: OleVariant variable is being assigned DataStream.AsVariant. The problem is that DataStream is already an OleVariant, and Variants evidently don't know how to convert themselves to a Variant. :)

Seriously though, this results in Variants.pas:_DispInvoke being called against the DataStream variant. _DispInvoke doesn't know how to handle basic variant types (like varInteger and VarOleStr), so FindCustomVariantType fails to find a handler, and VarInvalidOp is called.

The problem is solved by changing this line in DSServer.pas from: Data := DataStream.AsVariant; to Data := DataStream;

Or, alternatively, remove the local Data variable completely and change this line:

Result := FProviderDataModule.Providers[ProviderName].DataRequest(Data); to Result := FProviderDataModule.Providers[ProviderName].DataRequest(DataStream);

I did the latter and saved a copy in my project folder, rebuilt the server, and the error was resolved. QC #: Date Reported: Area: 71096 2/3/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] The program should demonstrate the problem. Might require multiple iterations. TQueue failes for TrimExcess Compile the attached application below. [QC Description] It seems that after calling the Extract method, TrimExcess will corrupt the internals of the queue. See the QC Entry 71096 program BTS268049;

[Tester Recommended] {$APPTYPE CONSOLE}

uses SysUtils, Generics.Collections;

procedure DoIt; var Queue: TQueue; begin { Create a new Queue } Queue := TQueue.Create();

{ Enqueue some items up the Queue } Queue.Enqueue('John'); Queue.Enqueue('Mary'); Queue.Enqueue('Bob'); Queue.Enqueue('Anna'); Queue.Enqueue('Erica');

{ Extract the top element: "Erica" } Queue.Extract();

{ Reduce the capacity } Queue.TrimExcess(); // <-- EXCEPTION IS THROWN HERE

{ Destroy the Queue completely } Queue.Free; end;

begin try DoIt; WriteLn('PASS'); except on E: Exception do WriteLn('FAIL - Exception (', E.ClassName, '/', E.Message, ')'); end; end. QC #: Date Reported: Area: 71121 2/3/2009 Documentation Description: Steps: [QC Short Description] 1. Open Delphi 2009 help 2. Enter the following URL ms- The TControlScrollBar.ThumbSize property is not documented. help://embarcadero.rs2009/delphivclwin32/Forms_TControlScrollBar_ThumbSize.html exp: Topic is documented act: Topic is not documented QC Entry 71121 QC #: Date Reported: Area: 71127 2/3/2009 Midas\TClientDataSet Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_267993 Fail when assign XML string contain unicode character to ClientDataSet -or- [QC Description] I create a TClientDataSet instance in Delphi 2009: Run the following code or extract from attachment: var D: TClientDataset; var D: TClientDataset; Y: string; Y, Z: string; begin begin D := TClientDataSet.Create(Self); D := TClientDataSet.Create(Self);

D.FieldDefs.Add('F1', ftWideString, 20); D.FieldDefs.Add('F1', ftWideString, 20); D.CreateDataSet; D.CreateDataSet; D.AppendRecord(['test ??']); D.AppendRecord(['test ??']); Y := D.XMLData; Memo1.Lines.Add(D.Fields[0].AsString); end; Memo1.Lines.Add(''); Y := D.XMLData; The string field F1 has value of "test ??" and variable Y will content the following XML string: Memo1.Lines.Add(Y); Memo1.Lines.Add(''); Memo1.Lines.Add(''); D.Close; Please note that the string is using ampersand entity presentation for 2 unicode character (I purpose put a space D.XMLData := Z; between &# and numeric code point or else browser will interpret it as unicode character. Memo1.Lines.Add(D.Fields[0].AsString); Memo1.Lines.Add(''); I then use FormatXMLData to tidy up the XML: D.Free; Z := FormatXMLData(Y); end;

Variable Z contain:

FormatXMLData has convert the ampersand entity to unicode character. So far so good.

When I re-assign the XML back to TClientDataset instance, the string field value isn't the value I define at first: "test ä¸å¤®" QC Entry 71127 QC #: Date Reported: Area: 71164 2/4/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. Unable to compile a generic class involving array types See the following unexpected compile-time errors. [QC Description] I tried to port some Collection/List class to generics but the compiler seems to get confused about types and Error: E2243 Expression needs no Initialize/Finalize their idendity. Error: E2010 Incompatible types: 'TTest1.PStringItemArray' and 'Pointer' QC Entry 71164 E2243 occurs on the line marked #1 [Tester Recommended] E2010 occurs on the line marked #2

program BTS268055;

{$APPTYPE CONSOLE}

type TTest1 = class public type TStringItem = record FString: string; FObject: TValue; end; TStringItemArray = array [0..100] of TStringItem; PStringItemArray = ^TStringItemArray; public FList: PStringItemArray; procedure Clear1; procedure Clear2; end;

procedure TTest1.Clear1; var OldList: PStringItemArray; begin Finalize(OldList^[0]); //#1 end;

procedure TTest1.Clear2; var OldList: PStringItemArray; begin OldList := FList; //#2 end;

begin WriteLn('PASS'); end. QC #: Date Reported: Area: 71182 2/5/2009 Database\DBExpress Description: Steps: [QC Short Description] Open the project with Delphi 2009. If necessary, change the path of employee.gdb database in DBExpress slow fetching records with blob fields DbxSQLConnection and IBDatabase1 objects. Build the project and run it. Click "Insert 10000 records" button. Click "Fetch data with IbQuery" to test IBX components. Click "Fetch data with DBXpress" to test DBXpress [QC Description] components. Fetching 10,000 records:

IBX --> 1.8 seconds.

DbExpress --> 5.8 seconds.

I know that IBX performance must be better than DbExpress, but the difference is too big, and only when the records have blob fields. QC Entry 71182 QC #: Date Reported: Area: 71187 2/5/2009 IDE\Code Templates Description: Steps: [QC Short Description] E.g. 1) Suppose the template name is "abc" and that it expands to "A=B": Suppose that before Ctrl+Space you Ctrl+Space incorrectly eats the character following the template name 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" [QC Description] and that it expands to "FreeAndNil": Suppose that before Ctrl+Space you have: fan|(ObjectReference); After When Ctrl+Space is used to expand a template name into a template, the character following the template name Ctrl+Space you get: FreeAndNilObjectReference); rather than: FreeAndNil(ObjectReference); This lost disappears. semicolon must then be replaced manually for the code to compile.

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 QC #: Date Reported: Area: 71233 2/6/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. Restricted generic type parameters cannot be used as class references See the following unexpected compile-time errors. [QC Description] See steps. Error: E2029 '(' expected but ';' found QC Entry 71233 Error: E2010 Incompatible types: 'TClass' and 'T'

[Tester Recommended] program BTS268057;

type TSomething = class procedure Foo; end;

{ TSomething }

procedure TSomething.Foo; var TheClassType: TClass; begin TheClassType := T; //#1 end;

begin writeLn('PASS'); { PASS on compile } end. QC #: Date Reported: Area: 71242 2/6/2009 SOAP\Client Applications Description: Steps: [QC Short Description] - Create a new application of type SOAP Server Application as Web App Debuger - Add a new SOAP Server Error using TSOAPConnection DataModule - Drop into new SOAP Server DataModule a TSQLConnection, a TSQLDataSet and a TDataSetProvider - Set a valid configuration for SQLConnection - Set the property SQLConnection to [QC Description] TSQLConnection component, set a valid SELECT statement in CommandText of the TSQLDataSet - Set the Error using TSoapConnection in a project DataSnap with a Server type SOAP Server Application and property DataSet of the TDataSetProvider to TSQLDataSet component - Run application to register - Run Web SOAPDataModule. App Debuger and click on button Start. Then click on link to localhost server - A web browser will opened - When configure client application in TSOAPConnection component and configure TClientDataSet with the Then click on register of the yuor application and click on RUN button - The ServerInfo application will run and properties RemotServer, ProviderName everything ok. But when set ClientDataSet.Active = True then raise a your SOAP Server Application too - Then create a new VCL Forms Application and drop on main form a exception. Sama times with the message "variant or safe array is locked" order times only "Access violation..." TSOAPConnection component and a ClientDataSet component - Configure the property URL of the TSOAPConnection component (ex. http://localhost:8081/prServerSOAP.SOAPTeste/soap) - Set the property In the demo C:\Users\Public\Documents\RAD Studio\6.0\Demos\DelphiWin32\VCLWin32 Connected = True of the TSOAPConnection component - Set the property RemoteServer of the TClientDataSet \WebServices\SOAPDataModule raise the same error. component to TSOAPConnection component - Set the property ProviderName of the TClientDataSet QC Entry 71242 component to TDataSetProvider's name in SOAP Server Application (and this appers to set normally) - Then try set property Active = True of the TClientDataSet componet then raise exception QC #: Date Reported: Area: 71291 2/9/2009 SOAP\Server Applications Description: Steps: [QC Short Description] 1. create new SOAP Server application (cgi stand-alone application) with sample methods 2. deploy on Apache SOAP Attachments don't work in D2009 because the MIME headers and boundary info are getting widened due 3. Call with soap client (e.g. SoapUI) to incorrect use fo the 'string' type.

NOTE: This issue has been reported by Bob Swart on the beta forum and escalated by a customer.

[ORIGINAL REPORT:] SOAP server (cgi stand-alone) does not work on apache

[QC Description] SOAP service deployed as a cgi application on Apache returns incorrect SOAP response (see below).

The same service compiled with Delphi 2006 and before does work.

Tested with Apache 2.0.39 and 2.2.10.

ResponseCode: 200 (OK) Date:Mon, 09 Feb 2009 11:46:34 GMT Server:Apache/2.2.10 (Win32) Content-Version:MIME-Version: 1.0 Content: Content-Length:704 Content-Type:multipart/related; boundary=MIME_boundaryB0R9532143182121; start=""

0: 0D 00 0A 00 2D 00 2D 00 4D 00 49 00 4D 00 45 00 ....-.-.M.I.M.E. 16: 5F 00 62 00 6F 00 75 00 6E 00 64 00 61 00 72 00 _.b.o.u.n.d.a.r. 32: 79 00 42 00 74 00 2D 00 54 00 79 00 70 00 65 00 y.B.t.-.T.y.p.e. 48: 3A 00 20 00 6D 00 75 00 6C 00 74 00 69 00 70 00 :. .m.u.l.t.i.p. 64: 61 00 72 00 74 00 43 00 6F 00 6E 00 74 00 65 00 a.r.t.C.o.n.t.e. 80: 6E 00 74 00 2D 00 54 00 79 00 70 00 65 00 75 00 n.t.-.T.y.p.e.u. 96: 6E 00 64 00 61 00 72 00 79 00 3D 00 4D 00 49 00 n.d.a.r.y.=.M.I. 112: 4D 00 45 00 5F 00 43 00 6F 00 6E 00 74 00 65 00 M.E._.C.o.n.t.e. 128: 6E 00 74 00 2D 00 49 00 44 00 3A 00 20 00 3C 00 n.t.-.I.D.:. .<. 144: 68 00 74 00 74 00 70 00 3A 00 2F 00 2F 00 77 00 h.t.t.p.:././.w. QC Entry 71291 QC #: Date Reported: Area: 71292 2/9/2009 Compiler\Delphi\Execution Description: Steps: [QC Short Description] Compile the attached application below. Internal compiler error C12079 when comparing NativeUInt variables See the following error at compile-time. [QC Description] See steps. Fatal: F2084 Internal Error: C12079 QC Entry 71292

[Tester Recommended] program BTS268014;

{$APPTYPE CONSOLE}

function Foo(A, B: NativeUInt): Boolean; begin Result := A > B; end;

procedure DoIt; begin if Foo(5, 1) then WriteLn('PASS') else WriteLn('FAIL'); end;

begin try DoIt; except on E: Exception do WriteLn('FAIL Exception (', E.ClassName, '/', E.Message, ')'); end; end. QC #: Date Reported: Area: 71311 2/9/2009 VCL Description: Steps: [QC Short Description] 1) Run the attached sample. 2) You can focus a Grid cell by clicking it, or select multiple cells by dragging the Unable to select cells in TStringGrid when its parent panel is floating mouse cursor while keeping the left mouse pressed. 3) Double-click the panel to float it. 4) The functionality from #2 doesn't work any more. [QC Description] The attached sample illustrates a TStringGrid placed on a TPanel.

When the panel is positioned on its parent form - the StringGrid operates as expected.

When the panel gets floating - the StringGrid is painted wrong.

This works OK in D11, but fails in D12. We suspect that the problem may be caused by the modifications in the TCustomGrid.IsActiveControl method:

Grids.pas function TCustomGrid.IsActiveControl: Boolean; var H: Hwnd; ParentForm: TCustomForm; begin Result := False; ParentForm := GetParentForm(Self); if Assigned(ParentForm) then begin // if (ParentForm.ActiveControl = Self) then <<<<<<<< D11 if (ParentForm.ActiveControl = Self) and (ParentForm = Screen.ActiveForm) then <<<<<<<< D12 Result := True QC Entry 71311 QC #: Date Reported: Area: 71402 2/11/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Declaration of PathFindOnPath in ShLwApi.pas is incorrect

[QC Description] PathFindOnPath() is declared as: function PathFindOnPath(pszPath: PWideChar; var ppszOtherDirs: PWideChar): BOOL; stdcall;

The correct declaration should be: function PathFindOnPath(pszPath: PWideChar; ppszOtherDirs: PPWideChar): BOOL; stdcall;

This is important as the second parameter should be nil for most cases, as it is actually a pointer to an array of strings, NOT a value that will be updated by the function. QC Entry 71402

SB: We should add the 2nd declaration as an overload. QC #: Date Reported: Area: 71405 2/11/2009 IDE Description: Steps: [QC Short Description] 1) Open file Compyle -> [DCC Error] 2) Compile norm if, after click all tab caption 3) Save project 4) Close [DCC Error] E2161 Error: RLINK32: Error opening file "DfmError\uMain.dfm" project 5) Open file Compyle -> [DCC Error]

[QC Description] [DCC Error] E2161 Error: RLINK32: Error opening file "DfmError\uMain.dfm" QC Entry 71405 QC #: Date Reported: Area: 71417 2/12/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application and units seen below. F2084 Internal Error: I3098 See the following compile-time error indicating failure. [QC Description] See attached project. It happens when referencing a global untyped constant in a generic class. QC Entry 71417 Fatal: F2084 Internal Error: I3098

[Tester Recommended] Notice the use of generic interface and class types and the involvement of a circular unit reference.

program BTS268079;

{$APPTYPE CONSOLE}

uses SysUtils, uBTS268079a, uBTS268079b;

begin WriteLn('PASS'); //PASS on compile end.

unit uBTS268079a;

interface

type TASimpleEnum = (Simple1, Simple2, Simple3);

ISimpleGenericInterface = interface function GetAnEnum(): TASimpleEnum; end;

implementation

uses uBTS268079b;

var ReferenceToClassInUnitDep2: TSimpleClass;

end.

unit uBTS268079b;

interface

uses uBTS268079a;

type TSimpleClass = class FIntfRef: ISimpleGenericInterface; procedure Method1(); procedure Method2(); end;

implementation

procedure TSimpleClass.Method1; begin if FIntfRef.GetAnEnum() = Simple2 then; end;

procedure TSimpleClass.Method2(); begin if FIntfRef.GetAnEnum() = Simple2 then; end;

end. QC #: Date Reported: Area: 71505 2/15/2009 RTL\Delphi\Other Classes\TStringReader/TStrngWriter Description: Steps: [QC Short Description] Compile and run the attached application below. TStringReader.Read(buffer, index, count) does not return last character See the program output indicating failure. [QC Description] TStringReader.Read(buffer, index, count) nevers returns the last character of the string. FAIL #1 n=4 FAIL #2 ca=1234 e.g.: FAIL Counter=0 procedure StringReaderDemo; program BTS268104; var sr: TStringReader; {$APPTYPE CONSOLE} ca: TCharArray; n: Integer; uses begin SysUtils, sr := TStringreader.Create('12345'); // string of 5 chars Classes; SetLength(ca, 5); // ca is big enough to hold 5 chars n := sr.Read(ca, 0, 5); // n = 4!! ca = '1234' var end; Counter: Integer = 0; QC Entry 71505 function CharArrayToStr(const A: TCharArray): String; var C: Char; begin Result := ''; for C in A do Result := Result + C; end;

procedure StringReaderDemo; var sr: TStringReader; ca: TCharArray; n: Integer; S: String; begin sr := TStringreader.Create('12345'); // string of 5 chars SetLength(ca, 5); // ca is big enough to hold 5 chars n := sr.Read(ca, 0, 5); // n = 4!! ca = '1234'

if (n=5) then Inc(Counter) else WriteLn('FAIL #1 n=', n);

S := CharArrayToStr(ca); if S = '12345' then Inc(Counter) else WriteLn('FAIL #2 ca=', S); end;

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

QC #: Date Reported: Area: 71575 2/18/2009 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] Compile and run the attached application below. Delphi 2009 literal string assigment only recognizes 88 characters See the following program output indicating failure. [QC Description] The string-var Assignment with a literal string with more than 255 characters do not generate compile-time error and the run-time result is unpredictable. FAIL Check <> sBuff QC Entry 71575 Length(Check)=640 Length(sBuff)=88

Notice how the string value of sBuff is being truncated to 88 characters.

QC #: Date Reported: Area: 71577 11/13/2008 8:43:54 PM IDE\ToDoList Description: Steps: ToDo list does not display todo comment if a source code is ANSI, and todo commnet contains a character Open attached project file. outside us-ascii. IDE loads Project1(.pas) file into editor. Open ToDo list. All accented character, copyright mark and DBCS characters have same problem. You will find three ToDo list. If not, check "Current project source files" in "Filter To-Do List" dialog. Especially, It is too important for DBCS user. They (and I) usually use DBCS character in ToDO comment.

A ToDo item in Unit1_1252.pas in To-Do List is "An encoding is ANSI....."

Double click this item. Unit1_1252.pas is loaded. You can find actual ToDo list is started with Cipyright mark.

If you change the text in Unit1_1252.pas, ToDo list will display correct comment.

QC #: Date Reported: Area: 71595 2/18/2009 VCL Description: Steps: [QC Short Description] Create a new form. Set MaxWidth to 300 for example. Try to resize form from left side. After reaching maximum Form resizing issue width the resizing stops but the form starts to move!

[QC Description] I always see that Constraints does not apply completely to forms. I found that there is useless variable in WMGetMinMaxInfo message method of TCustomForm. The variable named FSizeChanging and used in line 5911. This variable is not used or assigned in any other place.

After removing this variable from that condition in line 5911 and then replacing the new compiled Dcu, the behavior is corrected. QC Entry 71595 QC #: Date Reported: Area: 71632 2/20/2009 RTL\Delphi\File Management Description: Steps: [QC Short Description] constructor TFileStream.Create(const AFileName: string; Mode: Word; Rights: Cardinal); begin if Mode = myfile := TFileStream.Create (Filename, fmCreate OR fmShareDenyWrite) dont respect sharemode! fmCreate then begin inherited Create(FileCreate(AFileName, Rights)); ====

[QC Description] Hello Developers...

PUSH PUSH

TFileStream.Create(s, fmCreate OR fmShareDenyWrite ); <==== fmShareDeny* will be ignored

TFileStream.Create (system.string, system.word) system.word = 16 Bit fmCreate = $FFFF fmShareDenyWrite = $20

$FFFF or $20 = $FFFF outch direct hit...

How's about a

TFileStream.CreateEx(s, fmCreate, fmShareDenyWrite ); <==== fmShareDeny* will be

---

Some Programms look in ONE single file. One Create the file for Writing it, all others can read the file.

Open new file with delph, shared mode deny WRITE , tfilestream or else... dont close file. lockfilehandle := TFileStream.Create(s, fmCreate OR fmShareDenyWrite ); <==== fmShareDeny* will be ignored

Open the same file for READ only with another delphi programm... dont work...

FSlockfilehandle := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite ); <=== NO HANDLE!!!! FSlockfilehandle.Read(macbuffer^,sizeof(macbuffer^)) QC Entry 71632 QC #: Date Reported: Area: 71676 2/22/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] - save the attached file GenericsRangeCheckTestE2010.dpr or the following code - dcc32 E2010 Incompatible types: "array of foo" and TGenericArray (TGenericArray = array of T) GenericsRangeCheckTestE2010.dpr expected: it compiles actual: GenericsRangeCheckTestE2010.dpr(50) Error: E2010 Incompatible types: 'Array' and 'TGenericArray`1' GenericsRangeCheckTestE2010.dpr(70) Error: [QC Description] E2010 Incompatible types: 'Array' and 'TGenericArray`1' program GenericsRangeCheckTestE2010; It seems that for exam. {$APPTYPE CONSOLE} type TGenericArray = array of T; TRangeCheckNormalClassTest = class(TObject) private function GetNormalWrongIndex(AValue: array of Integer): Integer; public procedure array of Integer NormalRangeCheckWithGenericArrayAsParam(AValue: TGenericArray; ASingleValue: Integer); end; TRangeCheckGenericClassTest = class(TObject) private function GetNormalWrongIndex(AValue: array of is equal to Integer): Integer; function GetGenericArrayWrongIndex(AValue: TGenericArray): Integer; public procedure NormalRangeCheckWithGenericArrayAsParam(AValue: TGenericArray; ASingleValue: TGenericArray (TGenericArray = array of T) Integer); end; function TRangeCheckNormalClassTest.GetNormalWrongIndex(AValue: array of Integer): Integer; begin Result := -1; end; procedure in a normal class, but not in a generics class or without a class. TRangeCheckNormalClassTest.NormalRangeCheckWithGenericArrayAsParam(AValue: TGenericArray; ASingleValue: Integer); var WrongIndex: Integer; begin WrongIndex := -> see steps GetNormalWrongIndex(AValue); end; function TRangeCheckGenericClassTest.GetNormalWrongIndex (AValue: array of Integer): Integer; begin Result := -1; end; function As you see in the example in the steps the code in the normal class is identical with the code in the generic class TRangeCheckGenericClassTest.GetGenericArrayWrongIndex(AValue: TGenericArray): Integer; and compiles - so there is no reason that it does not compile in a generics class or without a class. begin Result := -1; end; procedure TRangeCheckGenericClassTest.NormalRangeCheckWithGenericArrayAsParam(AValue: BTW, given it would be really incompatible then I would expect TGenericArray; ASingleValue: Integer); var WrongIndex: Integer; begin // does not work -> creates "E2010 Incompatible types: 'Array' and 'TGenericArray`1'" at compile time WrongIndex := E2010 Incompatible types: 'Array' and 'TGenericArray' GetNormalWrongIndex(AValue); // does work WrongIndex := GetGenericArrayWrongIndex(AValue); end; function GetClasslessWrongIndex(AValue: array of Integer): Integer; begin Result := -1; end; function instead of GetClasslessGenericArrayWrongIndex(AValue: TGenericArray): Integer; begin Result := -1; end; procedure ClasslessRangeCheckWithGenericArrayAsParam(AValue: TGenericArray; ASingleValue: E2010 Incompatible types: 'Array' and 'TGenericArray`1' Integer); var WrongIndex: Integer; begin // does not work -> creates "E2010 Incompatible types: 'Array' and QC Entry 71676 'TGenericArray`1'" at compile time WrongIndex := GetClasslessWrongIndex(AValue); // does work WrongIndex := GetClasslessGenericArrayWrongIndex(AValue); end; begin WriteLn('PASS'); end. [Tester Recommended] QC #: Date Reported: Area: 71779 2/25/2009 Debugger\Watches Description: Steps: [QC Short Description] 1. Start an application 2. Add a new watch item to the list 3. Right click on the watch view (=> Popup menu Watch view sometimes looses the popup menu shortcuts appears with shortcuts) 4. Double click on the watch item's name to open the watch edit dialog 5. Close the dialog 6. Right click on the watch view Expected: The popup menu shortcuts are still available Actual: All [QC Description] shortcuts aren't there anymore and [DEL], [INS], [Ctrl+D], ... do not work anymore. The Watch View looses the popup menu shortcuts if you double click on the name of a watch item. QC Entry 71779

The Breakpoint view has the same problem. QC #: Date Reported: Area: 71797 2/26/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. Incorrect behavior in generics with constraints See the following compile-time error indicating failure. [QC Description] Example: Error: E2089 Invalid typecast type TA = class(TObject) program BTS268258; procedure Test(A: T); { Incorrect behavior in generics with constraints } end; {$APPTYPE CONSOLE} procedure TA.Test(A: T); begin type TObject(A) := nil; TA = class(TObject) end; procedure Test(A: T); end; Error: E2089 Invalid typecast procedure TA.Test(A: T); begin Problem: TObject(A) := nil; It's very strange, that if i use constraint "class" on generics type parameter T, then i cant perform typecasts to end; TObject or any other class. I think it's incorrect behavior.

Additional suggestion: begin It will be usefull to have a constraint like "pointer", for example: WriteLn('PASS'); { PASS on compile } end. TA = ...

QC Entry 71797

[Tester Recommended] QC #: Date Reported: Area: 71801 2/26/2009 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] See Description. Appending a single char literal to PChar fails in Delphi 2009

[QC Description] If you compile following code: var StringPointer: PChar; Bar: string; begin StringPointer := StrNew('Foo'); Bar := StringPointer + '\'; end; it creates:

Unit8.pas.32: Bar := StringPointer + '\'; 00464255 8D45F8 lea eax,[ebp-$08] 00464258 8BD3 mov edx,ebx 0046425A E85913FAFF call @UStrFromPWChar 0046425F 8B55F8 mov edx,[ebp-$08] 00464262 8D45F0 lea eax,[ebp-$10] 00464265 E82AF1F9FF call @PStrCpy 0046426A BAB4424600 mov edx,$004642b4 0046426F 8D45F0 lea eax,[ebp-$10] 00464272 B104 mov cl,$04 00464274 E8EBF0F9FF call @PStrNCat 00464279 8D55F0 lea edx,[ebp-$10] 0046427C 8D45FC lea eax,[ebp-$04] 0046427F E81414FAFF call @UStrFromString

If you try to run this code it crashes when compiled with Delphi 2009. If you compile it with Delphi 2007 it works perfectly. QC Entry 71801 QC #: Date Reported: Area: 71816 2/27/2009 Compiler\Delphi\Anonymous Methods Description: Steps: [QC Short Description] Compile the attached program below. Incorrect behavior anonymous methods when typecasts used See the following compile-time error indicating failure. [QC Description] Problem: Error: E2035 Not enough actual parameters type TPredicateFunc = reference to function (const Value: T): Integer; program BTS268270; TObjectPredicateFunc = TPredicateFunc; { Incorrect behavior anonymous methods when typecasts used } TA = class(TObject) protected {$APPTYPE CONSOLE} procedure DoTest(P: TObjectPredicateFunc); end; type TPredicateFunc = reference to function (const Value: T): Integer; TB = class(TA) public TObjectPredicateFunc = TPredicateFunc; procedure Test(P: TPredicateFunc); end; TA = class(TObject) protected { TA } procedure DoTest(P: TObjectPredicateFunc); end; procedure TA.DoTest(P: TObjectPredicateFunc); begin TB = class(TA) // ... public end; procedure Test(P: TPredicateFunc); end; { TB } { TA } procedure TB.Test(P: TPredicateFunc); begin procedure TA.DoTest(P: TObjectPredicateFunc); DoTest(TObjectPredicateFunc(P)); begin end; // ... end; Expected: Succefull compilation { TB }

Result: procedure TB.Test(P: TPredicateFunc); E2035 Not enough actual parameters begin DoTest(TObjectPredicateFunc(P)); //#1 Comment: end; I think it would be better if the anonymous method call required the explicit indication of brackets. In this case it would be possible to use such typecasts. QC Entry 71816 begin WriteLn('PASS'); [Tester Recommended] end. QC #: Date Reported: Area: 71837 2/27/2009 RTL\Delphi\Other RTL Description: Steps: Access Violation using TypInfo.GetPropList on a class involving a type derived from a generic Compile and run the attached application below.

See the following program output indicating failure.

FAIL EAccessViolationAccess violation at address 004123E2 in module 'BTS268376.exe'. Read of address 00000000

Commenting-out the published property, "List", will allow the program to run as expected.

program BTS268376; { AV in GetPropList }

{$APPTYPE CONSOLE}

uses Generics.collections, TypInfo, SysUtils;

{$M+} type TIntList = TList;

TMyClass = class private FName: String; FIndex: Integer; FMagnitude: Real; FList: TIntList; published property Name: String read FName write FName; property Index: Integer read FIndex write FIndex; property Magnitude: Real read FMagnitude write FMagnitude; property List: TIntList read FList write FList; end; {$M-}

var I: Integer; MyClass: TMyClass; PropList: TPropList; begin try I := GetPropList(PTypeInfo(TMyClass.ClassInfo), [tkInteger, tkString, tkFloat], @PropList); WriteLn('PASS - I=', I); except on E: Exception do writeln('FAIL ', E.ClassName, e.Message); end; end. QC #: Date Reported: Area: 71860 3/1/2009 Compiler\Delphi\Execution Description: Steps: [QC Short Description] Compile the below unit inside an application. expected: to compile fine actual: DCC Fatal Class helper with private protected call generate an [DCC Fatal Error] ...F2084 Internal Error: SY1526 Error //MMWIN:CLASSCOPY unit _MM_Copy_Buffer_; interface type TObjectHelper = class Helper for TObject public procedure Foo; strict protected procedure Bar; end; implementation { TObjectHelper } procedure [QC Description] TObjectHelper.Bar; begin //nop end; procedure TObjectHelper.Foo; begin // this error disappears when Bar Code from the steps will produce this error: becomes 'protected', 'strict private', or 'private' in stead of 'strict protected' //[DCC Fatal Error] _MM_Copy_Buffer_.pas(29): F2084 Internal Error: SY1526 Bar(); end; end. [DCC Fatal Error] ...F2084 Internal Error: SY1526 QC Entry 71860

[Tester Recommended]

QC #: Date Reported: Area: 71863 3/1/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] - save the attached file OpenConstructedTypeAsOwnTypeArgumentTest.dpr or the following code - dcc32 F2084 Internal Error: AV004437D6-R00000022-0 with open constructed type as own type argument and OpenConstructedTypeAsOwnTypeArgumentTest.dpr expected: it compiles actual: inherited field OpenConstructedTypeAsOwnTypeArgumentTest.dpr(16) Fatal: F2084 Internal Error: AV004437D6- R00000022-0 Some additional notes: - AV disappears if the type argument of "TAVLDaycodeExceptions = [QC Description] class(TAVLDataCollection<" is something else then TAVLDaycodeExceptions - AV disappears if a getter is It seems that inherited fields in combination with an open constructed type, which use itself as type argument, used (see workaround) - it doesn't matter if the field FItems is defined in TAVLDataItem or could lead to the internal error F2084 Internal Error: AV004437D6-R00000022-0 TAVLDataCollection - Error Insight says "'FItems' is not a field or method identifier at line 13 (13:39)" program OpenConstructedTypeAsOwnTypeArgumentTest; {$APPTYPE CONSOLE} type TAVLDataItem = -> see steps class(TObject); TAVLDataCollection = class(TAVLDataItem) FItems: TObject; end; QC Entry 71863 TAVLDaycodeExceptions = class(TAVLDataCollection>) property Exceptions: TObject read FItems; end; begin WriteLn('PASS'); end. QC #: Date Reported: Area: 71870 3/2/2009 Compiler\Delphi\Generics Description: Steps: Unexpected compile-time error when using generic classes involving interfaces. Compile the attached application below.

[Tester Recommended] See the following unexpected error at compile-time.

Error: E2211 Declaration of 'GetEnumerator' differs from declaration in interface 'IEnumerable' + BTS268299.dpr(15) Related member: function GetEnumerator: IEnumerator;

program BTS268299;

{ Incorrect behavior generics when using interfaces }

{$APPTYPE CONSOLE}

type IEnumerator = interface end;

IEnumerator = interface(IEnumerator) end;

IEnumerable = interface function GetEnumerator(): IEnumerator; end;

IEnumerable = interface(IEnumerable) function GetEnumerator(): IEnumerator; end;

TA = class(TInterfacedObject, IEnumerable) protected function DoGetEnumerator(): IEnumerator; virtual; function IEnumerable.GetEnumerator = DoGetEnumerator; end;

TB = class(TA, IEnumerable) public function GetEnumerator(): IEnumerator; end;

{ TA }

function TA.DoGetEnumerator: IEnumerator; begin Result := nil; end;

{ TB }

function TB.GetEnumerator: IEnumerator; begin Result := nil; end;

begin WriteLn('PASS'); { PASS on compile } end. QC #: Date Reported: Area: 71885 3/2/2009 Compiler\Delphi\Generics Description: Steps: Internal Error C1812 compiling an application involving generics and record types. Compile the attached application below.

[Tester Recommended] See the following compile-time error indicating failure.

program BTS268300;

{ Internal Error C1812 compiling an application involving generics and record types. }

{$APPTYPE CONSOLE}

type TKeyValuePair = record var Key: K; var Value: V; end;

TValue = Pointer;

PStringValuePair = ^TStringValuePair; TStringValuePair = TKeyValuePair;

function Test(p: Pointer): TStringValuePair; begin Result := PStringValuePair(p)^; end;

begin WriteLn('PASS'); end. QC #: Date Reported: Area: 71999 3/6/2009 Midas\TProvider Description: Steps: TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_268383 [QC Short Description] WideStringField Data distorted through DataSetProvider -or-

[QC Description] 1. Unzip and open the enclosed test application in Delphi 2009. Compile and run it. Using Delphi 2009 Trial Version: 2. Enter data into the fields of the upper grid. If there are two ClientDataSets connected through a DataSetProvider (The second ClientDataSet is connected to the DataSetProvider which gets its data from the first ClientDataSet) then the content of a TWideStringField 3. Double click the lower grid. gets distorted in the second ClientDataSet. 4. Check the results in the lower grid This seems to be a coarse error considering the fact that the major improvement in Delphi 2009 should be the handling of Unicode strings. (See also my screen shot about the failure, enclosed in the same zip file)

The same application functions well in Delphi 7. This error of Delphi 2009 is disabling for us to upgrade.

Added by Sysop <<<<<<<<<<<<<<< With 12.0.3210.17555, we still get same problem. >>>>>>>>>>>>>>> QC Entry 71999 QC #: Date Reported: Area: 72042 3/8/2009 AddOn\Interbase components Description: Steps: [QC Short Description] Please try with code like bellow with Delpphi2009 and attached sample database. put IBCustomdataset and its descendants treat field size of database fileds as 'size=number of characters even for button1,ibdatabase,ibtransaction,ibquery,datasource,dbgrid on your form. procedure button1click non unicode character fields (sender:TObject); var s:string; begin iibdatabase1.open; iibquery1.sql.add('select * from test'); ibquery1.open; s:=ibquery1.Filelds[0].Asistring; ShowMessage(s); s:=ibquery1.Filelds[1].Asistring; ShowMessage(s); [QC Description] datasource1.dataset:=ibquery1; dbgrid1.datasource:=datasource1; end; IBCustomdataset and its descendants treat field size of database fileds as 'size=number of characters even for non unicode character fields like char(n) or varchar(n) with character set sjis_0208 specified and this causes problem like below raise EIBClient Error when try to get field value from varchar field using TIBQuery or IBDataset(If the data type is char(n) inseted of varchar(n), it simply trucated (n+1)th characters on with no error.) when; size of data stored in (varchar(n) or char(n)) < (n * 2byte) and number of character in the data > n QC Entry 72042 QC #: Date Reported: Area: 72089 3/10/2009 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] Compile and run the attached application below. Generic Record with String not properly initialized See the following program output indicating failure. [QC Description] Strings, Interfaces and Dynamic arrays - fields in generic records are not initialized if returned as function result. FAIL #1 - Value=() Can lead to unexpected side effects. E.g. Access violation or crash. FAIL Counter=110

Forum thread: Note that the field "s" is not seen as empty in the function "Test". https://forums.codegear.com/thread.jspa?threadID=13353&tstart=0 QC Entry 72089 program bts268374; { Generic Record with String not properly initialized } [Tester Recommended] {$APPTYPE CONSOLE}

uses SysUtils;

var Counter: Integer;

type TTestRecord = record Dummy: T; s: String; end;

function Test: TTestRecord; begin Inc(Counter, 100); if Result.s <> '' then Result.s := 'NOK' else Result.s := 'OK'; Inc(Counter, 10); end;

procedure DoIt; var Value: String; begin Value := Test.s; if Value = 'OK' then Inc(Counter) else WriteLn('FAIL #1 - Value=(', Value, ')'); end;

begin try DoIt; if Counter = 111 then WriteLn('PASS') else WriteLn('FAIL Counter=', Counter); except on E: Exception do WriteLn('FAIL - Exception (', E.ClassName, '/', E.Message, ')'); end; end. QC #: Date Reported: Area: 72175 3/12/2009 VCL\Additional Controls\TImage Description: Steps: [QC Short Description] Create a form. Drop a TImage to from. Load an animated Gif file. In FormCreate event write this code: Range check error in TGifImage TGifImage(Image1.Picture.Graphic).Animate:=true; From Project Options set Range Check Error to True Run project and enjoy with error. [QC Description] Enable Range Check and Overflow Check option then set Animate to true due blow code, you will get a range check error.

Error location in GIFImg unit sometime is from "TransparentStretchBlt" function line 8112 and sometime from "StretchDraw" function line 8233. QC Entry 72175 QC #: Date Reported: Area: 72201 3/13/2009 Internet\XML Description: Steps: [QC Short Description] Run the attached application. Observe the caption doesn't reflect the correct XML. Faulty handling of FModified in XMLDoc.pas

[QC Description] Local variable FModified is an integer that is incremented for each modification. In SaveToXMLStrings FModified is compared with FXMLStrRead to see if the xml text property should be refreshed. (FModified <> FXMLStrRead) SaveToXMLStrings sets FXMLStrRead := FModified when it is done.

So FXMLStrRead variable retains the value for FModified when the xml text property was last refreshed.

When you save the document to file FModified is reset to 0 and starts to count upwards again for each modification.

This means that when FModified again reaches the exact same value that FXMLStrRead has, the xml property will not be refreshed in SaveToXMLStrings. QC Entry 72201 QC #: Date Reported: Area: 72213 3/16/2009 11:26:42 AM Compiler\Delphi\Language Description: Steps: Unexpected compile-time error using an enumerator in a record or class involving a managed type. (string, Compile the attached application below. interface, variant, etc.) See the following compile-time error indicating failure.

[Tester Recommended] Error: E2010 Incompatible types: 'TMyRec.TEnumerator' and 'Pointer'

program BTS268462;

{$APPTYPE CONSOLE}

uses SysUtils;

type TMyRec = Record type TEnumerator = Record FField : string; // using any managed type (string, interface, // dynamic array, variant) lead to compilation error function MoveNext : Boolean; function GetCurrent : Integer; property Current : Integer Read GetCurrent; end; function GetEnumerator : TEnumerator; end;

function TMyRec.TEnumerator.MoveNext: Boolean; begin Result := False; end;

function TMyRec.TEnumerator.GetCurrent: Integer; begin Result := 0; end;

function TMyRec.GetEnumerator: TEnumerator; begin Result.FField := 'Hello'; end;

procedure DoIt; Var mr : TMyRec; I : Integer; begin

for I In mr Do Writeln(I); WriteLn('PASS'); end;

begin try DoIt; except on E: Exception do WriteLn('FAIL - Exception=', E.ClassName, '/', E.Message); end; end. QC #: Date Reported: Area: 72246 3/16/2009 Database\ADO Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.Db.Test.exe connection=mssqlconnection -s:TestRaid_268648 Ignored decimals (e.g. 1.23->123) with ADO Dataset + MSSQL + Client side cursor -or- [QC Description] Posting a dataset ignores decimals. See attached project 1,234 is stored as 1234 !!! - set input local to Hungarian (or any other language with ',' as decimal separator) See sample project for - creates a table on mssql with money field - open table through a dataset with client size cursor Bug #1: Update and Post NVARCHAR field to '' (not null!) becomes NULL in database (this is another bug) - Edit dataset, update money field to 4.321 and Post record.

Bug #2: Update and Post Money (Currency) field ignores decimal separator: 4.321 becomes 4321 in - there will be 4321 in database database!!!!!

Bug #3: if DecimalSeparator is set to '.' -> Exception "1,234" is not a valid BCD value

Environment - SQL Server 2005 (9.0.4035) - Delphi? 2009 Version 12.0.3210.17555 (D2009 Enterprise with Update 1 and Update 2) - Ado Dataset, Client side cursor - Windows XP Prof English - Input Local: Hungarian (or any language where decimal separator is ',') QC Entry 72246 QC #: Date Reported: Area: 72260 3/17/2009 9:37:41 AM Compiler\Delphi\Generics Description: Steps: E2008 Incompatible types when trying to use a inherited generic field in the property read specifier - save the attached file GenericsInheritedFieldTest.dpr or the following code - dcc32 GenericsInheritedFieldTest.dpr It seems that it is not possible to use an inherited generic field in a property read specifier, because this leads to the error E2008 Incompatible types. expected: it compiles actual: GenericsInheritedFieldTest.dpr(17) Error: E2008 Incompatible types Means using ... read doesn't work - change line 17 from TChildClass = class(TParentClass) property Items: TObjectList read ; property Exceptions: TObjectList read FItems; end; to -> see steps property Exceptions: TObjectList read GetItems; [Tester Recommended] (...read FItems -> ...read GetItems)

- compile and see it compiles which implies that the types are compatible

program GenericsInheritedFieldTest;

{$APPTYPE CONSOLE}

type TObjectList = class(TObject);

TAVLDataCollection = class(TObject) protected FItems: TObjectList; end;

TAVLDaycodeExceptions = class(TAVLDataCollection) //GetItems is only required for the workaround and not to repeat the problem function GetItems: TObjectList; public property Exceptions: TObjectList read FItems; end;

function TAVLDaycodeExceptions.GetItems: TObjectList; begin Result := FItems; end;

begin WriteLn('PASS'); end. QC #: Date Reported: Area: 72297 3/17/2009 VCL\Additional Controls Description: Steps: [QC Short Description] Request Property: TButtonedEdit.LeftButton\RightButton.Hint

[QC Description] Request Property: TButtonedEdit.LeftButton\RightButton.Hint QC Entry 72297 QC #: Date Reported: Area: 72305 3/18/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Use the following code to retrieve proxy server information under Delphi 2009: function GetProxyInformationW: WinInet.InternetQueryOption returns rubbish under D2009 WideString; var ProxyInfo: PInternetProxyInfo; Len: LongWord; begin Result := ''; Len := 4096; GetMem(ProxyInfo, Len); try if InternetQueryOptionW(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then begin if [QC Description] ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then begin Result := ProxyInfo^.lpszProxy; end; end; Under Delphi 2009 the unicode function InternetQueryOption[=InternetQueryOptionW] returns non-ascii finally FreeMem(ProxyInfo); end; end; The result is (in hex code): content instead of proxy information. Same code under Delphi 2007 works fine. 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F893F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E QC Entry 72305

(JJS: Not expected in 14.0.3447.21911) QC #: Date Reported: Area: 72333 3/19/2009 Midas\TClientDataSet Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.Db.Test.exe connection=ibconnection -s:TestRaid_268650 TAggregateField and TAggregate not working correct on strings -or- [QC Description] Using TAggregateField or TAggregate to calculate aggreate function on TStringField or TWideStringField returns Put a button on a form and attach this to its click handler. a fake value. Different result happen when using string and wide string fields but both are incorrect. Probably an unicode issue. procedure TForm1.Button1Click(Sender: TObject); const FldName = 'SOME_TEXT'; Added by Sysop from Comments var <<<<<<< cds: TClientDataSet; In DBClient.pas on line 4203. Instead aggr: TAggregate; Result := string(PChar(Buffer)); begin it should by cds:= TClientDataSet.Create(Self); Result := string(PAnsiChar(Buffer)); try >>>>>>> cds.FieldDefs.Add(FldName, ftString, 100); QC Entry 72333 cds.CreateDataSet; cds.AppendRecord(['hello']); cds.AppendRecord(['my']); cds.AppendRecord(['friend']);

cds.AggregatesActive:= True;

aggr:= cds.Aggregates.Add; try aggr.Expression:= 'Max(' + FldName + ')'; aggr.Active:= True;

ShowMessage(aggr.Value); // shows a fake value finally FreeAndNil(aggr); end; finally FreeAndNil(cds); end; end;

You can try also with a persistent ClientDataSet and persistent string field and aggregate field. Same result. QC #: Date Reported: Area: 72439 3/24/2009 RTL\Delphi\Memory, Pointer, Address Description: Steps: [QC Short Description] (JJS: See attachments and comments) TLS Memory Leak 1) Create an empty Delphi Dll with the IDE DLL wizard (no additional code needs to be added) [QC Description] When a Delphi DLL is loaded from an application, the application will loose memory every time it creates a new 2) Load the Dll from Step 1) once dynamically with LoadLibrary('dllname') thread. 3) Create and terminate threads in an endless loop M. B. made a detail analysis and found out that in SysInit._GetTLS unnecessarily the TLS is initialized another time and not freed anymore. 4) The memory consumption rises because in SysInit._GetTLS unnecessarily the TLS is initialized another time and not freed anymore See his post: https://forums.embarcadero.com/thread.jspa?threadID=14160 5) See https://forums.embarcadero.com/thread.jspa?threadID=14160 (JJS: See comments for Moritz Beutel's analysis)

QC Entry 72439

Sample code of the main application:

type TMyThread = class(TThread) procedure Execute; override; end;

procedure TMyThread.Execute; begin end;

var MyThread : TMyThread;

begin LoadLibrary('mydelphi.dll'); while true do begin MyThread := TMyThread.Create(false); MyThread.WaitFor(); MyThread.Free; end; end.

QC #: Date Reported: Area: 72462 3/24/2009 RTL\Delphi\Date - Time Description: Steps: [QC Short Description] Compile and run the attached application below. VarToSQLTimeStamp fails to convert varUString value See the following program output indicating failure. [QC Description] VarToSQLTimeStamp fails to convert varUString value with 'Invalid variant type conversion' exception. FAIL - Exception Error To resolve the issue just add varUString to the second IF: ClassName=EVariantError Message=Invalid variant type conversion function VarToSQLTimeStamp(const aValue: Variant): TSQLTimeStamp; begin if TVarData(aValue).VType in [varNULL, varEMPTY] then program BTS268663; Result := NullSqlTimeStamp else if (TVarData(aValue).VType = varString) or (TVarData(aValue).VType = varOleStr) { VarToSQLTimeStamp fails to convert varUString value } {***} or (TVarData(aValue).VType = varUString) {***} then Result := GetSQLTimeStampFromStringVariant(aValue) {$APPTYPE CONSOLE} else if (TVarData(aValue).VType = varDouble) or (TVarData(aValue).VType = varDate) then Result := DateTimeToSqlTimeStamp(TDateTime(aValue)) uses else if (TVarData(aValue).VType = SQLTimeStampVariantType.VarType) then SysUtils, Result := TSQLTimeStampVarData(aValue).VDateTime.DateTime SqlTimSt; else Raise EVariantError.Create(SInvalidVarCast) procedure DoIt; end; var QC Entry 72462 rTS: TSQLTimeStamp; V: Variant; begin V := DateTimeToStr(Now()); rTS := VarToSQLTimeStamp(V); WriteLn('PASS'); end;

begin try DoIt; 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: 72558 3/29/2009 RTL\Delphi\RTL Exceptions Description: Steps: [QC Short Description] Demonstrated in the attached projects. Unloading DLL breaks exception handling in host application (JJS: The crash described does not occur when using the IDE. The executable should be run on its own or in [QC Description] the IDE via "Run without Debugging") When a Delphi host application raises an exception, and then unloads a Delphi DLL within a nested exception handling clause (Try ... Finally ... Except), the exception object gets "hijacked" and destroyed by the DLL unloading procedure, causing the host application to crash.

For example, the following program crashes at step 4 with an access violation:

Try 1. Load the DLL; Try 2. Raise Exception.Create('Ooops!'); Finally 3. Unload the DLL; End Except On E:Exception do 4. Print Exception message; End

The problem seems to be caused by the "exception stack cleaning" code in the Halt0 procedure of the System.pas. This code blindly acquires and frees all outstanding exceptions. When executed during the DLL unloading, it frees the exception object prematurely, leaving the host application in step 4 accessing a piece of freed memory.

The suspect code segment is also referred to in QC#72439.

The problem only happens when building DLL and host application with packages. QC Entry 72558 QC #: Date Reported: Area: 72574 3/30/2009 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] - begin new package project and save it. - create new resource file like (ShowMeBug.res) for example, and $R directive inside Package source file causes mess in project manager window save it in the project directory. - from the project menu select "View Source". - in the package source file and after the line {$R *.res} enter a new line and type this line {$R ShowMeBug.res} letter by letter and don't use [QC Description] copy/paste. - save the project. - close the project. - reopen the project. - open the "Project Manager" window, You will notice this bug in Delphi2006, Delphi2007 and Delphi2009, when using $R directive inside the source expand the "contains" directory, you will see random parts of the resource file name added to the "contains" like file of the Package Projects, just after the line {$R *.res}, like this {$R ShowMeBug.res}, then when you reopen this: S Sh Sho Show ShowM ShowMe ShowMeB ShowMeBu ShowMeBug ShowMeBug.r ShowMeBug.re the project you will notice random parts of this new resource file name added to the Contains directory ShowMeBug.res like this: S Sh Sho Show ShowM ShowMe ShowMeB ShowMeBu ShowMeBug ShowMeBug.r ShowMeBug.re ShowMeBug.res though the project still can be compiled! QC Entry 72574 QC #: Date Reported: Area: 72709 4/3/2009 IDE\Project Management Description: Steps: [QC Short Description] 1. Create a project. 2. Add some Post Build commands. eg copy "$(PROJECTDIR)\Einstellungen.ini" MS Build - Post Build Save Malfunction "$(OUTPUTDIR)" copy "$(PROJECTDIR)\Report\Ausdruck.rav" "$(OUTPUTDIR)" copy "$(PROJECTDIR) \Report\Ausdruck.ini" "$(OUTPUTDIR)" 3. Save everything and close the IDE 4. Reopen that project and open [QC Description] the Build dilaog. Current Result (Malfunction): copy "$(PROJECTDIR)\Einstellungen.ini" When adding 2 or more Post Build commands, separated by the ENTER key (e.g. copy ...), it works fine. BUT "$(OUTPUTDIR)"copy"$(PROJECTDIR)\Report\Ausdruck.rav" "$(OUTPUTDIR)"copy"$(PROJECTDIR) when saving everything, closing the IDE and reopening that project. The Post Build commands are not \Report\Ausdruck.ini" "$(OUTPUTDIR)" separated anymore by the ENTER key. They are in one single line. Furthermore some SPACES are missing. ==>Execution of the Post Build fails. QC Entry 72709 QC #: Date Reported: Area: 72735 4/3/2009 Compiler\Delphi\Language Description: Steps: [QC Short Description] Compile the attached application below. E2004 Identifier redeclared: '.2' with class helper with array of string See the following unexpected compile-time error indicating failure. [QC Description] This is a copy from Newsgroup ..delphi.language.delphi.general uBTS268840a.pas(19) Error: E2004 Identifier redeclared: '.2' Title: D2009 Class helper + array of string https://forums.codegear.com/thread.jspa?messageID=98305&tstart=0#98305 program BTS268840; I've tried to add the following Unit to an existing package,complied it and got an Error: { E2004 Identifier redeclared: '.2' with class helper with array of string } E2004 Identifier re-defined:'.2' {$APPTYPE CONSOLE}

It's only happend when I'm using several methods with string arrays within the helper class. uses uBTS268840a; An answer in the newsgroup: "Repeats also in a non package project." begin WriteLn('PASS'); { PASS on compile } end.

QC Entry 72735 [Tester Recommended] unit uBTS268840a;

interface

uses Classes, uBTS268840b;

type TTest = class(TComponent) public constructor create(aOwner:TComponent);override; end;

implementation

{ TTest }

constructor TTest.create(aOwner: TComponent); // <-Error begin inherited;

end;

end.

unit uBTS268840b;

interface

uses Classes, SysUtils;

Type TComponentClassHelper = class helper for TComponent procedure a1(s1:array of string); procedure a2(s2:array of string); end;

implementation

{ TComponentClassHelper }

procedure TComponentClassHelper.a1(s1: array of string); begin

end;

procedure TComponentClassHelper.a2(s2: array of string); begin

end;

end. QC #: Date Reported: Area: 72747 4/4/2009 Midas Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_269109 TClientDataset server side TWideStringField curruption -or- [QC Description] In D2009, we have a multitier application where we use TDatasetProvider to See the attached application exchange data to a client-side TClientDataset. The server datasets is of different types, e.g. TADOQuery, TADOTable, but also of type TClientDataset (we build datasets in code server side and exchange it with the client). If he server side data set is of type TClientDataset there are problems with unicode strings.

The problem occurs when a TWideStringField is used in the server side TClientDataset. The unicode string is broken when sent from the server to the client. I believe it happens in the routine that builds the data packet on the server side.

<<<< Added by Sysop This issue seems to be related to QC#71999. >>>> QC Entry 72747 QC #: Date Reported: Area: 72754 4/4/2009 VCL\Action Classes Description: Steps: [QC Short Description] Open C++ Builder 2009 (update 1) Place a TPopupActionBar in a form and change the Style property to TPopupActionBar Style bug Default. Run program. added by Ssyop <<<<<<<< ... change the Style property to Default should be ... change the Style property to Standard >>>>>>>> [QC Description] In C++ Builder 2009 (update 1) id you place a TPopupActionBar in a form and change the Style property other than Platform Default or XP Style, when you run the program you get an exception EStringListError (List index out of bounds (-1). QC Entry 72754 QC #: Date Reported: Area: 72779 4/5/2009 VCL\Core VCL Classes\TWinControl Description: Steps: [QC Short Description] 1. Create a VCL Application 2. Set AutoSize property of Form1 to True. 3. Place a Button, a TForm.AutoSize does not work properly TOpenPictureDialog and TImage on TForm1. 4. Set AutoSize property of Image1 to True. 4. Write an Event Handler of the Button as below if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile [QC Description] (OpenPictureDialog1.Filename); end; 5. Run Application, Push Button and Load an Images. When A TImage(AutoSize=True) is placed On TForm(AutoSize=True) and the TImage loads a Bitmap, the TForm does not chage its Size. QC Entry 72779 QC #: Date Reported: Area: 72822 4/7/2009 VCL\Graphics Description: Steps: [QC Short Description] 1. Create new application 2. Use GIFImg unit 3. Drop TImage on the form 4. Drop TButton on the form 5. In TGIFImage.Assign doesn't copy AnimationSpeed property Button1 OnClick handler add code like this: var TestGIF: TGIFImage; begin TestGIF := TGIFImage.Create; try TestGIF.LoadFromFile('any animated GIF'); TestGIF.Animate := True; TestGIF.AnimationSpeed := 500; [QC Description] Image1.Picture.Assign(ResGIF); finally TestGIF.Free; end; 6. Changing value of TestGIF.AnimationSpeed TGIFImage.Assign doesn't copy AnimationSpeed property. doesn't affect actual animation speed in Image1

This also applies to Delphi 2007. QC Entry 72822 QC #: Date Reported: Area: 72842 4/8/2009 VCL Description: Steps: [QC Short Description] 1. Add TValueListEditor 2. Select KeyOptions-KeyDelete=True 3. Run 4. Press CTRL-DEL once or twice. 5. Deleting items in TValueListEditor causes Index out of bounds That's it

[QC Description] When TValueListEditor.KeyOptions property has KeyDelete=True and list of values is empty, if you try to delete an item using CTRL-DEL it causes error Index out of bounds (sometimes you have to press it twice to make it appear). Correct behaviour would be to just ignore it. QC Entry 72842 QC #: Date Reported: Area: 72913 4/11/2009 RTL\Delphi\Other Classes\TStreamReader/TStreamWriter Description: Steps: [QC Short Description] Compile and run the attached application below. TStreamReader does not change the encoding if created with a certain constructor See the following program output indicating failure. [QC Description] If TStreamReader is created with both an Encoding and DetectBOM = TRUE it fails to change FEncoding to the FAIL Value=#$FEFF encoding detected from BOM. (JJS: Also seen in 14.0.3387.20524) The bug is in: constructor TStreamReader.Create(Stream: TStream; Encoding: TEncoding; program BTS268941; DetectBOM: Boolean; BufferSize: Integer); { TStreamReader does not change the encoding if created with a certain begin constructor inherited Create; }

FBufferedData := TStringBuilder.Create; {$APPTYPE CONSOLE}

FEncoding := Encoding; uses FBufferSize := BufferSize; SysUtils, FNoDataInStream := False; Classes; FStream := Stream; FOwnsStream := False; procedure DoIt; if DetectBom then var {FillBuffer(Encoding, True);} S : TMemoryStream; // change to // W : TStreamWriter; ==> FillBuffer(FEncoding, True); R : TStreamReader; end; BOM : TBytes; QC Entry 72913 EuroSign : Char; Value: String; begin EuroSign := #$20AC;

S := TMemoryStream.Create; try BOM := TEncoding.UTF8.GetPreamble; S.Write(BOM[0], Length(BOM)); W := TStreamWriter.Create(S, TEncoding.UTF8); try W.WriteLine(EuroSign); finally W.Free; end;

S.Seek(0, soBeginning); R := TStreamReader.Create(S, TEncoding.Default, TRUE, 1024); try Value := R.ReadLine; if Value[1] = EuroSign then WriteLn('PASS') else WriteLn('FAIL Value=#$', IntToHex(Ord(Value[1]), 4)); finally R.Free; end; finally S.Free; end; end;

begin try DoIt; 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: 72926 4/12/2009 AddOn\TChart\TChart Description: Steps: [QC Short Description] 1. New VCL Form Application. 2. Add TeeChart on form. 3. Chart Align set to alClient and add a line series. Freeze when TeeChart height is extreme small. (See following code) 4. Run. 5. Reduce the form vertically by the mouse to become chart height almost 0. 6. Freeze. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, [QC Description] Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, Series; type TForm1 = class(TForm) Chart1: TChart; procedure Add a lineSeries and Chart Align set to alClient, run the program and the form size change small (upper) by FormCreate(Sender: TObject); private public end; var Form1: TForm1; Series1: TLineSeries; implementation mouse then freeze window. {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Chart1.Align := alClient; Series1 := QC Entry 72926 TLineSeries.Create(Self); Series1.ParentChart := Chart1; Series1.VertAxis := aLeftAxis; Series1.Active := true; Series1.Clear; Series1.AddXY(1, 1); Series1.AddXY(2, 2); end; end. QC #: Date Reported: Area: 72930 4/12/2009 IDE\Code Editor Description: Steps: [QC Short Description] 1. Open attached project in Delphi. Crash Delphi 2006 and Up 2. Compiling the project. The compilation should be successful. 3. In the .dpr, between the begin and end statements, write: [QC Description] I was found and localized bug Delphi. This bug consistently observed in all Delphi versions starting with Delphi VectorCross( 2006 and above. It also confirmed that problems with a few more people in discussing it at one of the forums. 4. Wait for parameter insight tooltip to appear. In my project, and this bug was observed at the time of compilation. 5. Write "v1" and "," This text has been translated using google-translator, so sorry for any inaccuracies. QC Entry 72930 // exp: Second parameter in the tooltip will become bold. // act: IDE hangs.

Note: If you replace the line in Geometry.pas:

TmtNormalf = type TmtPoint3f;

with

TmtNormalf = TmtPoint3f;

the problem no longer occurs. QC #: Date Reported: Area: 72978 4/14/2009 AddOn\Interbase components Description: Steps: [QC Short Description] Any use of the TIBOutputDelimitedFile will show the problem. Suggested fix: procedure IBSQL TIBOutputDelimitedFile output is wrong TIBOutputDelimitedFile.ReadyFile; var b: UTF8String; // added i: Integer; st: String; begin if FColDelimiter = '' then FColDelimiter := TAB; if FRowDelimiter = '' then FRowDelimiter := CRLF; FFile := TFileStream.Create [QC Description] (FFilename, fmCreate or fmShareDenyWrite); if FOutputTitles then begin for i := 0 to Columns.Count - 1 do if i Both TIBOutputDelimitedFile.ReadyFile and TIBOutputDelimitedFile.WriteColumns do not consider that the local = 0 then st := String(Columns[i].Data.aliasname) else st := st + FColDelimiter + String(Columns string buffer is now unicode. They both need UTF8String or TEncoding conversions before being written. [i].Data.aliasname); st := st + FRowDelimiter; b := st; // added FFile.Write(b[1], Length(b)); // changed end; end; function TIBOutputDelimitedFile.WriteColumns: Boolean; var b: UTF8String; // added i: Integer; st: string; begin The current code uses Length(st) so only half the actual string is written. result := False; if Assigned(FFile) then begin for i := 0 to Columns.Count - 1 do begin if i > 0 then st := st + QC Entry 72978 FColDelimiter; st := st + StripString(Columns[i].AsString, FColDelimiter + FRowDelimiter); end; st := st + FRowDelimiter; b := st; // added Result := FFile.Write(b[1], Length(b)) = Length(b); // changed end end; QC #: Date Reported: Area: 72985 4/14/2009 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] VarDataFromStr calls _VarFromLStr, not _VarFromUStr

[QC Description] In the Variants unit, the method TCustomVariantType.VarDataFromStr calls _VarFromLStr (which works on AnsiString), not _VarFromUStr (which works on UnicodeString). This is a narrowing conversion, and an unnecessary copy as well. It seems that VarDataFromStr should call _VarFromUStr, and a new method, _VarDataFromLStr should be added (this would call _VarFromLStr). QC Entry 72985 QC #: Date Reported: Area: 73018 4/15/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Incorrect declaration of QueryServiceStatusEx in WinSvc.pas

[QC Description] The last parameter of QueryServiceStatusEx function "pcbBytesNeeded" should be of type DWORD instead of LPDWORD QC Entry 73018 QC #: Date Reported: Area: 73047 4/16/2009 Modeling\Audits Description: Steps: [QC Short Description] 1. create some application as follows: Unit QATest; interface procedure DoIt; implementation var Possibly wrong warning about uninitialized global 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 [QC Description] myglobalvar never gets initialized 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 QC #: Date Reported: Area: 73072 4/17/2009 IDE\Refactoring\Change Parameters Description: Steps: [QC Short Description] - start Delphi 2009 - copy the following procedure into the code of a console application for instance procedure Unnecessary translation in DE version of "Change Parameters" refactoring TestChangeParams(P1: Int64; var P2: Int64; out P3: Int64; const P4: Int64); begin end; - put the mouse at TestChangeParams, open the popup menu and call "Refactor"\"Parameter aendern" (english: "Change [QC Description] params") - see there is for exam. an entry for the P4 parameter in the parameter list and it's type "const" (and I recently used the "Change Parameters" refactoring in the german version and have seen that the parameter not "Konst") - press the "Hinzufuegen" (english: "Add") button - have a look at the bottom of the dialog at the type is translated in the "Add Parameter"/"Edit Parameter" dialog. "Parametertyp" (english: "Parameter Type") groupbox expected: Value | Var | Out | Const actual: Wert | Var | Aus | Konst (see image ChangeParams1.png) - have a look at the top of the dialog at the caption above the In the english version the values for "Parameter Type" are listview expected: Uebereinstimmende Ergebnisse: actual: UebereinstimmendeErgebnisse: (missing space between Uebereinstimmende and Ergebnisse; see purple line on image ChangeParams1.png) - enter a Value | Var | Out | Const parameter name (P5) and data type and select "Wert" (english: "Value") as parameter type - press OK - have a look at the parameter list again and see that the type is "value" and not "Wert" (see image and in the german version it is translated to ChangeParams2.png)

Wert | Var | Aus | Konst which is nonsense and differs from the parameter type names in the main "Change Parameters" dialog.

BTW, there seems to be a missing space in the translation of "Matching Results" in the "Add Parameter" dialog - the text is obviously "UebereinstimmendeErgebnisse" and not "...de Ergebnisse".

-> see steps and images QC Entry 73072 QC #: Date Reported: Area: 73085 11/12/2008 9:53:39 AM Compiler\Delphi\Language Description: Steps: When "TYPEDADDRESS OFF" is in effect, a record involving a inlined function in a unit produces an Compile the attached application below. unexpected "Incompatible Types" error when used with a dereferenced pointer. See the following compile-time errors for the lines marked #1 and #2 indicating failure. [Tester Recommended] Error: E2008 Incompatible types Error: E2008 Incompatible types

Lines #1 and #2, refer to the record method defined on line #3 in the unit.

program BTS252135b; { type error with inlined function of dereferenced record }

{$APPTYPE CONSOLE}

uses uBTS252135;

{$TYPEDADDRESS OFF}

var Foo: TMyRec; Bar: PMyRec;

begin Bar := @Foo; if Foo.Value then WriteLn('property'); if Foo.GetValue() then WriteLn('function'); if Bar.Value then //#1// WriteLn('^property'); //[DCC Error]: E2008 Incompatible types if Bar.GetValue() then //#2// WriteLn('^function'); WriteLn('PASS'); end.

unit uBTS252135b;

interface

type PMyRec = ^TMyRec; TMyRec = packed record function GetValue(): Boolean; inline; //#3// property Value: Boolean read GetValue; end;

implementation

function TMyRec.GetValue(): Boolean; begin Result := True; end;

end. QC #: Date Reported: Area: 73088 4/18/2009 Compiler\Delphi\Language Description: Steps: [QC Short Description] Compile the attached application below. nested type visibility issue See the following compiler output indicating failure. [QC Description] See steps Error: E2362 Cannot access protected symbol TOne.TMyType

Some observations: ------8<------it works fine in Delphi 2007 unit uBTS269051a; - it works if you move the code in unit 3 to unit 2 - the latter case even works if you change 'protected' to 'strict protected' interface QC Entry 73088 uses [Tester Recommended] uBTS269051b;

type TTwo = class(TOne) private FX: TOne.TMyType; // <-- E2362 Cannot access protected symbol TOne.TMyType end;

implementation

end. ------>8------

unit uBTS269051b;

interface

type TOne = class protected type TMyType = integer; end;

implementation

end.

------8<------program BTS269051; { nested type visibility issue }

{$APPTYPE CONSOLE}

uses uBTS269051a;

begin WriteLn('PASS'); { PAss on compile } end. QC #: Date Reported: Area: 73100 4/18/2009 Compiler\Delphi\Interfaces Description: Steps: REGRESSION FROM D2009 UPDATE 3 Compile the attached application below in the IDE. (JJS: Does not seem to happen using the command-line compiler) [QC Short Description] Interface typecast causes internal compiler error See the following compile-time error indicating failure.

[QC Description] [DCC Fatal Error] Unit1.pas(46): F2084 Internal Error: AV218BFD78-R219AD2CC-0 Simple typecast on an interface causes compiler to misbehave - internal error occurs. See steps to reproduce. QC Entry 73100 unit Unit1;

interface (JJS: Interferes with compiling the JVCL from the JEDI project in the IDE.) uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;

var Form1: TForm1;

implementation

{$R *.dfm}

type IMyIntf = interface

end;

TMyClass = class(TInterfacedObject, IMyIntf)

end;

procedure TForm1.FormCreate(Sender: TObject); var l: TList; intf: IMyIntf; begin l:= TList.Create();

intf:= TMyClass.Create();

l.Add( TObject(intf) ); // remove this line to eliminate the error

l.Free( ) end; <<<------[DCC Fatal Error] Unit1.pas(46): F2084 Internal Error: AV218BF89C-R219AC2CC-0

end. QC #: Date Reported: Area: 73109 4/19/2009 IDE\Search Description: Steps: [QC Short Description] 1. install Weaver with german language 2. open search/find in files (german equivalent) 3. see "Verzeichnis" String trunction in "Find in files" in german and japanese version overwriting the border

[QC Description] The german and japanese versions of Weaver have a small problem in the Find in files dialogue: the string Verzeichnis (directory in english) is right aligned but in german and japanese overwrites the border of the frame it is in. QC Entry 73109

//Masahiro Arai File: app\ed\SrchDlg.dfm

Now all customized layout in language edition in this form have been reset QC #: Date Reported: Area: 73110 4/19/2009 IDE\Search\Find Description: Steps: [QC Short Description] Modified steps (original below): - start the japanese or german Weaver IDE - create a new VCL Application for String truncation and missing translation in "Find" in japanese and german version instance and switch to the code editor of the main form - call menu [Search | Find] or press Ctrl+F (the search bar should now appear at the bottom of the editor) - have a look at first checkbox (case) expected: string is not [QC Description] truncated actual: string is truncated (see 001.gif for japanese and ModelessSearchDE1.png [red line] for There are truncated strings and missing translation in the japanese and german version of "Find". german version) - click into (focus) search combobox after clicked code editor - have a look at the second checkbox (whole words) expected: string is translated actual: string is not translated (see 002.gif for japanese -> see steps and ModelessSearchDE1.png [purple line] for german version) - click again into the code editor and see the QC Entry 73110 "whole words" string is translated //--- from here only confirmed for DE version so far - have a look at the second checkbox (whole words) expected: string is translated and not truncated actual: string is translated, but truncated (see ModelessSearchDE2.png [red behind lime line]) - search for something that exists and have a look at the "x matches found" string expected: string is translated actual: string is not translated (see ModelessSearchDE2.png [purple line]) //--- Original steps: In japanese environment of Weaver. 1.[Search | Find] (Ctrl+F) Case Checkbox truncated. 2.Click search combobox after clicked code editor. Please see atachement. QC #: Date Reported: Area: 73123 4/19/2009 IDE Description: Steps: [QC Short Description] 1.Show Code editor. 2.Right-Click(show context-menu). EXP: "toggle Bookmark" -> "bukkuma-ku no Unite terms of "Bookmarks" (Localization of Japanese) kirikae" (Japanese Roman) "go to Bookmark" -> "shiori he idou" (Japanese Roman) ACT: "bukkuma-ku no kirikae" (Japanese Roman) "bukkuma-ku he idou" (Japanese Roman) or "shiori no kirikae" (Japanese Roman) [QC Description] "shiori he idou" (Japanese Roman) Unite terms of "Bookmarks" (Localization of Japanese). QC Entry 73123 QC #: Date Reported: Area: 73124 4/19/2009 IDE Description: Steps: [QC Short Description] Please see Attachements. Find.gif [Search | Find...] "Whole words" -> "Tango Tanni de Kensaku" (Japanese Unite terms of "Whole words" (Localization of Japanese) Roman) Find in Files.gif [Search | Find in Files] "Whole words only" -> "wa-do Kensaku" (Japanese Roman) Replace.gif [Search | Replace...] "Whole words only" -> "wa-do Kensaku" (Japanese Roman) [QC Description] Unite terms of "Whole words" (Localization of Japanese) QC Entry 73124 QC #: Date Reported: Area: 73125 4/19/2009 Compiler\Delphi Description: Steps: [QC Short Description] The following code prints two times FAIL instead of PASS: Wrong SizeOf calculation for generic types

[QC Description] program BTS269052; See 'Steps' for code that contains two cases of wrong SizeOf calculation for generic types. This results in wrong { Wrong SizeOf calculation for generic types } memory allocation and access violations. {$APPTYPE CONSOLE} In the first case (TFoo), the size of static arrays is always set to exactly 4 bytes. This also happens if the type is a class, instead of a record. In the second case (TBar), the size of the variant part is calculated incorrectly. In var both cases, the offset used in code generation for accessing variable B is wrong as well. Counter: Integer = 0; QC Entry 73125 type TFoo = packed record A: array [1..3] of T; B: T; end;

TBar = packed record case Integer of 0: (A: Word); 1: (B: Word); end;

begin if SizeOf(TFoo) = 4 * SizeOf(Word) then Inc(Counter) else WriteLn('FAIL #1');

if SizeOf(TBar) = SizeOf(Word) then Inc(Counter) else WriteLn('FAIL #2');

if Counter = 2 then WriteLn('PASS'); end. QC #: Date Reported: Area: 73144 4/20/2009 IDE Description: Steps: [QC Short Description] 1.[Tools | Options...] 2.Select "Editor options" and "HTML Options" Please see attachements. String truncation and missing translation in Options-Dialog in japanese version

[QC Description] String truncation and missing translation in Options-Dialog in japanese version. A part of check boxes shifts. QC Entry 73144 QC #: Date Reported: Area: 73153 4/20/2009 Database\TField\TStringField Description: Steps: [QC Short Description] 1. Open the attached project 2. Execute it Expected: A new line (CRLF) should be written to the console TStringField.GetValue can return garbage data window Actual: Chr($80) [Euro sign in my case] is written all over the screen and the application crashes.

[QC Description] The TStringField.GetValue method can return garbage data if the field's size is larger than "dsMaxStringSize". In that case the PBuf variable points to the already released string (SetLength(Temp, StrLen(..)) reallocates the string buffer) and if you have FastMM with memory corruption detection active, you will get a $80808080... string as result. QC Entry 73153 QC #: Date Reported: Area: 73156 4/20/2009 RTL Description: Steps: [QC Short Description] Compile and run the attached application below. Update CompilerVersion, RTLVersion, and VERxxx for Weaver. FAIL #1 Also needs to change for Error Insight used by the IDE. FAIL #2 FAIL - Counter=0 [QC Description] The system unit variables CompilerVersion, RTLVersion and the condition define VERxxx are at values program BTS269046; appropriate for D2009 and not Weaver. { Update CompilerVersion, RTLVersion, and VERxxx for Weaver } ie. 20.0 and not 21.0 for CompilerVersion and RTLVersion and VER200 and not VER210 {$APPTYPE CONSOLE} This ommission breaks version dependant code. var (From Michael Trubetskov on the Weaver Field Test) Counter: Integer = 0; QC Entry 73156 begin [Tester Recommended] {$IFDEF VER210} Inc(Counter); {$ENDIF}

if CompilerVersion >= 21.0 then Inc(Counter) else WriteLn('FAIL #1');

if RTLVersion >= 21.0 then Inc(Counter) else WriteLn('FAIL #2');

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

end. QC #: Date Reported: Area: 73161 4/20/2009 IDE\Search\Find Description: Steps: [QC Short Description] 0. start Weaver 1. paste the following code into a new console application 2. press CTRL+F 3. enter "X" in the SHIFT+F3 omits every second identifier on a line combobox 4. press ENTER (now the first X ["X: Integer"] should be marked) 5. press F3 until you are at "WriteLn(X)" and notice that no X is omitted 6. press SHIFT+F3 until you are at the beginning expected: every X [QC Description] will be selected actual: on the lines "X := X + 1" and "X := X + X ... X + 1" only every second X will be selected It seems that SHIFT+F3 in contrast to the "Search up" button omits every second identifier on a line. 7. repeat 5. with the "Search down" button in the search panel and see that every X will be selected (equal to 5. and as expected) 8. repeat 6. with the "Search up" button in the search panel and see that every X will be -> see steps selected (that is different from 6., but as expected) program Project28; {$APPTYPE CONSOLE} var X: Integer; begin X := 1; X := X + 1; X := X + 1; X := X + X + X + X + X + X + 1; X := X + 1; WriteLn(X); end. Was confirmed in FT newsgroup - see "SHIFT+F3 omits every second identifier on a line?" in .weaver.ide.editor https://forums.codegear.com/thread.jspa?messageID=106281&tstart=0#106281 QC Entry 73161 QC #: Date Reported: Area: 73210 4/21/2009 IDE\Search\Find Description: Steps: [QC Short Description] 1. Open Forms.pas 2. Go to the end of the unit 3. Press Ctrl+F 4. Type DefocusControl into the edit control 5. Unnecessary second confirmation dialog when search string was not found Press Enter 6. Dialog "Search match not found" appears. Click on "No". 7. Another dialog "Search string not found" appears. [QC Description] When you search for DefocusControl at the end of Forms.pas, you will be asked you if you want to restart from the beginning. If you click no, you will get another dialog that the search string was not found. This second dialog is not really needed, because the wrap-around dialog already tells you, that the search match was not found. QC Entry 73210 QC #: Date Reported: Area: 73219 4/21/2009 IDE\Code Editor Description: Steps: [QC Short Description] Set clBtnFace to $FF00FF and fire up the search bar. Search Bar background color is not consistent

[QC Description] The screenshot says it all. QC Entry 73219 QC #: Date Reported: Area: 73225 4/21/2009 ActiveX Description: Steps: [QC Short Description] - open the command prompt by for example using the 'Open the RAD STudion Command Prompt' option - type DRInterop (cmd line utility not working) 'DRInterop' + Enter - the error message apears

[QC Description] Running DRInterop.exe from the command line with any parameters, fails with '.. Coinitialize has not been called ..' error.

QC Entry 73225 QC #: Date Reported: Area: 73248 4/22/2009 AddOn\Interbase components Description: Steps: [QC Short Description] Any use of TSQLMonitor will demonstrate that the text in FBuffer is incorrect. IBSQLMonitor Char/AnsiChar buffer mismatch

[QC Description] The use of FBufferSize and FBuffer in TWriterThread.WriteToBuffer and TReaderThread.ReadSQLData does not handle wide characters properly.

My solution was:

1) Change all PAnsiChar to PByte in IBSQLMonitor.pas

2) Change TWriterThread.WriteToBuffer to use a new cMaxChars local constant procedure TWriterThread.WriteToBuffer; const cMaxChars = cMaxBufferSize div SizeOf(Char); // tpm var i, len: Integer; Text : String; begin Lock; try { If there are no monitors throw out the message The alternative is to have messages queue up until a monitor is ready.} if FMonitorCount^ = 0 then FMsgs.Remove(FMsgs[0]) else begin Text := TTraceObject(FMsgs[0]).FMsg; i := 1; len := Length(Text); while (len > 0) do begin BeginWrite; try FTraceDataType^ := Integer(TTraceObject(FMsgs[0]).FDataType); FTimeStamp^ := TTraceObject(FMsgs[0]).FTimeStamp; FBufferSize^ := Min(len, cMaxChars) * SizeOf(Char); // tpm Move(Text[i], FBuffer[0], FBufferSize^); Inc(i, cMaxChars); // tpm Dec(len, cMaxChars); // tpm finally EndWrite; end; end; FMsgs.Remove(FMsgs[0]); end; finally Unlock; end; end;

3) Change TReaderThread.ReadSQLData to use SizeOf(Char) as follows: procedure TReaderThread.ReadSQLData; begin st.FMsg := ''; {do not localize} BeginRead; if not bDone then try SetString(st.FMsg, PChar(FBuffer), FBufferSize^ div SizeOf(Char)); // tpm st.FDataType := TTraceFlag(FTraceDataType^); st.FTimeStamp := TDateTime(FTimeStamp^); finally EndRead; end; end; QC Entry 73248 QC #: Date Reported: Area: 73286 4/23/2009 RTL\Delphi\Other Classes Description: Steps: [QC Short Description] Compile and run the attached application below. TStringStream.ReadString causes AV if it was created from TBytes See the following program output indicating failure. [QC Description] In last D2009 with update 2, TStringStream.ReadString causes access violation if it was created from TBytes FAIL - Exception Error array. And it does not move the Position, but that was reported already by Francois GAILLARD (68582). ClassName=EAccessViolation Message=Access violation at address 0041552B in module 'BTS269134.exe'. Read of address 00000000 QC Entry 73286 program BTS269134; (JJS: Fix not seen in 14.0.3461.22311) { TStringStream.ReadString causes AV if it was created from TBytes }

{$APPTYPE CONSOLE}

uses SysUtils, Classes;

procedure DoTest; var s1 : string; Bytes : TBytes; SS : TStringStream; begin SetLength(Bytes, 2); Bytes[0] := $31; Bytes[1] := $32;

SS := TStringStream.Create(Bytes); s1 := ss.ReadString(1); //<-- AV appears here WriteLn('PASS'); 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: 73314 4/23/2009 IDE\Code Editor Description: Steps: [QC Short Description] Create a new Unit. write in the implementation section one procedure. Examples: unit Unit1; interface Undo causes crash implementation procedure One; var vList: TList; begin vList := TList.Create; end; end. Select the line after the var statement, hit the tab key and delete the block with the backspace key. Press Ctrl+Z, and the error occurs. [QC Description] Sometimes happens with Crtl + Shift + Z. When using the new feature of block tab indented QC Entry 73314 QC #: Date Reported: Area: 73324 4/24/2009 Compiler\Delphi Description: Steps: [QC Short Description] Steps to reproduce : - Compile the following Unit. - If compiling from the Delphi IDE, keep smiling while you Internal Error + IDE Crash using contraints on generics watch the IDE crash and lose all your unsaved work (note that it may require another compilation to crash the IDE). - Sometimes simply editing similar code to this one will crash the IDE (I guess code completion can [QC Description] involve compiling code in the background ?) UNIT YetAnotherGenericCrash; // Internal error GPFC00000FD- Short summary : 0048C48C-0 + IDE Crash INTERFACE IMPLEMENTATION TYPE TFoo = CLASS PROCEDURE UseLess (CONST A : T); END; TBar> = CLASS a : boolean; PROCEDURE What (); END; While using contraints on generics, one can very easily get PROCEDURE TFoo.UseLess (CONST A : T); BEGIN END; PROCEDURE TBar.What (); BEGIN - Internal error when compiliing from the command line. a := true; END; END. - IDE crash if compiling from the IDE.

See steps to reproduce. QC Entry 73324

(JJS: Seen in Tiburon Update 3, not in Weaver 14.0.3403.20859) QC #: Date Reported: Area: 73340 4/24/2009 VCL Description: Steps: [QC Short Description] Here's some steps: 1. Add a TTrayIcon to a form 2. Set the visible property to true 3. Click the windows start TTrayIcon Error menu button 4. Hold down Ctrl+Shift while right clicking on an empty spot in the right part of the start menu. (This is if you haven't switched your start menu to classic mode) 5. Click Exit Explorer on the popup menu 6. [QC Description] Start the appliation --> It will crash with an out of resources exception and close. By. Sebastian Zierer By including a TTrayIcon in the project and try to run it, shows the following two errors:

------Debugger Exception Notification ------Project Project1.exe raised exception class EOutOfResources with message 'Cannot create shell notification icon'. ------Break Continue Help ------

------Debugger Exception Notification ------Project Project1.exe raised exception class EReadError with message 'Error reading TrayIcon1.Visible: Cannot create shell notification icon'. ------Break Continue Help ------QC Entry 73340 QC #: Date Reported: Area: 73349 4/25/2009 IDE\Tool Palette Description: Steps: [QC Short Description] 1) Install as many components you can 2) Try to scroll the tool palette up/down using the scroll bar or the Tool Palette is flickering mouse wheel

[QC Description] If you scroll up/down the tool palette using the scroll bar or the mouse wheel you'll notice that it's flickering a lot. QC Entry 73349 QC #: Date Reported: Area: 73372 4/25/2009 RTL Description: Steps: [QC Short Description] Compile the attached application below. readln fails when reading integer variables The file BTS269174.ini holds the following text value. 12 [QC Description] Readln fails in the scenario below, if i is defined as longword or int64. It works OK with byte, word or integer. I Run the application and see the following program output indicating failure. have not tested with further types. FAIL - Exception Error This has worked in all versions prior to D2009. ClassName=EInOutError QC Entry 73372 Message=Invalid numeric input

program BTS269174; { Readln fails to read integer values }

{$APPTYPE CONSOLE}

uses SysUtils;

procedure DoIt; var f: Textfile; i: longword; begin AssignFile(f,'bts269174.ini'); Reset(f); Readln(f,i); if I = 12 then WriteLn('PASS') else WriteLn('FAIL I=', I); CloseFile(f); end;

begin try DoIt; 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: 73410 4/27/2009 SOAP\Components Description: Steps: [QC Short Description] SOAPAttach.pas is not unicode ready

[QC Description] In unit SOAPAttach.pas you can read procedure TAggregatedStream.AddStream(AValue: string); var AStream: TMemoryStream; begin AStream := TMemoryStream.Create; AStream.Write(AValue[1], Length(AValue)); AddStream(AStream, soOwned); end;

Of course AStream.Write(AValue[1], Length(AValue)) is wrong since AValue is a unicode string.

Same thing in procedure ReadContent(ADestStream: TStream); var SLine: string; begin SLine := ReadLine(MimeStream.SourceStream); while (MimeStream.SourceStream.Position <= MimeStream.SourceStream.Size) and (not SameMimeBoundary(SLine, MimeBoundary)) do begin ADestStream.Write(SLine[1], Length(SLine)); SLine := ReadLine(MimeStream.SourceStream); if Length(SLine) = 0 then Raise Exception.Create(SMimeReadError); end; FLastMimeBoundary := sLine; end;

The line ADestStream.Write(SLine[1], Length(SLine)); is wrong QC Entry 73410 QC #: Date Reported: Area: 73420 4/27/2009 IDE\Open Tools API Description: Steps: [QC Short Description] - start Delphi 2009 - open, build and install the attached package BreakpointTest.dpk - open the attached IOTABreakpoint40.Destruct does not remove a breakpoint project BreakpointSampleProject.dpr - show the Breakpoint List (View | Debug Windows | Breakpoints or CTRL+ALT+B) - put a breakpoint on line 6 ("Writeln...") and you should now see a breakpoint for this line in the [QC Description] breakpoint list with the Action "Break" - call Help | Breakpoint Test expected: the breakpoint would be removed I tried to remove a breakpoint with the OTA by calling IOTABreakpoint40.Destruct, but that does just nothing. actual: the breakpoint is still there and the Action is now empty (was "Break" and the action change is a feature of this test and no bug - it just shows that the wizard can do something with the breakpoint) The comment above the Destruct method is

{ Call this to destroy the object }

It doesn't say explicitly that it removes the breakpoint, but on the other hand I don't see any real reason why an OTA user should destroy the breakpoint. (...interface...ref-counted...)

A more straightforward way to remove a breakpoint would a "RemoveBreakpoint" method in IOTADebuggerServices.

-> see steps QC Entry 73420 QC #: Date Reported: Area: 73520 4/30/2009 Database\TParams Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_269223 Bug in TParam.GetAsAnsiString or [QC Description] After assigning a UTF8 encoded string to a TParam object, the string becomes corrupted. See attached project

TParam.GetAsAnsiString consists of the following code: function TParam.GetAsAnsiString: AnsiString; begin if VarType(FData) = vtAnsiString then Result := AnsiString(FData) else Result := AnsiString(GetAsString); end;

Since FData is declared as a Variant instead of a TVarRec, the first condition is never met. This results in UTF8 encoding being lost. To correct this issue, change the code to: function TParam.GetAsAnsiString: AnsiString; begin if VarType(FData) = varString then // Changed vtAnsiString to varString Result := AnsiString(FData) else Result := AnsiString(GetAsString); end; QC Entry 73520 QC #: Date Reported: Area: 73538 5/1/2009 Compiler\Delphi\BASM Description: Steps: [QC Short Description] Compile the attached application below. Compiler expects wrong memory operand for PMAXUB instruction See the following compile-time error for the statement on the line marked #2. [QC Description] The XMM version of the PMAXUB instruction (66 0F DE /r PMAXUB xmm1, xmm2/m128) can take a 128-bit Error: E2116 Invalid combination of opcode and operands memory operand (DQWORD) as second parameter. However, the compiler insists on a 64-bit memory (QWORD) operand instead. Also see that the preceding statement on the line marked #1 does not produce this error message.

Reference: See that the explicit modifier used in the line marked #3 works around the issue.

Intel® 64 and IA-32 Architectures, Software Developer’s Manual, Volume 2B: Instruction Set Reference, N-Z, September 2008 program BTS269233; QC Entry 73538 { Compiler expects wrong memory operand for PMAXUB instruction } [Tester Recommended] {$APPTYPE CONSOLE}

uses SysUtils;

procedure DoIt; var i64:int64; i128:packed array [0..15] of byte; asm jmp @ovr //jump over instructions as memory operands may not be 16-byte aligned

pmaxub xmm1, i64 //this compiles but should not //#1

pmaxub xmm1, i128 //this does not compile but should //#2

pmaxub xmm1, qword ptr i128 //this is a work-around //#3

//Disassembly shows: //660FDE4DF8 pmaxub xmm1,dqword ptr [ebp-$08] //660FDE4DE8 pmaxub xmm1,dqword ptr [ebp-$18] @ovr: end;

begin try DoIt; WriteLn('PASS'); { PASS on compile } 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: 73539 5/1/2009 RTL\Delphi\File Management Description: Steps: [QC Short Description] Compile and run the attached program below. FileAge does not work for open files with share_exclusive (Plattform>=W2K) See the following program output indicating failure. [QC Description] The FileAge function does not work for files that are opened in SHARE_EXCLUSIVE mode (like the FAIL pagefile.sys).

FileAge('C:\pagefile.sys') always return -1 instead of the FileDate. program BTS269238; (Same problem as in FileExists) { FileAge does not work for open files with share_exclusive (Plattform>=W2K) } (Same problem in Delphi 2009) QC Entry 73539 {$APPTYPE CONSOLE}

uses SysUtils;

procedure DoIt; begin if FileAge('C:\pagefile.sys') <>-1 then WriteLn('PASS') else WriteLn('FAIL'); end;

begin try DoIt; 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: 73551 5/1/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. Cannot cast to a generic type parameter restricted as class See the following compile-time error indicating failure. [QC Description] The compile currently doesn't permit casting an object to a generic type parameter that is restricted as class: Error: E2089 Invalid typecast // ----- type TFoo = class program BTS269236; function Get: T; end; { Cannot cast to a generic type parameter restricted as class } function TFoo.Get: T; {$APPTYPE CONSOLE} begin Result := T (TObject.Create); // E2089 Invalid typecast uses end; SysUtils; // ----- type IMHO, this is basic functionality. As an example, consider the following attempt to reduce boilerplate code: TFoo = class // ----- function Get: T; type end; TOwnedCollection = class (TOwnedCollection) private function TFoo.Get: T; function GetItem(Index: Integer): TItem; begin procedure SetItem(Index: Integer; Value: TItem); Result := T (TObject.Create); // E2089 Invalid typecast public end; constructor Create (AOwner: TPersistent); function Add: TItem; begin function GetEnumerator: TCollectionEnumerator ; WriteLn('PASS'); { PASS on compile } function Insert (Index: Integer): TItem; end. property Items[Index: Integer]: TItem read GetItem write SetItem; default; end; // ----- How would you implement TOwnedCollection.GetItem? Of course, the straightforward approach is // ----- function TOwnedCollection.GetItem(Index: Integer): TItem; begin Result := TItem (inherited GetItem (Index)); end; // -----

I ended up with this ugly workaround: // ----- function TOwnedCollection.GetItem(Index: Integer): TItem; var ResultAddr: PPointer; begin ResultAddr := @Result; TCollectionItem (ResultAddr^) := inherited GetItem (Index); end; // ----- QC Entry 73551

[Tester Recommended] QC #: Date Reported: Area: 73565 5/2/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile and run the attached application below. Compiler permits call of generic method without an object instance See the following program output indicating failure. [QC Description] The following code shouldn't compile at all: FAIL - Compile-time error expected // ----- FAIL - Exception Error program qc73565; ClassName=EAccessViolation Message=Access violation at address 00408DC9 in module 'BTS269293.exe'. Write of address 0040B942 type TFoo = class procedure VirtualProcedure; virtual; program BTS269293; procedure GenericProcedure ; { Compiler permits call of generic method without an object instance } end; {##COMERR: Error: E2076 This form of method call only allowed for class methods} procedure TFoo.GenericProcedure; begin {$APPTYPE CONSOLE} VirtualProcedure; end; procedure TFoo.VirtualProcedure; uses begin SysUtils; end; type begin TFoo = class TFoo.GenericProcedure ; // <-- procedure VirtualProcedure; virtual; end. procedure GenericProcedure ; // ----- end; Unfortunately, it does compile without errors or warnings. Of course, the resulting program crashes at runtime. QC Entry 73565 procedure TFoo.GenericProcedure; begin [Tester Recommended] VirtualProcedure; end; procedure TFoo.VirtualProcedure; begin end;

procedure DoIt; begin WriteLn('FAIL - Compile-time error expected'); TFoo.GenericProcedure ; end;

begin try DoIt; 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: 73576 5/2/2009 VCL\Ribbon Controls Description: Steps: [QC Short Description] Run Ribbon Demo Click on Control Types or example Resize until on group is collapsed Click on the collapsed Using wheel mouse when collapsed group is show cause an exception group to show it Use wheel mouse UP and then Down

[QC Description] Using wheel mouse when collapsed group is show cause an exception. The wheel mouse has to be desactivated like office 2007 QC Entry 73576 QC #: Date Reported: Area: 73587 5/3/2009 Compiler\Delphi\BASM Description: Steps: [QC Short Description] Compile the attached application below. MOVBE instruction not supported See the following compile-time errors indicating failure. [QC Description] The MOVBE instruction mnemonic is not supported by the assembler/compiler. Error: E2003 Undeclared identifier: 'movbe' Error: E2031 Label expected The missing instruction is: Error: E2031 Label expected Error: E2031 Label expected MOVBE - Move Data After Swapping Bytes 0F 38 F0 /r MOVBE r16, m16 0F 38 F0 /r MOVBE r32, m32 program BTS269293; 0F 38 F1 /r MOVBE m16, r16 0F 38 F1 /r MOVBE m32, r32 { MOVBE instruction not supported }

Reference: {$APPTYPE CONSOLE} Intel® 64 and IA-32 Architectures, Software Developer’s Manual, Volume 2A: Instruction Set Reference, A-M, September 2008 uses QC Entry 73587 SysUtils;

[Tester Recommended] procedure TestMOVBE; var dwd:longword; wd:word; asm movbe eax, dwd movbe dwd, edx movbe cx, wd movbe wd, ax end;

begin try TestMOVBE; WriteLn('PASS'); 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: 73650 5/5/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] ActiveX.pas: Incorrect declaration of parameter iid in IRpcChannelBuffer.GetBuffer

[QC Description] ActiveX.pas: Incorrect declaration of parameter iid in IRpcChannelBuffer.GetBuffer. There should be the "const" modifier to pass the iid parameter by reference, not by value. QC Entry 73650

ActiveX.pas: Incorrect declaration of parameter iid in IRpcChannelBuffer.GetBuffer QC #: Date Reported: Area: 73686 5/6/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile and run the attached application below. Generic static class function damages the stack if built without optimizations See the following program output indicating failure. [QC Description] The following code results in invalid codegen: FAIL - Exception Error // ----- ClassName=EAccessViolation {$OPTIMIZATION OFF} Message=Access violation at address 0040499C in module 'qc73686.exe'. Read of address FFFFFFF9 type program BTS269330; TFoo = class public {$APPTYPE CONSOLE} class function Get: Integer; static; end; {$OPTIMIZATION OFF} class function TFoo.Get: Integer; uses begin SysUtils; Result := 1; end; type TFoo = class procedure DamageStackAndCrash; public var class function Get: Integer; static; ManagedVariable: String; end; begin TFoo.Get ; class function TFoo.Get: Integer; TFoo.Get ; begin end; Result := 1; // ----- end;

The compiler generates two instantiations for TFoo.Get<>. The first instantiation, TFoo.Get, has a procedure DamageStackAndCrash; stack frame: var // ----- ManagedVariable: String; qc73686.dpr.12: begin begin 00403CDC 55 push ebp TFoo.Get ; 00403CDD 8BEC mov ebp,esp TFoo.Get ; 00403CDF 51 push ecx end; qc73686.dpr.13: Result := 1; 00403CE0 C745FC01000000 mov [ebp-$04],$00000001 begin qc73686.dpr.14: end; try 00403CE7 8B45FC mov eax,[ebp-$04] DamageStackAndCrash; 00403CEA 59 pop ecx WriteLn('PASS'); 00403CEB 5D pop ebp except 00403CEC C3 ret on E: Exception do // ----- begin WriteLn('FAIL - Exception Error'); The second instantiation doesn't have a stack frame, but the function apparently thinks it has one: WriteLn(' ClassName=', E.ClassName); // ----- WriteLn(' Message=', E.Message); qc73686.dpr.13: Result := 1; end; 00403CF0 C745FC01000000 mov [ebp-$04],$00000001 end; qc73686.dpr.14: end; end. 00403CF7 8B45FC mov eax,[ebp-$04] 00403CFA C3 ret // -----

The attached sample demonstrates how easily this stack damaging can lead to a crash. QC Entry 73686

[Tester Recommended] QC #: Date Reported: Area: 73698 5/6/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] const IHigh1 = 5-1; IHigh2 = 4-1; IHigh3 = 3-1; type TStatic3dArray = array[0..IHigh1, 0..IHigh2, 0..IHigh3]of Incorrect size of generic static multi-dimensional array type T; TStatic3dArrayDouble = array[0..IHigh1, 0..IHigh2, 0..IHigh3]of Double; procedure TForm1.Button1Click (Sender: TObject); procedure Log(const Fmt: string; const Args: array of const); begin Memo1.Lines.Add [QC Description] (Format(Fmt, Args)); end; var old3d : TStatic3dArrayDouble; new3d : TStatic3dArray; pp : Pointer; ip : Define a generic type of a static multi-dimensional array, the Compiler only counts how many elements in it: Integer absolute pp; sz : Integer; begin pp := @new3d[0, 0]; sz := SizeOf(new3d); Log('%s', ['[Generic]']); Log type TStatic2dArrayOf = array[1..5, 1..2]of T; (#9'Full Size:'#9'[%d]'#9'SizeOf(V[0]): %d'#9'SizeOf(V[0,0]): %d', [sz, SizeOf(new3d[0]), SizeOf(new3d[0,0])]); var myArray: TStatic2dArrayOf; Log(#9'Length(V): %d'#9'Length(V[0]): %d'#9'Length(V[0,0]): %d', [Length(new3d), Length(new3d[0]), Length { -> SizeOf(myArray) = 10 ( 5 * 2 ) } (new3d[0,0])]); Log(#9'Expected Stack:'#9'%p .. %.8x', // it's wrong number [pp, ip + sz - 1]); Log(#9'Actual Stack:'#9'%p .. %.8x', [pp, Integer(@new3d[IHigh1, IHigh2, IHigh3]) + SizeOf(new3d[0,0,0])-1 ]); pp := @old3d As we know, SizeOf(aNDArrVar)=Length(aNDArrVar)*SizeOf(aNDArrVar[0]), but the Compiler is always thinking [0, 0]; sz := SizeOf(old3d); Log('%s', ['[Traditional]']); Log(#9'Full Size:'#9'[%d]'#9'SizeOf(V[0]): %d'#9'SizeOf(V SizeOf(aNDArrVar[0]) is only count of its elements while aNDArrVar is a static N-D array variable and N is more [0,0]): %d', [sz, SizeOf(old3d[0]), SizeOf(old3d[0,0])]); Log(#9'Length(V): %d'#9'Length(V[0]): %d'#9'Length(V than 1. [0,0]): %d', [Length(old3d), Length(old3d[0]), Length(old3d[0,0])]); Log(#9'Expected Stack:'#9'%p .. %.8x', [pp, So the size reserved by the Compiler is not enough for a static N-D array variable actually needs, it's a serious ip + sz - 1]); Log(#9'Actual Stack:'#9'%p .. %.8x', [pp, Integer(@old3d[IHigh1, IHigh2, IHigh3]) + SizeOf(old3d bug. [0,0,0])-1 ]); end;

======the result of the "reproduce steps" shows the bug: ------[Generic] Full Size: [60] SizeOf(V[0]): 12 SizeOf(V[0,0]): 3 Length(V): 5 Length(V[0]): 4 Length(V[0,0]): 3 Expected Stack: 0012F3BC .. 0012F3F7 Actual Stack: 0012F3BC .. 0012F40C [Traditional] Full Size: [480] SizeOf(V[0]): 96 SizeOf(V[0,0]): 24 Length(V): 5 Length(V[0]): 4 Length(V[0,0]): 3 Expected Stack: 0012F3F8 .. 0012F5D7 Actual Stack: 0012F3F8 .. 0012F5D7 ======We see the SizeOf(TStatic3dArray) is 60(=5*4*3) not 480(=60*8). And it reserved 60 bytes in Stack not 480. But actually it needs 480 bytes, so it may overwrite virtual memory block not reserved for it and cause problem.

BTW, when I tried to put the type declaration into local scope of the procedure like: procedure TForm1.Button1Click(Sender: TObject); type TStatic2dArray = array[0..IHigh1, 0..IHigh2, 0..IHigh3]of T; TStatic2dArrayDouble = array[0..IHigh1, 0..IHigh2, 0..IHigh3]of Double; .... It caused Internal Error URW1135. QC Entry 73698 QC #: Date Reported: Area: 73742 5/8/2009 Compiler\Delphi\BASM Description: Steps: [QC Short Description] (JJS: See attached test case.) SSE4 pmovzxbw doesn't generate proper opcode in some case // Sample code - NOP are there only for emphasis [QC Description] program Project4; writing {$APPTYPE CONSOLE} pmovzxbw xmm1, [eax+esi] uses SysUtils; generate proper opcode begin writing try { TODO -oUser -cConsole Main : Insert code here } pmovzxbw xmm1, [esi+eax] asm nop pmovzxbw xmm1, [eax+esi] // Put a breakpoint here, then CTRL+ALT+C to pop the CPU view doesn't nop pmovzxbw xmm1, [esi+eax] See steps nop QC Entry 73742 end; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end.

Here is the generated opcode

Project4.dpr.12: nop 0040B194 90 nop Project4.dpr.13: pmovzxbw xmm1, [eax+esi] 0040B195 660F38300C06 pmovzxbw xmm1,dqword ptr [esi+eax] <---- Good Project4.dpr.14: nop 0040B19B 90 nop Project4.dpr.15: pmovzxbw xmm1, [esi+eax] 0040B19C 660F38300C30 pmovzxbw xmm1,dqword ptr [eax+esi] <---- Good 0040B1A2 0000 add [eax],al <---- Added junk that cause crash 0040B1A4 0000 add [eax],al 0040B1A6 0000 add [eax],al 0040B1A8 0000 add [eax],al 0040B1AA 0000 add [eax],al 0040B1AC 0000 add [eax],al 0040B1AE 0000 add [eax],al 0040B1B0 0000 add [eax],al 0040B1B2 0000 add [eax],al 0040B1B4 0000 add [eax],al 0040B1B6 0000 add [eax],al 0040B1B8 0101 add [ecx],eax 0040B1BA 0101 add [ecx],eax 0040B1BC 0000 add [eax],al 0040B1BE 0000 add [eax],al 0040B1C0 0000 add [eax],al 0040B1C2 0000 add [eax],al 0040B1C4 0000 add [eax],al 0040B1C6 0000 add [eax],al 0040B1C8 0000 add [eax],al 0040B1CA 0000 add [eax],al Project4.dpr.16: nop 0040B1CC 90 nop QC #: Date Reported: Area: 73777 5/10/2009 IDE\Tool Palette Description: Steps: [QC Short Description] - start the german Weaver version - show the Tool Palette - show the popup menu for the Tool Palette and [Missing Translation] Rename category have a look at the third menu item expected: Kategorie "" umbenennen actual: Rename "" Category [QC Description] The new rename function in the Tool Palette is not translated in the german version.

-> see steps QC Entry 73777 QC #: Date Reported: Area: 73807 5/11/2009 VCL\Graphics Description: Steps: [QC Short Description] Access violation when loading PNG

[QC Description] Create a new VCL form, drop a TImage on it, and double click the "Picture" line in the Object inspector for the TImage to open the Picture Editor. In the picture editor click the "Load..." button and select the attached PNG image in the attached zip. The image shows up correctly in the "Load Picture" dialog's preview panel, but when you actually try to load it it gives the error:

"Access violation at address 5000456F in module 'rtl120.bpl'. Read of address 0018401F."

I have madExcept installed, which takes over exception handling in the IDE as well, and it shows that the crash occurs in pngimage.DecompressZLIB.

QC Entry 73807 QC #: Date Reported: Area: 73867 5/12/2009 RTL\Delphi\Other Classes Description: Steps: [QC Short Description] Compile and run the attached application. Remove method of TDictionary and TObjectDictionary<,> incorrect in Generics.Collections. See the following program output indicating failure. [QC Description] the result of the steps example using TDictionary where K is the expected value and V is the actual value FAIL - TDictionary.Remove Error Removed: ( K = 1, V = 1 ) Expected Item=2 Removed: ( K = 2, V = 6 ) <== it's wrong! Actual Item=6 Removed: ( K = 3, V = 3 ) Removed: ( K = 4, V = 4 ) Removed: ( K = 5, V = 5 ) program BTS269410; Removed: ( K = 6, V = 6 ) { Removal in Generics.Collections.TObjectDictionary<,> incorrect } so a HashTable like TObjectDictionary .Create([doOwnsValues]); {$APPTYPE CONSOLE} often raise exceptions, because the object which alreay has been destroyed before, is being free again. uses QC Entry 73867 SysUtils, Generics.Collections; [Tester Recommended] type TMyClass = class Tag: Integer; procedure DoIt; procedure OnNotify(Sender: TObject; const Item: String; Action: TCollectionNotification); end;

var Counter: Integer = 0;

const ITimes = 6;

procedure TMyClass.DoIt; var I: Integer; begin with TDictionary.Create do try for I := 1 to ITimes do Add(I, IntToStr(I));

OnValueNotify := OnNotify; for I := 1 to ITimes do begin Tag := I; Remove(I); end; finally Free; end; end;

procedure TMyClass.OnNotify(Sender: TObject; const Item: string; Action: TCollectionNotification); begin // WriteLn(Format('Removed: ( K = %d, V = %s )', [Tag, Item])); if IntToStr(Tag) = Item then Inc(Counter) else begin WriteLn('FAIL - TDictionary.Remove Error'); WriteLn(' Expected Item=', Tag); WriteLn(' Actual Item=', Item); end;

if Counter = ITimes then WriteLn('PASS'); end;

var MyClass: TMyClass;

begin try MyClass := TMyClass.Create; MyClass.DoIt; 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: 73988 5/16/2009 VCL\Win 32 Controls\THeaderControl Description: Steps: [QC Short Description] Create a new VCL forms project. Drop a THeadercontrol on the form, double-click on it to call up the sections Setting AllowDrag to false in OnSectionDrag corrupts Sections order collection editor, add several sections and set their Text property. Set the headercontrols DragReorder property to true. Add a handler for the controls OnSectionDrag event and add the following code to the handler: [QC Description] AllowDrag := false; Build and run the project. Drag one of the header sections to a new position. - expected: the Reordering sections in a header control by dragging (DragReorder property set to true) fires the OnSectionDrag sections stay in the old order after the mouse button has been released. - actual: the sections are reordered. event when the mouse button goes up again. The event has an AllowDrag parameter that can be set to false to The deeper problem is that the header controls Sections collection still lists the sections in the original order. abort the drag operation. Doing that does not work properly: the drag seems to still succeed (the header sections Extract the test project from the attached ZIP archive, build and run and follow the instructions on screen to see are shown in the new order) but the controls internal Sections collection is left in the old order. this. The TCustomHeaderControl.CNNotify method fires the OnSectionDrag event when it gets the See steps for details. HDN_ENDDRAG notification. It records the returned value of AllowDrag in an internal field but does *not* set QC Entry 73988 the message.result to a value <> 0 to indicate to the OS that the drag should be aborted. Instead it is probably intended to rely on what the SDK docs call "manual reordering": the applications code keeps track of the header sections and their order itself and tells the control the order to user after the drag is done. In another part of the CNNotify hander the VCL does this: NM_RELEASEDCAPTURE: if FSectionDragged then DoSectionEndDrag; The control sends this notification after the drag has ended. FSectionDragged is the field that stores the AllowDrag value from the event handler. If it was set to false the code that is supposed to sync the Sections collection with the control is never called. QC #: Date Reported: Area: 73989 5/16/2009 Compiler Description: Steps: [QC Short Description] 1. Open the attached project 2. Do a "Build Project" 3. Execute the application 4. Everything works 5. Do a type AnsiString(CP_xxx) does not work correctly with "Make Project" "Make Project" (to recompile the *.dpr file) 6. Execute the application 7. The asserion suddenly fails. Expected: Unit2.OemString should work if you use "Make Project". Actual: Unit2.OemString is degenerated to an [QC Description] AnsiString(CP_ACP) if you do not rebuild your project. If the type AnsiString(CP_OEMCP) is declared in a different unit and you use "Make Project" instead of "Build Project" the "CP_OEMCP" is lost and the normal AnsiString(CP_ACP) is used in typecasts.

This bug is also in Delphi 2009 (RTM, Update 1, 2 and 3) QC Entry 73989

(JJS: See comments) (DLW: See comments)

[Tester Recommended] QC #: Date Reported: Area: 73991 5/16/2009 Midas\TClientDataSet Description: Steps: [QC Short Description] run the project close the form you will have 2 uknown memory leaks. 1 for Aggregators: if one is set and active Memory leak in 2 cases for TClientDataSet (designtime), it causes a memory leak. if Active := false; then no memory leak. ofcourse to work with it, it needs to be Active := true; 1 for defaultexpression: notice that test field has a defaultexpression (0). if u remove this [QC Description] value, it will be ok, putting it back and u will have a memory leak. notice that there is 1 more on-purpose leak - you can ignore it. read here for more information https://forums.codegear.com/thread.jspa? threadID=17320&tstart=0 D2009 update 2. Added by Sysop <<<< This issue seems to be same as QC#70409(RAID#267615). >>>> QC Entry 73991 QC #: Date Reported: Area: 73995 5/16/2009 IDE\Code Editor\Formatting Description: Steps: [QC Short Description] It was in the CodeFormatter requirements. [3417] Code Formatter: No menu item 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 [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. [vk] Formatting files not in the project fixed in rev.23158 load Math.pas unit with Open File and right click in the editor window --> no menu item all other - 23191 QC Entry 73995 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: 74014 5/18/2009 Compiler Description: Steps: [QC Short Description] unit test; type {$METHODINFO ON} TTest = class public class function Test : string; end; {$METHODINFO $METHODINFO caused bogus W1035 warning on class functions OFF} implementation class function TTest.Test: string; begin result := 'Test'; end; end.

[QC Description] The compiler issues bogus W1035 warnings when a class that has MethodInfo turned on has public class functions.

[DCC Warning] Unit1.pas(49): W1035 Return value of function 'Test' might be undefined QC Entry 74014 QC #: Date Reported: Area: 74036 5/18/2009 Modeling\Metrics Description: Steps: [QC Short Description] 1. Start IDE. AV happens after 'QA Metrics' execution and during the end of IDE. 2. [File]-[New]-[VCL Forms Application - Delphi] 3. Show a code editor. [QC Description] 4. [Project]-[QA Metrics] OS : Windows Vista Ultimate SP1, Japanese 5. Click the 'Start' button. Weaver : Build 3417, Japanese 6. Close a Metrics dialog. 7. End IDE. I installed Visual Studio 2008 in order to get information more. The dialog of AV is displayed after the window of IDE disappears. I got the address with the JIT debugger of VS2008. [vk, 22.09.2009] See CommentOnly note [vk] Fixed in trunk - revision 24876, branch - rev.24882 I installed the Weaver English edition in Windows XP Japanese. [vk, 28.09.2009] 2nd fix. Fixed in trunk - rev.24902, branch - rev.24904 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 QC #: Date Reported: Area: 74050 5/19/2009 Compiler\Delphi\Other Compiler Description: Steps: [QC Short Description] Steps by Uwe Schuster: - extract unit1.pas, unit2.pas and unit3.pas from attached QC74050Minimized.zip - F2084 Internal Error: URW2824 with class helper dcc32 unit1.pas expected: it compiles actual: unit1.pas(19) Fatal: F2084 Internal Error: URW2824 Original steps (does only repeat with "dcc32 unit1.pas", but not with "dcc32 "): Make a new project with [QC Description] four units: unit1, unit2, unit3 and unit4. Paste into them code as follow: unit Unit1; interface uses Windows, Project doesn't compile. There is problem with class helper and with 'whit do' [DCC Error] Unit1.pas(45): F2084 Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Internal Error: URW2824 private { Private declarations } public constructor Create(AOwner: TComponent); override; end; var Form1: QC Entry 74050 TForm1; implementation {$R *.dfm} uses Unit4, Unit2; { TForm1 } constructor TForm1.Create(AOwner: TComponent); var t4: TType4; t2: TType2; i: Integer; begin inherited; t4:= TType4.Create; t2:= TType2.Create; [Tester Recommended] with t2.stringList do i:= Count; end; end. unit Unit2; interface uses classes, Unit3; type TType2 = class(TObject) public stringList: TStringList; end; implementation end. unit Unit3; interface uses classes; type TStringListSortCompare2 = function(List: TStringList; Index1, Index2: Integer): Integer of object; TStringListHelper = class helper for TStringList protected procedure QuickSort2(L, R: Integer; SCompare: TStringListSortCompare2); public procedure CustomSort2(cmpFnc: TStringListSortCompare2); end; implementation { TStringListHelper } procedure TStringListHelper.CustomSort2(cmpFnc: TStringListSortCompare2); begin if not Sorted and (Count > 1) then begin Changing; QuickSort2(0, Count - 1, cmpFnc); Changed; end; end; procedure TStringListHelper.QuickSort2(L, R: Integer; SCompare: TStringListSortCompare2); var I, J, P: Integer; begin repeat I := L; J := R; P := (L + R) shr 1; repeat while SCompare(Self, I, P) < 0 do Inc(I); while SCompare(Self, J, P) > 0 do Dec(J); if I <= J then begin Exchange(I, J); if P = I then P := J else if P = J then P := I; Inc(I); Dec(J); end; until I > J; if L < J then QuickSort2(L, J, SCompare); L := I; until I >= R; end; end. unit Unit4; interface uses Unit2, Classes; type TType4 = class (TObject) public procedure foo; end; implementation uses Unit3; { TType4 } procedure TType4.foo; var stringList: TStringList; begin stringList.CustomSort2(nil); end; end. Then try to compile project. QC #: Date Reported: Area: 74052 5/19/2009 Internet Description: Steps: [Weaver Only] See description

[QC Short Description] Unit Sockets not correct converted to Unicode. Method ReceiveIn will crash

[QC Description] Unit Sockets are not correctly converted to Unicode the mothod Receiveln will crash function TBaseSocket.Receiveln(const eol: string): string; var len: Integer; buf: array[0..511] of char; eolptr: pchar; begin Result := ''; eolptr := nil; repeat len := PeekBuf(buf, sizeof(buf) - 1); //SIzeOf Buf is 1024 and len will return 1023 if len > 0 then begin buf[len] := #0; //buf[1023] = #0 wil crash, outside 0..511 eolptr := strpos(buf, pchar(eol)); if eolptr <> nil then len := eolptr - buf + length(eol); ReceiveBuf(buf, len); if eolptr <> nil then len := len - length(eol); buf[len] := #0; Result := Result + buf; end; until (len < 1) or (eolptr <> nil); end;

The units seems not been ready converted to UniCode. I send a attachment (TTSockets.pas) with corrections and my conversions .

I think

TSocketHost = type string; TSocketPort = type string;

also should be converted to AnsiString but I can see your need for Unicode here. You newer get any Unicode from Sockets methods typed as TSocketHost or TSocketPort

QC Entry 74052 QC #: Date Reported: Area: 74091 5/20/2009 Documentation Description: Steps: [QC Short Description] TWinControl.CreateParams not documented

[QC Description] ms-help://borland.bds5/delphivclwin32/!!MEMBEROVERVIEW_Controls_TWinControl.html doesn't contain the CreateParams method which cannot be found in the help elsewhere as well. QC Entry 74091 QC #: Date Reported: Area: 74122 5/20/2009 VCL\Standard Controls\TComboBox Description: Steps: [QC Short Description] Sadly, tteps are difficult to produce. The changin of the property is somewhat random. Sometimes, when saving TComboBox "randomly" saves ItemHeight = 13 and ItemHeight = 0 into the DFM a .dfm, the value is not changed. Thre steps might be something like this: - Create a VCL forms application and add a few TComboBoxes to the form - Save it to disk - Close the IDE - Check the value of [QC Description] TComboBox.ItemHeight in the .dfm - Reopen the IDE and project - Modify the form and save it - [Some other I review .dfm files for changes before checking them in, and I often see a form with a TComboBox ItemHeight steps might be required here, but it is unclear] - Go back to step "Close the IDE" and recheck until the property changing from 13 to 0 and back to 13 over the course of a few days without actually changing that ItemHeight value changes Maybe the issue is worse with forms involved in visual form inheritance, but maybe property (or any property on the combobox). The problem happens under both XP and Vista and has been not. The issue is discussed some more here: https://forums.codegear.com/thread.jspa?messageID=11734 happening since at least Delphi 2007.

The reason might be quoted here: "In the VCL source files, FItemHeight is set to "16" in the constructor (TCustomComboBox.Create), but the property's read method retrieves the ItemHeight by performing CB_GETITEMHEIGHT windows message: function TCustomComboBox.GetItemHt: Integer; begin if FStyle in [csOwnerDrawFixed, csOwnerDrawVariable] then Result := FItemHeight else Result := Perform(CB_GETITEMHEIGHT, 0, 0); end;

Looks like this call sometimes returns "0", which is then saved to the dfm file :-("

Quote from: https://forums.codegear.com/thread.jspa?messageID=11734 QC Entry 74122 QC #: Date Reported: Area: 74124 5/21/2009 IDE\Search\Find in Files Description: Steps: [QC Short Description] Steps: 1. Find in files 2. Click folders and groups 3. Create a new group and add the following two folders: Find in Files / Select Directories dialog: Turn off wordwrapping for the group contents C:\Program Files\CodeGear\RAD Studio\7.0\source\Win32\vcl C:\Program Files\CodeGear\RAD Studio\7.0 \source\Win32\rtl The memo shows the filenames with wordwrapping. C:\Program Files\CodeGear\RAD [QC Description] Studio\7.0\source \Win32\vcl C:\Program Files\CodeGear\RAD Studio\7.0\source \Win32\rtl This already looks Please turn off word wrapping in the "Select Directories" sub-dialog of a bit suspicious and confusing. And when starting the search, I find that Delphi made indeed 4 folders out of the the "Find in Files" dialog. It looks ugly and creates funny behaviour as Delphi will split the folder names into two: ------Project1 - CodeGear Delphi 2010 for Microsoft Windows - Unit1 [Built] ------several parts and try to search each of those parts. ------Cannot find the specified path: "\Win32\vcl\" ------OK ------

When trying to enter C:\Program Files\CodeGear\RAD Studio\7.0\source\Win32\vcl Delphi will make C:\Program Files\CodeGear\RAD Studio\7.0\source \Win32\vcl out of it and try to search those two paths.

Error message when searching: Cannot find the specified path: "\Win32\vcl\" QC Entry 74124 QC #: Date Reported: Area: 74132 5/21/2009 Database\dbExpressCore Description: Steps: [QC Short Description] - add a SQLConnection to a dbx3 driver - add a TSQLquery that tries to retrieve an INTEGER datatype from dbx3 drivers receive wrong datatype when fetching data the database - set the TSQLQuery to active - driver receives a request for a fldFLOAT instead of a fldINT32

[QC Description] If I'm using a dbx3 driver in Weaver (build 3417) datatypes do not seem to be mapped to the correct functions in my dbx3 driver via dbxadapter.dll - for example if I try to retrieve a INTEGER value from the database, the getDouble routine in my driver is called. This all worked fine in D2009.

Is there a wrong mapping introduced in the new dbxadapter.dll ? It seems to me that TDBXDataTypes and TFieldType were mixed - for example ftInteger is 6 in "driver land" and TDBXDataTypes, but 6 is ftDouble in TFieldType.

I can trace in sqlexpr.pas that the correct value of 6 (ftInteger) is used when DBXRow_GetFixedBytes is called, DBXRow_GetFixedBytes calls into dbxadapter where I have no source of and then this calls the GetDouble routine in my driver.

QC Entry 74132 QC #: Date Reported: Area: 74142 5/21/2009 IDE\Dialogs\Environment Options Description: Steps: [QC Short Description] These steps simulate the required install scenario and allow the problem to reproduced without re-installing. Code Insight options are unexpectedly reset to default values From a command prompt, CD to the bin directory. rename mlcc120.bpl to mlcc120.bak execute: bds.exe - pDelphi Click "OK" and "Yes" to error dialogs during startup. In the IDE: Tools | Options | Editor Options | Code [QC Description] Insight Check that the "Source file type" combo lists only "Pascal" Uncheck "Code Parameters" option (or any When installing only the Delphi Personality, and disabling the HTML functionality all of the Code Insight options option) Click OK New VCL Application Double click the form to goto code editor type to invoke for Pascal files are reset to the defaults the first time code insight is used. code completion Press Go back into Tools | Options | Editor Options | Code Insight Expected: Code QC Entry 74142 insight options are in previous state Actual: Code insight options are reset to the default values Exit the IDE and restore the mlcc120.bpl package. Reported by Simon H. QC #: Date Reported: Area: 74182 5/23/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] 1. Compile this code: type TX = record class constructor Create(); end; { TX } class constructor Class constructors do not compile with generic classes. TX.Create; begin end; begin end. 2. This code may actually compile if properly implemented in the compiler. Call the class constructor whenever a new "instantiated" types is used. It may be complicated ... 3. [QC Description] Otherwise simply emit a "Class constructor not allowed in generic types" so that things are easier to Invalid error message emited by the compiler in case of class constructors. Either make them work or emit a understand. Currently these errors are shown: [DCC Error] Project1.dpr(17): E2506 Method of parameterized more accetable error like "Class constructors not allowed in generic types." type declared in interface section must not use local symbol 'TX`1' [DCC Error] Project1.dpr(19): E2506 Method QC Entry 74182 of parameterized type declared in interface section must not use local symbol 'TX`1' QC #: Date Reported: Area: 74196 5/24/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Look at the source code and compare it with the Windows API documentation. Missing API constant

[QC Description] The ASSOCF_IGNOREUNKNOWN (or ASSOCF_INIT_IGNOREUNKNOWN if you look at http://msdn.microsoft.com/en-us/library/bb762471(VS.85).aspx) which has an ordinal value of 0x00000400 is missing from the ASSOCF enum type found in ShLwApi.pas. This is the case for both D2007 and D2009. QC Entry 74196 QC #: Date Reported: Area: 74253 5/26/2009 IDE\Code Editor Description: Steps: [QC Short Description] I found small problem with tab indent. Assume we have following text: (1)Begin (2) MyLine; (3)End; if I selected Inconvinience with indent 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 QC Entry 74253 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: 74268 5/27/2009 VCL Description: Steps: [QC Short Description] 1. Start new delphi 2009 project (Application have to support runtime themes, tick this checkbox in the project Caption disappearing in TLabel, TBitBtn and maybe other themed controls when switching to classic theme options). 2. Drop Label1 and BitBtn1 on the form. 3. Make sure that you are using non classic visual style (for ex. Windows XP style -> Silver). Compile, run this application. 4. Don't close your application and switch to [QC Description] windows classic style in the Appearance tab of the display properties. The result is you will not see Label1 and Themed controls like TBitBtn, TSpeedButton, TLabel and maybe other have drawing problem when switching BitBtn1 captions. The same for glyphs. Tested on XP, Vista, Windows 7. from themed visual style to windows classic theme.

For TBitBtn and TSpeedButton the problem is in TButtonGlyph.FThemesEnabled member that is not updated on changing theme to classic theme.

For TLabel the problem is in TCustomLabel.Create constructor, there is only once checked ThemesEnabled and on theme change it will not be checked and as the result we will not see label caption when switching from Themed visual style to windows classic visual style.

Added by Sysop <<<<<<<<<<<<<<< With Update 3 & Update 4, 1. For XP drawing of TBitBtn, TSpeedButton and TLabel works fine after switching to windows classic/standard theme. 2. For Vista and Windows 7 drawing of TBitBtn works fine, but TLabel captions disappeared after switching theme to windows classic/standard. >>>>>>>>>>>>>>> QC Entry 74268 QC #: Date Reported: Area: 74369 5/28/2009 VCL\Additional Controls\TStringGrid Description: Steps: [QC Short Description] Run the attached program. There's a ListBox on the right, which can be scrolled via touch. This doesn't work Can't scroll TStringGrid using touch with the StringGrid on the left.

[QC Description] In Windows 7 you can scroll controls which have a scrollbar using touch. This is supposed to work for 'legacy applications'.

It does not work with TStringGrid. The 'bounce window when scrolled all the way' thing actually does work, but scrolling itself doesn't. QC Entry 74369 QC #: Date Reported: Area: 74398 5/29/2009 Documentation Description: Steps: [QC Short Description] Thread.Onterminated help should mention that it's called via Synchronize

[QC Description] The text at ms-help://borland.bds5/delphivclwin32/Classes_TThread_OnTerminate.html should mention that the event is called via synchronize and thus only fires if the main thread has a working message pump. I recently found that out the hard way. One single sentence about this and the consequences would be great. QC Entry 74398 QC #: Date Reported: Area: 74426 5/29/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] polyline incorrectly declared in windows.pas

[QC Description] polyline is declared as: function Polyline(DC: HDC; var Points; Count: Integer): BOOL; stdcall; while it should be declared as: function Polyline(DC: HDC; const Points; Count: Integer): BOOL; stdcall;

QC Entry 74426

(JJS: Not expected in 14.0.3447.21911) QC #: Date Reported: Area: 74427 5/29/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] polygon incorrectly declared in windows.pas

[QC Description] polygon is declared as: function Polygon(DC: HDC; var Points; Count: Integer): BOOL; stdcall; while it should be declared as: function Polygon(DC: HDC; const Points; Count: Integer): BOOL; stdcall; QC Entry 74427

(JJS: Not expected in 14.0.3447.21911) QC #: Date Reported: Area: 74466 5/31/2009 VCL\Ribbon Controls Description: Steps: [QC Short Description] Place a TRibbon on a form Run the application Right click on the Taskbar Button TRibbon & System Menu

[QC Description] When a Form uses a TRibbon and I click the Taskbar Button to call the System Menu for the Form (Minimize, Maximize etc.) the Border Icons on the Form changing to "something" QC Entry 74466 QC #: Date Reported: Area: 74489 6/1/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Steps by Uwe Schuster: - extract the three files from the attached QC74489.zip - dcc32 -B project1.dpr F2084 Internal Error: URW1135 when using generic class with local enum type from another unit expected: it compiles actual: DeHL.Collections.SortedBag.pas(25) Fatal: F2084 Internal Error: URW1135 Original steps: - Open DeHL.groupproj project group - Select DeHL_Package.dproj project - Build the [QC Description] DeHL_Package project The build process stop with the message "[DCC Fatal Error] Error trying to compile DeHL Library with Dephi 2009 update 3 + 4. DeHL.Collections.SortedBag.pas(547): F2084 Internal Error: URW1135" (USc: error happens also with Update 1 and with RTM)

Sources from trunk version, revision 169 from http://delphilhlplib.googlecode.com/svn/trunk QC Entry 74489 QC #: Date Reported: Area: 74539 6/3/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile following program: program Project1; {$APPTYPE CONSOLE} uses SysUtils; Type TSomeClass = Internal error by using generic type in two dimensional array Class public X: array[0..1] of array of T; end; begin end.

[QC Description] Declaring a two dimensional array of Generic type results in an internal error (D8695). QC Entry 74539 QC #: Date Reported: Area: 74564 6/3/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] - extract the four files from the attached DeHLMakeAV.zip - dcc32 -B DeHL.Collections.HashSet.pas -> should F2084 Internal Error: AV004897B1-R0000000C-0 with DeHL revision 172 compile - dcc32 -M DeHL.Collections.HashSet.pas expected: it compiles actual: DeHL.Collections.HashSet.pas (16) Fatal: F2051 Unit DeHL.Collections.HashSet was compiled with a different version of [QC Description] DeHL.Types.TDictionary (maybe it does lead to an F2084 AV instead) Trying to compile DeHL revision 172 from http://delphilhlplib.googlecode.com/svn/trunk by Make does lead to an Optional complex steps: - export or checkout revision 172 from http://delphilhlplib.googlecode.com/svn/trunk - internal error in the IDE and on the command line. start Delphi 2009 - open DeHL.groupproj - call "Build" (SHIFT + F9) for DeHL_Package.bpl -> should compile - call "Compile" (Make; CTRL + F9) for DeHL_Package.bpl expected: it compiles actual: [DCC Fataler Fehler] -> see steps DeHL.Collections.HashSet.pas(141): F2084 Interner Fehler: AV21A7F5F9-R0000000E-0 (on the command line QC Entry 74564 the error is [DCC Fehler] DeHL.Collections.HashSet.pas(141): F2084 Internal Error: AV004897B1-R0000000C- 0) QC #: Date Reported: Area: 74571 6/4/2009 Midas\TClientDataSet Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.Db.Test.exe connection=ibconnection -s:TestRaid_269933 Problem with filter in TClientDataSet - Delphi2009 -or- [QC Description] I would like to create filter in TclientDataset. Create table "Personal" in Oracle 9.0 with field "Per_name" varchar2(10) and put 2 records into this table. The I have Oracle 9.0, dbExpress, table with varchar2(10) and sql query, for example "Select per_name from records are 'Smith' and 'Vagner'. personal". If I want to create filter in Clientdataset with command 'like' it doesn't work. It returns nothing. Use dbexpress technology for showing data from this table. I used Tsqldataset, TdataSETprovider, This feature is fully functional in Delphi 2006 and Delphi 6. It's very frustrating for me, I have to transfer Tclientdataset, TDataSource and TDBGrid. If you write following sql query "select per_name from personal" into application from Delphi 2006 into Delphi 2009 (because of UNicode support), but I can't transfer it because of the Tsqldataset and if you use TDBGrid to show data, it works. But If you want to use a filter in TclientDataSet bug in Tclientdatset with command 'LIKE'. '(Per_name LIKE '%Smith%')', the command 'Like' doesn't work. If you use a command '(Per_name = 'Smith')', it works. I have all updates of Delphi 2009.

Added by Sysop <<<<<<<<<<<< This fatal issue still exists in 12.0.3420.21218. Please see https://forums.codegear.com/thread.jspa?threadID=18273 >>>>>>>>>>>> QC Entry 74571 QC #: Date Reported: Area: 74586 6/4/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] - extract the attached zip file Internal compiler: URW1135 while using a generic interface in another unit - change dir to SmallTestCase - dcc32 Package1.dpk (or Collections.Interfaces.pas) (JJS: F2084 Internal Error: URW1100 in Weaver) expected: it compiles [QC Description] actual: -> see steps Package1.dpk(35) (Original: Try compile attached package) Fatal: F2084 Internal Error: URW1135 QC Entry 74586 See the following interface declaration in the attachment [Tester Recommended] unit Collections.Base;

interface

type IEnumerator = interface end;

IInterfaceEnumerator = IEnumerator;

implementation

end.

See also the following use of these types in the other unit below.

unit Collections.Interfaces;

interface

uses Collections.Base;

type IListEnumerator = IInterfaceEnumerator;

implementation

type TLinkedListEnumerator = class(TInterfacedObject, IListEnumerator) end;

end. QC #: Date Reported: Area: 74599 6/4/2009 Compiler\Delphi Description: Steps: [QC Short Description] Compile and run the attached test case involving the generic record declarations seen below. Generic records trashes memory when assigned See the following test output indicating failure. [QC Description] When using variables of generic records in a non generic class the variables are not aligned properly. FAIL #1 r.x = 999999999.00 type r.y = 111111104.06 TGenericRecord = record private FAIL Counter=1 FValue : T; fa : integer; public type constructor Create(AValue: T); TGenericRecord = record class operator Implicit(Value : TGenericRecord) : T; private class operator Implicit(Value: T): TGenericRecord; FValue : T; class operator Explicit(Value : TGenericRecord) : T; fa : integer; end; public constructor Create(AValue: T); TFaultyGenericStoreClass = class class operator Implicit(Value : TGenericRecord) : T; x, class operator Implicit(Value: T): TGenericRecord; y : TGenericRecord; class operator Explicit(Value : TGenericRecord) : T; end; end;

In this example the y is aligned in memory 12 bytes after x, thats ok BUT when assigned, a memcopy of 16 bytes are performed. And Sizeof(x) = 16! Assigning x will partially overwrite y! TFaultyGenericStoreClass = class x, If the class instead looks like this y : TGenericRecord; end; TWorkingGenericStoreClass = class x, y : TGenericRecord; end; TWorkingGenericStoreClass = class x, y is aligned 16 bytes after x and everything is ok. y : TGenericRecord; end; /Mikael QC Entry 74599 QC #: Date Reported: Area: 74633 6/5/2009 Documentation Description: Steps: [QC Short Description] TEncoding descendant classes lack content

[QC Description] The following classes contain only boiler plate descriptions.

TBigEndianUnicodeEncoding ms-help://embarcadero.rs2009/delphivclwin32/SysUtils_TBigEndianUnicodeEncoding.html

TMBCSEncoding ms-help://embarcadero.rs2009/delphivclwin32/SysUtils_TMBCSEncoding.html

TUnicodeEncoding ms-help://embarcadero.rs2009/delphivclwin32/SysUtils_TUnicodeEncoding.html

TUTF7Encoding ms-help://embarcadero.rs2009/delphivclwin32/SysUtils_TUTF7Encoding.html

TUTF8Encoding ms-help://embarcadero.rs2009/delphivclwin32/SysUtils_TUTF8Encoding.html QC Entry 74633 QC #: Date Reported: Area: 74646 6/6/2009 Midas\TClientDataSet Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=ibconnection -s:TestRaid_269966 Buffer overflow in TCustomClientDataSet.DataConvert with ftWideString Compile and Execute the following application. [QC Description] The TCustomClientDataSet.DataConvert can overwrite (stack) memory if it is called for a ftWideString field. The method doesn't check if data to copy fits into the buffer which is quaranteed to hold Field.DataSize bytes. program DBClientWideStringBug;

This bug also affects Delphi 2006 and 2007. {$APPTYPE CONSOLE} QC Entry 74646 uses SysUtils, DB, DBClient;

procedure Main; var cds: TClientDataSet; begin cds := TClientDataSet.Create(nil); try cds.FieldDefs.Add('FLD_WIDETEXT', ftWideString, dsMaxStringSize div 2);

cds.CreateDataSet; cds.AppendRecord([StringOfChar('a', dsMaxStringSize + 10)]);

cds.Fields[0].AsString; // << access violation due to buffer overflow overwriting return address finally cds.Free; end; end;

begin try Main; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. QC #: Date Reported: Area: 74662 6/7/2009 Database Description: Steps: [QC Short Description] INCLUDED IS DPR FOR D6 & D2009, USING SAME DB & SAME UNIT. Unzip app. DB included is from BLOB problem in D2009 vs D6 FB2.1.1, If you do not have FB, edit path in .sql file and create DB yourself. How app works: 1) Run app, press button, it loads Image1 from jpg file & display. 2) It saves that image into BLOB field & post. (After making sure [QC Description] it is a TJPegImage) 3)It loads the Image2 from the saved BLOB, works fine. 4)Apply CDS to DB. (No error) 5) In D2009, I can read BLOB fields written in D6, but I cannot write new ones. Close/Re-open DB and no record there. ********NOTE************ Run the D2009 APP first (with empty DB), when you try, it does not work. Now run the D6 app, click on 'Sunset' to commit to DB, works fine. Now run A) When I try to save a BLOB into a CDS (in memory)it works(read/write). D2009 app again but click on 'Winter' and you'll see it will load the sunset image created in D6. B) When I apply to DB via DSProvider, I get no error but does not save. C) In D6, the same app works 100% D) And I can read the record written in D6.

QC Entry 74662

Added by Sysop <<<<<<<<<<<< In myenvironment(Delphi 2009 w/ the latest updates and InterBase 2009), 'CDS.ApplyUpdates(0);' raises Exception(EIBClientError). This issue seems to be same as QC#68377. >>>>>>>>>>>> QC #: Date Reported: Area: 74663 6/7/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] QC#68147 has been closed as 'Fixed'. But, this issue is NOT fixed yet. SM_MEDIACENTER constant in Windows.pas has invalid value

[QC Description] SM_MEDIACENTER constant is defined in windows.pas as $87 but should be 87.

In Microsoft WinUser.h it is defined as: #define SM_MEDIACENTER 87

In Windows.pas it is defined as: SM_MEDIACENTER = $87 ; QC Entry 74663 QC #: Date Reported: Area: 74669 6/8/2009 IDE\Search\Find in Files Description: Steps: [QC Short Description] 0. On Vista or Windows 7 When 4bytes-character is included in source-code, result of "Find in Files" isn't correctly displayed 1. Open Attachment. 2.[Search | Find in Files] [QC Description] 3.Input 4bytes character to "Text to find:". When 4bytes-character is included in source-code, result of "Find in Files" isn't correctly displayed. (Please See find_input_4bytes_character.gif) QC Entry 74669 4.The display of the result collapses.

EXP: UTF_8.txt: // 1111 SSDTQ UTF_8.txt: // 1111 DTQSS UTF_8.txt: // 1111 TQSSD UTF_8.txt: // 1111 QSSDT

ACT: UTF_8.txt: // 1111 SSDTQ UTF_8.txt: // 1111 DTQLS // Lost Single-byte Character UTF_8.txt: // 1111 TQLSD // Lost Single-byte Character UTF_8.txt: // 1111 QLSDT // Lost Single-byte Character

S: 1byte-character. D: 2byte-character. T: 3byte-character. Q: 4byte-character. L: Lost character.

# 3bytes character is OK. QC #: Date Reported: Area: 74682 6/8/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Paste and run (I'm using fastmm4 to get a full report) program Test; {$APPTYPE CONSOLE} uses //fastmm4, memory leak reported in generics record SysUtils; type TRecord = record FText : string; class operator implicit(const S : string): TRecord; end; class operator TRecord.implicit(const S : string): TRecord; begin Result.FText := S; end; type [QC Description] TShortName = record Name: TRecord; end; var x : TShortName; begin In a rather complex situation (generic record inside a record; in my context it was inside a class), fastmm reports ReportMemoryLeaksOnShutdown := true; X.Name := 'b'; // this would clear the string! // x.Name := ''; end. memory leak.

I traced the finalization order, and it seems that the strings are still somehow referenced and therefore not finalized.

Checked w/ update 3/4. QC Entry 74682 QC #: Date Reported: Area: 74740 6/10/2009 Midas\TWebConnection Description: Steps: [QC Short Description] 1. Create VCL Application 2. Add Remote Data Module 3. Add DataSet to connect with DB 4. Add Automated Incident Report DatasetProvide 5. Activate DataSet 6. run and register server application 7. run IIS 8. Copy httpsrvr.dll to root folder of IIS website 9. Check if it's available throw WebBrowser 10. Create Client application 11. Add [QC Description] webconnection 12. set address to httpsrvr.dll 13. Try to choose serverName 14. Error appears Access violation at address 50C07EF1 in module 'dsnapcon140.bpl'. Read of address 00000000.

I created DataSnap Application, run IIS, copy httpsrvr.dll in root directory of server directory. Run server application on server to registrate it. Than create client application, add webconnection to it, enter http-path to httpsrvr.dll and try to choose server-name, then error appears. QC Entry 74740 QC #: Date Reported: Area: 74775 6/11/2009 IDE\Code Parameters Description: Steps: [QC Short Description] 1. disable UAC Code Insight settings doesn't save under 64bit vista (and maybe others) 2. run delphi -> tools -> editor options -> code insight 3. for example, uncheck "Error Insight" or "Help Insight". [QC Description] 4. press OK see steps 5. write some code 6. open options again: nothing is saved...

Added by Sysop <<<<<<<<<<< it seems my issue similar to QC#71330 >>>>>>>>>>> QC Entry 74775 QC #: Date Reported: Area: 74812 6/12/2009 RTL\Delphi\Thread support Description: Steps: [QC Short Description] Compile and run the following attached program. Calling TThread.CurrentThread raises access violation exception See the following program output indicating failure. QC Entry 74812 FAIL - Exception Error ClassName=EAccessViolation (JJS: TThread.GetCurrentThread accesses instance field FCurrentThread ) Message=Access violation at address 00433180 in module 'BTS270160.exe'. Read of address 00FCC6C4

program BTS270160;

{ Calling TThread.CurrentThread raises access violation exception }

{$APPTYPE CONSOLE}

uses SysUtils, Classes;

begin try TThread.CurrentThread; WriteLn('PASS'); 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: 74835 6/13/2009 RTL\Delphi\File Management\TDirectory Description: Steps: [QC Short Description] Test code: var s: tstringdynarray; I: Integer; begin s := TDirectory.GetDirectories('C:\', '*.*', IOUtils.TDirectory.GetDirectories ignores SearchOption parameter tsearchoption.soTopDirectoryOnly); for I := 0 to Length(s) - 1 do ListBox1.Items.Add(S[i]); end;

[QC Description] The function IOUtils.TDirectory.GetDirectories ignores the SearchOption parameter. It will always use soAllDirectories as SearchOption. class function TDirectory.GetDirectories(const Path, SearchPattern: string; const SearchOption: TSearchOption): TStringDynArray; begin CheckGetDirectoriesParameters(Path, SearchPattern);

Result := DoGetDirectories(Path, SearchPattern, TSearchOption.soAllDirectories, nil); end; QC Entry 74835 QC #: Date Reported: Area: 74836 6/13/2009 IDE\Docking Description: Steps: [QC Short Description] 1.Object-Inspector is dropped to Project-Manager or 1.Tool-Palette is dropped to Project-Manager EXP: Each Difficult to dock Object-Inspector and Tool-Palette with Project-Manager window is docked. ACT: Window is often maximized.

[QC Description] Difficult to dock Object-Inspector and Tool-Palette with Project-Manager. When docking, the window is maximized. QC Entry 74836 QC #: Date Reported: Area: 74846 6/14/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the following code (dcc32 qc74846.pas): // ----- program qc74846; uses SysUtils; type Passing method references to generic functions raises ICE TGenericFactory = TFunc ; TFactoryFactory = class class function GetGenericFactory : TGenericFactory; static; end; class function TFactoryFactory.GetGenericFactory: TGenericFactory; [QC Description] begin Result := function (Info: Pointer): TObject begin Result := T.Create; end; end; end. // ----- Exp.: compiles See steps. Act.: Fatal: F2084 Internal error: GPFC00000FD-0044AD8D-0 QC Entry 74846

[Tester Recommended] QC #: Date Reported: Area: 74855 6/14/2009 Compiler\Delphi\Errors - Warnings Description: Steps: [QC Short Description] - save the following code as EnumValue.dpr - dcc32 EnumValue.dpr expected: EnumValue.dpr(11) Error: F2084 Internal Error: SY9804 when trying to use a non existing ident as value in an enumeration E2003 Undeclared identifier: 'TCascadeHydroplantBoundFields.IDoNotExists' actual: EnumValue.dpr(11) Fatal: F2084 Internal Error: SY9804 program EnumValue; {$APPTYPE CONSOLE} type [QC Description] TCascadeHydroplantBoundFields = ( HasBackwater ); TCascadeHydroplantLookupFields = -> see steps ( HasBackwaterNew = TCascadeHydroplantBoundFields.IDoNotExists ); begin end.

Original description: See attached example.

QC Entry 74855 QC #: Date Reported: Area: 74859 6/14/2009 RTL\Delphi\File Management\TDirectory Description: Steps: [QC Short Description] program Project1; {$APPTYPE CONSOLE} uses SysUtils, IOUtils; begin try TDirectory.GetDirectories('\\? IOUtils.TDirectory.GetDirectories complains about filenames starting with \\?\C:\ \C:\test', '*.*', TSearchOption.soAllDirectories); except on E: Exception do Writeln('FAIL: ' +E.ClassName, ': ', E.Message); end; end. [QC Description] The windows SDK documents the path prefix \\?\ to extend the maximum path length to approx. 32000 characters. IOUtils.TDiretory.GetDirectories rejects a path with that name with the error "The path format is not supported".

The same problem exists in TFile.InternalCheckFilePathParam.

We've run into the 260 char path length limit a couple of times especially when using network shares, so this syntax should be supported.

For a description of the \\?\ syntax see the topic "Naming a File" in the Windows SDK. This topic is missing in the index, but you can find a link in the description of the CreateFile function. QC Entry 74859 QC #: Date Reported: Area: 74887 6/15/2009 Compiler\Delphi\Anonymous Methods Description: Steps: [QC Short Description] Compile and run the attached application below. Anonymous methods with 4-byte VAR params generate invalid code See the following program output indicating failure. [QC Description] Consider an anonymous method such as... FAIL - Exception Error ClassName=EAccessViolation TMyProc = reference to procedure(var Obj: TFoo); Message=Access violation at address 00408CD3 in module 'BTS270151.exe'. Read of address 8D004285

The compiler generates invalid code at the point of calling an anonymous method like this one (the var parameter must be 4 bytes in size). Specifically, the generated code passes the "value" of the var param, not the program BTS270151; "address". In other words, it dereferences a pointer that it should not dereference. { Anonymous methods with 4-byte VAR params generate invalid code } The result, of course, is unpredictable, but usually an access violation. QC Entry 74887 {$APPTYPE CONSOLE}

uses Windows, SysUtils, Classes, Variants;

type TMyProc = reference to procedure(var Obj: TObject);

procedure MyProc(var Obj: TObject); begin Writeln(Obj.ClassName); end;

procedure Demo(const Proc: TMyProc); var z: TObject; begin z := TStringList.Create; try Proc(z); finally z.Free; end; end;

procedure Main; begin try Demo(MyProc); WriteLn('PASS'); except on E:Exception do begin Writeln('FAIL - Exception Error'); WriteLn(' ClassName=', E.Classname); WriteLn(' Message=', E.Message); end; end; end;

begin Main; end.

QC #: Date Reported: Area: 74889 6/15/2009 Debugger\Evaluator\Delphi Description: Steps: [QC Short Description] Inspecting a string with quotes doesn't work properly

[QC Description] When you inspect a string in the debugger, if the string has single-quote characters, the debugger doesn't show a proper Delphi string literal -- it refuses to double-up the quotes. For example... s := 'abc''xyz';

If we inspect s after running the above statement, the debugger shows...

'abc'xyz'

Perhaps this is "easier to read", but it causes some serious problems...

1) You can't copy-and-paste from here into a source code unit (or other tool that expects a literal). 2) It breaks the "modify" part of the Evaluate/Modify dialog -- in the sense that Evaluating the invalid string is placed into the "New Value" edit. For example, if we evaluate "s" above, then hit the "Modify button, then s will be trucated to just 'abc'. 3) It is ambiguous, in many cases. For example, if the Evaluate command shows the following string: 'a'#9'b' then there are actually to real strings that could be behind this: 'a'#9'b' and 'a''#9''b'. One is a 3-character string with a tab, the other is a 6-character string with no tab. To determine whcih one you have, you must resort to things like taking the length of the string, or looking at the individual characters in the string.

QC Entry 74889 QC #: Date Reported: Area: 74902 6/15/2009 VCL\Graphics Description: Steps: [QC Short Description] - Create a new VCL forms app, and hoop up an FormPaint event like this: uses Direct2D; procedure TDirect2DCanvas leaks memory TForm1.FormPaint(Sender: TObject); var D2DCanvas: TDirect2DCanvas; begin D2DCanvas := TDirect2DCanvas.Create(Canvas, ClientRect); D2DCanvas.RenderTarget.BeginDraw; [QC Description] D2DCanvas.RenderTarget.EndDraw; D2DCanvas.Free; end; begin ReportMemoryLeaksOnShutdown := true; see steps end. - Run and close the app. You'll see that FastMM finds a leaked QC Entry 74902 TList, among others. QC #: Date Reported: Area: 74915 6/16/2009 VCL\Core VCL Classes Description: Steps: [QC Short Description] Controls can't receive mousemoves coming from windows 7 touch

[QC Description] The current implementation of interactive gestures makes it impossible for a control to receive mousemove messages coming from Windows 7 touch if a parent control uses an interactive gesture. This is quite a problem since TScrollingWincontrol sets TouchManager.InteractiveGestures to [idPan].

The cause is in TWinControl.WMGestureNotify():

// Find first control that wants a gesture while (FTouchControl.Parent <> nil) and (FTouchControl.TouchManager.InteractiveGestures = []) do FTouchControl := FTouchControl.Parent;

There should be an option to block pass through to the parent QC Entry 74915 QC #: Date Reported: Area: 74917 6/16/2009 VCL\Core VCL Classes Description: Steps: [QC Short Description] Create a new VCL forms app and run it on a Windows 7 multitouch machine. Try moving the form using your Can't move form using windows 7 touch finger. You can't.

[QC Description] see steps QC Entry 74917 QC #: Date Reported: Area: 74919 6/16/2009 VCL\Core VCL Classes Description: Steps: [QC Short Description] interactive gestures issue

[QC Description] The current interactive gestures implementation has a feature that's a bit unfortunate. Gesture events can't be forwarded to the control's parent is the control implements a gesture itself.

Let's say we have a TButton which is on a TScrollBox. For some reason the button responds to igPressAndTap. Now igPan no longer works on the button, so you can't pan the scrollbox in that area, which probably isn't what you want. QC Entry 74919 QC #: Date Reported: Area: 74926 6/16/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] 1. File | New VCL Application TTouchKeyboard: no autorepeat on arrow keys 2. Drop a TTouchKeyboard on the form 3. Drop a TMemo on the form QC Entry 74926 4. Run 5. Put a long string of test into the memo. For example "aaaaaaaaaaaaaaaaaaaaaaa" 6. Make sure the cursor is at the end of the line 7. Press the left arrow on the TTouchKeyboard and hold it down

//exp:the cursor to move left //act:For some reason the form cycles through tab instead of repeating the left arrow down. QC #: Date Reported: Area: 74931 6/16/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] - run a keyboard on a windows 7 multitouch machine - do this with your fingers: 1. Shift up down 2. Aplha key TTouchKeyboard: multitouch Shift issue down 3. Alpha key up 4. Shift key up Expected: Shift key is off (like the Windows 7 keyboard) Observed: Shift key is on QC Entry 74931 QC #: Date Reported: Area: 74932 6/16/2009 VCL Description: Steps: [QC Short Description] TTouchKeyboard: touch doesn't work if DPI <> 96

[QC Description] Touch doesn't work if you run a keyboard on a windows 7 multitouch machine running at DPI=150.

This only happens if Windows scales your app. There's no problem if you call SetProcessDPIAware and let the VCL do the scaling.

Looks like Windows doesn't scale the WM_Touch coordinates like it does the mouse coordinates. QC Entry 74932 QC #: Date Reported: Area: 74934 6/16/2009 VCL\Graphics\TWICImage Description: Steps: [QC Short Description] TWICImage crashes in LoadFromStream procedure when loading TIFF image saved in CMYK mode. 1. I Crash in TWICImage opened some JPEG image in Photoshop, changed mode to CMYK color and saved it in TIFF format. (other TIFF options - like Image Compression, Pixel Order ,etc - don't matter) 2. Assigned resulted .tif image to QC Entry 74934 TImage control on the form. At this point I can see expected image in the designer. 3. When run application, it crashes in procedure TWICImage.LoadFromStream. Alternatively, toggling from Form View to Text View and back to Form View (Alt-F12 twice) crashes IDE in vcl140.bpl I attached TIFF image I was testing with. QC #: Date Reported: Area: 74950 6/16/2009 Debugger Description: Steps: [QC Short Description] - save the attached files - start Weaver - build the package DuplicateReplaceVisualizerTestPackage.dpk - try to Installing a second replace debugger visualizer for the same type raises an exception install that package expected: the package will be installed without an exception actual: ------Fehler ------Registration procedure, Duplicatereplacevisualizertestunit.Register in package [QC Description] C:\Users\Public\Documents\RAD Studio\7.0\Bpl\DuplicateReplaceVisualizerTestPackage.bpl raised exception Trying to install/load a package that tries to install a replace debugger visualizer for a type, which already has a class ENonAIRException: There is already a IOTADebuggerVisualizerValueReplacer visualizer installed for register visualizer, fails with a ENonAIRException. type 'TFooBar'. ------OK Details >> ------change TypeName in the method That could be a problem if two 3rd party products install a replace debugger visualizer for the same type. (These TSecondFooBarVisualizer.GetSupportedType from 'TFooBar' to 'TFooBar2' - try to install that package again -> types could be different, but have the same name) this time it should work - change TypeName in the method TSecondFooBarVisualizer.GetSupportedType back I think the debugger should just use the first enabled visualizer in the visualizer list, but must not raise an to 'TFooBar' - compile the package again expected: it compiles actual: it compiles and the following message is exception. shown ------DuplicateReplaceVisualizerTestPackage - Weaver - DuplicateReplaceVisualizerTestUnit [Built] ------Registration procedure, -> see steps Duplicatereplacevisualizertestunit.Register in package C:\Users\Public\Documents\RAD Studio\7.0 QC Entry 74950 \Bpl\DuplicateReplaceVisualizerTestPackage.bpl raised exception class ENonAIRException: There is already a IOTADebuggerVisualizerValueReplacer visualizer installed for type 'TFooBar' ------OK ------QC #: Date Reported: Area: 74953 6/16/2009 Debugger Description: Steps: [QC Short Description] - save the attached files - start Weaver - build and install the package ViewVisualizerGarbageTestPackage.dpk EvalResult in IOTADebuggerVisualizerExternalViewerUpdater.RefreshVisualizer contains garbage at the end - open ViewVisualizationGarbageTestProject.dpr - put a breakpoint on line 14 (F := TFoo...) - start the program - add F to the Watch List and show the visualizer, dock it somewhere and see that the length of the EvalResult [QC Description] string is 6 (the image FirstEvalResult.png shows it) - press F8 (Step Over) - have a look at the visualizer In contrast to IOTADebuggerVisualizerExternalViewer.Show the EvalResult in window expected: (1, 0) Length: 6 actual: (1, 0) Length: 3072 (see RefreshedEvalResult.png) IOTADebuggerVisualizerExternalViewerUpdater.RefreshVisualizer contains a lot of garbage at the end.

-> see steps and images QC Entry 74953 QC #: Date Reported: Area: 74954 6/16/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] - create a new VCL forms app - drop a TTouchKeyboard on it - add this to the unit: initialization TTouchKeyboard: memory leak ReportMemoryLeaksOnShutdown := true; end. - run and close the program. You now see this: ------Unexpected Memory Leak ------An unexpected memory leak has occurred. The QC Entry 74954 unexpected small block leaks are: 1 - 12 bytes: Unknown x 20 13 - 20 bytes: UnicodeString x 107 21 - 28 bytes: TVirtualKeys x 20, UnicodeString x 117, Unknown x 4 29 - 36 bytes: UnicodeString x 1, Unknown x 120 45 - 52 bytes: Unknown x 1 173 - 188 bytes: Unknown x 1 381 - 412 bytes: Unknown x 4 797 - 876 bytes: Unknown x 1 1645 - 1804 bytes: Unknown x 14 ------OK ------QC #: Date Reported: Area: 74970 6/17/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] TTouchKeyboard: NumPad keys don't turn white

[QC Description] The keys of the NumPad layout don't turn white while clicked using the mouse. It works fine with the Standard layout. QC Entry 74970 QC #: Date Reported: Area: 74971 6/17/2009 VCL Description: Steps: [QC Short Description] TTouchKeyboard: LoadFromStream/LoadFromResourceName should be class procedures

[QC Description] All they do is add something to the FKeyboardLayouts class variable.

Currently you can't add a layout without creating an instance of TTouchKeyboard. QC Entry 74971 QC #: Date Reported: Area: 74994 6/17/2009 Database Description: Steps: [QC Short Description] ftLongWord, ftShortint and ftByte are missing in DBCommon

[QC Description] function TFilterExpr.PutConstant(Node: PExprNode): Integer; ... else DatabaseErrorFmt(SExprBadConst, [Node^.FData]); ... end; It would appear that CodeGear forgot to put code into DBCommon.pas to support new field types they added in D2009, specifically ftLongWord which is now used by Word32 fields. case Node^.FDataType of ftSmallInt, ftInteger, ftWord, ftAutoInc:

That should probably have ftLongWord, ftShortint and ftByte added. QC Entry 74994 QC #: Date Reported: Area: 75007 6/17/2009 Compiler\Delphi\Errors - Warnings Description: Steps: [QC Short Description] program BTS270256; F2084 Internal Error: AV0042A1A1-R00000000-0 with self referencing enumeration { F2084 Internal Error: AV0042A1A1-R00000000-0 with self referencing enumeration } [QC Description] While playing with QC 74855 Uwe Schuster noticed that there is an internal error with a self referencing {$APPTYPE CONSOLE} enumeration type -> see steps TCascadeHydroplantLookupFields = ( QC Entry 75007 HasBackwaterNew = TCascadeHydroplantLookupFields.IDoNotExists );

begin writeLn('FAIL - Compile-time error expected'); end.

{##COMERR.English: Error: E2003 Undeclared identifier: 'TCascadeHydroplantLookupFields.IDoNotExists'} QC #: Date Reported: Area: 75013 6/17/2009 VCL\Win 32 Controls\TPageControl Description: Steps: [QC Short Description] TPageControl (actually, TTabSheet) is painted with some artefacts in Windows XP with standard Silver theme. Incorrect painting of TPageControl with Silver theme in WinXP This doesn't happen with standard Blue and Olive themes. In previous versions of Delphi it was painted correctly. Attached 3 screenshots: Weaver.png - application written and compiled in Weaver D2009.png - same QC Entry 75013 application compiled in Delphi 2009 VS2008.png - similar application written in Visual Studio 2008 using Windows Forms controls (TabControl) All screenshots are made in WinXP with Silver theme enabled. [Pleas leave this as Must Fix. It's a regression in Weaver] QC #: Date Reported: Area: 75015 6/17/2009 IDE\Code Editor\Help Insight Description: Steps: [QC Short Description] Automated Incident Report

[QC Description] Object reference not set to an instance of an object.

- Created new VCL Forms project - Opened RTTI.pas - Scrolled around in it for a while... moved the mouse over it a couple of times (just looking at the interface section for TValue) - boom

Did some more testing, it's specifically this line: function Cast: TValue; overload; when moving the cursor over the "T" QC Entry 75015 QC #: Date Reported: Area: 75017 6/17/2009 Database\Core VCL\Filters Description: Steps: [QC Short Description] DBCommon.pas is missing support for ftLongWord and ftExtended

[QC Description] Some field types are missing in a couple of places in DbCommon.pas: function IsNumeric(DataType: TFieldType): Boolean; is missing support for ftLongWord and ftExtended function TFilterExpr.PutConstant(Node: PExprNode): Integer; is missing support for ftLongWord and ftExtended. It also might fail with ftAutoInc if it's mapped to a TUnsignedAutoIncField and a constant value > High(Integer) is passed. ftLongWord should map to fldUINT32 ftExtended should map to fldFLOATIEEE procedure TExprParser.TypeCheckArithOp(Node: PExprNode); should probably be a bit more careful in the IsNumeric() and IsNumeric() case. e.g. if one of the operands is an extended, the result should be an extended too.

I've rated this as a critical error because as long as this is not fixed, it's not possible to use TExprParser for any filter which compares a ftLongWord or ftExtended against a constant value (parser bombs out with an exception, no filter expression is being created). QC Entry 75017 QC #: Date Reported: Area: 75026 6/18/2009 RTL\Delphi\File Management\TDirectory Description: Steps: [QC Short Description] Copy the attached test case into its own directory. IOUtils.TDirectory.GetDirectories may ignore certain directories erroneously Create the following subdirectories in this directory.

[QC Description] A If you call TDirectory.GetDirectories with a SearchPattern of "*.*", then directories that do not contain a full-stop B.B in their names are excluded from the results. C.C.C

The problem lies in TPath.DoMatchesPattern (roundabout line 2714 in IOUtils.pas). It returns "false" for a file Compile and run the attached application below. without a file extension when you search for "*.*". The standard convention is for "*.*" to match any filename. QC Entry 75026 See program output similar to the following indicating failure.

FAIL - Value not found - (c:\work\A) FAIL Counter=2

program BTS270253;

{ IOUtils.TDirectory.GetDirectories may ignore certain directories erroneously }

{$APPTYPE CONSOLE}

uses SysUtils, Types, IOUtils;

var Counter: Integer = 0;

procedure FindStr(const Value: String; List: TStringDynArray); var S: String; begin for S in List do begin if SameText(Value, S) then begin Inc(Counter); Exit; end; end; WriteLn('FAIL - Value not found - (', Value, ')'); end;

procedure DoTest; var DirName: String; DirList: TStringDynArray; S: String; begin DirName := GetCurrentDir; DirList := TDirectory.GetDirectories(DirName, '*.*', TSearchOption.soAllDirectories); DirName := DirName + PathDelim; FindStr(DirName + 'A', DirList); FindStr(DirName + 'B.B', DirList); FindStr(DirName + 'C.C.C', DirList); end;

begin try DoTest; if Counter = 3 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: 75034 6/18/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. Cannot define a property on a generic-instanciated field See the following unexpected compile-time error for the line marked #1. [QC Description] See exemple code in steps to reproduce. Error: E2467 Record or object type required The TBase and TBase2 classes should have the same behaviour, but the compiler refuses to compile TDerived2 (TDerived is fine). QC Entry 75034 program BTS270257;

[Tester Recommended] { Cannot define a property on a generic-instanciated field }

{$APPTYPE CONSOLE}

uses SysUtils;

type myrecord = record a : integer; b : char; end;

// Basic usage : works TBase = class(TObject) protected myfield : myrecord; end;

TDerived = class(TBase) property reada : integer read myfield.a; end;

// Using generics... the compiler fails to compile TDerived2 TBase2 = class(TObject) protected myfield : T; end;

TDerived2 = class(TBase2) property reada : integer read myfield.a; //#1// end;

begin WriteLn('PASS'); //PASS on compile// end. QC #: Date Reported: Area: 75037 6/18/2009 Compiler\Delphi\Language Description: Steps: [QC Short Description] unit ThisBreaksDelphi; interface uses Generics.Collections; const EOL = #13#10; type TSomeClass = class Local enumerations, generics and constants lead to Erroneous "Undeclared identifier" error (TObject) data: string; procedure WriteLine(s: string); end; function OrdinaryFunction(s: string) : integer; procedure GenericFunction(lst: TList); implementation // Removing this... procedure GenericFunction [QC Description] (lst: TList); begin end; function OrdinaryFunction(s: string) : integer; type TSomeEnum = (enumThing, (Actually under D2009 Update 3 - is not available in drop-down box on the bug submission form) enumThing2); // ... or this fixes it begin Result := 0; end; procedure TSomeClass.WriteLine(s: string); begin data := s + String(EOL); end; end. The following code does not compile. Error:

[DCC Error] ThisBreaksDelphi.pas(39): E2003 Undeclared identifier: 'EOL'

Removing either "GenericFunction", or the locally defined "TSomeEnum" type fixes the problem.

Additionally moving GenericFunction down to below OrdinaryFunction also fixes this issue. QC Entry 75037 QC #: Date Reported: Area: 75042 6/18/2009 VCL\Additional Controls\TSpeedButton Description: Steps: [QC Short Description] 1. New VCL Forms Application 2. Drop SpeedButton 3. Flat = True 4. Enable = False SpeedButton not disable SpeedButton no disable if Flat = True and Enable = False

[QC Description]

Added by Sysop <<<<<<< Please make sure 'Enable runtime themes' is turned ON to reproduce this issue. >>>>>>> QC Entry 75042 QC #: Date Reported: Area: 75099 6/20/2009 Compiler\Delphi\Execution Description: Steps: [QC Short Description] Compile the attached application below see the following compile-time error indicating failure. Internal Error TI2013 (Attributes) Fatal: F2084 Internal Error: TI2050 [QC Description] Internal Error TI2013 when trying to compile the project from the steps. QC Entry 75099 program BTS270302;

{ Internal Error TI2013 (Attributes) }

{$APPTYPE CONSOLE}

uses SysUtils;

type MyInfoAttribute = class(TCustomAttribute) public constructor Create(s: string); end;

TTest = class(TObject) private { Private declarations } public { Public declarations } [MyInfo('123')] procedure Test; end;

{ TTest }

procedure TTest.Test; begin

end;

{ MyInfoAttribute }

constructor MyInfoAttribute.Create(s: string); begin

end;

begin try WriteLn('PASS'); { PASS on compile } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. QC #: Date Reported: Area: 75104 6/20/2009 Compiler\Delphi\Execution Description: Steps: [QC Short Description] - save the following console application - dcc32 AttributeTypeTest.dpr expected: it compiles actual: F2084 Internal Error: TI2000 with several RTTI attribute types AttributeTypeTest.dpr(15) Fatal: F2084 Internal Error: TI2000 program AttributeTypeTest; {$APPTYPE CONSOLE} type MyInfoAttribute = class(TCustomAttribute) public constructor Create(AValue: Double); end; [QC Description] [MyInfo(0.0)] TTest = class(TObject) end; constructor MyInfoAttribute.Create(AValue: Double); begin end; begin This is a follow up to WriteLn('PASS'); end.

Report No: 75099 (RAID: 270302) Status: Open Internal Error TI2013 (Attributes) http://qc.embarcadero.com/wc/qcmain.aspx?d=75099 and it seems that some types create a TI2000 error instead of TI2013 error. These types are at least: - Float types (Double, Extended, Single, ...) - Pointers (Pointer, TObject, IInterface) with nil as value - Variants with a float as value

-> see steps QC Entry 75104 QC #: Date Reported: Area: 75105 6/20/2009 Documentation Description: Steps: [QC Short Description] Missing help for Variants

[QC Description] For instance: - Variants.ChangeAnyProc Variable (This is variable Variants.ChangeAnyProc.) - Variants.TAnyProc Type (This is type Variants.TAnyProc.)

Man, can't you just search through help topics where the Description starts with the words "This is...". Sheesh!!! QC Entry 75105 QC #: Date Reported: Area: 75117 6/21/2009 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] Compile and run the attached application below. Wrong code generation for property access of nested Old Style objects. See the following program output indicating failure. [QC Description] Code generation for direct access of nested Old Style objects through property read/write identifiers is wrong, FAIL - Exception Error resulting in access violations. ClassName=EAccessViolation QC Entry 75117 Message=Access violation at address 004121A0 in module 'BTS270346.exe'. Write of address 0079C4D4

program BTS270346; { Wrong code generation for property access of internal objects }

uses SysUtils;

{$APPTYPE CONSOLE}

type TInternal = object // no access violation if this is a record public Field: Integer; end;

TFoo = object // or class, or record private Internal: TInternal; public property Field: Integer read Internal.Field write Internal.Field; end;

var Foo: TFoo;

begin try Foo.Field := 1; // access violation in build 14.0.3449.21988 WriteLn('PASS'); exit; 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: 75125 6/21/2009 IDE\Code Editor Description: Steps: [QC Short Description] 1. File -> New console application 2. Press Ctrl-F, enter a search term (e.g. a single character 'e') and search Undo after search inserts superfluous navigation events for it multiple times with F3 3. Hit Ctrl-Z repeatedly to undo ==> instead of jumping backwards to the last 'e' with each Ctrl-Z, the caret jumps to the top of the file inbetween each undo event. Every Ctrl-Z should simply jump [QC Description] backwards and mark the preceding 'e' (exactly as in Delphi 7 and earlier). This applies when the default "group See steps for description undo" option is set; without "group undo", there is still one extra navigation event for each undo (three instead QC Entry 75125 of two) which is annoying QC #: Date Reported: Area: 75144 6/22/2009 IDE\Project Management\Project Manager Description: Steps: [QC Short Description] Copy the attached .dst file into %appdata%\CodeGear\BDS\7.0 directory FastMM error on exit from IDE Open Weaver and switch to that desktop. Close IDE. [QC Description] This is new with build 3449. Exp: IDE will close without error Act: Every time I exit the IDE since install of build 3449 i see a FastMM memory error: FastMM has detected an attempt to call a virtual method on a freed object. An access violation will now be raised in order to abort the current operation. FastMM has detected an attempt to call a virtual method on a freed object. An access violation will now be raised in order to abort the current operation. Freed object class: TRegistryIniFile Virtual method: Offset +16 Freed object class: TRegistryIniFile Virtual method address: 50087A08 The allocation number was: 647 Virtual method: Offset +16

Virtual method address: 50087A08

The allocation number was: 647

The full EventLog for the error is attached. QC Entry 75144 QC #: Date Reported: Area: 75145 6/22/2009 IDE\Code Editor\Formatting Description: Steps: [QC Short Description] n/a Typo in Tools | Options | Formatter dialog

[QC Description] In the Tools | Options dialog, under Formatter | Delphi | Capitalization, one of the options for Other Words Capitalization is 'As First Occurence'.

'Occurrence' should have two rs. QC Entry 75145 QC #: Date Reported: Area: 75156 6/22/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the following code at the end of the steps as DispInterfaceErrorInsightTest.dpr - start Delphi - open "Identifier redeclared..." for dispinterface forward declaration DispInterfaceErrorInsightTest.dpr - compile (it should compile) expected: no Error Insight errors in the Structure view actual: Identifier redeclared 'IAmForwardedDisp' at line 8 (8:3) - open ...\RAD Studio\6.0\source\Win32 [QC Description] \rtl\win\oleacc.pas expected: no Error Insight errors in the Structure view actual: Identifier redeclared Several .pas files in ...\RAD Studio\6.0\source\ use dispinterface forward declarations and they lead to "Identifier 'IAccessibleDisp' at line 542 (542:3) program DispInterfaceErrorInsightTest; {$APPTYPE CONSOLE} type redeclared..." errors in the Structure view. IAmForwardedDisp = dispinterface; IAmForwardedDisp = dispinterface ['{97C0A647-7B29-4A8A-AA61- F132EA3FB915}'] end; begin end. -> see steps QC Entry 75156 QC #: Date Reported: Area: 75164 6/22/2009 Compiler\Delphi\Language Description: Steps: (JJS: CASE 1 -- STACK OVERFLOW: [QC Short Description] Static constructors fail generic types. Using the IDE, compile this code, at run-time an stack overflow will pop up. (JJS: See BTS270383a.dpr attached) [QC Description] [Applies to Weaver] uses SysUtils, TypInfo; There are 3 failure cases. 1. Stack overflow in the StartExe/InitUnits functions. type 2. An internal error. TTestRec = record 3. Another internal error private class var FPula: String; UPDATE: OK, I have no idea how I managed to get the last internal error! I closed and reopened the IDE and it dissapeared. public QC Entry 75164 class constructor Create; class destructor Destroy;

(JJS: I can reproduce the first two issues with build 14.0.3458.22241. The first in the IDE and the second either procedure Something; in the IDE or using the command-line compiler.) end;

[Tester Recommended] { TTestRec }

class constructor TTestRec.Create; begin WriteLn(GetTypeName(TypeInfo(T))); end;

class destructor TTestRec.Destroy; begin

end;

procedure TTestRec.Something; begin WriteLn('Bublic'); end;

var a: TTestRec;

begin a.Something; readln; end.

CASE 2 -- INTERNAL COMPILE ERROR:

Just remove the class destructor from the first example and you will get an internal error like this: [DCC Fatal Error] Project1.dpr(1): F2084 Internal Error: AV21C2B279-R00000008-0 uses SysUtils, TypInfo;

type TTestRec = record private class var FPula: String;

public class constructor Create;

procedure Something; end;

{ TTestRec }

class constructor TTestRec.Create; begin WriteLn(GetTypeName(TypeInfo(T))); end;

procedure TTestRec.Something; begin WriteLn('Bublic'); end;

var a: TTestRec;

begin a.Something; readln; end.

CASE 2 -- COOLER INTERNAL COMPILE ERROR:

In this cace I moved the generic class definition to another unit in hopes to get past the stack overflow. This one raises: [DCC Fatal Error] Unit1.pas(24): F2084 Internal Error: O647

MAIN PROJECT FILE: program Project1;

{$APPTYPE CONSOLE}

uses SysUtils, TypInfo, Unit1 in 'Unit1.pas';

begin readln; end.

THE UNIT: unit Unit1; interface uses SysUtils, TypInfo;

type TTestRec = record public class constructor Create; class destructor Destroy; end;

implementation

{ TTestRec }

class constructor TTestRec.Create; begin end;

class destructor TTestRec.Destroy; begin end;

end.

QC #: Date Reported: Area: 75174 6/22/2009 Compiler\Delphi\Language Description: Steps: [QC Short Description] Compile unit "ID_RU.pas" Cyrillic symbols in names of variables are accepted by the compiler See the following compiler output indicating failure. [QC Description] Bug with unicode support in Delphi 2009 (12.0.3420.21218) ID_RU.pas(11) Error: E2004 Identifier redeclared: '???????????????'

Attachment code does not compile QC Entry 75174

[Tester Recommended] QC #: Date Reported: Area: 75177 6/23/2009 AddOn\IntraWeb Description: Steps: [QC Short Description] Try the PCP-Demoproject and run it. You will see that masterTemplate.html is not loaded Mastertemplate does not work

[QC Description] Mastertemplate functionality is completly broken. Only subtemplates will be loaded. QC Entry 75177 QC #: Date Reported: Area: 75188 6/23/2009 IDE\Code Completion Description: Steps: [QC Short Description] Make sure you have Code Insight | Auto invoke switched on (in Tools | Options | Editor options | Code insight). Using code completion in a class after the word function or procedure causes an error Start a new console application. Type or paste in type TObj = class(TObject) end; Above the 'end;', type function and press space. Press the down arrow and then Return, to select the QueryInterface function from the [QC Description] code completion list. //EXP: the QueryInterface function to be inserted //ACT: ------Project1 - When I want to override a virtual function or procedure, I often start out by automatically typing 'function' or CodeGear Delphi for Microsoft Windows - Project1.dproj [Built] ------Expected an identifier but 'procedure', and then I notice the Code insight dropdown and pick the one I want. But this causes an 'Expected END found in class TObj. ------OK ------an identifier but ...' error.

QC Entry 75188 QC #: Date Reported: Area: 75206 6/24/2009 Compiler\Delphi\BASM Description: Steps: [QC Short Description] Example: asm ret //Put a breakpoint here and inspect disassembly/machine code pshufb xmm0, Incorrect CodeGen for SSSE3 and SSE4 instructions [ecx+esi] //WRONG nop; nop; nop; nop; nop; nop; pshufb xmm0, [esi+ecx*4] //WRONG nop; nop; nop; nop; nop; nop; pshufb xmm0, [ecx*4] //WRONG nop; nop; nop; nop; nop; nop; end; Please have a look at the [QC Description] attached source code file, which includes similar cases for all affected SSSE3, SSE4.1 and SSE4.2 instructions The compiler/assembler generates wrong machine code for all SSSE3, all SSE4.1 and some SSE4.2 that I found. instructions (all except POPCNT) when these instructions are used with certain register addressing combinations, i.e.

SOMEINSTRUCTION register, [register+register]

SOMEINSTRUCTION register, [register*scale]

SOMEINSTRUCTION register, [register+register*scale]

(E.g., try the combinations "[ECX+ESI]" or "[ECX*4]").

As far as I can see, the instructions affected are:

PMOVZX.., PMOVSX.., ROUND.., DPPS/DPPD, PMULDQ.., PMULLD.., EXTRACTPS, INSERTPS, BLENDV.., PMIN.., PMAX.., MPSADBW.., PHMINPOSUW, PTEST, PCMPEQQ, PACKUSDW, CRC32, PCMPGTQ, PCmpXStrX, PALIGNR, PHADD..., PABS..., PMADDUBSW, PMULHRSW, PSHUFB, and PSIGN...

This is apparently related to QC report 73742 for PMOVZXBW (which I can't access).

See also: https://forums.embarcadero.com/thread.jspa?threadID=19508&tstart=0 and https://forums.embarcadero.com/thread.jspa?threadID=16359&tstart=15

QC Entry 75206

[Tester Recommended] QC #: Date Reported: Area: 75207 6/24/2009 Compiler\Delphi\BASM Description: Steps: [QC Short Description] Inspect the machine code generated for the following: procedure Crc32CompilerBug2; var w:word; asm jmp CRC32 instruction with WORD-sized operands not encoded correctly @x //CRC32 with WORD-sized operands not encoded correctly crc32 eax, cx //66F20F38F1C1 repnz crc32 eax,cx crc32 eax, w //66F20F38F145FE repnz crc32 eax,[ebp-$02] @x: end; [QC Description] The CRC32 instruction, if used with WORD-sized operands (whether memory or register) is not encoded correctly.

Reference: Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2A: Instruction Set Reference, A-M QC Entry 75207

[Tester Recommended] QC #: Date Reported: Area: 75212 6/24/2009 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] Compile and run the attached application below. AV error filling out old-style object descendants See the following program output indicating failure. [QC Description] Now this is yet another object bug in the implementation of legacy objects in Delphi 2009. The following code, FAIL - Exception Error which worked in previous versions of Delphi, will generate an access violation: ClassName=EAccessViolation Message=Access violation at address 004121A5 in module 'BTS270422.exe'. Read of address FFFFFFF8 program Project8;

{$APPTYPE CONSOLE} program BTS270422; uses { AV error filling out old-style object descendants} Windows, SysUtils; {$APPTYPE CONSOLE} type uses TTestBase=object Windows, X: Integer; SysUtils; end; type type TTestBase=object TTest=object(TTestBase) X: Integer; end; end;

type var TTest=object(TTestBase) T:TTest; end; begin try ZeroMemory(@T,SizeOf(T)); var except T:TTest; on E:Exception do begin Writeln(E.Classname, ': ', E.Message); try end; ZeroMemory(@T,SizeOf(T)); end. WriteLn('PASS'); except Strangely enough the following code will work: on E:Exception do begin program Project8; WriteLn('FAIL - Exception Error'); Writeln(' ClassName=', E.Classname); {$APPTYPE CONSOLE} WriteLn(' Message=', E.Message); end; uses end; Windows, end. SysUtils; type TTestBase=object X: Integer; end;

//type <-- The two objects are declared in the same ?type declaration block?. TTest=object(TTestBase) end;

var T:TTest; begin try ZeroMemory(@T,SizeOf(T)); except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end.

This however does not solve my problem as my objects are defined in several different units.

I simply don?t understand why Embarcadero (or whoever they are) simply doesn?t drop support of the legacy object type all together or get backwards compatibility fixed ASAP. In almost every version since Delphi 2 some behavior of the legacy objects have changed or been declared illegal and the implementation of it in Delphi 2009 seems to be one huge bug.

Too bad for an otherwise great product. QC Entry 75212 QC #: Date Reported: Area: 75215 6/24/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] TTouchKeyboard: customize background colors

[QC Description] If a TTouchKeyboard is on a form, but it doesn't fill the whole client area, the background gradient may not look good. It doesn't if the form is black, for example.

A way to change the colors would be convenient. A virtual PaintBackground(c: TCanvas) method could be added, for example. Alternatively the top/bottom gradient colors could be public or published properties. QC Entry 75215 QC #: Date Reported: Area: 75216 6/24/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] TTouchKeyboard: button margin issues

[QC Description] - There isn't a margin between rows. - In the Standard layout the up and down arrow keys don't align. This probably happens because the "Fn" doesn't have a margin on its righthand side. - There's a margin in the righthand side of the keyboard. The other sides don't have a margin. - There's a 2 pixel margin between buttons which doesn't respond to mouse/touch clicks. It's better to avoid these inactive areas, so the user won't wonder why the program doesn't respond to pressing buttons. Note that the Windows 7 keyboard doesn't have inactive areas between buttons.

It would look better if all buttons had the same margin (1 pixel) on all four sides. Modifying the FindButton function to remove the inactive areas would then be easy. QC Entry 75216 QC #: Date Reported: Area: 75224 6/24/2009 RTL\Delphi\Other Classes Description: Steps: [QC Short Description] Compile the attached application below. ObjAuto TCallingConvention changes See the following unexpected compile-time error indicating failure. [QC Description] In Delphi 2009 TCallingConvention is defined as Error: E2003 Undeclared identifier: 'ccRegister'

TCallingConvention = (ccRegister, ccCdecl, ccPascal, ccStdCall, ccSafeCall); program BTS270429; In Weaver, this was changed to {$APPTYPE CONSOLE} TCallingConvention = TypInfo.TCallConv; uses TCallConv is defined as ObjAuto;

TCallConv = (ccReg, ccCdecl, ccPascal, ccStdCall, ccSafeCall); var CC: TCallingConvention; The problem here is that ccRegister was changed to ccReg. This (unnecessary, in my opinion) change breaks existing code. Could not the original ccRegister token be preserved? begin QC Entry 75224 CC := ccRegister; WriteLn('PASS'); { PASS on compile } end. QC #: Date Reported: Area: 75236 6/24/2009 VCL\Graphics Description: Steps: [QC Short Description] - create a new VCL forms app - create a OnPaint event handler - paste the code below in the unit - run the app TDirect2DCanvas can't draw 'width=1' horizontal line - note that the Direct2D lines on the right are wider than the GDI lines on the left. Also note the the Direct2D lines are gray, whereas the GDI lines are black. This is caused by antialiasing. - uncomment the [QC Description] TDirect2DCanvas type declaration and run the app again. The lines are now identical. Rectangle() suffers from TDirect2DCanvas can't draw 'width=1' horizontal line because the line is antialiased, and therefor spans two the same problem. I think it can be fixed in a similar (but more complicated) way. ------code ------pixels. Moving the line half a pixel solves the problem. ------unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Direct2D, D2D1; type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); private { Private I'd expect vertical lines to suffer from the same problem, but I haven't looked into that. declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { This code QC Entry 75236 solves the LineTo problem type TDirect2DCanvas = class(Direct2D.TDirect2DCanvas) public procedure LineTo (X, Y: Integer); override; end; procedure TDirect2DCanvas.LineTo(X, Y: Integer); var p1, p2: TD2D1Point2F; begin RequiredState([csHandleValid, csPenValid]); p1.x := PenPos.x; p1.y := PenPos.y + 0.5; p2.x := x; p2.y := y + 0.5; RenderTarget.DrawLine(p1, p2, Pen.Brush.Handle, Pen.Width, Pen.StrokeStyle); PenPos := Point (X,Y); end; } procedure TForm1.FormPaint(Sender: TObject); var LCanvas: TDirect2DCanvas; begin Canvas.Brush.Color := clWhite; Canvas.Pen.Color := clBlack; Canvas.MoveTo(100, 50); Canvas.LineTo(200, 50); Canvas.Rectangle(100,100,200,200); LCanvas := TDirect2DCanvas.Create(Canvas, ClientRect); try LCanvas.BeginDraw; try LCanvas.Brush.Color := clWhite; LCanvas.Pen.Color := clBlack; LCanvas.MoveTo (204, 50); LCanvas.LineTo(304, 50); LCanvas.Rectangle(204,100,304,200); finally LCanvas.EndDraw; end; finally LCanvas.Free; end; end; end. QC #: Date Reported: Area: 75309 6/26/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the following code at the end of the steps as ParameterlessStdcallErrorInsightTest.dpr - start Delphi - "Expected ; but received an identifier " with parameterless procedure type definition and call style open ParameterlessStdcallErrorInsightTest.dpr - compile (it should compile) expected: no Error Insight errors in directive the Structure view actual: Expected ; but received an identifier 'TGLUtessEndProc' at line 8 (8:3) Expected ; but received an identifier 'TRCBack' at line 13 (13:3) Expected ; but received an identifier 'cdecl' at line 13 (13:40) [QC Description] (the last is QC 69120/RAID 266835) - open ...\RAD Studio\6.0\source\Win32\rtl\win\OpenGL.pas expected: no A few .pas files in ...\RAD Studio\6.0\source\ have parameterless procedure type declarations with an additional Error Insight errors in the Structure view actual: beside a lot of errors related to Report No: 69120 (RAID: callstyle directive and they lead to "Expected ; but received an identifier ..." errors in the Structure view. 266835) Status: Open Expected ; but recieved 'stdcall' on TThreadStartRoutine and TWaitOrTimerCallback in Windows unit http://qc.embarcadero.com/wc/qcmain.aspx?d=69120 you should get Expected ; but received an This could be very much related to identifier 'TGLUtessEndProc' at line 2591 (2591:3) - open ...\RAD Studio\6.0\source\Win32\rtl\win\Nsapi.pas" expected: no Error Insight errors in the Structure view actual: beside a lot of errors which are related to QC Report No: 69120 (RAID: 266835) Status: Open 69120/RAID 266835 you should get Expected ; but received an identifier 'TRCBack' at line 1444 (1444:3) Expected ; but recieved 'stdcall' on TThreadStartRoutine and TWaitOrTimerCallback in Windows unit program ParameterlessStdcallErrorInsightTest; {$APPTYPE CONSOLE} //from OpenGL.pas type http://qc.embarcadero.com/wc/qcmain.aspx?d=69120 GLUtessEndProc = procedure stdcall; TGLUtessEndProc = GLUtessEndProc; //from Nsapi.pas type TRotateCallback = procedure cdecl; TRCBack = procedure (Param: Integer) cdecl; begin end. but from my POV it is a different issue and thatswhy I report it.

-> see steps QC Entry 75309 QC #: Date Reported: Area: 75311 6/26/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the following code at the end of the steps as MissingSemicolonAfterInlineErrorInsightTestUnit.pas - start "Expected ; but received ..." with missing semicolon after inline Delphi - create a new console application and add MissingSemicolonAfterInlineErrorInsightTestUnit.pas - compile (it should compile) expected: no Error Insight errors in the Structure view actual: Expected ; but [QC Description] received FUNCTION at line 13 (13:1) - open ...\RAD Studio\6.0\source\Win32\rtl\win\CommCtrl.pas expected: ...\RAD Studio\6.0\source\Win32\rtl\win\CommCtrl.pas has a missing semicolon after an inline directive and that no Error Insight errors in the Structure view actual: beside a lot of errors related to Report No: 69120 (RAID: lead to a "Expected ; but received ..." error in the Structure view. 266835) Status: Open Expected ; but recieved 'stdcall' on TThreadStartRoutine and TWaitOrTimerCallback in Windows unit http://qc.embarcadero.com/wc/qcmain.aspx?d=69120 you should get Expected ; but received -> seep steps FUNCTION at line 1527 (1527:1) unit MissingSemicolonAfterInlineErrorInsightTestUnit; interface uses QC Entry 75311 Windows; type HIMAGELIST = THandle; //from CommCtrl.pas function Header_OrderToIndex(hwnd: HWND; i: Integer): Integer; inline function Header_CreateDragImage(hwnd: HWND; i: Integer): HIMAGELIST; inline; implementation function Header_OrderToIndex(hwnd: HWND; i: Integer): Integer; begin Result := 0; end; function Header_CreateDragImage(hwnd: HWND; i: Integer): HIMAGELIST; begin Result := 0; end; end. QC #: Date Reported: Area: 75313 6/26/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the following code at the end of the steps as "Expected ; but received ..." with missing semicolon after external name MissingSemicolonAfterExternalNameErrorInsightTestUnit.pas - start Delphi - create a new console application and add MissingSemicolonAfterExternalNameErrorInsightTestUnit.pas - compile (it should compile) expected: [QC Description] no Error Insight errors in the Structure view actual: Expected ; but received FUNCTION at line 19 (19:1) - ...\RAD Studio\6.0\source\Win32\rtl\win\ShlObj.pas has missing semicolons after the names for the external open ...\RAD Studio\6.0\source\Win32\rtl\win\ShlObj.pas expected: no Error Insight errors in the Structure view directive and that leads to "Expected ; but received ..." errors in the Structure view. actual: beside one error related to Report No: 69120 (RAID: 266835) Status: Open Expected ; but recieved 'stdcall' on TThreadStartRoutine and TWaitOrTimerCallback in Windows unit -> see steps http://qc.embarcadero.com/wc/qcmain.aspx?d=69120 you should get Expected ; but received FUNCTION at QC Entry 75313 line 4246 (4246:1) Expected ; but received FUNCTION at line 4247 (4247:1) Expected ; but received PROCEDURE at line 4248 (4248:1) Expected ; but received FUNCTION at line 4249 (4249:1) Expected ; but received VAR at line 4251 (4251:1) unit MissingSemicolonAfterExternalNameErrorInsightTestUnit; interface uses Windows; function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PWideChar; nFolder: Integer; fCreate: BOOL): BOOL; stdcall; function SHGetSpecialFolderPathA(hwndOwner: HWND; lpszPath: PAnsiChar; nFolder: Integer; fCreate: BOOL): BOOL; stdcall; implementation const shell32 = 'shell32.dll'; function SHGetSpecialFolderPath; external shell32 name 'SHGetSpecialFolderPathW' function SHGetSpecialFolderPathA; external shell32 name 'SHGetSpecialFolderPathA'; end. QC #: Date Reported: Area: 75317 6/26/2009 RTL\Delphi\Other Classes Description: Steps: [QC Short Description] Compile and run MakeIni.dpr seen below. TIniFile.ReadSections passes wrong parameter to GetPrivateProfileString, corrupting heap Compile and run TestProg.dpr seen below.

[QC Description] See this program output indicating failure. Application crashes on startup when reading INIFiles. #1 #2 Section1=FAIL - Exception Error Investigation shows that memory is corrupted when reading sections from an INI file.

Problematic code is here: program TestProg; procedure TIniFile.ReadSections(Strings: TStrings); {$APPTYPE CONSOLE} const BufSize = 16384; uses var SysUtils, Buffer, P: PChar; Classes, begin IniFiles; GetMem(Buffer, BufSize); /* ... */ procedure DoTest; if GetPrivateProfileString(nil, nil, nil, Buffer, BufSize, var PChar(FFileName)) <> 0 then IniFile: TIniFile; Sections: TStringList; Problems: begin 1> Fixed buffer size is used, leading to data loss if actual size of file is larger. IniFile := TIniFile.Create('.\MyFile.ini'); 2> GetPrivateProfileString's 5th parameter is a count of *characters* and the code is passing the number of with IniFile do *bytes*. Heap corruption results. try Sections := TStringList.Create; I think the same mistake is made elsewhere in this file. WriteLn('#1'); ReadSections(Sections); Bug #1 was supposed to be fixed by QC#35234, but it looks like that might have only fixed the "ReadSection" function and not the "ReadSections" function. WriteLn('#2 Section1=', Sections[0]); QC Entry 75317 WriteLn('PASS'); finally Sections.Free; Free; end; 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.

program MakeIni;

uses Windows, SysUtils, Classes, IniFiles;

{$APPTYPE CONSOLE}

procedure Run; var I: Integer; begin if FileExists('.\MyFile.ini') then DeleteFile('.\MyFile.ini'); with TIniFile.Create('.\MyFile.Ini') do try for I := 1 to 1000 do WriteString(Format('Section%d', [I]), 'Item', 'Value'); UpdateFile; finally Free; end; end;

begin try Run; except on E: Exception do begin WriteLn('Exception Failure'); WriteLn(' ClassName=', E.ClassName); WriteLN(' Message=', E.Message); end; end; end.

QC #: Date Reported: Area: 75318 6/26/2009 Database\DBExpress Description: Steps: [QC Short Description] 1.Open Project1.dpr (attachements) 2.Compile 3.Run 4.Click the Button. EXP: DBXInterbase is not required. DBX: Firebird driver needs DBXInterbase ACT: DBXInterbase is required. or EXP: 'Could not find metadata: TDBXInterbaseMetaDataCommandFactory; package: DbxFirebirdDriver140.bpl. Add DBXInterbase to your uses.'. ACT: 'Could not find metadata: [QC Description] TDBXInterbaseMetaDataCommandFactory; package: DbxFirebirdDriver140.bpl. Add DBXFirebird to your The following errors appear when Firebid is used with DBX. uses.'.

------Debugger Exception Notification ------Project Project1.exe raised exception class TDBXError with message 'Could not find metadata: TDBXInterbaseMetaDataCommandFactory; package: DbxFirebirdDriver140.bpl. Add DBXFirebird to your uses.'. ------Break Continue Help ------

It is necessary to add DBXInterbase to the unit to solve this. The error message is wrong. QC Entry 75318 QC #: Date Reported: Area: 75326 6/27/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the following code as VERxxxErrorInsightTest.dpr - start Weaver - open VERxxxErrorInsightTest.dpr Error Insight defines VER190 instead of VER210 expected: Expected BEGIN but received * at line 6 (6:1) actual: Expected BEGIN but received * at line 10 (10:1) program VERxxxErrorInsightTest; {$APPTYPE CONSOLE} {$IFDEF VER210} * {$ENDIF VER210} {$IFDEF [QC Description] VER190} * {$ENDIF VER190} begin end. This is the same issue as RAID 268128, but RAID 268128 is fixed and then a new bug has to be logged.

-> see steps QC Entry 75326 QC #: Date Reported: Area: 75330 6/27/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] Potentially could be triggered by calling TThread.NameThreadForDebugging or calling IsDebuggerPresent from IsDebuggerPresent is not using the stdcall conventions the Windows unit.

[QC Description] Recently, I was looking at our Indy code to make sure it's updated for the RTL. I noticed that IsDebuggerPresent is defined in Windows without the stdcall conventions. Is there any reason why it isn't being defined that way since it's a Win32 API function call?

This omission should be fixed even if it doesn't effect most code. You never know what's going to happen down the line. QC Entry 75330 QC #: Date Reported: Area: 75334 6/27/2009 Compiler\Delphi\Code Generation/Optimization Description: Steps: [QC Short Description] Compile and run the attached application below. Range check error in inline functions with chars and string indexes See the following program output indicating failure. [QC Description] If range checking is on, inlining causes a range check error to be wrongly reported - see steps. FAIL: ERangeError: Range check error QC Entry 75334

[Tester Recommended] program BTS270523; { Range check error in inline functions with chars and string indexes }

{$APPTYPE CONSOLE}

{$R+}

uses SysUtils;

function LastChar(const Str: string): char; inline; // ok if not inline begin Result := Str[Length(Str)]; end;

begin try WriteLn(LastChar('PP'), 'ASS'); except on E: Exception do begin Writeln('FAIL: ' + E.ClassName, ': ', E.Message); end; end; end. QC #: Date Reported: Area: 75337 6/27/2009 Debugger Description: Steps: [QC Short Description] - start Delphi - create a new app - set "Set Subsystem Version fields in PE Header as ." in the Debugger fails to show correct message when PE version is higher then current OS version project options (Delphi Compiler\Linking) to a version which is higher then your current OS (so far 7.0 should work for all OS versions) - press F9 to execute the program with the debugger expected: a message that the [QC Description] app cannot be executed for some reason actual: ------Error ------Format '%1 ' -> see steps invalid or incompatible with argument. ------OK Details >> ------press QC Entry 75337 SHIFT+CTRL+F9 to execute the program without the debugger expected: a message that the app cannot be executed for some reason actual: (note the message is from a DE OS and "ist keine zulässige Win32- Anwendung." means "is no valid Win32 application.") ------Error ------System Error. Code: 193. %1 ist keine zulässige Win32-Anwendung. ------OK Details >> ------QC #: Date Reported: Area: 75339 6/28/2009 VCL\Standard Controls\TEdit Description: Steps: [QC Short Description] add a TEdit to a form and use the debugger to see MousePos after right-clicking the TEdit TCustumEdit.OnContextPopUp: MousePos is wrong

[QC Description] TCustumEdit.OnContextPopUp: MousePos are screen coordinates, whereas they should be client coordinates.

It worked fine in D2007. TCustumEdit.WMContextPopUp now handles this itself, rather than calling TControl.WMContextPopUp. This code misses a ScreenToClient call. It also misses the InvalidPoint check which serves to leave (-1, -1) alone. See TControl.WMContextPopUp. QC Entry 75339 QC #: Date Reported: Area: 75340 6/28/2009 VCL\Core VCL Classes\TControl Description: Steps: [QC Short Description] MouseOriginToShiftState uses wrong mask

[QC Description] The MouseOriginToShiftState function uses:

MouseOriginMask = $FFFFFFF0;

This should be:

MouseOriginMask = $FFFFFF80;

You've probably been fooled by a typo in http://msdn.microsoft.com/en-us/library/ms703320(VS.85).aspx which reads "needs to be mask-checked against 0xFFFFFF0," (note there's a hex digit missing). QC Entry 75340 QC #: Date Reported: Area: 75353 6/28/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Steps by USc (small test created from revision 47 of TURBU): - save the attached files - dcc32 -B F2084 Internal Error: AV0044AE94-R0000000C-0 when using generics from another package map_default.dpk expected: it compiles actual: Fatal: F2084 Internal Error: AV0044AE94-R0000000C-0 Original steps: 1. Check out the TURBU project from http://turbu.googlecode.com/svn/trunk 2. Open [QC Description] \turbu\turbu.groupproj 3. Build EngineBasis.bpl 4. Build default_format.bpl. (If this gives you trouble, see QC -> see steps 75119 for the workaround.) 5. Try to build map_default.bpl. This will cause "[DCC Fatal Error] F2084 Internal Error: AV06D00CDC-R0000000C-0". 6. Comment out line 117 on unit turbu_2k_map_engine inside Original short description: map_default.bpl, and it compiles correctly. Error AV06D00CDC-R0000000C-0 when attempting to assign a function pointer

Original description: When trying to build my project, the compiler chokes on a certain function pointer assignment.

I haven't been able to successfully break this down into a small, simple test case that will duplicate the error. QC Entry 75353

[Tester Recommended] QC #: Date Reported: Area: 75376 6/29/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] (JJS: In shlobj.h, see the following... Incorrect value of CSIDL_MYDOCUMENTS #define CSIDL_PERSONAL 0x0005 // My Documents [QC Description] #define CSIDL_FAVORITES 0x0006 // \Favorites Delphi 2009, #define CSIDL_STARTUP 0x0007 // Start Menu\Programs\Startup ShlObj.pas #define CSIDL_RECENT 0x0008 // \Recent #define CSIDL_SENDTO 0x0009 // \SendTo { For Windows >= XP } #define CSIDL_BITBUCKET 0x000a // \Recycle Bin {$EXTERNALSYM CSIDL_MYDOCUMENTS} #define CSIDL_STARTMENU 0x000b // \Start Menu CSIDL_MYDOCUMENTS = $000c; { logical "My Documents" desktop icon } #define CSIDL_MYDOCUMENTS CSIDL_PERSONAL // Personal was just a silly name for My Documents

Note that CSIDL_MYDOCUMENTS equals CSIDL_PERSONAL which has the value 0x0005 Error here: CSIDL_MYDOCUMENTS <> $000c QC Entry 75376 QC #: Date Reported: Area: 75380 6/29/2009 VCL\Standard Controls\TEdit Description: Steps: [QC Short Description] - save the attached files - make sure that theming is enabled in the OS - start Delphi - compile TButtonedEdit: transparency around the left and right button ButtonedEditTest.dpr and execute it (it should look like as on TButtonedEdit1.png) - press the "Back in Black" button expected: it looks like before actual: two black lines on the left top corner of the left button and one black [QC Description] line on top of the right button (it might look like as on TButtonedEdit2.png) I don't use TButtonedEdit, but I often see in the left top edge black lines in the search edit in the Tool Palette of the IDE when I have theming enabled in the OS.

-> see image TransparentIDESearchEdit.png

-> see steps QC Entry 75380 QC #: Date Reported: Area: 75397 6/30/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] program test; uses SysUtils; type TArray = array of T; TValues = TArray; // It seem's that this line Incorrect finalization classes with dynamic arrays is the reason of access violation TA = class var FValues: TValues; end; var A: TA; begin A := TA.Create(); A.Free(); // <- Access violation end. QC Entry 75397 QC #: Date Reported: Area: 75406 6/30/2009 Documentation Description: Steps: [QC Short Description] Fixed in Weaver TXPManifest help missing see [QC Description] This is class XPMan.TXPManifest ms-help://embarcadero.rs2010/vcl/XPMan.TXPManifest.html QC Entry 75406 QC #: Date Reported: Area: 75423 7/1/2009 SOAP\WSDL Importer Description: Steps: [QC Short Description] Import the wsdl and call a function. SOAP client: delphi 2007 can not set the result to an object

[QC Description] I imported (with the wsdl import wizard from Delphi 2007) a wsdl from the following location: http://internetest.vocuslis.nl/test/services/dbs/nedapservice?wsdl

If I call the function testNedapService (returns a Boolean) I always receive false. I installed a packet sniffer and I can see that the webservice send a true, but Delphi cannot set the true to an object.

Also the rest of the functions don? work.

I have created a test project in Visual Studio 2005 (Visual Basic) and Eclipse (Java) and everything works fine. So the wsdl seem to be ok.

See the attachment (Delphi 2007) for an example of my test project.

Is this a bug in Delphi or do I something wrong? QC Entry 75423 QC #: Date Reported: Area: 75436 7/1/2009 Compiler\Delphi\Execution Description: Steps: [QC Short Description] Compile the attached application below. Internal error C1872 See the following compile-time error indicating failure. [QC Description] When compiling some basic code with optimizations turned on I get an internal error C1872. Fatal: F2084 Internal Error: C1872

Please note that on my full project I seem to get the same error also with optimizations turned off but I couldn't program BTS270643; reproduce it on a smaller example, sorry. { Internal error C1872 } See program in steps to reproduce. QC Entry 75436 {$APPTYPE CONSOLE} type (Affects JVCL) TypeRec = record EnumField : set of 1..52; [Tester Recommended] end;

function GetC1872 (AMax : integer; const ARec : TypeRec) : Cardinal; var I : integer; LBool : boolean;

begin Result := 0; LBool := AMax in ARec.EnumField; I := 1; while I <= AMax do begin if LBool then begin if I in ARec.EnumField then Inc(Result) end; Inc(I); end; end;

begin WriteLn('PASS'); { PASS on compile } end. QC #: Date Reported: Area: 75439 7/1/2009 IDE\Search Description: Steps: [QC Short Description] Steps: 1. Open a .pas file which has a history 2. Click the history tab 3. click into the code view 4. Press Ctrl+F History of .pas files cannot be searched 5. Enter a search term like "procedure" 6. Press Enter --> you get a message that x matches were found, but nothing else happens 7. Switch to Contents or Diff tab --> now the search works. You can also switch back and [QC Description] it will work. But it says "0 matches found" and there is no highlighting of the search terms. But when you close Searching the history of .pas files is broken. the search, go back to the code tab, and try again from step 2, it will be broken again. QC Entry 75439 QC #: Date Reported: Area: 75445 7/1/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the following code at the end of the steps as RTTIErrorInsightTest.dpr - start Delphi - open Invalid directive 'RTTI' RTTIErrorInsightTest.dpr - compile (it should compile) expected: no Error Insight errors in the Structure view actual: Invalid directive 'RTTI' at line 5 (5:3) - open ...\RAD Studio\X.0\source\Win32\rtl\sys\System.pas [QC Description] expected: no Error Insight errors in the Structure view actual: Invalid directive 'RTTI' at line 285 (285:5) program In ...\RAD Studio\7.0\source\Win32\rtl\sys\System.pas has the directive RTTIErrorInsightTest; {$APPTYPE CONSOLE} {$RTTI INHERIT METHODS(DefaultMethodRttiVisibility) FIELDS(DefaultFieldRttiVisibility) PROPERTIES(DefaultPropertyRttiVisibility)} begin end. {$RTTI INHERIT METHODS(DefaultMethodRttiVisibility) FIELDS(DefaultFieldRttiVisibility) PROPERTIES(DefaultPropertyRttiVisibility)} been added and Error Insight doesn't know $RTTI yet.

-> see steps QC Entry 75445 QC #: Date Reported: Area: 75450 7/1/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile the attached application below. F2084 Internal Error: AV00000000-W00000000-8 with generics / enumerators involving an inlined method See the following compile-time error [QC Description] See Steps. BTS270688.dpr(15) Fatal: F2084 Internal Error: AV00000000-R00000000-0 QC Entry 75450 Note that compiliation succeeds if the method GetEnumerator is not inlined.

unit uBTS270688a;

interface

type List = class public type Enumerator = record private var item: T; public function MoveNext: boolean; inline; property Current: T read item; end; public function GetEnumerator: Enumerator; inline; //#1// end;

implementation

function List.Enumerator.MoveNext: boolean; begin result := true end;

function List.GetEnumerator: Enumerator; begin result.item := nil // or default(T) end;

end.

unit uBTS270688b;

interface

uses uBTS270688a;

type C = class public var F: List; end;

implementation

end.

program BTS270688;

{ F2084 Internal Error: AV00000000-W00000000-8 with generics / enumerators }

uses uBTS270688a, uBTS270688b;

procedure foo; var o: TObject; c: uBTS270688b.C; begin for o in c.F do end;

procedure DoTest; begin foo end;

begin WriteLn('PASS'); { PASS on compile } end. QC #: Date Reported: Area: 75453 7/1/2009 Install Description: Steps: [Vista + localized build only] 1.Install Japanese edition. 2.[File | New | VCL Forms Application] 3.[Project | Compile Project] EXP: work fine. ACT: [Fatal Error] Class not registered, ClassID: {410C0C78-0AFB-4FEC-9530-B41D86B0792D} MSBuild is not correctly set perhaps. HKEY_CLASSES_ROOT\CLSID{410C0C78-0AFB-4FEC-9530-B41D86B0792D} is not found. The following registry entries are necessary. Windows Registry Editor Version 5.00 [QC Short Description] [HKEY_CLASSES_ROOT\CLSID\{410C0C78-0AFB-4FEC-9530-B41D86B0792D}] Can't Compile with Japanese edition @="Borland.Studio.Interop.MSBuildProjectInteropCreator" [HKEY_CLASSES_ROOT\CLSID\{410C0C78- 0AFB-4FEC-9530-B41D86B0792D}\Implemented Categories] [HKEY_CLASSES_ROOT\CLSID\{410C0C78- [QC Description] 0AFB-4FEC-9530-B41D86B0792D}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}] Can't compile with Japanese edition. [HKEY_CLASSES_ROOT\CLSID\{410C0C78-0AFB-4FEC-9530-B41D86B0792D}\InprocServer32] English edition works normally. @="mscoree.dll" "ThreadingModel"="Both" "Class"="Borland.Studio.Interop.MSBuildProjectInteropCreator" "Assembly"="Borland.Studio.Interop, Version=14.0.0.0, Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b" Environment: "RuntimeVersion"="v2.0.50727" [HKEY_CLASSES_ROOT\CLSID\{410C0C78-0AFB-4FEC-9530- Guest OS: Windows XP Professional + SP3 (Japanese Edition) B41D86B0792D}\InprocServer32\14.0.0.0] "Class"="Borland.Studio.Interop.MSBuildProjectInteropCreator" Host OS: Windows Vista Business + SP2 (Japanese Edition) "Assembly"="Borland.Studio.Interop, Version=14.0.0.0, Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b" VM: Virtual PC 2007 SP1 "RuntimeVersion"="v2.0.50727" [HKEY_CLASSES_ROOT\CLSID\{410C0C78-0AFB-4FEC-9530- QC Entry 75453 B41D86B0792D}\ProgId] @="Borland.Studio.Interop.MSBuildProjectInteropCreator" QC #: Date Reported: Area: 75456 7/1/2009 IDE\Code Editor Description: Steps: [QC Short Description] Make sure Tools | Options | Editor Options | Code insight | Code templates completion is on. 1) File | New Editor inserts garbage after code template completion console application 2) insert line after "begin", type 3 characters "if " ==> code template now inserts "if True then" and places caret over "True" 3) type "False", overwriting "True" 4) press Esc 5) press Ctrl-F9 to compile [QC Description] ==> garbage added after last line, compiler emits warning: text after final END ignored. Clicking on the warning The editor inserts garbage text when doing code template completion. This is usually at a seemingly random jumps to the garbage To reproduce it, do not switch to another window between steps 2 and 3. In longer units, location somewhere in the current unit and is particularly nasty when unintended code changes go unnoticed. the garbage will be added somewhere in the middle of the code. See steps for how to reproduce QC Entry 75456 QC #: Date Reported: Area: 75461 7/2/2009 VCL\Standard Controls\TMemo Description: Steps: [QC Short Description] TMemo: can't select via touch

[QC Description] Microsoft lets the user select text by dragging horizontally. You can move vertically as well once the system thinks you're selecting rather than panning. See Notepad for example. This no longer works in this build. QC Entry 75461 QC #: Date Reported: Area: 75479 7/2/2009 VCL\Standard Controls\TListBox Description: Steps: [QC Short Description] Control "" has no parent window

[QC Description] This causes a "Control "" has no parent" error: procedure TForm1.FormCreate(Sender: TObject); begin TListBox.Create(self).Color := clRed; end;

This used to work fine.

Looks like this happens because procedure TCustomListBox.WndProc(var Message: TMessage); contains code case Message.Msg of CM_COLORCHANGED: InvalidateRect(Handle, nil, True); ...

You probably need to check here if Handle is created: case Message.Msg of CM_COLORCHANGED: if HandleAllocated then InvalidateRect(Handle, nil, True);

(thanks to Yevgen Ostapchuk) QC Entry 75479 QC #: Date Reported: Area: 75486 7/2/2009 10:39:21 AM IDE\Open Tools API Description: Steps: Installing a compiler notifier crashes the IDE Open the attached package project Right click on it and select Install

Problem 1: You'll see a crash right away when it add the IOTACompileNotifier

Problem 2: After the crash is fixed, notifiers don't actually work. To make sure they're working, create a new project and compile it. You should see 4 message boxes for the 4 different notifications. QC #: Date Reported: Area: 75489 7/2/2009 VCL\Core VCL Classes Description: Steps: [QC Short Description] WMTabletQuerySystemGestureStatus works correct at 96 dpi only

[QC Description] The WMTabletQuerySystemGestureStatus screen position also suffers from the problem described in QC 74932. Chris Bensen seems to have found a solution for this.

Note that this can not only occur in Windows 7, but in Vista as well.

PS. I haven't checked, but I'd guess WMGesture has the same issue. QC Entry 75489 QC #: Date Reported: Area: 75490 7/2/2009 VCL\Core VCL Classes Description: Steps: [QC Short Description] - create a new VCL app Touch.ParentTabletOptions doesn't work - add a TPaintBox - remove toPressAndHold from the form's Touch.Tabletoptions [QC Description] - run the app see steps - press the paintbox with your finger for a couple of seconds QC Entry 75490 expected: nothing happens [SB: ParentTabletOptions is being ignored unless the control descends from TWinControl] observed: press-and-hold kicks in

QC #: Date Reported: Area: 75494 7/2/2009 Install\Files Description: Steps: [QC Short Description] Enable debug DCUs in the project and try to debug something in system unit. See attachments for example. Unit debug version of system.dcu was compiled from different pas unit

[QC Description] It is very look like debug system.dcu was compiled from another pas unit then present in source directory. Because I very often see misplaced dots which mean the line was linked to binary, and debugging often was unable because position of the debugger was not the real source position.

So I recompiled the system unit, replaced original one and problems has gone.

PS: English is not my native language so sorry if I speak not clear QC Entry 75494 QC #: Date Reported: Area: 75498 7/2/2009 VCL\Graphics Description: Steps: [QC Short Description] TBitmap.WriteStream selects >8bpp DIBs (unnecessarily) into HDC which (for large bitmaps) can lead to BSODs with current nvidia drivers

[QC Description] In TBitmap.WriteStream the following code is always called:

Canvas.RequiredState([csHandleValid]); Save := GDICheck(SelectObject(FCanvas.FHandle, FDIBHandle)); ColorCount := GetDIBColorTable(FCanvas.FHandle, 0, 256, Colors); SelectObject(FCanvas.FHandle, Save);

The documentation to GetDIBColorTable states:

Remarks The GetDIBColorTable function should be called to retrieve the color table for DIB section bitmaps that use 1, 4, or 8 bpp. The biBitCount member of a bitmap associated BITMAPINFOHEADER structure specifies the number of bits-per-pixel. DIB section bitmaps with a biBitCount value greater than eight do not have a color table, but they do have associated color masks. Call the GetObject function to retrieve those color masks.

So calling GetDIBColorTable will always return 0 for any bitmap with > 8bpp, making this code useless for any >8 bpp bitmap.

I've found that, at least with current (186.18) nVidia drivers under Windows 2008 and with large bitmaps (6090x1682 in my case) the SelectObject call regularily fails (returns 0, but GetLastError also returns 0) and is followed by a BSOD a couple of seconds later.

Given that the code in question is just a waste of time and resource for >8bpp bitmaps anyway, it should be changed to: if FDIB.dsbmih.biBitCount <= 8 then begin Canvas.RequiredState([csHandleValid]); Save := GDICheck(SelectObject(FCanvas.FHandle, FDIBHandle)); ColorCount := GetDIBColorTable(FCanvas.FHandle, 0, 256, Colors); SelectObject(FCanvas.FHandle, Save); end else ColorCount := 0;

Not only does that prevent the BSOD (which admittedly would appear to be a driver bug that's causing kernel mode memory overwrite), but it generally speeds up saving of TBitmap's QC Entry 75498 QC #: Date Reported: Area: 75515 7/3/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Download the attached project and try compiling it. Alternatively, start a new project with a standard form (call Identifier redeclared: '.5' message when using generics them unit2 and Form2/TForm2). The unit would then look like this: Unit2.pas======unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, [QC Description] DiagonallySymmetricArray; type TObject1 = class(TObject) end; TObject2 = class(TObject) end; TObject3 = Using a generic object in a different unit can lead to "Error 2004 Identifier redeclared: '.5'". The '.5' may be some (ossUnknown, ossShare, ossNoShare); TCachedOriginsShareStatus = class other number, depending on the precise context. The error message is incorrect (the code should compile (TDiagonallySymmetricArray) end; TForm2 = class(TForm) private { Private declarations } public properly) and it is also worded rather obviously incorrectly (identifier '.5'???). { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} end. /Unit2.pas======Add to the project a second unit, called This occurs in D2009 UP3 (which the combobox does not allow me to select). DiagonallySymmetricArray: DiagonallySymmetricArray.pas======unit DiagonallySymmetricArray; QC Entry 75515 interface type TDiagonallySymmetricArray = class(TObject) protected // need direct access for speed reasons in some cases FArray: array of array of T; class procedure NormalizeIndices(var i, j: Integer); private function GetItem(i, j: Integer): T; procedure SetItem(i, j: Integer; const AItem: T); public end; implementation uses SysUtils; { TDiagonallySymmetricArray } function TDiagonallySymmetricArray.GetItem(i, j: Integer): T; begin NormalizeIndices(i, j); Result := FArray[i, j]; end; class procedure TDiagonallySymmetricArray.NormalizeIndices(var i, j: Integer); begin end; procedure TDiagonallySymmetricArray.SetItem(i, j: Integer; const AItem: T); begin NormalizeIndices(i, j); FArray[i, j] := AItem; end; end. /DiagonallySymmetricArray======QC #: Date Reported: Area: 75543 7/5/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] - save the following three files or the attachment - dcc32 PairEnumeratorTest.dpr expected: it compiles actual: F2084 Internal Error: C12079 when using TDictionary's TPair enumerator PairEnumeratorTest.dpr(12) Fatal: F2084 Internal Error: C12079 //--- PairEnumeratorTest.dpr --- program PairEnumeratorTest; {$APPTYPE CONSOLE} uses Unit2, Generics.Collections; var Pair: TPair; begin for Pair in Testing do; end. //--- unit2.pas --- unit Unit2; interface uses Generics.Collections; var This was reported by simon horup in embarcadero.public.delphi.language.delphi.win32 in the thread "Internal Testing: TDictionary; implementation end. //--- Generics.Collections.pas --- unit Error T2402 when enumerating a tDictonary under Delphi 2009Update 3 / 4" Generics.Collections; interface type TEnumerator = class abstract protected function DoGetCurrent: T; Message-ID: <[email protected]> virtual; abstract; public property Current: T read DoGetCurrent; function MoveNext: Boolean; end; https://forums.codegear.com/thread.jspa?messageID=132786&tstart=0#132786 TEnumerable = class abstract public function GetEnumerator: TEnumerator; end; TPair = record Key: TKey; Value: TValue; end; TDictionary = class -> see steps (TEnumerable>) end; implementation function TEnumerator.MoveNext: Boolean; QC Entry 75543 begin Result := False; end; function TEnumerable.GetEnumerator: TEnumerator; begin Result := nil; end; end. [Tester Recommended] QC #: Date Reported: Area: 75560 7/6/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Use the following console project and try running it. You'll get an EExternalException at the Normalize call in Incorrect code generation for procedure with var parameters the SetItem method. It does not matter whether Normalize is a class method or a normal method, nor whether it is inline or not. It does not even work if it is a plain procedure. program Project2; {$APPTYPE CONSOLE} uses [QC Description] SysUtils; type TMyEnum = (meNone, meOne, meTwo); TSomething<T> = class private class procedure Using var parameters in a generic method can lead to runtime crash. This happens in UP3 (can't select it in the Normalize(var i, j: Integer); inline; procedure SetItem(i, j: Integer; const Value: T); public property Items[i, j: Version combobox). Integer]: T write SetItem; end; TSomethingMyEnum = class(TSomething<TMyEnum>) end; { TSomething<T> } class procedure TSomething<T>.Normalize(var i, j: Integer); var t: Integer; begin if May be somehow related to #75515. i < j then begin t := j; j := i; i := t; end; end; procedure TSomething<T>.SetItem(i, j: Integer; const Value: QC Entry 75560 T); begin Normalize(i, j); if i < j then raise Exception.Create('Error!'); end; var LSomething: TSomethingMyEnum; begin try LSomething := TSomethingMyEnum.Create(); LSomething.Items[0, 0] := meOne; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end. QC #: Date Reported: Area: 75569 7/6/2009 ActiveX\Code Generators\TLibImp frontend Description: Steps: [QC Short Description] - Download attached .ridl file (which is a stripped-down version of the RIDL generated by TLibImp for GenTLB cannot handle SAFEARRAY declaration Borland.Studio.ToolsAPI.tlb), save it somewhere - Try to generate a TLB from it: GENTLB Borland_Studio_ToolsAPI.ridl - Exp.: no errors - Act.: Error E0001 Borland_Studio_ToolsAPI.ridl 30: Identifier [QC Description] expected, found ')' inst ead Error E0001 Borland_Studio_ToolsAPI.ridl 33: '' expected, found '[' instead The RIDL parser of GenTLB chokes on SAFEARRAY declarations as emitted by TLibImp. See the steps for details.

(This is a more concise test case, provided by Chris Bensen, for the problem originally reported as #75513.) QC Entry 75569 QC #: Date Reported: Area: 75652 7/10/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] TTouchKeyboard doesn't respond to pen

[QC Description] TTouchKeyboard doesn't respond to pen. This is caused by the "if not IsPenEvent(GetMessageExtraInfo) then" code.

Also, the keyboard won't work on modern touchscreen computers running Vista because GetMessageExtraInfo will return "pen" or "touch" hence mouse messages won't be processed. But there's no WMTouch on Vista. QC Entry 75652 QC #: Date Reported: Area: 75728 7/13/2009 3:56:59 PM Compiler\Delphi\Code Generation/Optimization Description: Steps: Compiling a package with -JL (for C++ files) and -V (debug info) produces a .bpl that is seen as invalid by the Compile the attached package with the following command-line. Windows loader. dcc32 -JL -V ScintillaComponents.dpk

(JJS: Seen to be fixed in Weaver) Compile the attached application with the following command-line

dcc32 -JL -V Test.dpr

Run the resulting executable and see a dialog entitled "Test.exe - Bad Image" with the following text.

The application or DLL "..."ScintallaComponentsD12.bpl is not avalid Windows Image. Please check this against your installation diskette.

Clicking okay produces the following program output indicating failure.

FAIL - Exception Error ClassName=EOSError Message=System Error. Code: 193. %1 is not a valid Win32 application QC #: Date Reported: Area: 75759 7/14/2009 VCL\Core VCL Classes Description: Steps: [QC Short Description] AclAPI.pas wrong functions declaration

[QC Description] In unit AclAPI some functions do not declared correctly:

1. function GetNamedSecurityInfoW(pObjectName: PAnsiChar; [...])

Must Be: function GetNamedSecurityInfoW(pObjectName: PChar;

Because it Unicode version (look at MSDN, and try to work with unicode Files or Folders)

2. function SetNamedSecurityInfoW(pObjectName: PAnsiChar;

The same.

3. BuildExplicitAccessWithNameW - the same etc - and another 4 functions in this Unit.

4. function GetSecurityInfo([..], ppSecurityDescriptor: PPSECURITY_DESCRIPTOR): DWORD;

Must be: function GetSecurityInfo([..], pSecurityDescriptor: PSECURITY_DESCRIPTOR): DWORD;

READ MSDN about this function.

SetSecurityInfo have correct - PSECURITY_DESCRIPTOR.

All another functions in this unit have PSECURITY_DESCRIPTOR.

QC Entry 75759 QC #: Date Reported: Area: 75774 7/14/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the following code at the end of the steps as AlignErrorInsightTest.dpr - start Weaver - open Regression: ALIGN directive is flagged as error AlignErrorInsightTest.dpr - compile (it should compile) expected: no Error Insight errors in the Structure view actual: 'ON.pas' could not be found in the current project at line 11 (11:1) 'OFF.pas' could not be found in the [QC Description] current project at line 12 (12:1) - open ...\RAD Studio\7.0\source\Win32\rtl\win\Windows.pas expected: no Error Since FT build 3478 the ALIGN directive does produce an Error Insight error. This affects a lot of files: Insight errors in the Structure view actual: 'ON.pas' could not be found in the current project at line 17 (17:1) - source: 10 files and 12 occurrences 'ON.pas' could not be found in the current project at line 21939 (21939:1) 'ON.pas' could not be found in the top file is ...\RAD Studio\7.0\source\Win32\rtl\win\Windows.pas (3x) current project at line 24305 (24305:1) program AlignErrorInsightTest; {$APPTYPE CONSOLE} {$A+} {$A-} - JCL: 4 files and 4 occurrences {$A1} {$A2} {$A4} {$A8} {$ALIGN ON} {$ALIGN OFF} {$ALIGN 1} {$ALIGN 2} {$ALIGN 4} {$ALIGN 8} begin - JVCL: one file and one occurrence end.

-> see steps QC Entry 75774 QC #: Date Reported: Area: 75790 7/14/2009 IDE\Packages\Package Manager Description: Steps: [QC Short Description] 1) Select any installed designtime BPL for testing 2) Close the IDE 3) Rename or move the selected BPL so it Changes to package "enabled" state is not persisted cannot be loaded 4) Start the IDE and wait for the "Cannot load package..." error 5) Respond "No" to disable future attempts to load the missing BPL 6) Open Component -> Install Packages... (missing package is [QC Description] unchecked) 7) Restore the BPL that was renamed or moved in step 3 8) Click the check box in Install Packages There is a very annoying problem in the Component -> Install Packages... dialog that sometimes causes to load the restored BPL 9) Close and restart the IDE 10) Open Install Packages dialog (restored package is changes to the "enable" check boxes in the list of packages to be lost when the IDE is closed. unchecked again!)

This problem occurs frequently in our environment when updates to third-party packages cause package dependencies to become broken (e.g. Package A depends on Package B and an updated version of Package B is installed).

After a component update (e.g. installing a new version of DevExpress), the IDE emits a shower of "Cannot load package..." errors as each broken package fails to load. Responding "No" to disable future loading of the offending packages avoids a repeat of the same errors when a project is opened. The problem occurs when attempting to re-enable the packages after the broken packages have been opened and re-compiled. QC Entry 75790 QC #: Date Reported: Area: 75791 7/14/2009 VCL\Win 32 Controls\TCoolBar Description: Steps: [QC Short Description] 1) File | New VCL Application 2) drop a TCoolBar on the form 3) assign a bitmap to its Bitmap property 4) add TCoolBar Bitmap property is broken an element (TCoolBand) to the CoolBar ==> the CoolBar is drawn with a themed background, instead of the bitmap. Assigning a bitmap to the TCoolBand's bitmap property also doesn't help. [QC Description] The TCoolBar/TCoolBand Bitmap property is no longer working in build 3478, both at design time and at run time. In build 3462 it was still working. See steps. QC Entry 75791

[SB: regression from Tiburon] QC #: Date Reported: Area: 75792 7/14/2009 IDE\Code Editor Description: Steps: [QC Short Description] Select text in the editor. Press Ctrl-F. The text is shown in the search bar at the bottom of the editor. Press Ctrl-F with text selected turns on search selection and keeps it turned on Enter to search. The text you selected yourself is found. Press F3. Message "tried to search selected text, but no text was selected" comes up. [QC Description] When you select some text in the editor and press Ctrl-F, the search bar at the bottom appears and holds the selected text as the text to search for.

It also turns on the "search selection" checkbox. (Which is similar to D2009 behaviour), but if you then press F3 to search for the next occurence, you get dialog boxes "tried to search selected text, but no text was selected".

In previous versions the "search selection" was cleared when the selection in the editor was cleared according to Darren Kosinski in the newsgroups (weaver.ide.editor).

A bit awkward if you want to use the keyboard to search for something by just selecting text, pressing Ctrl-F and then F3 repeatedly like we used to be able to do. QC Entry 75792 QC #: Date Reported: Area: 75803 7/15/2009 IDE Description: Steps: [QC Short Description] - Launch Weaver Build 3478 - open and close several source files (at least 10 different files) - Click File -> List of recent files is almost off-screen Reopen The list of recently used files is almost off-screen; I can only see the last 5 items.

[QC Description] - Launch Weaver Build 3478 - open and close several source files (at least 10 different files) - Click File -> Reopen

The list of recently used files is almost off-screen; I can only see the last 5 items. QC Entry 75803 QC #: Date Reported: Area: 75820 7/15/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile and run the attached application below. The compiler uses the wrong size (1 byte) for type parameters of a generic in pointer operations See the following program output indicating failure. [QC Description] See Steps. FAIL #3 - increment FAILED Inc()/Dec() intrinsic routines and pointer arithmetic operations do not respect the actual size of type parameter. FAIL #4 - addition FAILED QC Entry 75820 FAIL - Counter=2

program BTS271103;

{ The compiler uses the wrong size (1 byte) for type parameters of a generic in pointer operations }

{$apptype console}

uses SysUtils;

var Counter: Integer = 0;

type G = class class procedure Test; end;

class procedure G.Test; const standard = sizeof(integer); var p: ^T; begin if sizeof(T) <> standard then writeln('FAIL #1 - sizeof(T) FAILED') // OK else Inc(Counter); if sizeof(p^) <> standard then writeln('FAIL #2 - sizeof(p^) FAILED') // OK else Inc(Counter);

p := nil; inc(p); if uint32(p) <> standard then writeln('FAIL #3 - increment FAILED') // FAILED else Inc(Counter);

{$pointermath on} p := nil; p := p + 2; if uint32(p) <> standard*2 then writeln('FAIL #4 - addition FAILED') // FAILED else Inc(Counter); {$pointermath off} end;

begin try G.Test; if Counter = 4 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: 75853 7/16/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Compile and run the example. A access violation occurs at the line List.Extract(Ob) { This example Access violation for Extract on a generic TObjectList demonstrates the usage of the generic TObjectList class. } type { Declare a new object type } TNewObject = class private FName: String; public constructor Create(const AName: String); destructor Destroy(); override; [QC Description] end; { TNewObject } constructor TNewObject.Create(const AName: String); begin FName := AName; end; I tried to test the code example I found in the Delphi Help file for a generic TObjectList. The code was compiled destructor TNewObject.Destroy; begin { Show a message whenever an object is destroyed } MessageDlg without any error message. However when I run the program I got an access violation at the line List.Extract ('Object "' + FName + '" was destroyed!', mtInformation, [mbOK], 0); inherited; end; procedure (Obj). The same happens if I try to use TForm3.Button1Click(Sender: TObject); var List: TObjectList; Obj: TNewObject; begin { Create a List.Remove(Obj) or new List } List := TObjectList.Create(); { Set the OwnsObjects to true - the List will free them List.IndexOf(Obj) automatically } List.OwnsObjects := true; { Add some items up the List } List.Add(TNewObject.Create('One')); List.Add(TNewObject.Create('Two')); { Add a new item but keep the reference } Obj := TNewObject.Create QC Entry 75853 ('Three'); List.Add(Obj); { Remove an instance of TNewObject class. Destructor should be called because we have set the OwnsObjects to true! } List.Delete(0); List.Extract(Obj); { Destroy the List completely - more messageboxes will be shown } List.Free; end; QC #: Date Reported: Area: 75882 7/17/2009 IDE\Form Designer Description: Steps: [QC Short Description] Here is the problem reproduce steps: 1. Create an ActionManager, create the usual suspect standard actions ActionMainMenuBar designtime stuff is broken severely in build 3478.22926 (File, Edit, Help) 2. Drag from category list in actionmanager editor window to the ActionMainMenuBar. 3. Now click on the top-level categorys (pulldown menu headings, File, Edit, and Help) in sequence. 3. You get [QC Description] accidental drag/drop reorderings when you didn't move the mouse even one pixel. You get pull-downmenus ActionMainMenuBar used with ActionManager, and standard Actions (Edit actions, File actions, Help actions) (edit actions, especially, because it is neither the first nor the last in the list) will not "go away" (hide) even when results in various design-time glitches, and eventually access violations and IDE crashing. you show other things or mouse focus is lost from the actionmainmenubar. 4. Repeated dragging, and clicking will result in Access violation. For a traceback see comments. QC #75291 seems possibly related; What is similar is that someone else has reported problems with "accidental reordering" in the structure pane very similar to the accidental "move/delete" that is happening here. Whatever mouse-move message handling glitches are happening in the one place may happen in the other as well.

See steps to reproduce (easily reproduceable).

For a stack traceback on the access violations, see comments.

Testing done on Vista 64bit with SP1, but I don't believe it's likely to be only an issue on 64bit platforms.

[screenshot bug02.jpg is in attachments which shows the visual glitches] QC Entry 75882 QC #: Date Reported: Area: 75883 7/17/2009 Debugger\Evaluator\Delphi Description: Steps: [QC Short Description] Create this console app: program Project1; {$APPTYPE CONSOLE} {$OPTIMIZATION OFF} uses SysUtils, TStrings visualizer returns garbage when trying to visualize a nil TStrings variable Classes; var SL: TStringList; begin SL := nil; ReadLn; end. Add watch for SL variable Breakpoint at ReadLn Run app In watch, show visualizer for SL (spyglass dropdown, show strings) Garbage appears in the resulting [QC Description] dialog (see screenshot) (Chris already fixed this, it is reported for tracking only) The new TStrings visualizer returns garbage when trying to visualize a nil TStrings variable QC Entry 75883 QC #: Date Reported: Area: 75897 7/18/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] 1. Open the attached project New() with generic class records allocate field-count bytes instead of SizeOf bytes. 2. Set a breakpoint to the "New(P)" line 3. Start the application [QC Description] 4. When the Debugger hits the breakpoint, look at the CPU view If you use "New(PRecType)" in a generic class where PRecType=^TRecType is declared in the generic class with generic fields, the New() call will be transformed to an GetMem call with the number of fields as the "size" Expected: parameter, where it should be SizeOf. The EAX register is loaded with 8 (By USc: and records with managed types will be initialized) Furthermore if one of the records fields becomes a managed type (e.g. string) the InitializeRecord and FinalizeRecords calls are missing. Actual: QC Entry 75897 The EAX register is loaded with 2 (and if you add another field to the record it is loaded with 3, 4, 5, ...) (By USc: no initialization for records with managed types)

program BTS271245;

{$APPTYPE CONSOLE}

type TCustomList = class(TObject) public type PItem = ^TItem; TItem = record Key: TKey; Value: TValue; end; end;

var P: TCustomList.PItem; begin New(P); // allocates only 2 bytes but it should allocate 8 bytes // and where is the Initialize() call (for the string field)? { B802000000 mov eax,$00000002 <<<< here E882ADFCFF call @GetMem } {//disassembly for a classic class with a managed record (string and TObject) 8B15A85A4000 mov edx,[$00405aa8] B808000000 mov eax,$00000008 E814EFFFFF call @New

//disassembly for a classic class with an unmanaged record (two Integer's) B808000000 mov eax,$00000008 E80EDCFFFF call @GetMem }

//P^.Value := nil; // doesn't compile: "Incompatible types: 'TValue' and 'Pointer'"

Dispose(P); // releases only 2 bytes but it should release 8 bytes // and where is the Finalize() call (for the string field)? { BA02000000 mov edx,$00000002 <<<< here E894ADFCFF call @FreeMem } {//disassembly for a classic class with a managed record (string and TObject) 8B15A85A4000 mov edx,[$00405aa8] E81DEFFFFF call @Dispose

//disassembly for a classic class with an unmanaged record (two Integer's) BA08000000 mov edx,$00000008 E820DCFFFF call @FreeMem } end. QC #: Date Reported: Area: 75901 7/18/2009 IDE\Class Completion Description: Steps: [QC Short Description] 1. Create new VCL form Project. 2. Add to the top "type" next lines: type TMyRec = record fMyRec: integer; Class completion feature error class operator Implicit(ANew: integer): TMyRec; end; It is fully correct but if you press Ctrl+Shift+C here or below it always show error. For Example: unit Unit1; interface uses ... type TMyRec = record fMyRec: integer; [QC Description] class operator Implicit(ANew: integer): TMyRec; end; TForm1 = class(TForm) private { Private declarations } Class completion feature shows wrong error - "Expected END but '?' found in class TMyRec." (There are no any public function My: boolean; //<<<<< PRESS CTRL + SHIFT + C - to automatically complete function - see '?' letters!) in next situation: error end;

Added by Sysop <<<<<< This issue similar to QC#70431. >>>>>> QC Entry 75901 QC #: Date Reported: Area: 75910 7/19/2009 VCL\Property/Type Editors Description: Steps: [QC Short Description] - Create a new VCL Forms application (Delphi or C++Builder) - Drop a "TScreenTipsManager" component - AV after closing component editor for ScreenTipsManager Drop a "TActionList" component - Add an item to "ScreenTipsManager1.LinkedActionLists", set its "ActionList" property to "ActionList1" - Double-click the "ScreenTipsManager1" component. A component editor pops up. - [QC Description] Open the "File" menu (or any other menu item) of the component editor window, close it again. - Close the See steps. component editor. Exp.: no problems Act.: Access violation at address 2147D7F5 in module QC Entry 75910 'vclactnband140.bpl'. Read of address 80808090. QC #: Date Reported: Area: 75914 7/19/2009 IDE\Open Tools API Description: Steps: [QC Short Description] Search ToolsAPI.pas for "descendent" Some method names use "Descendent" instead of "Descendant" EXP: No matches found [QC Description] ACT: Some matches found Some new methods in the ToolsAPI use the word "Descendent" when the word "Descendant" is intended. QC Entry 75914 QC #: Date Reported: Area: 75916 7/19/2009 VCL\Ribbon Controls Description: Steps: [QC Short Description] - start Delphi - create a new VCL app - add TRibbon - show the popup menu for the TRibbon instance - have a TRibbon: typo in form designer function "Add Quick Access Toolbar" look at the fourth item expected: "Add Quick Access Toolbar" (A_CC_ESS) actual: "Add Quick Acess Toolbar" (A_C_ESS) [QC Description] There is a typo in the english version of the function "Add Quick Access Toolbar" for TRibbon in the form designer.

-> see steps QC Entry 75916 QC #: Date Reported: Area: 75920 7/19/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the file at the end of the steps - start Weaver - open SimplifiedSysUtils.pas expected: no Error Insight "Identifier redeclared" with procedures after generic "reference to procedure" errors in the Structure view actual: Identifier redeclared 'GetDefaultFallbackLanguages' at line 16 (16:10) Identifier redeclared 'SetDefaultFallbackLanguages' at line 20 (20:11) Identifier redeclared [QC Description] 'PreferredUILanguages' at line 24 (24:10) - open ...\RAD Studio\7.0\source\Win32\rtl\sys\SysUtils.pas expected: ...\RAD Studio\7.0\source\Win32\rtl\sys\SysUtils.pas does produce since FT build 3478 some "new" Error Insight no Error Insight errors in the Structure view actual: Identifier redeclared 'GetDefaultFallbackLanguages' at line error. They were probably hidden due RAID 213361 (+ QC 64959/RAID 263095) and the error has something 22731 (22731:10) Identifier redeclared 'SetDefaultFallbackLanguages' at line 22736 (22736:11) Identifier todo with generic "reference to procedure" redeclared 'PreferredUILanguages' at line 22746 (22746:10) unit SimplifiedSysUtils; interface type TProc = reference to procedure; function GetDefaultFallbackLanguages: string; procedure -> see steps SetDefaultFallbackLanguages(const Languages: string); function PreferredUILanguages: string; QC Entry 75920 implementation function GetDefaultFallbackLanguages: string; begin end; procedure SetDefaultFallbackLanguages(const Languages: string); begin end; function PreferredUILanguages: string; begin end; end. QC #: Date Reported: Area: 75932 7/20/2009 VCL Description: Steps: [QC Short Description] GetCategoryPanelSurfaceClass declared virtual in private section

[QC Description] GetCategoryPanelSurfaceClass in TCustomCategoryPanel is declared virtual in private section. Should be moved to protected section. QC Entry 75932 QC #: Date Reported: Area: 75941 7/20/2009 IDE\Code Editor\Formatting Description: Steps: [QC Short Description] Message handlers like procedure WMLButtonDown(var Msg: TWMMouse); message WM_LBUTTONDOWN; Code Formatter: formatting of message handlers 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 QC Entry 75941 and expected. QC #: Date Reported: Area: 75984 7/21/2009 VCL\Additional Controls\TStringGrid Description: Steps: [QC Short Description] TStringGrid: pan doesn't follow finger

[QC Description] If you pan a TStringGrid vertically (via DoGesture) the grid doesn't follow your finger: it goes much faster.

This isn't what you'd expect (see TListBox for example).

The scrollbars have a fake Max value, which is very high (SetAxisRange() sets it to MaxShortInt). This might have something to do with it. QC Entry 75984 QC #: Date Reported: Area: 76024 7/23/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] 1. Open the attached project. 2. Build package A. 3. Try to build package B. Cannot compile package when generics are used

[QC Description] I have 2 packages A and B. In A I have defined a generic class inherited from TObjectDictionary B depends on A and uses that class.

If I try to compile B I get: [DCC Fatal Error] F2084 Internal Error: AV04F70CDC-R0000000C-0

See the attached project.

Update 3 doesn't solve the problem

Also when I use more complex packages and generic types referenced in their interface sections I get errors: E2225 Never-build package must be recompiled Unit was compiled with different

Manually recompiling packages doesn't help.

QC Entry 76024 QC #: Date Reported: Area: 76026 7/23/2009 RTL\Delphi Description: Steps: [QC Short Description] quite obvious from source in Zlib.pas zlib ZSendToBrowser bug Notice the call to both ZCompress2 and the Move are presuming that a character is one byte in size. [QC Description] ... ZSendToBrowser uses Length(s) to compress, where s is string. procedure ZSendToBrowser(var s: string); if the intention was to pass string (instead of AnsiString), it should be bytelength var QC Entry 76026 outBuf: Pointer; outBytes: Integer; begin ZCompress2(pointer(s), length(s), outBuf, outBytes); SetLength(s, outBytes); Move(pointer(outBuf)^, pointer(s)^, outBytes); FreeMem(outBuf); end; ....

where the second parameter to ZCompress2 is the size in bytes of the buffer coming in.

procedure ZCompress2(const inBuffer: Pointer; inSize: Integer; out outBuffer: Pointer; out outSize: Integer); QC #: Date Reported: Area: 76058 7/24/2009 Database\DBExpress Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=informixconnection -s:TestRaid_271931 AV in dbxinf.dll (Informix DBX driver) -or- [QC Description] If we use a paramterized Query and open it with CDS, all is right. If we now change the SQL to one whithout a 1. Unzip the attached sampleproject Paramter and Close/Open the CDS, it will raise an AV in dbxinf.dll. 2. Change the SQLConnect1.Params to your environement. QC Entry 76058 3. Compile and run the application inside the IDE to see the AV. Outsinde the IDE you will only see an generic error.

4. Press the "Fill Table" button. The application will create a test table with 25'003 records. This will take some time. 5. Now execute the SQL by pressing the "Go DBX" button.

This will select one record with ArtNr = 10000

6. Now change the SQL in thw Memo to this:

select * from testdbxorder order by ArtNr

(simply remove the Where clausle with the parameter)

7. Press again the "Go DBX" button.

Now you will see an AV in dbxinf.dll if you debug inside the IDE. This is a handled AV which will give an generic error "Fatal Error" (German: Schwerwiegender Fehler).

Acces Vilaotion at address 00F64CB8 in mdoul dbxinf.dll. Read of address 00000004. QC #: Date Reported: Area: 76073 7/25/2009 VCL Description: Steps: [QC Short Description] Added by Sysop <<<<<<<< Unit Dialogs, line 3241, function TPrintDialog.Execute(ParentWnd: HWND): D2009 does not initialize the PrintDlgRec record in TPrintDialog Execute Boolean. At least, the nCopies variable in the PrintDlgRec record have variouse strange values when calling TaskModalDialog(@PrintDlg, PrintDlgRec) at 3319 line. >>>>>>>> [QC Description] The PrintDlgRec record in the TPrintDialog Execute method has not been initialized before it usage. QC Entry 76073 QC #: Date Reported: Area: 76128 7/27/2009 IDE\Code Editor Description: Steps: [QC Short Description] 1) Ensure that Tools -> Options -> Environment Options -> Autosave Options -> Editor Files is checked 2) "Undo" in the editor doesn't always mark the file as modified Ensure that Tools -> Options -> Editor Options -> Undo After Save is checked 3) Open the attached dpr file 4) Run it: It should display "1". Click OK to close the app. 5) Open Unit1.pas in the editor and change the text in [QC Description] the ShowMessage to "2". 6) Run it: It should display "2". Click OK to close the app. 7) Change the text in the There are certain situations in which using "undo" does not mark the source file as modified, possibly causing ShowMessage to "3". 8) Run it: It should display "3". Click OK to close the app. 9) Use Edit -> Undo (or Ctrl+Z) data loss and/or the compiler building an executable with an old dcu file. to undo the last changes so it is back to "2" 8) Run it: It should display "2". Click OK to close the app. 9) Use Edit -> Undo (or Ctrl+Z) to undo changes further so it is back to "1" 10) Run it. Expected behaviour: It should Refer to "Steps" for a set of steps that reproduces this behaviour reliably. display "1". Actual: It displays "2". QC Entry 76128 QC #: Date Reported: Area: 76152 7/28/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] - run a TTouchKeyboard on a windows 7 multitouch machine - do this with your fingers: 1. Shift key down 2. TTouchKeyboard: multitouch shift issue Alpha key down 3. Alpha key up 4. Shift key up Expected: Alpha keys show lower case Observed: Alpha keys show upper case 5. repeat step 1..4 Expected: Shift key is off Observed: Shift key is on The first issue is just a [QC Description] painting issue (ie. pressing an alpha key gets you a lowercase charachter, as expected). The second issue is a see steps logical problem: Shift is really still on. QC Entry 76152 QC #: Date Reported: Area: 76163 7/28/2009 Debugger\Evaluator\Delphi Description: Steps: [QC Short Description] Use the following console app: No support for TValue as argument in the Debugger program Project8; [QC Description] Have a Form. Add a button and the following method to the form: {$APPTYPE CONSOLE} function TForm4.Test(aVal: TValue): string; uses begin SysUtils, Classes, Rtti; Result:=aVal.ToString; end; function foo(Value: TValue): string; begin ...also in the Button's OnClick handler write the following and put a breakpoint in the marked bogus line. Result := Value.ToString; end; procedure TForm4.ToolButton1Click(Sender: TObject); begin var Caption:=Caption; //<---breakpoint here! SL: TStringList; end; begin Run. When the program stops, press Ctrl+F7 to invoke the Evaluator and type 'Test(Form4)' (or whatever name try your form has). Instead to return eg. SL := TStringList.Create; writeln(foo(SL)); //set breakpoint here '(TForm4 @ 00BC4320)' except on E: Exception do it returns Writeln(E.ClassName, ': ', E.Message); end; Access violation at 004C3EC3 accessing 0234CA1D end.

...and if you're stubborn and try to evaluate this multiple times there are good chances to generate AVs through Set a breakpoint where indicated the entire IDE. Run to hit the breakpoint QC Entry 76163 Ctrl-F7 to open the evaluator dialog Enter "foo(SL)" for the expression Evaluator returns an AV QC #: Date Reported: Area: 76169 7/29/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] TTouchKeyboard: RepeatRate / RepeatDelay default values swapped

[QC Description] in declaration: property RepeatRate: Cardinal read FRepeatRate write FRepeatRate default 300; property RepeatDelay: Cardinal read FRepeatDelay write FRepeatDelay default 50; in constructor: FRepeatDelay := 300; FRepeatRate := 50; QC Entry 76169 QC #: Date Reported: Area: 76195 7/29/2009 Compiler\Delphi Description: Steps: [QC Short Description] (JJS: See the attached file BTS271761 rewritten for PASS/FAIL) TRttiField.Visibility incorrect Run the following program it will show the invalid results [QC Description] Every field is return as "mvPublic" regardless of where it really is located. program Project9;

QC Entry 76195 {$APPTYPE CONSOLE}

uses SysUtils, Rtti,TypInfo;

type TFoo = class(TObject) private fPrivate : IUnknown; protected fProtected : IUnknown; public fPublic : IUnknown; published fPublished : IUnknown; end;

var c : TRttiContext; t : TRttiType; s : string; Field : TRttiField;

begin try c := TRttiContext.Create; t := c.GetType(TFoo); for Field in t.GetFields do begin Write(field.Name, ' '); writeln(GetEnumName(TypeInfo(TMemberVisibility),ord(field.Visibility))); end; c.Free; readln(s); except on E: Exception do begin Writeln(E.ClassName, ': ', E.Message); readln(s); end; end; end. QC #: Date Reported: Area: 76198 7/29/2009 VCL\Property/Type Editors Description: Steps: [QC Short Description] 1.[File | New | VCL Forms Application] 2.Put TSQLConnection on the form. 3.Show "Object Inspector". 4.Click The button in "Value List Editor" is truncated. "Params" button. 5."Value List Editor" appears. EXP: Not truncated. ACT: Truncated.

[QC Description] The button in "Value List Editor" is truncated.

Please see Steps QC Entry 76198

[SB: Bottoms of all buttons are truncated, value list is snug up against edge of form] QC #: Date Reported: Area: 76202 7/29/2009 IDE\Code Editor\Formatting Description: Steps: [QC Short Description] If I have comment in the code like { $100 is a good price for this piece of ... code } and I set option "Set spacing Code formatter: $ in comments for { and (* comments" = "Outer only", then it's formatted into {$100 is a good price for this piece of ... code} So comment becomes a directive. It's a dangerous behavior of code formatter. It breaks the code. QC Entry 76202 QC #: Date Reported: Area: 76203 7/29/2009 IDE\Message View Description: Steps: [QC Short Description] Compile a project, see the compile-window Compile-Window: Label showing the filename is one pixel off-center

[QC Description] In the windows that shows us the compile-progress (project, filename, line-number) the label showing the filename is one pixel off-center. see attached screenshot QC Entry 76203 QC #: Date Reported: Area: 76228 7/30/2009 SOAP\WSDL Importer Description: Steps: [QC Short Description] [This requires that we setup a WSDL on a Server that requires a Client Certificate; I did that a while ago but the WebService under https authenticated via X509 certificates machine is not longer available; it's something that we should have setup in-house for testing purposes; See Bruneau for more details]. [QC Description] [Please see Resolutin Note on Workaround] Hi folks, Steps to verify this bug: - Extract attached files to a local directory. I'm getting the "Empty Document" error when trying to import a - Copy ws-tokens.ini to C:\ or main drive root directory authenticated webservice using a X509 certificate. - Launch Internet Explorer. Tools|Internet Options. Advanced. Uncheck option 'Security|Check for server certificate revocation*' ---// Needed only on Vista and Win 7. Should skip this for XP. The Wizard displays the installed certificates for selection, but the - Restart Internet Explorer. import process stops after that displaying the attached message. - Tools|Internet Options. Content. Click on Certificates. - Import...import the first certificate SRF.P7B. Saving and importing the .wsdl file locally works ok. - Click Import...again and import hp2009.pfx. Please check with Chris White, Lata Amujuri or Andreano for the QC Entry 76228 password to import this certificate. - In IDE, Component|Import WSDL using URL: Error [Empty Document] happens on Windows Vista and Windows 7. Works on Windows XP. https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/nferecepcao.asmx?wsdl //exp: Should import successfully

Note: This bug should be tested on Win XP, Vista an 7 to make sure that it works properly. QC #: Date Reported: Area: 76234 7/30/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] 0.Install Japanese edition of Weaver. 1.[File | New] 2.Put TTouchKeyboard on the form. EXP: The key's caption TTouchKeyboard: "Kanji" key's caption is empty (Japanese keyboard layout) is "kanji" (Japanese Roman). ACT: The key's caption is empty.

[QC Description] (Japanese keyboard layout) "Kanji" key's caption is empty. The function of the key cannot be understood. QC Entry 76234 QC #: Date Reported: Area: 76237 7/30/2009 VCL\Touch Controls\TTouchKeyboard Description: Steps: [QC Short Description] 0.Install Japanese edition of Weaver. 1.[File | New] 2.Put TTouchKeyboard on the form. 3.Put TMemo on the TTouchKeyboard: Can't input U+30ED/U+30FC (Japanese keyboard layout) form. 4.[Run | Run] 5.Press "Kana" key. EXP: Can input U+30ED/U+30FC. ACT: Can't input U+30ED/U+30FC. See Also: http://en.wikipedia.org/wiki/File:KB_Japanese.svg U+30ED, KATAKANA LETTER RO Left side of [QC Description] Right-Shift key U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK Left side of BackSpace key. Can't input U+30ED/U+30FC (Japanese keyboard layout)

U+30ED, KATAKANA LETTER RO U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK

Please see steps. QC Entry 76237 QC #: Date Reported: Area: 76238 7/30/2009 Database\DataSnap\Server Description: Steps: [QC Short Description] 1. Start RAD Studio 2. Click New Project 3. Click DataSnap Server in left pane 4. Double-click DataSnap DataSnap Server projects generated without DSServerClass component Server in projects list 5. Check HTTP and uncheck TCP/IP 6. Click OK. Expected: The generated data module to contain the DSServerClass component in addition to DSServer and DSHTTPService. Actual: The generated [QC Description] data module only contains the DSServer and DSHTTPService components. The DataSnap Server project wizard does not place the DSServerClass component on the form and link it with the generated OnGetClass event handler. QC Entry 76238 QC #: Date Reported: Area: 76247 7/31/2009 Compiler\Delphi Description: Steps: [QC Short Description] (JJS: Compile, install, and activate the attached IDE wizard) AVs when using Rtti inside BDS Here's the procedure that fails with the AV from the menu wizard's execute method. [QC Description] Using Rtti in a dll expert build with run-time packages (including designide) that is loaded into BDS, causes AV's. procedure RttiTest; It turns out that just iterating the packages is enough to invoke the AVs (several). var FContext: TRttiContext; I don't know if this also happens when used inside a design-time package. P: TRttiPackage; Buffer: TStringList; A similar test with emitting the types obviously crashes too. begin QC Entry 76247 Buffer := TStringList.Create; try FContext := TRttiContext.Create; try for P in FContext.GetPackages do Buffer.Add(P.Name); // The last packagename is vcl140.bpl // crash after that.

finally FContext.Free; end; Buffer.SaveToFile('c:\rtti.txt'); ShowMessage('Done'); finally Buffer.Free; end; end; QC #: Date Reported: Area: 76250 7/31/2009 Database\Data Aware Controls\TDBGrid Description: Steps: [QC Short Description] Create a new Delphi VCL Win32 Application - drop a TDBGrid on the form - drop a TClientDataSet - drop a Themed DBGrid draws black boxes around every cell DataSource component Wire the components: DBGrid -> DataSource -> ClientDataSet Run the application on a Windows with Themes enabled. Exp: The DBGrid is rendered smoothly Act: Every Cell in the DBGrid is [QC Description] surrounded by black boxes. See attached ScreenShots taken under - Windows 7 RC1 Win32 with Areo Basic DBGrid connected to a dataset draws black boxes around every cell. See attached screenshots (VMWare) - Windows XP Prof. with Luna Blue Theme (phys. machine)

Screenshots are taken under - Windows 7 32 Bit, Areo Basic (VMWare) - Windows XP Prof. 32 Bit, Luna Blue Theme

As long as the DBGrid is *not* connected to any dataset, it is painted correctly. QC Entry 76250 QC #: Date Reported: Area: 76252 7/31/2009 VCL\Ribbon Controls Description: Steps: [QC Short Description] Open RibbonDemo Run Application Double click on Ribbon tab to minimize Resize Click on Control Types Clicking on a tab when minimized Ribbon dont show collapsed group Somme groups are neither collapsed nor show

[QC Description] Clicking on a tab when minimized Ribbon dont show collapsed group QC Entry 76252 QC #: Date Reported: Area: 76277 7/31/2009 IDE\Code Editor\Error Insight Description: Steps: [QC Short Description] - save the file at the end of the steps - start Weaver - open GenericsResultOverloadErrorInsightTest.dpr "Overloaded procedure 'TFoo.Bar' must be marked with the 'overload'..." with generic type a result 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 [QC Description] \rtl\common\Rtti.pas expected: no Error Insight errors in the Structure view actual: Overloaded procedure ...\RAD Studio\7.0\source\Win32\rtl\common\Rtti.pas does produce a Error Insight error for an overloaded 'TRttiType.GetMethods' must be marked with the 'overload' directive at line 3401 (3401:10) program method with a generic type as result. GenericsResultOverloadErrorInsightTest; {$APPTYPE CONSOLE} type TArray = class(TObject); TRttiType = class(TObject) function GetMethods: TArray; overload; function GetMethods(const AName: string): -> see steps TArray; overload; end; function TRttiType.GetMethods: TArray; begin Result := nil; end; QC Entry 76277 function TRttiType.GetMethods(const AName: string): TArray; begin Result := nil; end; begin end. QC #: Date Reported: Area: 76280 7/31/2009 Compiler\Delphi\Other Compiler Description: Steps: [QC Short Description] - dcc32 --version - have a look at the output expected: ...Embarcadero Delphi... dcc (Embarcadero Delphi for "CodeGear Delphi for Win32 compiler" instead of "Embarcadero Delphi for..." Windows) 21.0 Embarcadero Delphi for Win32 compiler version 21.0 Copyright (c) 1983,2009 Embarcadero Technologies actual: ...CodeGear Delphi... dcc (CodeGear Delphi for Windows) 21.0 CodeGear Delphi for [QC Description] Win32 compiler version 21.0 Copyright (c) 1983,2009 Embarcadero Technologies The CodeGear to Embarcadero bulk replacement hasn't yet reached the compiler

-> see steps QC Entry 76280 QC #: Date Reported: Area: 76299 8/1/2009 VCL\Ribbon Controls Description: Steps: [QC Short Description] Open RibbonDemo Go to Home tab Click on rcbFontSize Press delete key An exception occures [[10534938] Deleting a combobox from a Ribbon cause an exception {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} [QC Description] RibbonActnCtrls.TRibbonComboControl.SetBounds (Line 4382, "RibbonActnCtrls.pas" + 4) + $F [1051D0A8] Deleting a combobox from a Ribbon cause an exception {vclribbon140.bpl} Ribbon.TCustomRibbonGroup.AlignGroupControls (Line 6851, "Ribbon.pas" + 93) + $12 QC Entry 76299 [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: 76300 8/1/2009 IDE Description: Steps: [Flexible language feature] 0.Install Japanese edition of Weaver. 1.$(BDS)\bin\BDSSetLang.exe /I 2.Switch Japanese to English. 3.Launch Delphi. 4.[View | Toolbars] EXP: Menu item is displayed with English. ACT: Menu item is displayed with Japanese. (QC76300.jpg)

[QC Short Description] BDSSetLang: The language of the menu item of the toolbar doesn't switch

[QC Description] In Japanease Windows environment The language of the menu item of the toolbar doesn't switch.

Please see steps. QC Entry 76300 QC #: Date Reported: Area: 76318 8/3/2009 IDE\Open Tools API Description: Steps: [QC Short Description] Compile the attached DLL Install it as usual as a DLL expert into the registry like this: REGEDIT4 Calling IOTAEditorServices.KeyboardServices results in AV [HKEY_CURRENT_USER\Software\CodeGear\BDS\7.0\Experts] "TestExpert"="Z:\\TestExpert\\TestExpert.dll" Start the IDE Shtdown the IDE and see the AV when calling: (BorlandIDEServices as [QC Description] IOTAEditorServices).KeyboardServices; Calling IOTAEditorServices.KeyboardServices consistently results in this AV:

------Debugger Fault Notification ------Project C:\Program Files\Embarcadero\RAD Studio\7.0\bin\bds.exe faulted with message: 'access violation at 0x771b7eae: write of address 0x00030fe8'. Process Stopped. Use Step or Run to continue. ------OK ------

Chris already duplicated this, but asked that I QC it. He mentioned the problem was present in TIDEEditorServices.GetKeyboardServices. QC Entry 76318 QC #: Date Reported: Area: 76332 8/3/2009 IDE\Search\Find Description: Steps: [QC Short Description] used screen resolution: 1680x1050 run and maximaze Delphi 2010 open any file for editing press Ctrl-F - find Find bar (Ctrl-F) options doesn't shown 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 [QC Description] show all of them in one place (See attached image) 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 QC #: Date Reported: Area: 76347 8/3/2009 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] // Compile and run this program, and watch it deadloop. A TDictionary search can get caught in an endless loop. {JJS: The line marked //#1// is expected to generate a EListError exception} [QC Description] TDictionary search algorithm can deadloop under certain circumstances. Program TestDictSearch;

Particularly, when multiple powers of 2 (not including 2) number of keys are added to the dictionary, AND {$APPTYPE CONSOLE} TrimExcess() function is called, then search with any non-existent key lead to deadloop. Uses This is becuase the GetBucketIndex() function assumes if the search key does not exists, then eventually it will Generics.Collections; hit an empty entry. This assumption fails when all entries are filled. QC Entry 76347 Type TTestDict = TDictionary;

Var TestDict: TTestDict;

begin TestDict:= TTestDict.Create; TestDict.Add(1, 1); TestDict.Add(2, 1); TestDict.Add(3, 1); TestDict.Add(4, 1); TestDict.TrimExcess; Writeln(TestDict[500]); //#1// end. QC #: Date Reported: Area: 76356 8/3/2009 VCL\Ribbon Controls Description: Steps: [QC Short Description] 1. open Ribbon Demo 2. run it 3. click right below the maxmize button 4. original close button is displayed with Original Minimize/Maximize/Close buttons shown on Vista white color

[QC Description] When clicking right below the Minimize/Maximize/Close buttons by Mouse, original Minimize/Maximize/Close buttons have been displayed with while color.

This issue occurs on only Vista.

Please see attached screenshot. QC Entry 76356 QC #: Date Reported: Area: 76400 8/5/2009 RTL\Delphi\Other RTL Description: Steps: (JJS: Possibly related to RAID 271947, will retest with current rev.) Compile the attached application below with the following command-line.

[QC Short Description] dcc32 BTS272100 -LUrtl Accessing GetTypes() of TRttiContext with for loop causes AV when packages are being used. Run the executable and see the following program output indicating failure. [QC Description] When 'Use Runtime Packages' is turned On, accessing GetTypes() of TRttiContext with for loop causes AV. FAIL - Exception ClassName=EAccessViolation ------Message=Access violation at address 0040125D in module 'BTS272100.exe'. Read of address 00000000 procedure TForm4.Button1Click(Sender: TObject); var LContext: TRttiContext; LType: TRttiType; program BTS272100; begin LContext := TRttiContext.Create; {$APPTYPE CONSOLE} for LType in LContext.GetTypes() do ; uses end; Rtti, ------SysUtils; QC Entry 76400

procedure DoTest; var LContext: TRttiContext; LType: TRttiType; begin LContext := TRttiContext.Create; for LType in LContext.GetTypes() do ; WriteLn('PASS'); end;

begin try DoTest; except on E: Exception do begin WriteLn('FAIL - Exception'); WriteLn(' ClassName=', E.ClassName); WriteLn(' Message=', E.Message); end; end; end. QC #: Date Reported: Area: 76402 8/5/2009 IDE\Code Editor\Sync Edit Description: Steps: [QC Short Description] - create a vcl app - add a constructor like this: procedure TForm1.FormCreate(Sender: TObject); begin sync edit is totally broken caption := caption + '33'; end; - select the "caption := caption + '33';" line - start Sync Edit - press the '1' key 5 times. Now the lines reads " 11111111111111 + '33';" [QC Description] see steps QC Entry 76402 QC #: Date Reported: Area: 76426 8/5/2009 VCL\Standard Controls\TComboBox Description: Steps: [QC Short Description] Open attached project TComboBox KeyPress Filter Broken Drop down the list type 'ap' (Regression caused by Raid #269507)

[QC Description] The following code in StdCtrls.pas (around line 3947) was changed from this... if HasSelectedText(StartPos, EndPos) then SaveText := Copy(FFilter, 1, StartPos) + Key

To this (around line 4031) ...

// This call sets StartPos and EndPos HasSelectedText(StartPos, EndPos); if StartPos < Length(FFilter) then SaveText := Copy(FFilter, 1, StartPos) + Key + Copy(FFilter, EndPos+1, Length(FFilter))

I reformatted it slightly for word wrapping. Anyway, I'm not quite sure what the intention of the new code is, but I have determined that it breaks the original behavior of the combo box (this code is in the KeyPress method). Here's how.

Suppose the combo box has 4 items: Answer Apple Banana Pie

And suppose that the Style is csDropDownList. In Delphi 2009, if you type "ap" quickly, then you will be taken to "Apple". In the latest Weaver, no matter how quickly you type "ap", you will be taken to "Pie". The "a" takes you to "Answer", as desired, but the "p" takes you to "Pie", which is not desired. QC Entry 76426 QC #: Date Reported: Area: 76437 8/5/2009 Compiler\Delphi\Packages Description: Steps: Package is built with wrong package flags and settings if a dependent package gets implicitly built. Steps with command line and dev build (the command line passed to the compiler assumes the tp tree lives in c:\svn\tp. Adjust that path accordingly for your system): In this case, it might be an error that the dependent package is implicitly built, since both packages have Download the attachment {$IMPLICITBUILD OFF} At a command prompt do: defined dcc32 -Uc:\svn\tp\intermediate\debug\lib;c:\svn\tp\intermediate\debug\dcp DesignPackage.dpk

======Note that you see this output: [QC Short Description] Automated Incident Report [C:\testcases\QC76437]dcc32 -uc:\svn\tp\intermediate\debug\lib;c:\svn\tp\interme diate\debug\dcp DesignPackage.dpk [QC Description] Embarcadero Delphi for Win32 compiler version 21.0 Package C:\Documents and Settings\All Users\Documents\RAD Studio\7.0\Bpl\DesignPackage.bpl can't be Copyright (c) 1983,2009 Embarcadero Technologies, Inc. installed because it is not a design time package. Confidential pre-release version built Aug 6 2009 11:47:48 ComponentImpl.pas(15) Installing a designtime package using the Install option of the project manager context menu. The package being RuntimePackage.dpk(40) installed is a *designtime* package, but is incorrectly reported as not being a designtime package. ComponentReg.pas(22) QC Entry 76437 DesignPackage.dpk(41) 122 lines, 0.72 seconds, 1996 bytes code, 84 bytes data.

It also compiled RuntimePackage.dpk (even though $IMPLICITBUILD OFF is specified for both packages)

Run: "pgkinfo DesignPackage.bpl" (pkginfo is a tool in the $(tp)\tools directory) Note that DesignPackage was built with RuntimePackage's flags and settings. It should be a DesigntimeOnly package and the Description should be Designtime Test Package (Delphi 2010)

Steps with IDE: 1) Create a designtime package that references a runtime package containing a componet. 2) Ensure that the designtime package is not installed and no build artifacts are present. 3) Open both components in the project manager 4) Right click on the the designtime package and select Install from the menu - Package compiles without error - Install fails (package is not a designtime package) 5) Select the runtime package and select build - Package builds OK 6) Select the designtime package *again* and select Install - Package compiles and installs as expected QC #: Date Reported: Area: 76469 8/6/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Steps by USc: [DCC Fatal Error] F2084 Internal Error: L2084 - save the following code as GenericRecordClassVarTest.dpr - dcc32 GenericRecordClassVarTest.dpr [QC Description] Try This code expected: it compiles actual: Fatal: F2084 Internal Error: L2084 TTest = record (Internal note by USc: with Weaver the error is "GenericRecordClassVarTest.dpr(1) Fatal: F2084 Internal Error: class var A2: array of string; O616") end;

program GenericRecordClassVarTest;

QC Entry 76469 {$APPTYPE CONSOLE}

(JJS: Seen as Internal Error C6044 in build 14.0.3505.24002) type TTest = record class var A2: array of string; end;

begin end.

Original Steps: File|New|VCL Forms Application- Delphi

Past this code in the type section:

TTest = record class var A2: array of string; end;

Try to comple .

[DCC Fatal Error] F2084 Internal Error: L2084 QC #: Date Reported: Area: 76536 8/9/2009 Compiler\Delphi\Execution Description: Steps: [QC Short Description] Compile the attached program below. REGRESSION: inline creates internal error C5459 expected: it compiles [QC Description] actual: Fatal: F2084 Internal Error: C5459 I try to compile a function with inline enabled get internal dcc error C5459 Additional note: The error goes away if G, R and A are commented out in BufferToColor32 - means Additional information by USc: This compiles with Tiburon and has been broken between Weaver FT build 3417 and FT build 3449. with TColor32Entry(Result) do QC Entry 76536 begin B := Buffer.B shr Shift; //G := Buffer.G shr Shift; //R := Buffer.R shr Shift; //A := Buffer.A shr Shift; end;

instead of

with TColor32Entry(Result) do begin B := Buffer.B shr Shift; G := Buffer.G shr Shift; R := Buffer.R shr Shift; A := Buffer.A shr Shift; end;

program BTS272247;

{$DEFINE USEINLINING}

type TColor32 = type Cardinal;

TBufferEntry = record B, G, R, A: Integer; end;

TColor32Entry = packed record case Integer of 0: (B, G, R, A: Byte); 1: (ARGB: TColor32); 2: (Planes: array[0..3] of Byte); end;

function BufferToColor32(Buffer: TBufferEntry; Shift: Integer): TColor32; {$IFDEF USEINLINING} inline; {$ENDIF} begin with TColor32Entry(Result) do begin B := Buffer.B shr Shift; G := Buffer.G shr Shift; R := Buffer.R shr Shift; A := Buffer.A shr Shift; end; end;

function ConvertBuffer(var Buffer: TBufferEntry): TColor32; begin Result := BufferToColor32(Buffer, 8); {[DCC Fataler Fehler] Unit1.pas(38): F2084 Interner Fehler: C5459} end;

begin WriteLn('PASS'); //PASS on compile // end. QC #: Date Reported: Area: 76563 8/10/2009 IDE\Code Editor\Help Insight Description: Steps: [QC Short Description] Create a new Delphi Win32 application Double click on the new form In the OnCreate Event past this code : try Tooltip help insight is not working for symbols inside "on" statement block 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 [QC Description] displayed Tooltip help insight is not working for symbols inside "on" statement block QC Entry 76563 QC #: Date Reported: Area: 76576 8/10/2009 IDE\Code Editor\Formatting Description: Steps: [QC Short Description] 1. EITHER: Open the attached console application OR: start a new one and paste in the following code: type Using the code formatter hangs the IDE TObj = class(TObject) public const TESTCONST = 5; end; 2. Select the lines const TESTCONST = 5; end; 3. Rightclick and choose Format source. Now try to use any of the menus. You will find that the IDE is unusable [QC Description] and has to be killed. Invoking the code formatter while some text is selected can cause the IDE to hang. QC Entry 76576 QC #: Date Reported: Area: 76584 8/10/2009 Compiler\Delphi\RTTI\Custom attributes Description: Steps: [QC Short Description] Compile and run the attached program and unit, BTS272303.dpr and uBTS272303.pas. Retrieving Attributes on a Type causes A/V See the following output indicating failure. [QC Description] Calling TRttiType.GetAttributes fails with an Access Violation FAIL - Exception Error Classname=EAccessViolation QC Entry 76584 Message=Access violation at address 00446F34 in module 'BTS272303.exe'. Read of address 52280046

See the DoTest routine in the main program code as below. The AV error on the call to TRttiType.GetAttributes (aType.GetAttributes in source)

procedure DoTest; var ReturnValue: Boolean; Attr: TCustomAttribute; Attrs : TArray; aType: TRttiType; C : TRttiContext; var lAttr : TCustomAttribute; begin C := TRttiContext.Create; aType := C.GetType(TSingleAttrTest.ClassInfo); if Assigned(aType) then Inc(Counter) else WriteLn('FAIL #1 - No Type Retreived'); // #1 //

if atype.IsPublicType then Inc(Counter) else WriteLn('FAIL #2 - Not a Public Type'); // #2 //

// This call is causing an A/V and I expect it to complete Attrs := aType.GetAttributes; if Assigned(Attrs) then Inc(Counter) else WriteLn('FAIL #3 - Attributes must be Assigned'); // #3 //

if 3 = Length(Attrs) then Inc(Counter) else WriteLn('FAIL#4 - Length check'); // #4 // end; QC #: Date Reported: Area: 76641 8/12/2009 Compiler\Delphi\RTTI\Custom attributes Description: Steps: [QC Short Description] Compile and run the attached application below. Attributes on Properties are not found See the following program output indicating failure. (JJS: Seen to be fixed in dev build rev. 24209) FAIL #2 - L=0

[QC Description Notice that no attributes are seen for the property "Prop" even though "TPropTest" is present in source. attributes on properties are not visible program BTS272375;

Using 3505 with RTTI.pas patched with code from Barry to get past {$APPTYPE CONSOLE} QC#76584 uses Index: rtl/common/Rtti.pas SysUtils, ======Rtti; --- rtl/common/Rtti.pas (revision 24075) +++ rtl/common/Rtti.pas (working copy) type @@ -4603,7 +4603,8 @@ TPropTest = class(TCustomAttribute) constructor TRttiInstancePropertyEx.Create(APackage: TRttiPackage; end; AParent: TRttiObject; var P: PByte); begin TFoo = class(TObject) inherited; private - Inc(P, SizeOf(Handle^)); FProp: Integer; + P := @Handle^.AttrData; public + Inc(P, PWord(P)^); [TPropTest] end; property Prop : Integer read FProp write FProp; end; function TRttiInstancePropertyEx.GetPropInfo: PPropInfo; [QC 76641] { TAnonTest }

var c : TRttiContext; Retval: TArray; a : TCustomAttribute; Count: Integer; S: String; L: Integer;

begin c := TRttiContext.Create; try RetVal := c.GetType(TFoo).GetProperty('Prop').GetAttributes; L := Length(RetVal);

if Length(RetVal) = 1 then begin S := RetVal[0].ClassName; if Sametext(S, 'TPropTest') then WriteLn('PASS') else WriteLn('FAIL #1 - S=', S); end else WriteLn('FAIL #2 - L=', L); finally c.Free; end; end. QC #: Date Reported: Area: 76667 8/13/2009 Compiler\Delphi\Execution Description: Steps: [QC Short Description] Compile the following code (dcc32 -JPHN qc76667.pas): // ----- unit qc76667; interface type TVegetable = Internal Compiler Error when generating header definition for a subset of an enumeration (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 Description] See steps. QC Entry 76667 QC #: Date Reported: Area: 76730 8/16/2009 IDE\History View Description: Steps: [QC Short Description] First part of the steps to get a test case and perform the search the first time to break the search (not the actual Search does only work the first time problem; the first time it works due the fix for QC 75439/RAID 270794) - start the IDE - create a new Delphi console application - save it - remove the "{ TODO -oUser -cConsole Main : Insert code here }" line - save it - [QC Description] close the IDE - restart the IDE - open the saved project - switch to the History editor tab - click into the edit It seems that the search (CTRL+F) in the History view does only work the first time and later it searches in the control on the "Contents" tab - press CTRL+F - enter "end" in the search edit and press ENTER (see "Code" tab. "end" [end;] on line 13 is marked in black, "end" [end.] is NOT marked and there is no match count) Second part of the steps (the actual problem) - close the project and reopen it - switch to the History editor tab - click into the -> see steps edit control on the "Contents" tab - press CTRL+F - enter "end" in the search edit and press ENTER expected: - first "end" [end;] on line 13 is marked in black - there is no match count (per Darren is this as designed for This is from the thread "Search in Historie Window?" in .weaver.ide.editor Weaver) actual: - nothing is marked - there is a match count [2 matched found] - switch to the "Code" tab https://forums.embarcadero.com/thread.jspa?messageID=147476&tstart=0#147476 expected: nothing is marked actual: "end" [end;] on line 13 is marked in black and "end" [end.] is marked in Message-ID: <[email protected]> orange QC Entry 76730 QC #: Date Reported: Area: 76732 8/16/2009 IDE\History View Description: Steps: [QC Short Description] Before you start with the following steps make sure that QC 75439/RAID 270794 and QC 76730 is fixed! - start Switching to another revision does not reset the search result 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 [QC Description] into the edit control on the "Contents" tab - press CTRL+F - enter "end" in the search edit and press ENTER After performing a search in the History view and switching to another revision the search result is not resetted. (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 -> see steps and attached images mark stays where it is (see HistoryViewSearchResultOtherRevision.png)

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: <[email protected]> QC Entry 76732 QC #: Date Reported: Area: 76775 8/17/2009 IDE\Code Editor Description: Steps: [QC Short Description] 1) Create a new Delphi forms application and drop a TButton, double klick to auto-create the OnClick handler. How to crash the IDE in a few steps 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 [QC Description] insight windows infinitely (eats a lot of CPU time, but IDE still survives). 4) While in that loop press the DEL key. Steps: 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 1) Create a new Delphi forms application and drop a TButton, garbage and the IDE should crash sooner or later. Vista 32bit, single CPU VM. Clean, default install and default double klick to auto-create the OnClick handler. settings. 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 QC #: Date Reported: Area: 76776 8/17/2009 Database\DataSnap\Server Description: Steps: [QC Short Description] 1. Click File->New->Other 2. Select DataSnap Server 3. Double-click on DataSnap WebBroker application. 4. DataSnap WebBroker applications don't run 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 [QC Description] class Exception with message 'Only one data module per application'. Process Project1.exe (4216) 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 QC #: Date Reported: Area: 76780 8/17/2009 IDE\Tool Palette Description: Steps: [QC Short Description] Check Indy component Tool Palette and also in the Component Toolbar. 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 QC #: Date Reported: Area: 76861 8/19/2009 IDE\Code Editor\Formatting Description: Steps: [QC Short Description] 1) Create one (or more) bookmark in the unit RAD Studio 2010: "Format source" moved all bookmarks 2) 'Format source'; 3) All bookmarks are moved in the last line of unit [QC Description] All bookmarks are moved in the last line of unit http://img443.imageshack.us/img443/4311/13961015.png http://img443.imageshack.us/img443/4311/13961015.png fixed: trunk - rev,24557-24559, branch - rev.24560-24562 QC Entry 76861 QC #: Date Reported: Area: 77118 8/28/2009 IDE\Code Editor\Formatting Description: Steps: [QC Short Description] See Description Formatter confused by subrange type definition [vk] Fixed in the trunk rev.24448. [QC Description] Fixed in brunch - rev.24450 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 QC #: Date Reported: Area: 77121 8/28/2009 Compiler\Delphi\Generics Description: Steps: [QC Short Description] Attempt to compile the attached project. Steps by USc: - save the following three files - dcc32 --inline:auto Internal Error: I12307 w/ Generic Descendants in Separate Units and {$INLINE AUTO} GenericsCodeGenTest.dpr expected: compiles actual: GenericsCodeGenTest.dpr(9) Error: E2010 Incompatible types: 'TObjectList' and 'Class reference' GenericsCodeGenTest.dpr(11) Fatal: F2084 [QC Description] Internal Error: I12307 Note the E2010 error disappears if you remove the "FOwnsObjects := AOwnsObjects;" in The attached project demonstrates the error. "TObjectList.Create" in Generics.Collections.Simplified.pas //--- GenericsCodeGenTest.dpr --- program GenericsCodeGenTest; {$APPTYPE CONSOLE} uses BarUnit in 'BarUnit.pas'; begin TBar.Create; WriteLn The setup: ('PASS'); end. //--- BarUnit.pas --- unit BarUnit; interface uses Generics.Collections.Simplified; type TBar = class(TObjectList); implementation end. //--- Generics.Collections.Simplified.pas --- unit Unit2 contains TBar, a non-Generic descendant from TObjectList. (TObjectList in particular) Generics.Collections.Simplified; interface type TObjectList = class(TObject) private FOwnsObjects: Boolean; public constructor Create(AOwnsObjects: Boolean = True); end; implementation constructor type TObjectList.Create(AOwnsObjects: Boolean); begin inherited Create; FOwnsObjects := AOwnsObjects; TBar = class(TObjectList); end; end.

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 QC #: Date Reported: Area: 77185 8/30/2009 IDE\Class Completion Description: Steps: [QC Short Description] 1. Create a new unit 2. Replace the content with the following text <<<<<< unit ClassComplBug; interface type Class Complete stops working if there is a "procedure(x: Integer) of object" field in the class 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 [QC Description] body for "Test" is created under implementation Actual: Expected ';' but OF found in class TTest. Class Complete stops working if there is a method pointer in the class who's type is inlined. QC Entry 77185 QC #: Date Reported: Area: 77285 9/2/2009 Compiler\Delphi\Interfaces Description: Steps: [QC Short Description] Steps by USc: - save the file at the end of the steps - dcc32 ClassHelperIntf.dpr - execute ClassHelperIntf.exe TComponent interface functions "redirected" to TInterfacedObject when a class helper for TComponent and see the output is "PASS" - dcc32 -DWITHCOMPONENTCLASSHELPER ClassHelperIntf.dpr - execute (descendant) exists 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 [QC Description] with the RTL source - add WITHCOMPONENTCLASSHELPER as conditional define or remove the dot in line TComponent Interface functions like _AddRef or _Release are "redirected" to TInterfacedObject when a class five - compile ClassHelperIntf.dpr - start the app - step through the following lines "FooComponent.GetInterface helper for TComponent or a TComponent descendant exists. (IFooInterface, I)" "I := nil;" and see TInterfacedObject._AddRef and TInterfacedObject._Release are executed This is regression from D2007, but it happened already in D2009. This issue can lead to unexpected behavior, program ClassHelperIntf; {$APPTYPE CONSOLE} {.$DEFINE WITHCOMPONENTCLASSHELPER} uses because components are destroyed when the interfaces are released. Classes; type IFooInterface = interface ['{68A52E11-7139-4B66-AB44-21AF8E85B81A}'] end; TFooComponent = class(TComponent, IFooInterface) destructor Destroy; override; end; {$IFDEF -> see steps 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 Original short description: Corrupted component interfaces FooComponent := TFooComponent.Create(nil); try if FooComponent.GetInterface(IFooInterface, I) then begin Original description: ComponentAlive := True; I := nil; if ComponentAlive then WriteLn('PASS') else WriteLn('FAIL #1'); end else I am running into a very strange bug with interfaces. Unfortunately it seems that i can only reproduce this on my WriteLn('FAIL #2'); except FooComponent.Free; end; end. 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 QC #: Date Reported: Area: 77303 9/3/2009 Database\DBExpress Description: Steps: [QC Short Description] TDBXWeaverBugsSuite.Native.DB.Test.exe connection=mssqlconnection -s:TestRaid_272730 Impossible to use temp tables in mssql -or- [QC Description] An application originally made with D2007 uses dbExpress to connect to MSSQL. For some functionality, it Create a new application and drop a TSQLConnection and a TButton. creates temporary tables and fills these with data in consecutive statements on the same connection in the same Connect the TSQLConnection to a MSSQL server by setting the Driver, Host and a Database. (implicit) transaction. To the button.OnClick handler attach this code: 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.) SQLConnection1.ExecuteDirect('create table #TestTemp (something integer)'); SQLConnection1.ExecuteDirect('insert into #TestTemp (something) values (1)'); 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 Expected: both statements run fine. If this program is made using D2007, it does. statement thus failing to recognize temp tables made in another context and therefore already dropped. If made with D2010, this application fails on the 2nd statement with the SQL error "Invalid object name This is really basic functionality for our app and a showstopper for porting it to D2010 (unfortunately, because I '#TestTemp' ". really like it even better than D2007). QC Entry 77303 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: 77509 9/8/2009 RTL\Delphi\Other RTL Description: Steps: [QC Short Description] Also see attached projects: 1) Open Project1 in D2009 and compile and run it. 2) note execution time 3) Open GetTimeZoneInformation is very slow on Vista with programs compiled using RS2010 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 [QC Description] execution time 3) Open Project2 and activate the $define USE_LOCALE_INVARIANT and compile using On Vista GetTimeZoneInformation() is about a 1000 times slower when using D2010 compared to when using D2010. 4) note execution time Again when running on Vista (x32 or x64) you'll see a huge difference between D2009 (and earlier). the two execution times.

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 QC #: Date Reported: Area: 77670 9/14/2009 Compiler\Delphi\Anonymous Methods Description: Steps: [QC Short Description] Steps by USc including the code from the description slightly completed: - save the following code as overloaded method causes Internal Error: E2896 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: (JJS: Not seen until rev. 24844 is delivered) 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 [QC Description] (AInteger: Integer): Boolean; overload; function Proc(const AF: TF1): Boolean; overload; end; function Advanced record with overloaded function/procedure, where one of them has an anonymous method parameter TRec.Proc(AInteger: Integer): Boolean; begin Result := AInteger = 1; end; function TRec.Proc(const AF: TF1): causes F2084 Internal Error: E2896. 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 Here is a code snippet that causes the F2084 Internal Error: E2896: if P = nil then Result := 1 else Result := AI; end); end; begin WriteLn('PASS'); end. 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 QC #: Date Reported: Area: 78015 9/24/2009 RTL\Delphi\WinAPI Description: Steps: [QC Short Description] ** See comments for different test case ** MINENUMSIZE missing in DirectShow and DirectX units Compile and run the following console app with src\DirectX9 and also [QC Description] with ...\RAD Studio\7.0\source\Win32\rtl\win. In rtl.bpl is Delphi 2010 includes many new DirectShow and DirectX units that were taken from my site at ...\source\Win32\rtl\win included... http://tib.s.songbeamer.eu/downloads/DSPack.zip program DSFilterTest; 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. {$APPTYPE CONSOLE}

QC Entry 78015 uses SysUtils, trunk rev: 24885 DSPack, update rev: 24886 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: 78028 9/24/2009 IDE\Search\Find Description: Steps: [QC Short Description] - save the attached SearchMatchCountTest.dpr - start Delphi - open SearchMatchCountTest.dpr - search for [DE, FR] Match count is truncated "1", "2" and "3" expected: the match count is not truncated actual: US and JA: the match count is not truncated DE: the match count is always truncated (this is similar to the attached screenshot) FR: for "1" and "2" the [QC Description] match count is not truncated for "3" the match count is truncated A search result with a match count with two or more digits is truncated in the DE version and also the partly in the FR version.

-> see steps and attached screenshot QC Entry 78028