name 'points' is not defined
FlexGraphics_V_1.79_D4-XE10.2_Downloadly.ir
Version 1.7 ----------- - ADD: Delphi/CBuilder 10.2 Tokyo now supported. - ADD: Delphi/CBuilder 10.1 Berlin now supported. - ADD: Delphi/CBuilder 10 Seattle now supported. - ADD: Delphi/CBuilder XE8 now supported. - ADD: Delphi/CBuilder XE7 now supported. - ADD: Delphi/CBuilder XE6 now supported. - ADD: Delphi/CBuilder XE5 now supported. - ADD: Delphi/CBuilder XE4 now supported. - ADD: Delphi/CBuilder XE3 now supported. - ADD: Delphi/CBuilder XE2 now supported. - ADD: Delphi/CBuilder XE now supported. - ADD: Delphi/CBuilder 2010 now supported. - ADD: Delphi/CBuilder 2009 now supported. - ADD: New demo project FlexCADImport. - FIX: The height of the TFlexRegularPolygon object incorrectly changes with its rotation. - FIX: Added division by zero protect in method TFlexControl.MovePathSegment. - FIX: The background beyond docuemnt wasn't filled when TFlexPanel.DocClipping=True. - FIX: In "Windows ClearType" font rendering mode (OS Windows mode) the "garbage" pixels can appear from the right and from the bottom sides of the painted rectangle of the TFlexText object. - FIX: The result rectangle incorrectly calculated in the TFlexText.GetRefreshRect method. - FIX: Added FPaintCache.rcPaint cleanup in the TFlexPanel.WMPaint method. Now it is possible to define is the drawing take place via WMPaint or via the PaintTo direct call (if rcPaint contain non-empty rectangle then WMPaint in progress). - FIX: The TFlexPanel.FPaintCache field moved in the protected class section. Added rcPaint field in FPaintCache that represents drawing rectangle. - ADD: In the text prcise mode (TFlexText.Precise=True) takes into account the rotation angle (TFlexText.Angle). - FIX: Removed FG_NEWTEXTROTATE directive (the TFlexText Precise mode should be used instead). - FIX: The TFlexRegularPolygon object clones incorrectly drawed in case when TFlexRegularPolygon have alternative brush (gradient, texture). - ADD: Add TFlexPanel.InvalidateControl virtual method which calls from TFlexControl.Invalidate and can be overriden (it is possible now to catch all object invalidation calls). - FIX: The TFlexPanel.FindControlAtPoint method maked virtual to realize RealTime-capability when on mouse cursor moving the flex-object search not occurs. - FIX: After deleting the selected points in the TFlexPanel.DeleteSelectedPoints the all figures with one point also deleted. - FIX: When the curve contain more then one figure and they were all unconfined and curve have alternative brush then whole flex-object bounding rectangle was filed. - FIX: The MaskColor property lost in TPictureProp.UpdateImageLink method when TBitmap reloads. - ADD: In TFlexPanel.DefaultLinkPoint property added Size field that lets define visual size of the connection points of the flex-connectors. Initialized with DefaultLinkPointSize constant in the TFlexPanel constructor. - FIX: The TFlexPanel.DoNotify method now virtual. - ADD: Added property class TBackgroundOptionsProp. Used in TFlexScheme.BackgroundProp for background painting. - ADD: New property TFlexPanel.FrostPan. When True then in ftmPanning mode will be shown only cached image of the initial client area. All parts outside will paints of the TFlexPanel.Brush. When returning from ftmPanning mode the complete client area repainting will perform. - ADD: Added TFlexPanel.FrostPanFullDoc property. When true then in ftmPanning mode the whole document image cache created in currect scale. - FIX: Support for the Import/Export modules that can't work with Streams. Added TFlexFileFormat.StreamSupport property (default True), which difines, is it necessary to open file stream or give the file name only. - FIX: If the TCustomProp.Assign method calls when the undo/redo history writing was in progress, the error occured. - FIX: The TFlexPanel.LoadFlexControl method now virtual. - FIX: The TFlexPanel.FHintControl didn't clean when the FHintControl destroys. - FIX: The PointOnLine() function calulations have "single" type numbers overflow problem (changed to "double"). - FIX: The pfJoin and pfClose flags incorrectly calculates in GetEditPathCaps(). FlexEdit: - FIX: Close query twice when program closing with modified documents. - ADD Added editing form for TBackgroundOptionsProp property in the FlexEdit/FlexEditSE projects. Version 1.6 ----------- - ADD Import/Export modules support (new unit FlexFileFormats) - FIX HPen leak in TPenProp.Setup (Graphics.pas problem). - FIX TFlexPanel.History don't removed in TFlexPanel.Destroy. - FIX Region (HRGN) leak in TreeInspector.pas, DrawInspectorItem/RemoveClipRgn; - FIX TTreeInspector.FDelimBmp don't removed in destructor. - FIX TFlexPanel.FIsOverSegment flag take into account now the pen width. - ADD TFlexEllipse.Center - read-only public property. - FIX Trial packages now supports Delphi 2007 and Turbo versions (no changes for commercial packages). - FIX TFlexPanel.DragOver wrongs call the OnDragOver event handler. - ADD The new flex-control TFlexRegularPolygon. - FIX Break connector link when end point deleted. - ADD Property TFlexSchemes.ConnectorsKeepLinkProp - if False then when connector's end point moving, the link is breaks if the move was not on one of the flex-controls connection points. Contain False as default. - ADD Added ControlDocRect parameter in event TFlexControlCreateEvent that can be changed in event handler. The event now fired before flex-control size setup in TFlexControl.ControlCreate and all changes inside it fall into control creating undo-group. - FIX The current scale ignores in TFlexBox.GetRefreshRect and TFlexEllipse.GetRefreshRect methods for pen width calculation. - FIX The method TFlexText.GetRefreshRect don't takes into account the geometric pens. - FIX The connector wasn't rerouted when OrtogonalProp is changed. - FIX Add pen width zero check in TPenProp.GetPaintData method. - FIX Add moving block for first and last connector's segments also for non-orthogonal connectors. - FIX Class TPenProp rewrote without TPen delphi object. - FIX In some cases TFlexCurve.Paint leaves selected black pen in the canvas which then affects on next flex-control output (in particular when the next flex-control have gradient fill). FlexEdit/FlexEditSE: - ADD Added checkbox "Keep connector's link" in flex-document property form. - FIX Remaks panel focusing on main form (via PostMessage), since TreeInspector in FlexEditSE captures focus on self. - FIX Invalid arc size calculation when flex-control's size changes via DocRect property. Absence of the UpdateCounter checking brings to reccurent scaling. Access demo: - FIX Memory leak in TdmMain.dmMainDestroy method. Version 1.5 ----------- - FIX: In the methods TFlexPanel CombineSelected and BreakApartSelected - fixed saving of Undo/Redo actions. - FIX: In the method TFlexPanel.ResizeSelection exception occurred when the number of selected items changed while the method was running. - ADD: Added the method TFlexControl.DoNeedHint - allows editing the displaying of hint for flex-object within the object. - ADD: Added the protected-property TFlexPanel.GridControl - a flex-object for drawing grid on document. - FIX: The method TFlexPanel.DoSnapToGrid moved to the public section. - FIX: In TFlexControl.SetOwner, object from the FOwner.FWithoutParent list (contains flex-objects with Parent = Nil and the owner = Owner). - FIX: In BCB a problem occurred with TFlexText.DrawText, which for some reason kept being renamed by linker to DrawTextA. For BCB the method was renamed to DrawTextCPP. - FIX: Problems grouping objects linked with connectors. (Their paths used to break during grouping). Fixed TFlexControl.DoNotify for fnRect, fnParent. - FIX: Function ListScanEx in the module FlexUtils returned wrong item index (counted from the first index instead of the first list item). - FIX: In THistory.DeleteActions added validation of FActionIndex (FActionIndex could appear beyond the list boundaries). Thanks to Giedrius Matonis. - ADD: Added the method TCustomProp.Assign - a source flex-property is written to stream, which is then read by the flex-property, for which the Assign method is called. - ADD: In TIdPool (module FlexUtils), added the method NextUsed (allows iterating all taken identifiers). - ADD: Added the method TEnumProp.SetItem for convenience. The enumerable type can now be defined as a sequence: TEnum = ( eOne, eTwo ); . . . EnumProp.SetItem(integer(eOne), 'One'); EnumProp.SetItem(integer(eTwo), 'Two'); If some items are skipped when filling data this way, for such items a blank line is added to the list (EnumProp.Add('')). - ADD: Added the method TEnumProp.SetEnumType, setting all enumerable type items in compliance with the Delphi type: SetEnumType(TypeInfo('TMyDelphiEnumType')); - ADD: Added the functions PathLength and PathLengthPos in the module FlexPath. Also added the parameter LengthPos in the function PointOnLine (see the updated tutorial-project CurveDemo). These functions allow defining a point on a curve by the distance from the original point on the perimeter. - ADD: Added the method TCustomProp.GetPublishedComplexProp - returns included complex flex-property by name registered through TCustomProp.InitPublished. - ADD: Added the property TCustomProp.PropData[PropName]: Variant, which uses the methods GetPropValue/SetPropValue for reading/writing data. - FIX: The method TCustomProp.GetPropNames moved to the public section and returns the list of published-property names of the complex flex-property. - FIX: The method TPropRefList.IndexOfRecode could sometimes lead to the infinite loop (due to an error in ListScanEx in the method FlexUtils). - FIX: The value of some string flex-properties that began with a parenthese or curly bracket had no apostrophe at the end; that caused an error when reading. (fixed TPropList.SavePropValue for the ptSimple type). - ADD: In the module FlexUtils added the constant BooleanWords - an array containing the words 'false' and 'true' for saving/reading TBoolProp. - ADD: In the module FlexUtils added the function FlexStrNeedQuote. Returns True if the string must be enclosed in quotes (flex-property value) before saving in the filer. - ADD: In the class TFlexGrid added the methods DoSnap and DoCustomSnap (the last one can be overridden for the implementation of new alignment rules). - ADD: The property TFlexPanel.GridControl moved to the public section and is now available for writing (during the writing, the standard grid object TFlexGrid is released, and a user's one is set). - ADD: In the class TFlexGrid added the properties HOffset and VOffset - contain grid offset relative to document's upper-left corner. - FIX: In the large-size documents, the drawing of the pixel grid took too long (error in TFlexGrid.Paint). - FIX: With little difference between curve angles at smaller scales the curve was drawn backwards (error in TFlexEllipse.Paint). - ADD: Support of the binary document format. Added the public property TFlexFiler.Binary, which can be modified at any time while saving document (the document can alternate binary and text sections. - ADD: The method TFlexPanel.CreateFlexFiler moved to the public; an optional parameter ABinary added to the method. Its value will be set in the created filer for the processes ppSave and ppCopy (or ignored otherwise). - FIX: In TFlexPanel.MouseDown: if Button = mbMiddle it jumps to the parent method without any other actions. - ADD: Added the property TFlexLayer.Resizable. Now to block the moving and resizing Moveable and Resizable must be set to False. - ADD: The object TFlexClone can now display objects from other panes. - ADD: In the function NextControl added the optional parameter Sibling (false by default). If it is true - jumps to the next object in parent without visiting children. - FIX: The method ResizeSelected works more correctly for groups with locked Width and Height. - ADD: The internal panel in the class TFlexLibraries has gotten the (component) name 'FlexLibraries' for linking between panes. - ADD: In the module FlexBase added the procedure variables GetFlexPanelByNameLink and GetNameLinkByFlexPanel, which by default point to the procedures DefaultGetFlexPanelByNameLink and DefaultGetNameLinkByFlexPanel respectively. When defining custom procedures in these variables, user must define the flex-panel by some name. By default, DefaultGetNameLinkByFlexPanel returns NameLink := FlexPanel.Name, and DefaultGetFlexPanelByNameLink returns FlexPanel := Nil. - ADD: The class TLinkProp now also completes the link text with panel name if the linked object is in a different panel. - ADD: In the module FlexLibs added classes for supporting libraries with the identifiers TFlexLibraryWidtIDs, TFlexSingleLibrary (the class for working with a single library), TFlexSingleLibraries (library list where each library is stored in its own flex-panel). The last two classes are used for saving item identifiers after loading library (see the updated tutorial-project LibDemo). - FIX: Connectors could not be extended if during the creation they were drawn as a horizontal or vertical line. - FIX: After inserting an item from the library, the actions history discontinued (error in TFlexDragObject.Unlink). - ADD: In TPropList added the new event OnPropHistoryAction for selecting a history operation class. Added the corresponding method TFlexControl.PropHistoryAction. - ADD: In the module FlexBase added the function FlexDuplicate - unlike FlexControlCopy it allows selecting copied objects and returns copied object if the parameter ChildrenOnly is not set. - FIX: If TFlexCurve was originally created orthogonally, the Width or Height remained 0, which caused further scaling errors. - FIX: TFlexEllipse now sets its correct size for sectors and curves. - ADD: Added the read-only property TPropList.DataMode, which displays current property list read/write mode. - ADD: In the class TPropList added the methods BeginLoading, BeginSaving and EndLoadSave, which are called by both internal methods (LoadProperty, SaveProperty, etc.) and from the outside. The methods modify TPropList.DataMode. - FIX: When changing Parent to scheme object, the layer of the object being moved lost, and it became invisible on the new scheme (error in TFlexControl.Add). - FIX: If a property with a specified name already exists in TPropList, the call of the ADD: method now cases the exception (formerly returned -1, and the property was created with no owner). - ADD: In FlexUtils added the following functions: SortedListFind, ListSortItem, ListQuickSort for speedy operations over sorted lists (use external item comparison procedure). - ADD: In the method TFlexPanel.ResizeSelected added the parameter ProportionalToMax (false by default) - if it is set to True, and the Proportional parameter is also True, the resulting sizes will be calculated by the largest dimension of the delimiting rectangle instead of the smallest like it happens during the interactive scaling. - ADD: In the class TFlexText added the flex-properties AutoScaleFontSizeProp and MaxFontSizeProp. The first one sets the mode where the font size is calculated based on the object size. The second one limits the maximum font size. - ADD: Added the fnChanged notification for users' common needs. Currently not used by library classes. - FIX: The event OnPaintScheme now occurs in any event (formerly triggered only when TFlexPanel.Paint SelectedOnly = True). - ADD: Added the function IsDefaultPropertyValue (a copy from Delphi 7) in the module FlexUtils for versions older than Delphi 7. - ADD: Besides stored-methods, the class TPropList now also keeps the record of default values for complex flex-properties' published properties (changes in TCustomProp.IsComplexStored). - FIX: With the text rotation angle TFlexText.AngleProp.Value <> 0, the property TFlexText.AutoSizeProp is ignored. The property TFlexText.AutoScaleFontSize is ignored when the angle is other than 0, 90, 180 and 270. - FIX: If an object is interactively created in the panel, and its Width and Height have the read-only style, the panel will switch to the ftmMoving, mode instead of ftmCreating. - ADD: Added the method TPropList.Assign - sets values of matching by name flex-properties from a different list. - FIX: Real-type published properties of the complex flex-properties were unreadable since there was no inversion of DotStrToFloat (changes in TPropList.LoadPropValue). - ADD: Changes parameters of the method TFlexText.DrawTextEx. Now the font can be taken from canvas current font, if the new optional parameter AFontHeight carries the font size in the document's units). - ADD: Added the method TCustomProp.IsParentOf - parent definition for complex flex-properties. - ADD: Add new published properties "EndCap" and "Join" in TPenProp class. Its values ignored in Windows 9x versions (works only in Windows 2000 and higher). FlexEdit: - FIX: When selecting a curve with the regular "Select tool", the Break Apart tool would not enable (error in TEditMainForm.CheckTools). - FIX: In the image flex-property editor form (the module PictureFrm) in the method bbSaveClick you can select the actual image format (formerly user could choose a format; that was confusing since the actual image was always saved in the original format). - FIX: In the inspector form TfmInspector the undo group could not be created on double-click and on selecting the value from the drop-down list. - ADD: New pen "End Cap" and "Join" properties in pen property edit form. FlexEditSE: - ADD: New modified FlexEdit project that not needs third party component libraries to compile (needs FlexGraphics package only). Version 1.4 ----------- FlexGraphics: - FIX TFlexPanel.DocSpaceBrush settings did not save (the published property had the "read" method only). - FIX Fixed errors in using parameters in TFlexPanel.PaintTo. - FIX Added the BeginUpdate/EndUpdate pair in the TFlexPanel.MoveSelected method. - ADD Added the fsEndUpdating state in TFlexControl.State, set for the time of operation of TFlexControl.EndUpdate. - FIX Flex object hints now pop up on TFlexPanel.InDesign = true. - FIX The TFlexConnector.Ortogonal = false setting, right after creating a new connector, left 3 points in the line, and the average always remained in the position (0,0). - FIX An exception occurred in InsertPathPoint while attempting to find the closest point in PointOnLine. - FIX Object indexes used to define incorrectly in methods TFlexPanel, ForwardOne, and BackOne. - ADD Added the transparent pixel cut-off region calculation procedure CreateTransparentClipRegion in FlexUtils (for the purposes of proper printing). - ADD Added the TBrushProp.InitBitmap method that creates bitmap for textural fill (for the purposes of the following loading from file, for instance). - ADD Added new procedure to FlexUtils - PaintBitmap (extends PaintTailed capabilities). - ADD Added auxiliary property TFlexControl.UserObject, which does not store its value in file. It is meant as an alternative for the Tag with faster access (UserObject is not a flex-property). - FIX Procedures TFlexPanel Select and Unselect converted to functions (return Boolean value, true when the action completes successfully). - ADD Added methods TFlexPanel SelectNext and SelectPrev - select the next and previous object in relation to the selected. Use the Tab/Shift+Tab shortcuts to select objects consecutively with these methods. - FIX Fixed method TFlexGroup.ControlTranslate - did not return LinkPoints. - FIX Fixed conversion of group connection points during translating, added method TFlexGroup.Translate. - FIX Error in TFlexText.DrawText - incorrect calculation of the cut-off area when the fillet is greater than zero. - FIX The parser TFlexPanel.WMPaint did not take into account the case of Message.DC <> 0, so the browser was unable to print (via ActiveX). Parsing of this case is now added to the method. - ADD Added module FlexAlpha, which carries the semi-transparent images output class. - ADD Added property TFlexPanel.AlphaBuffer, for outputting semi-transparent images. Required for TFlexControl.PaintAll. - ADD Added flex-property TFlexControl.Transparency - the object transparency value in the range of 0 (not transparent)..100(fully transparent, invisible). By default the value is 0. - FIX Changed method TFlexControl.PaintAll for semi-transparency support. - FIX Fixed error in outputting text in TFlexText.DrawText - sometimes it created garbage during scaling. - FIX Fixed TPictureProp.Draw (when the Graphic property contained a non-TBitmap object, that caused exception with the ClipTransparent = true setting). - FIX Added Transparency check in TFlexPicture.Paint. - ADD Added new class in FlexControls - TFlexArc (its functionality is likely to be moved to TFlexEllipse in version 1.40, and it will be identical). - ADD Added method TFlexControl.CreateInDesign - returns transformation method after creating object interactively (in the ftmSelect mode). By default it returns the parameter IsPointEdit = false; however, for the curve object it can as well return index of the point (in the PointIndex parameter), which will follow the cursor right after it has been created. Can be redefined in TFlexCurve. - FIX Error in TPropList.SavePropValue during writing of ptHexData - caused exception on attempting to write a zero-length array. - FIX Exception occurred in TFlexPanel.UpdateMouseData in the ftmCreating mode - the LinkPointsExist setting did not take into account the case of SelectedCount = 0. - FIX Method TFlexPanel.UpdateCursor moved to the public section. - ADD Added creating TCustomProp objects within complex TCustomProp (nested flex-properties). For that purpose, in the TCustomProp constructor, which must include the other TCustomProp, call InitPublished(AOwner, FMyCustomProp), whereas FMyCustomProp is an instance of the flex-property. - ADD Added property TCustomProp.Parent (parent flex-property) and method InitPublished to initialize nested flex-property. - ADD Added protected-methods of the TPropList class: - GetComplexPropInstance - returns an instance of the TCustomProp flex-property to another (Prop parameter) by its published-name PropName. Returns Nil if the object is not found. - SaveComplexProp - writes complex flex-property to filer. - LoadComplexProp - reads complex flex-property from filer. - FIX In the AutoSize = true mode, TFlexText did not wrap long lines (added method TFlexText.GetRefreshText, which expands the output area to fit the value to be displayed). - ADD Added user抯 mode for the ftmUser tool, to which you can switch the pane and set custom cursors in the TFlexPanel.OnUpdateCusror parser. In this mode, the pane will not process mouse clicks and moves in any way (configured by user in the event parser). - ADD Added optional parameter GroupClass: TFlexGroupClass (nil by default) to method TFlexPanel.Group, which allows creating groups (children TFlexGroup) of different classes. - ADD Now TFlexArc object can be filled by brush (fixed TFlexArc.Paint). - ADD Added method TFlexLibItem.MakeCopy for creating a copy of a library item in a selected pane. - ADD Added transparency support for the entire layer. Attention! It may strongly slow down the system抯 speed when a great number of objects are available on the layer! - ADD Added the Boolean property TFlexPanel.SelectPartialOverlapped - if true, during selecting objects with a rectangle it is enough that the object抯 portion would appear inside the rectangle for the object to be selected. If false - the object must be inside the selected area completely. - ADD Added class TTextFormator (in FlexControls unit) for precise text formatting during text output. - ADD Added flex-property TFlexText.PreciseProp. If PreciseProp.Value = true, the text will be output with the preserved interval between the characters, and the lines will have the same proportional width at any scale (outputting with TTextFormator). Contains false by default. - FIX C++Builder in some cases (in children of the TFlexCurve class) incorrectly releases the class instances, which have two dynamic array variables defined simultaneously. Changed the sequence of FPoints and FPointTypes in definition of TFlexCurve. - ADD Added methods BeginSelectionTransformation and EndSelectionTransformation (beginning of group conversion of selected objects) in TFlexControl. Called in methods TFlexPanel BeginSelectionUpdate and EndSelectionUpdate. Overlap in the connector class TFlexConnector. - FIX If the connector is dragged/scaled/rotated along with its "connected" objects, it will be unlocked, and the "pure" conversion of points will take place instead of rebuilding the route after transforming the connection points. - ADD Added Boolean property TPictureProp.FastBuffer - if true, the image rasters to the built-in buffer (protected-field FPaintBuffer: TAlphaBuffer) and then uses the quick raster output procedures. The event TPictureProp.OnPaintFastBuffer allows to redefine buffer creation procedures (for instance, take into account transparency of the image). - ADD In TAlphaBuffer, added methods StoreFromGraphic and PaintStored. - ADD Added mode for using buffer for the basic object, TFlexControl.FPaintAlphaBufferMode (protected-field). May accept the following values: - amAuto - Buffer is used if the object is semi-transparent (TFlexControl.Trasparency > 0) - amRequired - Buffer is used in any case. - amNotRequired - Buffer is not used in any case. The field can be set during creation of an object in TFlexControl.ControlCreate. Meanwhile, only used in TFlexPicture when the FastBuffer mode is set (the field FPaintAlphaBufferMode is set to amRequired, which improves the performance). - ADD Added object TFlexClone - displays the content of the object linked to it (any object, except for the TFlexClone itself, can be linked). - ADD Added method TFlexPanel.CloneSelected - creates clones for all selected objects. - FIX Fixed error in TFlexPanel.CopyToClipboard - incorrect positioning of objects in meta file. - ADD Added class TFlexPaintList and field TFlexPanel.FPaintList - a stack for storing current display parameters (those of the TFlexPanel.PaintTo method). The TFlexPanel.PaintTo method is made to be re-enterable, i.e. objects in TFlexControl.Paint can call TFlexPanel.PaintTo for other objects (used in cloned objects). - FIX If the function RecodeId (parameter in the function ResolveLinkString) returns 0, the previous identifier value is kept and is not reset to 0 as it used to be done before (sometimes links did not recover after inserting objects from the library). - FIX FlexGroup had non-functioning psReadOnly flex-property styles for Width and Height (fixed in TFlexPanel.ResizeSelected and TFlexGroup.Translate). - ADD Added property TBrushProp.BitmapLinkName and method UpdateBitmapLink - functions the same way as TPictureProp.LinkName. Also, added the global variable ResolveBitmapLink in module FlexProps to define image to be brush-filled by name (analog for ResolvePictureLink). - FIX Pen style used to get lost during printing. Error in TPenProp.Setup (if the pen has style, the width is now 0, and not 1 as it used to be). - ADD In module FlexBase, added function IndexOfRegisteredFlexControlClass - indexing registered class by name (used in C++ to gain FlexEdit access to flex-object classes written in C++). - ADD In TFlexPanel, added events OnNeedHint (defines whether a hint can be displayed) and OnShowHint (allows redefining parameters of the hint (text, color, position, etc.)) - FIX TFlexText.Paint had incorrect conversion of the pen size (did not take scale into account). - FIX Reworked alignment algorithm TTextFormator to improve precision. - ADD Added properties TFlexPanel HorzScrollExtraSpace and VertScrollExtraSpace - the horizontal and vertical clearance (in pixels) between the page抯 edge and the scrollbar. - ADD Added class TFlexServiceControl - if an object is this class?child, it means it is controlling and cannot participate in the standard actions (grouping, etc.) The following classes are currently its children: TFlexCustomScheme, TFlexSchemes, TFlexLayer, TFlexLayers, TFlexGrid. - ADD Added method TFlexText.DrawTextEx, which operates by the parameters passed to the method rather than the flex-properties?values. Can be used in the children of TFlexText, where several text areas with different formatting are output. - ADD Added method TTextFormator.CharWordInfos - returns array of word sizes in the line and their positions in the line. Used during formatting text by width. - ADD Added events TFlexPanel OnKeyDown, OnKeyUp, OnKeyPress. The object TFlexPanel can now have focus is the property TFlexPanel.TabStop is set to true (false by default) and at the same time receive events from the keyboard. - ADD Added property TFlexPanel.HideSelection - if true and TFlexPanel.TabStop is true, when the pane loses focus, the scaling markers for the selected objects will be hidden. - FIX Fixed errors in properties Links and LinkCount of the TNotifyLink class (used to return incorrect values). - ADD The field TFlexPanel.FDefaultLinkPoint is moved to the public property - structure storing the object, index, and position of the closest connection point by default. - ADD Created class TLayerProp for the TFlexControl.Layer flex-property (you can now select a layer from the list in the editor inspector). - ADD Added flex-property TFlexControl.Selectable (invisible in the inspector but available via the program - the mark that the object can be selected, true by default), and the public property IsSelectable with the virtual protected-method GetIsSelectable (returns true if the object cannot be selected at all, i.e. the object is available for selection, and the layer it resides on is also available for selection). - FIX The method TFlexPanel.CloneSelected can clone clones also (taking their source for cloning). - FIX In TFlexControl.MovePathSegment, negative point indexes could disappear, and that was not checked for and could lead to exceptions on moving points of the curve. - FIX In function FindNearestPathSegment (module FlexPath), only the case of inserting a point into segment was taken into account. The function at the same time could return point indexes (to be inserted) that did not exist. Added optional parameter ForInsert = true. The same is for the method TFlexControl.FindNearestPathSegment. - ADD Added new mode for the ftmCurveContinue pane - prolonging curve with the tool it was created with. The parameters TFlexControl.CreateInDesign changed and now also return the possibility of prolonging the curve. The mode also works for connectors provided that the prolongation is taking place on the end that is not connected. - ADD The method TFlexPanel.PasteFromClipboard can also paste texts and images from clipboard (to objects TFlexText and TFlexPicture respectively). The new optional parameter of the method FlexDocOnly (false by default) can disable this possibility. - ADD New virtual public method TFlexPanel.PasteAvailable defines whether an object can be pasted to pane from clipboard. Used in the editor. - ADD Added the ncInfo notification (for common purposes) to the TNotifyLinkCode type. Not currently employed in the library. Allows exchanging data between the TNotifyLink objects in a custom format (not provided in the library). - ADD Added new methods LoadProperty and SaveProperty methods to the TPropList class, at the same time, LoadProperty has just about no difference from LoadFromFiler, since the latter one read only one property from the stream instead of reading all of them. - ADD Added property Name to TCustomProp, which simply addresses to the owner of TPropList.Names[] to get the value. - ADD Added the fsRecording state to the TFlexStateItem type (TFlexControl object state) - if set, the data is gathered and recorded for the Undo action. - FIX In TFlexControl.SetLayer, added check for Props.IsReadOnly and calls DoBeforeChanged and DoChanged for FLayerProp. - FIX private method TFlexControl.GetParenScheme renamed to TFlexControl.GetParentScheme. - ADD Added protected-field TFlexPanel.FWithoutParent - the list (TList) of objects with Parent = Nil that do not belong to the pane. Now such objects can also be found through the TFlexPanel.FindControlByID search. - ADD Added the fsLoading state to the TFlexStateItem type (TFlexControl object state) - if set, the object data is currently read from the filer. To be set for the period of operation of the TFlexControl.LoadFromFiler method. - FIX The object sequence order in TFlexPanel.CreateDragObject could break during recording (belonging to layer was not taken into account). - FIX Curves (connectors) created incorrectly via TFlexPanel.ControlCreate. - FIX Calling the points change during object scaling method, PointsChanged, moved from TFlexCurve.PropChanged (on property change) to DoNotify (on notification fnRect). The overlapped method TFlexCurve.PropBeforeChanged removed due to uselessness. - FIX In TFlexControl.DoNotify, there was the LinkPointsResize call, to which the FLinkSavedBounds parameter was passed. However, it contained the BeginUpdate call, which indirectly changed this const-parameter, which caused incorrect calculation. - FIX During reading the last line from string, TFlexFiler.LoadStrCheck returned false. Now it only returns false when the stream pointer is at the end of the stream. - ADD TFlexArc functionality moved to TFlexEllipse. Now the TFlexArc class is inherited from TFlexEllipse not adding anything to it (identical to it). TFlexEllipse can draw sectors owing this to the new flex-properties - BeginAngle and EndAngle. - FIX The procedure FirstControl converted into function, which returns the first search object supplied in the parameter. - ADD Added flex-property "ConnectorsMinGap" to class TFlexSchemes, which contains the minimum distance to objects for connectors. The default gap is 8 pixels. The property is stored in the document. On change, all connectors in the document are re-routed. - ADD Added flex-property "MinimalGap" to the TFlexConnector class. If the value is 0 (default), the gap value for document objects TFlexSchemes.ConnectorsMinGapProp is used; if > 0, that value is used for routing. - ADD Added methods InitializeControl and FinalizeControl to the TFlexConnector class for better compatibility with C++Builder. For Delphi, these methods are called from the constructor and destructor respectively, while for C++Builder they are called from methods AfterConstruction and BeforeDestruction respectively. - FIX Discarded methods TFlexControl FreeInstrance and CanFree due to uselessness. - ADD For C++Builder added new class-method TFlexControl.CppCreate, which creates an instance of the object. We recommend that you use this very method for creating objects in C++Builder rather than using the direct constructor calls like Control = new TFlexControl(...), for there is some incompatibility between the object initialization sections (during creation) in Delphi and C++Builder, which causes memory errors. Also, added procedure CppFreeControl in the FlexBase.pas module, which is better for deleting objects in C++ than the direct call for the destructor. - ADD Delphi 9 support (only Win32) in the library and projects. FlexEdit: - FIX In TfmInspector.grInspectorSetEditText, added check CanModify (the complex flex-properties used to be set from the inspector string). - ADD Added action - cloning selected objects. - ADD Texts and images can also be pasted from clipboard. - ADD Line and connector creation tools can continue them (by clicking and dragging the end point). When it is possible to continue a curve / connector, the mouse pointer changes. - FIX Changing file name during saving changes the document window title. - FIX The value "Connectrors Min Gap" moved from the option window to the document properties window. - FIX Added main menu item "Save As? Version 1.3 ---------- FlexGraphics: - ADD New flex-property TLineCapProp - defines the type of curve beginning/completion. Allows setting style, size, filling color, and completion border color or use the default settings. - ADD Added two properties to TFlexCurve: BeginCap and EndCap - the curve beginning and completion type respectively. These properties are the instances of the TLineCapProp class. - ADD Added new standard object TFlexConnector - allows connecting objects with a flexible line, which changes when the connected objects are dragged. Carries the following features: - Inherits all the TFlexCurve properties (it is that class?child). - RerouteMode - sets the connector routing mode: - rmAlways - on any move of the connected objects, it recalculates the entire route (all points) to calculate the shortest path. - rmAsNeeded - the route will be calculated entirely if the move of the connected objects resulted one of its segments to overlap one of the connected objects. - rmNever - number of points in path; never changes. Recalculation of the connector抯 route takes place only on the orthogonal look of the connector (the Ortogonal property). By default, the property RerouteMode contains rmAlways. - Ortogonal - sets the "orthogonal" look of the connector. If true, all of the connector抯 segments are either horizontal or vertical. By default it抯 set to true. - ADD Added property TFlexPanel.ConnectrorsMinGap - contains the minimum distance between the connector path segment and the object connected to the connector. - FIX Fixed C++Builder compatibility errors in the library related to the compiler抯 limitations: - does not understand the overloaded directive for procedures and functions (calls the first found one instead of the required one). - initializes all of the class?dynamic variables (strings, arrays) AFTER having called the constructor (Initialization TFlexControl.ControlCreate for C++Builder moved to the TFlexControl.AfterConstruction method). - does not understand properties with the class type (class of ...), on attempts to access them the linker cannot find the read method for the selected property. - FIX Fixed exception that occurred on attempts to press Ctrl in the curve editing mode on object that is not a curve. - ADD The function FlexControlCopy in the FlexBase module - copies one flex-object抯 properties to another. - ADD The capability of buffering images in TPictureProp (public property TPictureProp.Buffered) is now available. When the value is set to true, the images are stored in the stream in the memory, and the WinAPI resources are released. Useful for great numbers of images. - FIX Rectangle in TFlexPanel.PaintMarquee with TFlexPanel.InDesign = false was drawn incorrectly (the background color was set to white). - FIX In TFlexPanel.Rotate, the coordinates of the rotation center were calculated incorrectly (accuracy 1 pixel). - ADD In the FlexBase module, added procedure TranslatePoints for converting points. - ADD Added mode ftmCurveMoving for changing the path form or moving a straight segment during move of a point that belongs to the segment. - FIX In the PaintTailed procedure no Empty checks were performed for the ABitmap parameter, and that caused the division by zero error with an absent image. - FIX The FXCompsD6.dpk package of the FlexEdit editor source texts contained text for Delphi 7. - FIX Multiple-frame images could not be made transparent. - ADD Added method TFlexPanel.DoSnapToGrid for recalculating the offset taking into account the grid steps. During that you can create styles for aligning objects by the grid nodes. - ADD TFlexPanel.SnapStyle property - allows setting objects grid alignment types to be available. - FIX Changed method of inserting the closest point to curve segment InsertPathPoints (performs a more accurate change of curve points than it did before). - FIX Completely changed the selected objects scaling method TFlexPanel.ResizeSelected (you can now mirror selected objects during scaling a group of objects). - FIX New points are aligned to grid. - FIX The TDragObject object did not release in memory during the Drag'n'Drop operations in the layers manager. - ADD Added properties TFlexPanel.AutoNames and TFlexPanel.AutoNameNumbs. If AutoNames is false, the flex-object name, after it has been created, will contain a blank string. Otherwise, if AutoNameNumbs is false, the name after the creation will only contain the text grabbed from the object class name; if AutoNameNumbs is true, the text will be added by the object number in the parent (document抯 active scheme). By default, AutoNames = true, and AutoNameNumbs = false. - FIX In the method TFlexControl.Invalidate a prior integration of the rectangle with the previous renewal rectangle; thus, only the rectangle is refreshed at all times, not the entire region. - FIX In the method TFlexPanel.BreakApartSelected, the deferred properties links were not processed (the call for ResolveAllRefs was missing). - FIX Integer overflow in the method TFlexGrid.Paint during calculating the grid step on large scales. - ADD Added flex-object creation method, TFlexPanel.CreateControl - creates a flex-object in the required position, of the required size, with (or without) relation to grid. Generates the new event TFlexPanel.OnControlCreate. The method is always called during interactive creation of an object in the TFlexPanel.InDesign = true mode and by the specific class of the TFlexPanel.CreatingControlClass object. - FIX In TFlexControl.Destroy, the ControlDestroy call moved and placed before the Clear method. - FIX Changed code for moving selected objects with mouse (used to cause errors on moving the locked objects). - FIX On changing the group objects?size, the group changes its size/position. The grouped objects are scaled on change of the group抯 Width/Heigth. - FIX The method TFlexPanel.Group converted to function - returns the new group of Nil if the group cannot be created. - ADD Added method TStrListProp.RemoveByName. - ADD In TPictureProp, added methods LoadFromStream, SaveToStream, LoadFromFile, and SaveToFile. - ADD Added property TFlexPanel.SelectAsFilled. If true, when not filled objects are selected, they are treated as filled (clicking inside of the non-filled contour causes selects it). - FIX Changed method TFlexPanel.WMPaint - added dynamic buffer for the area being drawn. - ADD Added WinAPI gradient support for all styles except gsElliptic. The support is used only in the versions of the library made for Delphi 5, 6, 7. - ADD Added property TFlexPanel.AutoZoom - calculation of the scale by the client抯 rectangle and the document pane sizes. - FIX Changes in the PaintTiled procedure - more accurate size of the area being output, correct type of the hardware context. - FIX In TFlexPanel.PaintPoints, added check for points overlapping - the point is now visible even if there is another one with the same coordinates. - ADD In TFlexControl, added methods ToFront, ToBack, ForwardOne, and BackwardOne. - FIX In PointOnLine, the flag InRange was not always set correctly on adding ScanLinePoints to the list. - FIX Added property TFlexPanel.CppCreatingControlClass - exact analog of TFlexPanel.CreatingControlClass with the only difference that it returns the cardinal value. This property is to be used in C++Builder, since any call of TFlexPanel.CppCreatingControlClass caused the compiler抯 error "unresolved linker error". - ADD Added property TFlexPanel.ClientDocRect - the document display area on the pane (in the document抯 coordinate representation). - ADD Added notificator fnPan on move or resize of the flex-pane抯 client area (returned in the TFlexPanel.OnNotify event). - ADD Added event TFlexPanel.OnUpdateCursor - allows changing cursor appearance set in the edit mode. Called when the cursor view is refreshed from TFlexPanel.UpdateCursor. - ADD Added method TCustomProp.IsComplexStored - obtaining the "default value" flag for the complex flex-property抯 published property. - FIX Fixed the error of not saving the pen style in TFlexText. - FIX Added the PropName parameter to method TFlexControl.PropStored - for obtaining the "default value" flag of the complex flex-properties?public properties. - ADD Added method TFlexControl.MovePathSegment - dragging the path抯 Delta segment holding it at one specific point. - ADD Added moving curve segments?straight lines. - ADD Moving curve抯 points moved to the new method TFlexControl.MovePathPoints. - ADD Added property TBrushProp.BitmapCache, which allows accelerating the output of the mosaic fillings. If true, the entire object抯 created mosaic image is stored in the property and does not change during the further calls if the object size is smaller or equal to the previous one. - FIX Fixed errors in TFlexPanel.Translate and ResizeSelected - the objects could be changed on TFlexLayer.ReadOnly = true. - FIX The selection rectangle with the zero object size in TFlexPanel.UpdateSelection is now calculated correctly. - FIX In TFlexPanel.DoNotify, on fnEditPoints, added check for change of the selected object. - FIX In TFlexPanel.MouseDown, added checking the ssDouble flag in the Shift parameter - if it is set, then exit immediately. Earlier, the double-clicking caused the interpretation errors in the method. - ADD Added methods TFlexPanel.BeginLoading and EndLoading. The IsLoading property now has the integer type - contains the number of odd calls of BeginLoading (missing EndLoading). Thus, the loading stops if IsLoading = 0. - FIX Error in the scale calculation in the ftmZooming mode (the MarqueeRect scale was not taken into account in TFlexPanel.SetToolMode). - FIX In TFlexPanel.PaintMarquee, fixed the rectangle minimum size errors. - ADD In TFlexSchemes, added the "Version" flex-property, which contains the FlexGraphics library version number, in which the document was created. By default, that flex-property has the psReadOnly flag and thus always stores the current library version number matching the constant in the FlexBase FlexGraphicsVersion module. - ADD Added the FG_LIB_NNN directive to the FlexDefs.inc configuration file; whereas NNN is the library version number (FG_LIB_130 for the current version). FlexEdit: - Created projects for compiling the editor in BCB5 and BCB6. The projects are stored in the FlexEdit editor folder, in the CBuilder5 and CBuilder6 subfolders. - ADD Added color palette in the editor window抯 bottom right part. Right-clicking on a color sets that color as the background color for all the selected flex-objects (changes the "Brush" flex-property). Clicking on a color sets the selected color as the contour color for all the selected flex-objects (changes the "Pen" flex-property). Clicking on the last square (underlined) opens the color selection window. When a new color is added in this window, it will also appear in the color palette in the editor抯 main window. - FIX Fixed exception in FlexEdit, which used to occur on attempting to add a new item to the library having the TfmLibrary library manager window closed. - ADD In the Options window, on the Grid tab, added the alignment style controls. - FIX The grid did not refresh when its step was changed. - ADD Added the "Generate control name numbers" flag in the Options window; the flag controls the TFlexPanel.AutoNameNumbers property抯 value. - ADD Added the Connectors tab in the Options window; it allows setting the minimum distance from connector抯 segment to object (TFlexPanel.ConnectorsMinGap). - ADD The document properties window displays the document version. Since the document is automatically converted on loading, it always contains the current library version, which is equal to the FlexBase FlexGraphicsVersion module抯 constant. - FIX In TEditMainForm.ControlNotify, added status check for the csDestroying component (it used to cause exception on closing the application). Access demo: - FIX Changed the selected object output method (direct redrawing without the invalidate). - ADD Background color is now cached (TBrushProp.BitmapCache). GIS demo: - ADD Background color is now cached (TBrushProp.BitmapCache). Version 1.2 ----------- FlexGraphics: - ADD Added Borland T++Buider 6 support. However, the demonstration programs may have compilation problems in BCB 6. - ADD New ftmPointSelecting mode for selecting curve points. - ADD Added paths. The required functionality added to FlexControls.TFlexCurve. The following functions are supported: - Interchange of line segments and paths in an object. - Multiple figures within one object. Object can contain closed and open figures simultaneously. - Selecting several points on a curve. - Breaking up/linking/closing selected curve points. - Insertion of a point to the closest curve segment (through shortest distance). - Implementation of the smooth and symmetrical curve nodes using the Shift and Shift+Alt shortcuts while dragging the node抯 control point. - Converting curve抯 Bezier-segment to the linear and vice versa. - Converting all Bezier-segments to linear (Flatten). - Converting other objects to curves (currently available for TFlexBox, TFlexEllipse). - Grouping several curve objects to one. - Splitting one curve object to several (each figure on the object gets its own object). - Outputting the paths through the GDI functionality (the TFlexPanel.UseOriginalBezier property). When exported to wmf, the curves remain the curves. - ADD Added new published-property ShowEditPointGuide (true by default). If true, in the point output mode (Ctrl key pressed down in the ftmPointEdit mode and the cursor is not over the curve node) it draws the curve to be added should a node be added. - FIX Changed the curve points storage flex-property抯 name from "Points" to "PathPoints". For the sake of compatibility, the TFlexCurve class supports them both; however, the "Points" property is no longer stored (although it can be read). - FIX Error defining the image size in TFlexPanel.CopyToClipboard (the size for the WMF format data was calculated incorrectly). - FIX The Modified flag was set incorrectly in TFlexPanel.LoadFromFiler (in the lfAdd mode it used to reset also). - FIX The curve object lying on the layer with Moveable=false allowed adding points, which caused the object size errors. - FIX The TPictureProp.MaskColor property is now set directly in TPictureProp.Graphic.Transparent (this used to be available for the TBitmap pictures only). - FIX The properties in TPictureProp (in particular, the TPictureProp.Graphic.Transparent property) did not update on change of the corresponding properties in TPictureProp.Graphic. - FIX Selecting an object with non-TFlexGroup children objects caused the pending. - FIX Points coordinates calculated incorrectly in TFlexControl.GetTransformPoints (the conversions caused the 1 pixel loss of accuracy). - FIX Exception occurred in TFlexPanel.UpdateCursor sometimes when the pane was destroyed. - FIX The TFlexPanel.PaintMarquee method left "garbage" drawing rectangle, and the rectangle was drawn 1 pixel larger than it was supposed to be. - FIX In TFlexCurve.PointsChanged, added pixel to the sizes during calculation of the Width and Height. - ADD Selecting transparency color for brush texture in TBrushProp (transparent textures are drawn quite slowly). FlexEdit: - ADD New tools window "Curve edit tools" for editing curve objects. - ADD Curve edit tool. - FIX In the inspector window, the property being edited did not always update when it was changed from the outside (on moves). - FIX The Layers item checkbox did not function in the View menu. - FIX The "Mask Color" checkbox was blocked in the flex-property TPictureProp "Select picture" editing window if the image was not a TBitmap. - ADD In the "Brush properties" window, added components for controlling the texture transparency. Version 1.15 ------------ FlexGraphics: - ADD Added Borland Delphi 7 support. - ADD Added the detailed library modules help in Russian and English (for versions Delphi 4, 5, 6, and 7 only). - FIX TFlexDragObject instances were not discarded upon completion of Drag'n'Drop. - FIX The TFlexPanel.PaintTo cut-off area was calculated incorrectly. - FIX The pane did not refresh on change of the grid settings. - FIX When TFlexPanel was placed on the form, the scrollbars did not come up when they were supposed to. - FIX If no objects had been selected, the "end" string was written to the filer with the SelectedOnly flag. - FIX Removed useless TFlexSchemes.PixelScaleFactor property. - ADD Drag'n'Drop object creation methods moved to the TFlexPanel component抯 public section. - ADD AutoDragEnabled published property and initiating the Drag'n'Drop procedure during dragging the selected objects outside the pane added to the TFlexPanel component. - ADD Added the Moveable flex-property to the TFlexLayer layer class; it allows disabling of the flex-objects?Left, Top, Width, Height properties only. - ADD TIdPool class - identifiers pool for the TFlexPanel component. Significantly improved the flex-objects identifier uniqueness guarantee mechanism, which significantly improve the document load speed. - FIX Optimized the UpdateToolMode method (checks whether it抯 necessary to search for a flex-object under the mouse pointer take place only in some modes of TFlexPanel.ToolMode). For large documents, improved the speed of selection, scaling, and panning. - FIX Generating incorrect identifiers in some cases during the Drag'n'Drop operations. - FIX Incorrect functioning of the TFlexPanel.DocClipping flag - objects with the alternative filling took the cut-off area by the document border, and the remaining objects were output without the cut-off. - ADD Added the ftmPan and ftmPanning modes to the TFlexPanel component, which allow scrolling the document抯 view area. AccessDemo: - ADD Added displaying employee profiles as flex-objects (scaled with the document, save their positions when dragged). Accordingly, changed the Access.fxd document - the profile template scheme was added to it. - ADD Added interactive panning mode (when the Alt key is pressed down, the pan switches to the ftmPan mode - scrolling document area). DBDemo: - ADD New demo, which allows viewing the content of the dBase and Paradox tables. FlexEdit: - ADD Added panning - scrolling document area - tool. - ADD Added interactive panning mode (when the Alt key is pressed down, the pan switches to the ftmPan mode - scrolling document area). - ADD Changed layer manager window - added icon for the TFlexLayer.Moveable property. - FIX A number of minor bug fixes. GisDemo: - ADD New demo demonstrating the library抯 capabilities in the Geo Information Systems area. Scada: - ADD Added interactive panning mode (when the Alt key is pressed down, the pan switches to the ftmPan mode - scrolling document area). Version 1.1 ----------- FlexGraphics: - ADD Borland C++Builder 5 support - ADD Added scale factor - PixelScaleFactor - ADD Defining flex-properties?default values - ADD Rotation 90, mirroring FlexEditor: - ADD Toolbars on/off - ADD Grid control toolbar - ADD Rotation and mirroring toolbar - ADD Layer manager - ADD Editing enumerable flex-properties by double-clicking on the inspector - ADD Export to JPG, WMF, BMP - FIX Fixed exception on changing layer name Access demo: - ADD Borland C++Builder 5 support - ADD Detecting employees?location - ADD Aisle management - ADD List of employees in selected area - ADD Event list - ADD Emulating employees?moving throughout area - ADD Popping up employees?profiles on passing through doors - ADD Double-clicking on the lists in the control window selects the corresponding flex object on the flex toolbar. Scada demo: - ADD Borland C++Builder 5 support - ADD Moving arrows alongside the pipes Analog demo: - ADD Borland C++Builder 5 support