Article

From:
To:
All
Subject:
List of issues in Firemonkey while working on a project [Edit]
Newsgroup:
embarcadero.public.cppbuilder.firemonkey

List of issues in Firemonkey while working on a project [Edit]

I made a list of issues and bugs I encountered during development of a major project (VideoMeld) using FireMonkey. Unfortunately I do not have time to enter all these problems into Quality Central, so I'm posting them here. Perhaps someone with connections to Embarcadero can use them. Items with question marks may not be bugs, may be designed that way, or are things not fully tested. FireMonkey has lots of potential, so I hope this helps.

(doesn't seem to be a way to post indented text except with { code })

{code} Firemonkey: - MessageDlgPos( ... ) ignores X, Y - TTrackBar: IsMouseOver is false when mouse pointer is over thumb. - TTrackBar: IsTracking is not accessible? - TTreeView: OnEnter/OnExit missing in designer object inspector?
- TViewport: Adding a TText3D object to a TViewport on a 2D form doesn't render correctly. - TLayer3D: position and size cannot be changed when non-default alignment or anchors are used. - TLayer3D: position and size change unpredictably when alignment/anchors are change. - TLayer3D: Fill is used without the buffer being cleared, causing transparent colours to saturate.
- TLayer3D: Opacity value ignored?
- TLayer3D: There appears to be no way to set the z order of different layers when pjScreen is used. - TCalloutPanel: Alignment of controls within the panel does not work as expected. - Setting the position of a control in a base form, then setting it to the default value in a derived form causes the base class form value to be used instead of the default value. (Add TText at 10, 10 in base class, move it to 0, 0 in derived class, causes problems)
- TText: Changing font family doesn't update in the designed control.
- TSpinBox: Holding down a button does not cause value to increase/decrease repeatedly. - TSpinBox: Updating value does not always update Text when using small increases (increase is below DecimalDigits). - TSpinBox: Tabbing to the control them typing '.' (to enter ".5" for example) ignores the '.'. - TPerspectiveTransformEffect: point properties missing in designer object inspector. - Triggers: No "IsEnabled" trigger (trigger TMonochromeEffect when tool bar control disabled, for example). - TControl: Disabled control is not dimmed enough to clearly distinguish it from enabled controls. Use monochrome? - TControl: No OnExit event called when control is disabled while mouse is over it? - TTreeView: FHoveredItem not cleared in TTreeView.Clear() or when item deleted, causes exception. - TCanvas.MeasureText (GDI+?): Offsets rectangle left/top even with taLeading alignment.
- TCanvas.MeasureLines (GDI?): Freezes if rectangle width is too small.
- TCanvas.MeasureLines (D2D): Gives 0 for Metrics.Len.
- TCanvas.FillText (GDI+?): Unnecessarily pads left or right side of text with space. - TCanvas.TextWidth (GDI+?): TextWidth(string) * 2 != TextWidth(string + string). - TCanvas: With above problems, anything related to precise text layouts is broken. - TCanvas.ClearRect (D2D): often clears entire Canvas rectangle instead of given rectangle. - TComboColorBox: if the TComboColorBox object is deleted while the drop-down is shown, an execption occurs. - TComboBox: if the TComboBox object is delete while the drop-down is shown, an execption occurs. - TScrollBar: Setting SmallIncrement to 1 at design time results in changes of 10 at run time. - TScrollBar: Clicking in scroll bar slot doesn't page up/down. It just scrolls directly to the clicked position? - TCanvas: DrawBitmap doesn't support fractional coordinates (rounds to integers?) for GDI+, but does for D2D.
	- Causes jerky scrolling in GDI+, smooth in D2D.
- TCanvas.TextToPath and TPathData.Translate: When using Translate to move the path and the Canvas fill has a gradient, the gradient shifts in D2D, but doesn't in GDI+.
	- There are other differences in the way paths are drawn between GDI+ and D2D
- TCanvas: There doesn't seem to be an easy way to draw horizontal and vertical lines pixel aligned, which causes variation in colour intensity. - TGradient (GDI+): Radial gradients are truncated beyond the circumference (not in D2D).
- TPopupMenu: When menu is shown, right-clicking outside of it doesn't close it.
- TControl: HelpKeyword not stored in FMX file.
- TListBox (and TScrollBox?): for list items added at run time:
- ScrollTo is inappropriately named (ScrollBy?) and requires negative values to scroll down.
	- Selected item is not in view when form is shown.
- ScrollTo for listbox does not work in Form constructor, in OnShow, nor in OnActivate. - The only way to get the the selected item into view is to use a Timer to use ScrollTo after Form shown. - No public methods to determine top/last item in view and no way to scroll to an item.
	- Scrolling to a disabled item is not drawn disabled.
- TagFloat, TagString properties not available in Object Inspector.
- TAction: Shortcut keys without shift/alt/ctrl don't work (such as Spacebar, or 'A'). - TAction: Setting shortcut to ` (backtick) doesn't work and doesn't appear in menu item when action selected. - TForm: No TForm.Enabled setting. No portable way to disable a form. Cannot disable main form when displaying a modeless progress form on top, for example.

- MainForm destructor may be called after global variables are destroyed. MainForm not deleted before FMXmain() exits?
	module.cpp
	std::list<int> x;

mainform.cpp class TMainForm : public TForm { public: ... __fasctall ~Main( void ) { x.clear(); } // x may already be invalid/destroyed }
- TControl::BringToFront: Brings control visually to front, but puts it at the back for hit testing? - LiveBindings: Appears to be difficult to bidirectionally bind a TTrackBar::Value to a TSpinBox::Value. - TActions: TMenuItem with TAction cannot override Text (TAction Text is always used). - TBitmap/TCanvas/TEffect: Not thread safe. Huge limitation for multithreaded video programs. - TListBox: OnDrawChange and AllowDrag not working as documented (draws wrong too).
- TLineTransitionEffect: OffsetProp doesn't work as documented.
- TSelection: ParentBounds doesn't work when dragging each selection point (only when dragging entire rectangle). - TSwipeTransitionEffect: 'Deep' doesn't work as documented ('Len' variable missing in TSwipeEffect class constructor).
- TPencilStrokeEffect: "brushSize" should be "BrushSize" (uppercase B).
- FireMonkey has almost zero accessibility for screan readers.


TXMLDocument:
- Difficult to use properly in C++. Needs better documentation to explain using it with no Owner. - C++ code such as "branch->ChildNodes->Clear()" causes memory leaks because IXMLNodeList is not released (this needs documentation, examples under "Working with XML Nodes" are wrong). - TXMLDocument with doNodeAutoIndent causes indents to increase with every load/save of updated nodes. NodeIndentStr = "" seems to use indents tab when file is reloaded and saved (but doesn't increase at least).
- TXMLIniFile not mentioned anywhere in documentation.

Code Guard:
- Statically linking entire project causes Code Guard to report memory leaks of some FMX forms (even explicitly deleted ones). No errors reported when dynamically linked? - An option to ignore pointer arithmetic overruns is needed (commonly occurs in loops).

IDE:
- FM Form Designer: Forms with bsNone border style get larger each time they are opened in designer. - FM Form Designer: Adding a 3D object, then trying to drag it doesn't work. Have to click on another object, then the new one. - Code Insight: Entering "Fill->Kind = " then pressing Ctrl+Space brings up nothing helpful. - Code Insight: Entering "Fill->Kind = TBrushKind::" then pressing Ctrl+Space still brings up nothing.
- Code Insight: generally unreliable
- When adding "/*" in a /* ... */ comment where */ is already there, sometimes the last line is not updated until cursor moves. - Style Editor: Structure list not working, selection not on current item, cannot delete elements with Del key, etc., double-clicking on Tool Palette item adds it to theform list and not the style list, cannot set z order (bring to front, send to back), display doesn't update when changes are made to style elements, clicking on item sometimes causes it to be moved - FM Form Designer: Changing the order of combobox list items in the Items Editor doesn't get saved if that is the only change made to the form.
{code}

I might as well mention the following again (not really appropriate here, but...). Could someone at Embarcadero please fix these old VCL errors. Every update requires manually applying these patches.

{code}
VCL:
- VCL.Dialogs.pas: Severe accessibility issue: TMessageForm uses TLabel for message, which cannot be read by screen readers. Changing it to TStaticText solves the problem.

- VCL.Controls.pas: TWinControl.IsControlMouseMsg: Fails to handle Mouse Wheel events correctly, causing dead zones. Correct code is:
function TWinControl.IsControlMouseMsg(var Message: TWMMouse): Boolean;
var
  Control: TControl;
  P: TPoint;
  ClientPos: TPoint;
begin
  ClientPos := SmallPointToPoint(Message.Pos);
  if Message.Msg = WM_MOUSEWHEEL then ClientPos := ScreenToClient(ClientPos);

  if GetCapture = Handle then   begin     if (CaptureControl <> nil) and (CaptureControl.Parent = Self) then       Control := CaptureControl     else       Control := nil;   end   else     Control := ControlAtPos(ClientPos, False);   Result := False;   if Control <> nil then   begin     P.X := ClientPos.X - Control.Left;     P.Y := ClientPos.Y - Control.Top;
Message.Result := Control.Perform(Message.Msg, Message.Keys, PointToLParam(P));
    Result := True;
  end;
end;

- VCL.FileCtrl.pas: function SelectDirectory( ... ): buffer overrun      Buffer := ShellMalloc.Alloc(MAX_PATH);     should be:      Buffer := ShellMalloc.Alloc(MAX_PATH * SizeOf(Char));
- VCL needs to be updated to use GDI+ {code}
FYI: Phrase searches are enclosed in either single or double quotes
 
 
Originally created by
Tamarack Associates
Thu, 28 Mar 2024 19:38:28 UTC
Copyright © 2009-2024
HREF Tools Corp.