SCAR Divi Changelog

What's new in SCAR Divi 3.41.00

Aug 16, 2021
  • Bugfixes:
  • ReverseATPA did not function correctly
  • Large memory leak in the script engine & characters in filenames were not displayed correctly in tab captions
  • Tweaks:
  • Updated PascalScript engine to newer build (5d00e6cfb950a3c898d2d6813862199e5c5142c6)

New in SCAR Divi 3.38.01 (Mar 11, 2013)

  • Bugfixes:
  • Target Client showed copies of it's rows
  • TPAFromBox accepted invalid boxes
  • TSCARBitmap.Resize, TSCARBitmap.Rotate(Ex) and TSCARBitmap.Skew(Ex) disabled AlphaBlend
  • GetFiles and GetFolders did not behave correctly
  • TPAFilterPoints throws a div by 0 error when an empty filter/extract array is passed
  • New:
  • TSCARBitmap.ResizeEx
  • procedure AddPostFile(const iHttp: Integer; const FieldName, FileName, ContentType: string);
  • procedure TPAExtractPoints(var TPA: TPointArray; const FilterTPA: TPointArray);

New in SCAR Divi 3.38.00 (Mar 11, 2013)

  • Bugfixes:
  • Possibly critical fixes for several TIA functions: TIAIntersect, TIAUnique and TIAInTIA (+ TEA equivalents)
  • Saving an untitled file doesn't update the program title
  • Bug with certain data sets in several TIA and TEA functions
  • New:
  • procedure ReplaceColors(const Bmp: TSCARBitmap; const Colors: TIntArray; const NewColor: Integer);
  • procedure ReplaceColorsTol(const Bmp: TSCARBitmap; const Colors: TIntArray; const NewColor, Tol: Integer);
  • function RandomTIA(const Count, Range: Integer): TIntArray;
  • function RandomTIAEx(const Count, Range: Integer; const AllowDuplicates: Boolean): TIntArray;
  • procedure OffsetTEA(var TEA: TExtArray; const Offset: Extended);
  • function TEAInsert(var TEA: TExtArray; const Index: Integer; const Ext: Extended): Integer;
  • function InvertColor(const Color: Integer): Integer;
  • TSCARBitmap.Invert
  • function SpiralPoint(const Pos: Cardinal): TPoint;
  • function SpiralPointEx(const Pos: Cardinal; const Origin: TPoint): TPoint;
  • function SpiralPos(const Pt: TPoint): Cardinal;
  • function SpiralPosEx(const Pt, Origin: TPoint): Cardinal;
  • procedure SortTPASpiral(var TPA: TPointArray);
  • procedure SortTPASpiralEx(var TPA: TPointArray; const Point: TPoint);
  • function CopyTIA(const TIA: TIntArray): TIntArray;
  • function CopyTIAEx(const TIA: TIntArray; const Index, Count: Integer): TIntArray;
  • function ATPADelete(var ATPA: T2DPointArray; const Index: Integer): TPointArray;
  • function ATIADelete(var ATIA: T2DIntArray; const Index: Integer): TIntArray;
  • function ATPAContains(const ATPA: T2DPointArray; const TPA: TPointArray): Boolean;
  • function ATIAContains(const ATIA: T2DIntArray; const TIA: TIntArray): Boolean;
  • function PermuteTPA(const TPA: TPointArray): T2DPointArray;
  • function PermuteTIA(const TIA: TIntArray): T2DIntArray;
  • procedure TIAFreq(const TIA: TIntArray; out Values, Frequencies: TIntArray);
  • procedure TIARelFreq(const TIA: TIntArray; out Values: TIntArray; out frequencies: TExtArray);
  • procedure TPAFreq(const TPA: TPointArray; out Values: TPointArray; out Frequencies: TIntArray);
  • procedure TPARelFreq(const TPA: TPointArray; out Values: TPointArray; out Frequencies: TExtArray);
  • procedure TEAFreq(const TEA: TExtArray; out Values: TExtArray; out Frequencies: TIntArray);
  • procedure TEARelFreq(const TEA: TExtArray; out Values, Frequencies: TExtArray);
  • procedure TEARange(const TEA: TExtArray; out Lo, Hi: Extended);
  • function CombineTEA(const TEA1, TEA2: TExtArray): TExtArray;
  • procedure SortTEA(var TEA: TExtArray);
  • procedure SortTEAEx(var TEA: TExtArray; const Ext: Extended);
  • function TEAMean(const TEA: TExtArray): Extended;
  • function TEASum(const TEA: TExtArray): Extended;
  • procedure TEARemove(var TEA: TExtArray; const Ext: Extended);
  • procedure TEARemoveEx(var TEA: TExtArray; const Ext: Extended; const All: Boolean);
  • function CopyTEA(const TEA: TExtArray): TExtArray;
  • function CopyTEAEx(const TEA: TExtArray; const Index, Count: Integer): TExtArray;
  • procedure TIAAdd(var TIA: TIntArray; const Value: Integer); (Alias: OffsetTIA)
  • procedure TIAAddEx(var TIA: TIntArray; const Values: TIntArray);
  • procedure FillTIA(var TIA: TIntArray; const Int: Integer);
  • procedure FillTIAEx(var TIA: TIntArray; const Values: TIntArray);
  • procedure TIASubtract(var TIA: TIntArray; const Value: Integer);
  • procedure TIASubtractEx(var TIA: TIntArray; const Values: TIntArray);
  • procedure TIAMultiply(var TIA: TIntArray; const Value: Integer);
  • procedure TIAMultiplyEx(var TIA: TIntArray; const Values: TIntArray);
  • procedure TIADivide(var TIA: TIntArray; const Value: Integer);
  • procedure TIADivideEx(var TIA: TIntArray; const Values: TIntArray);
  • function TIAToTEA(const TIA: TIntArray): TExtArray;
  • procedure TEAAdd(var TEA: TExtArray; const Value: Extended); (Alias: OffsetTEA)
  • procedure TEAAddEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure FillTEA(var TEA: TExtArray; const Value: Extended);
  • procedure FillTEAEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure TEASubtract(var TEA: TExtArray; const Value: Extended);
  • procedure TEASubtractEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure TEAMultiply(var TEA: TExtArray; const Value: Extended);
  • procedure TEAMultiplyEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure TEADivide(var TEA: TExtArray; const Value: Extended);
  • procedure TEADivideEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure FillTPA(var TPA: TPointArray; const Value: TPoint);
  • procedure FillTPAEx(var TPA: TPointArray; const Values: TPointArray);
  • procedure Write(x);
  • function RoundTEA(const TEA: TExtArray): TIntArray;
  • function TruncTEA(const TEA: TExtArray): TIntArray;
  • function FloorTEA(const TEA: TExtArray): TIntArray;
  • function CeilTEA(const TEA: TExtArray): TIntArray;
  • procedure TIAPush(var TIA: TIntArray; const Value: Integer);
  • function TIAPop(var TIA: TIntArray): Integer;
  • procedure TPAPush(var TPA: TPointArray; const Point: TPoint);
  • function TPAPop(var TPA: TPointArray): TPoint;
  • procedure TEAPush(var TEA: TExtArray; const Value: Extended);
  • function TEAPop(var TEA: TExtArray): Extended;
  • function TIAMedian(const TIA: Integer): Extended;
  • function TEAMedian(const TEA: TExtArray): Extended;
  • procedure SortTPAByColumn(var TPA: TPointArray);
  • TIntegerArray = TIntArray (alias)
  • TExtendedArray = TExtArray (alias)
  • TStringArray = TStrArray (alias)
  • TBooleanArray = TBoolArray (alias)
  • procedure TIAReplace(var TIA: TIntArray; const OldValue, NewValue: nteger);
  • procedure TIAReplaceEx(var TIA: TIntArray; const OldValues: TIntArray; const NewValue: Integer);
  • procedure TEAReplace(var TEA: TExtArray; const OldValue, NewValue: Extended);
  • procedure TEAReplaceEx(var TEA: TExtArray; const OldValues: TExtArray; const NewValue: Extended);
  • procedure TPAReplace(var TPA: TPointArray; const OldPoint, NewPoint: TPoint);
  • procedure TPAReplaceEx(var TPA: TPointArray; const OldPoints: TPointArray; const NewPoint: TPoint);
  • procedure ReverseTEA(var TEA: TExtArray);
  • function TPAZip(const XValues, YValues: TIntArray): TPointArray;
  • procedure TPAUnzip(const TPA: TPointArray; out XValues, YValues: TIntArray);
  • SCAR338-00_UP define (Where 00 is the minor version)
  • function ReadFileLine(const FileNum: Integer; out Str: string): Boolean;
  • function WriteFileLine(const FileNum: Integer; const Str: string): Boolean;
  • Tweaks:
  • TPAMiddle => TPAMean
  • SortATPAByMiddle => SortATPAByMean
  • SortATPAByMiddleEx => SortATPAByMeanEx
  • Huge performance improvements for StrToTIA
  • TIAMean now throws an exception when an empty array is passed
  • Removed:
  • procedure TPASort(var TPA: TPointArray); (alias: SortTPA)
  • procedure TPASortEx(var TPA: TPointArray; const Point: TPoint); (alias: SortTPAEx)
  • function AMax(const TIA: TIntArray): Integer; (alias: TIAMax)
  • function AMin(const TIA: TIntArray): Integer; (alias: TIAMin)
  • function TPAMiddleEx(const TPA: TPointArray; out x, y: Integer): Boolean;
  • procedure BubbleSort(var Values: TIntArray);
  • procedure BubbleSortB(var Values: TIntArray);
  • procedure QuickSort(var Values: TIntArray);
  • function Average(const Values: TExtArray): Extended; (alias: TEAMean)

New in SCAR Divi 3.37.02 (Nov 26, 2012)

  • Bugfixes:
  • Possibly critical fixes for several TIA functions: TIAIntersect, TIAUnique and TIAInTIA (+ TEA equivalents)
  • Saving an untitled file doesn't update the program title
  • Bug with certain data sets in several TIA and TEA functions
  • New:
  • procedure ReplaceColors(const Bmp: TSCARBitmap; const Colors: TIntArray; const NewColor: Integer);
  • procedure ReplaceColorsTol(const Bmp: TSCARBitmap; const Colors: TIntArray; const NewColor, Tol: Integer);
  • function RandomTIA(const Count, Range: Integer): TIntArray;
  • function RandomTIAEx(const Count, Range: Integer; const AllowDuplicates: Boolean): TIntArray;
  • procedure OffsetTEA(var TEA: TExtArray; const Offset: Extended);
  • function TEAInsert(var TEA: TExtArray; const Index: Integer; const Ext: Extended): Integer;
  • function InvertColor(const Color: Integer): Integer;
  • TSCARBitmap.Invert
  • function SpiralPoint(const Pos: Cardinal): TPoint;
  • function SpiralPointEx(const Pos: Cardinal; const Origin: TPoint): TPoint;
  • function SpiralPos(const Pt: TPoint): Cardinal;
  • function SpiralPosEx(const Pt, Origin: TPoint): Cardinal;
  • procedure SortTPASpiral(var TPA: TPointArray);
  • procedure SortTPASpiralEx(var TPA: TPointArray; const Point: TPoint);
  • function CopyTIA(const TIA: TIntArray): TIntArray;
  • function CopyTIAEx(const TIA: TIntArray; const Index, Count: Integer): TIntArray;
  • function ATPADelete(var ATPA: T2DPointArray; const Index: Integer): TPointArray;
  • function ATIADelete(var ATIA: T2DIntArray; const Index: Integer): TIntArray;
  • function ATPAContains(const ATPA: T2DPointArray; const TPA: TPointArray): Boolean;
  • function ATIAContains(const ATIA: T2DIntArray; const TIA: TIntArray): Boolean;
  • function PermuteTPA(const TPA: TPointArray): T2DPointArray;
  • function PermuteTIA(const TIA: TIntArray): T2DIntArray;
  • procedure TIAFreq(const TIA: TIntArray; out Values, Frequencies: TIntArray);
  • procedure TIARelFreq(const TIA: TIntArray; out Values: TIntArray; out Frequencies: TExtArray);
  • procedure TPAFreq(const TPA: TPointArray; out Values: TPointArray; out Frequencies: TIntArray);
  • procedure TPARelFreq(const TPA: TPointArray; out Values: TPointArray; out Frequencies: TExtArray);
  • procedure TEAFreq(const TEA: TExtArray; out Values: TExtArray; out Frequencies: TIntArray);
  • procedure TEARelFreq(const TEA: TExtArray; out Values, Frequencies: TExtArray);
  • procedure TEARange(const TEA: TExtArray; out Lo, Hi: Extended);
  • function CombineTEA(const TEA1, TEA2: TExtArray): TExtArray;
  • procedure SortTEA(var TEA: TExtArray);
  • procedure SortTEAEx(var TEA: TExtArray; const Ext: Extended);
  • function TEAMean(const TEA: TExtArray): Extended;
  • function TEASum(const TEA: TExtArray): Extended;
  • procedure TEARemove(var TEA: TExtArray; const Ext: Extended);
  • procedure TEARemoveEx(var TEA: TExtArray; const Ext: Extended; const All: Boolean);
  • function CopyTEA(const TEA: TExtArray): TExtArray;
  • function CopyTEAEx(const TEA: TExtArray; const Index, Count: Integer): TExtArray;
  • procedure TIAAdd(var TIA: TIntArray; const Value: Integer); (Alias: OffsetTIA)
  • procedure TIAAddEx(var TIA: TIntArray; const Values: TIntArray);
  • procedure FillTIA(var TIA: TIntArray; const Int: Integer);
  • procedure FillTIAEx(var TIA: TIntArray; const Values: TIntArray);
  • procedure TIASubtract(var TIA: TIntArray; const Value: Integer);
  • procedure TIASubtractEx(var TIA: TIntArray; const Values: TIntArray);
  • procedure TIAMultiply(var TIA: TIntArray; const Value: Integer);
  • procedure TIAMultiplyEx(var TIA: TIntArray; const Values: TIntArray);
  • procedure TIADivide(var TIA: TIntArray; const Value: Integer);
  • procedure TIADivideEx(var TIA: TIntArray; const Values: TIntArray);
  • function TIAToTEA(const TIA: TIntArray): TExtArray;
  • procedure TEAAdd(var TEA: TExtArray; const Value: Extended); (Alias: OffsetTEA)
  • procedure TEAAddEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure FillTEA(var TEA: TExtArray; const Value: Extended);
  • procedure FillTEAEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure TEASubtract(var TEA: TExtArray; const Value: Extended);
  • procedure TEASubtractEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure TEAMultiply(var TEA: TExtArray; const Value: Extended);
  • procedure TEAMultiplyEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure TEADivide(var TEA: TExtArray; const Value: Extended);
  • procedure TEADivideEx(var TEA: TExtArray; const Values: TExtArray);
  • procedure FillTPA(var TPA: TPointArray; const Value: TPoint);
  • procedure FillTPAEx(var TPA: TPointArray; const Values: TPointArray);
  • procedure Write(x);
  • function RoundTEA(const TEA: TExtArray): TIntArray;
  • function TruncTEA(const TEA: TExtArray): TIntArray;
  • function FloorTEA(const TEA: TExtArray): TIntArray;
  • function CeilTEA(const TEA: TExtArray): TIntArray;
  • procedure TIAPush(var TIA: TIntArray; const Value: Integer);
  • function TIAPop(var TIA: TIntArray): Integer;
  • procedure TPAPush(var TPA: TPointArray; const Point: TPoint);
  • function TPAPop(var TPA: TPointArray): TPoint;
  • procedure TEAPush(var TEA: TExtArray; const Value: Extended);
  • function TEAPop(var TEA: TExtArray): Extended;
  • function TIAMedian(const TIA: Integer): Extended;
  • function TEAMedian(const TEA: TExtArray): Extended;
  • procedure SortTPAByColumn(var TPA: TPointArray);
  • TIntegerArray = TIntArray (alias)
  • TExtendedArray = TExtArray (alias)
  • TStringArray = TStrArray (alias)
  • TBooleanArray = TBoolArray (alias)
  • procedure TIAReplace(var TIA: TIntArray; const OldValue, NewValue: Integer);
  • procedure TIAReplaceEx(var TIA: TIntArray; const OldValues: TIntArray; const NewValue: Integer);
  • procedure TEAReplace(var TEA: TExtArray; const OldValue, NewValue: Extended);
  • procedure TEAReplaceEx(var TEA: TExtArray; const OldValues: TExtArray; const NewValue: Extended);
  • procedure TPAReplace(var TPA: TPointArray; const OldPoint, NewPoint: TPoint);
  • procedure TPAReplaceEx(var TPA: TPointArray; const OldPoints: TPointArray; const NewPoint: TPoint);
  • procedure ReverseTEA(var TEA: TExtArray);
  • function TPAZip(const XValues, YValues: TIntArray): TPointArray;
  • procedure TPAUnzip(const TPA: TPointArray; out XValues, YValues: TIntArray);
  • SCAR338-00_UP define (Where 00 is the minor version)
  • function ReadFileLine(const FileNum: Integer; out Str: string): Boolean;
  • function WriteFileLine(const FileNum: Integer; const Str: string): Boolean;
  • Tweaks:
  • TPAMiddle => TPAMean
  • SortATPAByMiddle => SortATPAByMean
  • SortATPAByMiddleEx => SortATPAByMeanEx
  • Huge performance improvements for StrToTIA
  • TIAMean now throws an exception when an empty array is passed
  • Removed:
  • procedure TPASort(var TPA: TPointArray); (alias: SortTPA)
  • procedure TPASortEx(var TPA: TPointArray; const Point: TPoint); (alias: SortTPAEx)
  • function AMax(const TIA: TIntArray): Integer; (alias: TIAMax)
  • function AMin(const TIA: TIntArray): Integer; (alias: TIAMin)
  • function TPAMiddleEx(const TPA: TPointArray; out x, y: Integer): Boolean;
  • procedure BubbleSort(var Values: TIntArray);
  • procedure BubbleSortB(var Values: TIntArray);
  • procedure QuickSort(var Values: TIntArray);
  • function Average(const Values: TExtArray): Extended; (alias: TEAMean)

New in SCAR Divi 3.37.01 (Nov 23, 2012)

  • Bugfixes:
  • Small bug in TSCARWindowClient.Clone
  • GetColor on occasion returned -1 when it shouldn't
  • TPAFilterTriangle and TPAExtractTriangle didn't resize the TPA after modifying it

New in SCAR Divi 3.37.00 (Nov 19, 2012)

  • Bugfixes:
  • Double clicking on a form element in the form designer will no longer assign an event internally
  • SCAR process sometimes did not terminate
  • Some selection features in color tools did not work properly
  • Dragging color tools items from/to stored colors sometimes lagged or froze SCAR
  • Small memory leak when loading png images
  • The new FindColor(s)SpiralTol(Ex) and FindColor(s)TPATol(Ex) functions did not return the correct results
  • Menu in DTM editor was detachable
  • GetCurrentKeyState and GetToggleKeyState did not function correctly for TSCARWindowClient
  • Some system colors were imported incorrectly
  • Several dialog functions were malfunctioning
  • TSCARBitmap.DC changed when TSCARBitmap.Flip() ot TSCARBitmap.Rotate() were called
  • TSCARBitmap.LoadFromStr set the entire bitmap to transparent
  • Error in firewall config when adding a rule
  • Picked colors were added in reverse to the list
  • Switching tabs in form designer didn't update the property editor
  • Successfully executed/stopped execution was printed out before ScriptTerminate was called
  • New:
  • Rename button in color tools rightclick menu
  • procedure TPAEdge(var TPA: TPointArray);
  • Capture Client button in DTM editor Edit menu
  • TTPAArtifacts = set of (taXAxis, taYAxis)
  • function BmpFromTPA(const TPA: TPointArray; const FgCol, BgCol: Integer): TSCARBitmap;
  • function BmpFromTPAEx(const TPA: TPointArray; const FgCol, BgCol, AfCol: Integer; const Scale: Single; const Artifacts: TTPAArtifacts): TSCARBitmap;
  • function TSCARBitmap.GetPixels(const TPA: TPointArray): TIntArray;
  • procedure TSCARBitmap.SetPixels(const TPA: TPointArray; const Color: Integer);
  • procedure TSCARBitmap.Skew(const Horiz, Vert: Single);
  • function LibsPath: string;
  • function ScriptsPath: string;
  • procedure TSCARBitmap.RotateEx(const Angle: Extended; const Resize: Boolean);
  • procedure TSCARBitmap.SkewEx(const Horiz, Vert: Single; const Resize: Boolean);
  • function StrToPoint(const Str: string): TPoint;
  • function StrToPointDef(const Str: string; const Default: TPoint): TPoint;
  • function PointToStr(const Point: TPoint): string;
  • function StrToBox(const Str: string): TBox;
  • function StrToBoxDef(const Str: string; const Default: TBox): TBox;
  • procedure ExpandBox(var Box: TBox; const SizeChange: Integer);
  • procedure OffsetBox(var Box: TBox; const XOffset, YOffset: Integer);
  • function TPAEquals(const TPA1, TPA2: TPointArray): Boolean;
  • function TIAEquals(const TIA1, TIA2: TIntArray): Boolean;
  • function TEAEquals(const TEA1, TEA2: TExtArray): Boolean;
  • Added all DateUtils routines
  • function BoxCenter(const Box: TBox): TPoint;
  • procedure TPADistToPoint(const TPA: TPointArray; const Point: TPoint; out MinDist, MaxDist: Extended);
  • procedure TPADistToPointEx(const TPA: TPointArray; const Point: TPoint; out MinDist, MaxDist: Extended; out MinPoint, MaxPoint: TPoint);
  • Option to toggle template completion
  • TSCARWindowClient.Scancodes
  • Tweaks:
  • TSCARBitmap's SaveToBmp, SaveToJpeg and SaveToPng now creates the target folder if it does not exist
  • It is now possible to ctrl+click to add an item to the selection in color tools
  • Huge performance improvements for all TPAFilterX and TPAExtractX functions
  • Huge performance improvements for TPAIntersect and TIAIntersect
  • CreateMessageDialog tied into resource manager for forms
  • Added thread-safety for CreateMessageDialog, MessageDlg, MessageDlgPos, TaskMessageDlg, TaskMessageDlgPos, ShowMessage, ShowMessageFmt, ShowMessagePos, InputBox and InputQuery
  • Removed the HelpCtx parameter from MessageDlg, MessageDlgPos, TaskMessageDlg and TaskMessageDlgPos
  • ImageBox/InputBox in Target Client renamed to ImageArea/InputArea for consistency
  • More accurate rotation algorithm for TSCARBitmap.Rotate()
  • The databox in the color picker is now wider to accommodate the large coordinates on modern screens
  • Moved color squares in the color picker's databox to the left to be consistent with the datapicker
  • Color picker magnifier now has red corners around the center pixel, the bitmap picker has been adjusted accordingly
  • The databox in the color picker now repositions around your cursor when it reaches the edges of the monitor your cursor is currently on
  • function Distance(const X1, Y1, X2, Y2: Integer): Extended; (now returns extended)
  • Editing the name of items in color tools is no longer possible through clicking
  • The delete key now allows you to delete items from color tools as well
  • You can now group colors (and groups) together into groups in the color tools
  • Tabs in the form designer are now draggable
  • When a script is forcefully terminated, ScriptTerminate is no longer called
  • SCAR will restart after 3 error dialogs in 1 minute
  • Exceptions in a ThreadSafeCall will no longer crash SCAR

New in SCAR Divi 3.36.00 (Oct 31, 2012)

  • Bugfixes:
  • The TEA functions were cut out of the engine
  • InputQuery threw an access violation
  • Some specific functions did not show up in the function list
  • New:
  • function FindColorsTPA(out X, Y: Integer; const Colors: TIntArray; const TPA: TPointArray): Boolean;
  • function FindColorsTPATol(out X, Y: Integer; const Colors: TIntArray; const TPA: TPointArray; const Tol: Integer): Boolean;
  • function FindColorsTPAEx(out Points: TPointArray; const Colors: TIntArray; const TPA: TPointArray): Boolean;
  • function FindColorsTPATolEx(out Points: TPointArray; const Colors: TIntArray; const TPA: TPointArray; const Tol: Integer): Boolean;
  • function GetActiveWindow: Hwnd;
  • procedure InvertTPA(var TPA: TPointArray);
  • function Odd(const Value: Int64): Boolean;
  • function Even(const Value: Int64): Boolean;
  • Color Tools with the ability to store colors, name them and more... (Replaces color history)
  • Tweaks:
  • procedure MoveMouseEx(const X, Y, MouseSpeed: Integer);
  • InvertTPA => ReverseTPA
  • InvertTIA => ReverseTIA
  • InvertATPA => ReverseATPA
  • Default mousespeed changed from 25 to 20
  • Huge performance improvements for TPAUnique, TPAFilterPoints, TPAInTPA, TIAUnique, TIAInTIA, TEAUnique and TEAInTEA
  • Tweaked ReverseTPA, ReverseATPA and ReverseTIA
  • Holding Ctrl while picking a color lets you pick another one
  • You can now change the order of open script tabs by dragging them

New in SCAR Divi 3.35.03 (Oct 3, 2012)

  • Improvements:
  • New SQLite3 engine, full SQLite3 support is now available (FOREIGN KEY, VACUUM, ...)

New in SCAR Divi 3.35.02 (Sep 7, 2012)

  • Bugfixes:
  • PregMatch was exported incorrectly
  • Distance didn't return a correct value for large input values
  • CountBitmap had a tolerance parameter
  • StrToTPA caused a stack overflow on big strings
  • StrToTPA didn't parse negative values correctly
  • All new bitmap search functions skipped bitmaps aligned to the right and bottom of the client area

New in SCAR Divi 3.35.01 (Jul 31, 2012)

  • Bugfixes:
  • GetKeyState didn't detect keys properly for TSCARWindowClient
  • TSCARBitmap.Resize didn't change the size of the bitmap canvas

New in SCAR Divi 3.35.00 (Jul 24, 2012)

  • Bugfixes:
  • The study modifier wasn't implemented correctly in the preg functions
  • Picture to string tool sometimes shrunk a pasted bitmap
  • Internal issue with the preprocessor
  • "Update bitmaps" didn't show the script as modified when bitmaps were updated
  • New:
  • function BoxToStr(const Box: TBox): string;
  • RESOURCE_MANAGEMENT preprocessor option (can only disable resourcemanagement for TSCARObject subclasses)
  • TSCARClient = class(TSCARObject);
  • TSCARWindowClient = class(TSCARClient);
  • function GetClient: TSCARClient;
  • function SetClient(const Client: TSCARClient): TSCARClient;
  • procedure KeyDown(const Key: Char);
  • procedure KeyUp(const Key: Char);
  • procedure MoveMouseExpert(const X, Y, Gravity, Wind, MinWait, MaxWait, MaxStep, TargetArea: Extended);
  • procedure MoveMouseEx(const X, Y, RX, RY, MouseSpeed: Integer);
  • procedure MoveMouse(const X, Y: Integer); {MouseSpeed = 25}
  • procedure ClickMouseEx(const X, Y: Integer; const Btn: TMouseButton; const Interval: Integer);
  • procedure MoveMouseBox(const Box: TBox);
  • procedure MoveMouseBoxEx(const Box: TBox; const MouseSpeed: Integer);
  • procedure PressVKey(const VKey: Byte);
  • procedure PressVKeyEx(const VKey: Byte; const Interval: Integer);
  • procedure PressKey(const Key: Char);
  • procedure PressKeyEx(const Key: Char; const Interval: Integer);
  • procedure TypeTextEx(const Str: string; const UseNumpad, UseDelays: Boolean);
  • procedure TypeText(const Str: string);
  • VK_XBUTTON1, VK_XBUTTON2, VK_CAPITAL, VK_KANA, VK_HANGUL, VK_JUNJA, VK_FINAL, VK_HANJA, VK_KANJI, VK_CONVERT
  • VK_NONCONVERT, VK_ACCEPT, VK_MODECHANGE, VK_LWIN, VK_RWIN, VK_APPS, VK_SLEEP, VK_NUMPAD0-VK_NUMPAD9
  • VK_F13-VK_F24, VK_NUMLOCK, VK_SCROLL, VK_LSHIFT, VK_RSHIFT, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU
  • VK_BROWSER_BACK, VK_BROWSER_FORWARD, VK_BROWSER_REFRESH, VK_BROWSER_STOP, VK_BROWSER_SEARCH, VK_BROWSER_FAVORITES
  • VK_BROWSER_HOME, VK_VOLUME_MUTE, VK_VOLUME_DOWN, VK_VOLUME_UP, VK_MEDIA_NEXT_TRACK, VK_MEDIA_PREV_TRACK
  • VK_MEDIA_STOP, VK_MEDIA_PLAY_PAUSE, VK_LAUNCH_MAIL, VK_LAUNCH_MEDIA_SELECT, VK_LAUNCH_APP1, VK_LAUNCH_APP2
  • function GetKeyState(const VKey: Byte): Boolean;
  • function GetCurrentKeyState(const VKey: Byte): Boolean;
  • function GetToggleKeyState(const VKey: Byte): Boolean;
  • function FindColors(out X, Y: Integer; const Colors: TIntArray; const XS, YS, XE, YE: Integer): Boolean;
  • function FindColorsTol(out X, Y: Integer; const Colors: TIntArray; const XS, YS, XE, YE, Tol: Integer): Boolean;
  • function FindColorsEx(out Points: TPointArray; const Colors: TIntArray; const XS, YS, XE, YE: Integer): Boolean;
  • function FindColorsTolEx(out Points: TPointArray; const Colors: TIntArray; const XS, YS, XE, YE, Tol: Integer): Boolean;
  • function FindColorsSpiral(const SX, SY: Integer; out X, Y: Integer; const Colors: TIntArray; const XS, YS, XE, YE: Integer): Boolean;
  • function FindColorsSpiralTol(const SX, SY: Integer; out X, Y: Integer; const Colors: TIntArray; const XS, YS, XE, YE, Tol: Integer): Boolean;
  • function FindColorsSpiralEx(const SX, SY: Integer; out Points: TPointArray; const Colors: TIntArray; const XS, YS, XE, YE: Integer): Boolean;
  • function FindColorsSpiralTolEx(const SX, SY: Integer; out Points: TPointArray; const Colors: TIntArray; const XS, YS, XE, YE, Tol: Integer): Boolean;
  • function CountColors(const Colors: TIntArray; const XS, YS, XE, YE: Integer): Integer;
  • function CountColorsTol(const Colors: TIntArray; const XS, YS, XE, YE, Tol: Integer): Integer;
  • TSCARBitmap = class(TSCARObject);
  • procedure FloodFill(const Bmp: TSCARBitmap; const X, Y, Color: Integer);
  • procedure FloodFillTol(const Bmp: TSCARBitmap; const X, Y, Color, Tol: Integer);
  • function FloodFillEx(const Bmp: TSCARBitmap; const X, Y: Integer): TPointArray;
  • function FloodFillTolEx(const Bmp: TSCARBitmap; const X, Y, Tol: Integer): TPointArray;
  • procedure TPAFilterTriangle(var TPA: TPointArray; const X1, Y1, X2, Y2, X3, Y3: Integer);
  • procedure TPAExtractTriangle(var TPA: TPointArray; const X1, Y1, X2, Y2, X3, Y3: Integer);
  • function TPAFromCircle(const Center: TPoint; const Radius: Integer): TPointArray;
  • function TPAFromTriangle(const X1, Y1, X2, Y2, X3, Y3: Integer): TPointArray;
  • function FindColorTPA(out X, Y: Integer; const Color: Integer; const TPA: TPointArray): Boolean;
  • function FindColorTPATol(out X, Y: Integer; const Color: Integer; const TPA: TPointArray; const Tol: Integer): Boolean;
  • function FindColorTPAEx(out Points: TPointArray; const Color: Integer; const TPA: TPointArray): Boolean;
  • function FindColorTPATolEx(out Points: TPointArray; const Color: Integer; const TPA: TPointArray; const Tol: Integer): Boolean;
  • function GetMouseBtnState(const Btn: TMouseButton): Boolean;
  • function GetDesktopWindow: Hwnd;
  • function GetShellWindow: Hwnd;
  • function FindWindows(const Title: string): THwndArray;
  • function FindWindowsEx(const ParentWnd: Hwnd; const Title, ClassName: string; const RecursiveSearch, CaseSensitive, PartialMatch: Boolean): THwndArray;
  • function FindWindowsPreg(const ParentWnd: Hwnd; const TitlePattern, ClassNamePattern: string; const RecursiveSearch: Boolean): THwndArray;
  • function GetParentWindow(const Wnd: Hwnd): Hwnd;
  • function WrapText(const Str: string; const MaxColumnSize: Integer): string;
  • function GetWindowBoxEx(const Wnd: Hwnd; const ClientArea: Boolean): TBox;
  • function GetWindowBox(const Wnd: Hwnd): TBox;
  • function GetWindowText(const Wnd: Hwnd): string;
  • function GetWindowClass(const Wnd: Hwnd): string;
  • procedure GetBoxSize(const Box: TBox; out Width, Height: Integer);
  • procedure SetWindowText(const Wnd: Hwnd; const Text: string);
  • function GetOuterWindow(const Wnd: Hwnd): Hwnd;
  • function IsWindowTopMost(const Wnd: Hwnd): Boolean;
  • function IsWindowValid(const Wnd: Hwnd): Boolean;
  • function FindWindowsBySize(const ParentWnd: Hwnd; const Width, Height: Integer; const RecursiveSearch: Boolean): THwndArray;
  • procedure SetWindowBox(const Wnd: Hwnd; const Box: TBox);
  • procedure GetWindowSizeEx(const Wnd: Hwnd; out Width, Height: Integer; const ClientArea: Boolean);
  • procedure GetWindowSize(const Wnd: Hwnd; out Width, Height: Integer);
  • procedure SetWindowSize(const Wnd: Hwnd; const Width, Height: Integer);
  • procedure ActivateWindow(const Wnd: Hwnd);
  • TSCARBitmapClient = class(TSCARClient)
  • function WrapTextEx(const Str, BreakStr, BreakChars: string; MaxColumnSize: Integer): string;
  • TCharArray = array of Char;
  • T2DCharArray = array of TCharArray;
  • Target Client panel
  • Added support for type 2 Simba library architecture (function exports only)
  • New library architecture
  • TSCARLibraryClient = class(TSCARClient);
  • Tweaks:
  • procedure MouseBtnDown(const X, Y: Integer; const Btn: TMouseButton);
  • procedure MouseBtnUp(const X, Y: Integer; const Btn: TMouseButton);
  • procedure ClickMouse(const X, Y: Integer; const Btn: TMouseButton);
  • Renamed:
  • FindBitmapIn -> FindBitmap
  • FindBitmapToleranceIn -> FindBitmapTol
  • HoldMouse -> MouseBtnDown
  • ReleaseMouse -> MouseBtnUp
  • KeyDown -> VKeyDown
  • KeyUp -> VKeyUp
  • GetKeyCode -> CharToVKey
  • MoveMouse -> SetMousePos
  • FindColorTolerance -> FindColorTol
  • FindColors -> FindColorEx
  • FindColorsTolerance -> FindColorTolEx
  • FindColorSpiralTolerance -> FindColorSpiralTol
  • FindColorsSpiralTolerance -> FindColorSpiralTolEx
  • FindColorsSpiral -> FindColorSpiralEx
  • CountColorTolerance -> CountColorTol
  • BitmapFromString -> BmpFromStrLegacy
  • MakeWindowTransparent -> SetWindowTransp
  • SetOnTop -> SetWindowTopMost
  • FastReplaceColor -> ReplaceColor
  • FastReplaceColorTolerance -> ReplaceColorTol
  • FindBitmaps -> FindBitmapEx
  • FindBitmapsTolerance -> FindBitmapTolEx
  • CountBitmapTolerance -> CountBitmapTol
  • TBooleanArray -> TBoolArray
  • T2DBooleanArray -> T2DBoolArray
  • T2DExtendedArray -> T2DExtArray
  • T2DStringArray -> T2DStrArray
  • Performance tweak for GetCursorType
  • function FindColorSpiral(const SX, SY: Integer; out X, Y: Integer; const Color, XS, YS, XE, YE: Integer): Boolean;
  • function FindColorSpiralTol(const SX, SY: Integer; out X, Y: Integer; const Color, XS, YS, XE, YE, Tol: Integer): Boolean;
  • function FindBitmap(out X, Y: Integer; const Bmp: TSCARBitmap; const XS, YS, XE, YE: Integer): Boolean;
  • function FindBitmapTol(out X, Y: Integer; const Bmp: TSCARBitmap; const XS, YS, XE, YE, Tol: Integer): Boolean;
  • procedure DebugBitmap(const Bmp: TSCARBitmap);
  • procedure SafeDrawBitmap(const Source: TSCARBitmap; const Dest: TCanvas; const X, Y: Integer);
  • function FindDeformedBitmapToleranceRotationIn(const Bmp: TSCARBitmap; var x, y: Integer; x1, y1, x2, y2: Integer; tolerance: Integer; Range: Integer; var accuracy: Extended; AngleIntervals: Extended; StartAngle, MaxAngle: Extended; var angle: Extended): Boolean;
  • function FindDeformedBitmapToleranceIn(const Bmp: TSCARBitmap; var x, y: Integer; x1, y1, x2, y2: Integer; tolerance: Integer; Range: Integer; AllowPartialAccuracy: Boolean; var accuracy: Extended): Boolean;
  • function FindBitmapRotated(const Bmp: TSCARBitmap; var x, y, Angle: Integer; x1, y1, x2, y2: Integer): Boolean;
  • function FindBitmapSpiral(const Bmp: TSCARBitmap; var x, y: Integer; x1, y1, x2, y2: Integer): Boolean;
  • function FindBitmapSpiralTolerance(const Bmp: TSCARBitmap; var x, y: Integer; x1, y1, x2, y2: Integer; Tolerance: Integer): Boolean;
  • function CreateBitmapMaskFromText(Text: AnsiString; Chars: Integer): TSCARBitmap;
  • function CreateBitmapFromText(Text: AnsiString; Chars: Integer; TextColor: Integer): TSCARBitmap;
  • function FindBitmapMaskTolerance(const Mask: TSCARBitmap; var x, y: Integer; x1, y1, x2, y2: Integer; Tolerance, ContourTolerance: Integer): Boolean;
  • procedure ReplaceColor(const Bmp: TSCARBitmap; const Color, NewColor: Integer);
  • procedure ReplaceColorTol(const Bmp: TSCARBitmap; const Color, NewColor, Tol: Integer);
  • function FindBitmapEx(out Points: TPointArray; const Bmp: TSCARBitmap; const XS, YS, XE, YE: Integer): Boolean;
  • function FindBitmapTolEx(out Points: TPointArray; const Bmp: TSCARBitmap; const XS, YS, XE, YE, Tol: Integer): Boolean;
  • function SimilarBitmaps(const Bmp1, Bmp2: TSCARBitmap; const Tol: Integer): Boolean;
  • function SimilarBitmapsEx(const Bmp1, Bmp2: TSCARBitmap; const Tol: Integer; out Diff: TPointArray): Boolean;
  • function CountBitmap(const Bmp: TSCARBitmap; const XS, YS, XE, YE, Tol: Integer): Integer;
  • function CountBitmapTol(const Bmp: TSCARBitmap; const XS, YS, XE, YE, Tol: Integer): Integer;
  • SaveScreenshot(Ex) now changes the file extension of teh path to bmp or png depending on the options
  • Removed:
  • procedure ClearDebugLine(const Line: Integer);
  • procedure DeleteDebugLine(const Line: Integer);
  • function GetDebugLineCount: Integer;
  • function GetDebugLine(const Line: Integer): AnsiString;
  • procedure ReplaceDebugLine(const Line: Integer; const Str: AnsiString);
  • function GetDebugText: AnsiString;
  • procedure GetClientDimensions(out Width, Height: Integer);
  • function GetClientWindowHandle: Hwnd;
  • procedure SetClientWindowHandle(const H: Hwnd);
  • function GetTargetDC: HDC;
  • procedure SetTargetDC(const DC: HDC);
  • procedure ResetDC;
  • procedure SetDesktopAsClient;
  • procedure ClickMouseMid(x, y: Integer);
  • procedure HoldMouseMid(x, y: Integer);
  • procedure ReleaseMouseMid(x, y: Integer);
  • function FindBitmap(Bitmap: Integer; var x, y: Integer): Boolean;
  • function FindBitmapTolerance(Bitmap: Integer; var x, y: Integer; Tolerance: Integer): Boolean;
  • procedure SendKeysVB(const Str: AnsiString; const Wait: Boolean);
  • procedure SendArrow(const Key: Byte);
  • procedure SendArrowWait(const Key: Byte; const WaitTime: Integer);
  • procedure MoveMouseCC(x, y, range, segments, pcount, delay: Integer);
  • procedure MoveMouseSmoothFrom(x1, y1, x2, y2: Integer);
  • procedure MoveMouseSmoothFromEx(x1, y1, x2, y2: Integer; minsleeptime, maxsleeptime, maxdistance, gravity, forces: Integer);
  • procedure MoveMouseSmoothEx(const X, Y, MinSleepTime, MaxSleepTime, MaxDistance, Gravity, Forces: Integer);
  • procedure MoveMouseSmooth(const X, Y: Integer);
  • procedure ClickWindMouse(X, Y, rx, ry: Integer; Btn: TMouseButton);
  • procedure ClickMouseBox(x1, y1, x2, y2: Integer; Btn: TMouseButton);
  • procedure MouseBox(x1, y1, x2, y2: Integer);
  • procedure SendKeys(const Str: AnsiString);
  • procedure TypeKeys(const Str: AnsiString);
  • procedure SendKeysWait(const Str: AnsiString; const WaitTime, RndTime: Integer);
  • function IsNumpadEnabled: Boolean;
  • function IsCapsLockEnabled: Boolean;
  • function IsArrowDown(const Num: Byte): Boolean;
  • function IsNumpadKeyDown(const Key: Byte): Boolean;
  • TMusic
  • function CreateMusicPlayer: TMusic;
  • function FreeMusicPlayer(const Player: TMusic): Boolean;
  • function FindColorSpiral2(var X, Y: Integer; const Color, XS, YS, XE, YE: Integer): Boolean;
  • function GetBitmapDC(const Bmp: Integer): HDC;
  • function BitmapAssigned(const iBmp: Integer): Boolean;
  • function CreateBitmap(const Width, Height, Color: Integer): Integer;
  • procedure GetBitmapSize(const Bmp: Integer; out Width, Height: Integer);
  • function BitmapToString(Bmp: Integer): AnsiString;
  • function FindTransparentBitmap(Bitmap: Integer; var x, y: Integer; TranspCol, xs, ys, xe, ye: Integer): Boolean;
  • function FindTransparentBitmapTolerance(Bitmap: Integer; var x, y: Integer; TranspCol, xs, ys, xe, ye, Tol: Integer): Boolean;
  • function FreeBitmap(const Bmp: Integer): Boolean;
  • function CreateMirroredBitmap(const Bmp: Integer): Integer;
  • function ResizeBitmap(const Bmp, Width, Height: Integer): Integer;
  • function FindColorCircle(out X, Y: Integer; const Color, CX, CY, R: Integer): Boolean;
  • function FindColorCircleTolerance(out X, Y: Integer; const Color, CX, CY, R, Tol: Integer): Boolean;
  • function FindColorTriangle(out X, Y: Integer; const Color, X1, Y1, X2, Y2, X3, Y3: Integer): Boolean;
  • function FindColorTriangleTolerance(out X, Y: Integer; const Color, X1, Y1, X2, Y2, X3, Y3, Tol: Integer): Boolean;
  • function FindColorSkipCoords(out X, Y: Integer; const Color, XS, YS, XE, YE: Integer; const TPA: TPointArray): Boolean;
  • function FindColorSkipCoordsTolerance(out X, Y: Integer; const Color, XS, YS, XE, YE, Tol: Integer; const TPA: TPointArray): Boolean;
  • function FindColorSkipBox(out X, Y: Integer; const Color, XS, YS, XE, YE: Integer; const Box: TBox): Boolean;
  • function FindColorSkipBoxTolerance(out X, Y: Integer; const Color, XS, YS, XE, YE, Tol: Integer; const Box: TBox): Boolean;
  • function FindColorSkipBoxArray(out X, Y: Integer; const Color, XS, YS, XE, YE: Integer; const TBA: TBoxArray): Boolean;
  • function FindColorSkipBoxArrayTolerance(out X, Y: Integer; const Color, XS, YS, XE, YE, Tol: Integer; const TBA: TBoxArray): Boolean;
  • function IsMouseButtonDown(LeftButton: Boolean): Boolean;
  • function IsFunctionKeyDown(Key: Byte): Boolean;
  • function IsFKeyDown(Num: Byte): Boolean;
  • function IsKeyDown(C: Char): Boolean;
  • function GetBitmapCanvas(bitmap: Integer): TCanvas;
  • function LoadBitmap(path: AnsiString): Integer;
  • procedure SaveBitmap(bitmap: Integer; path: AnsiString);
  • function GetBitmapCanvas(bitmap: Integer): TCanvas;
  • function RegexPos(const Subject, Pattern: AnsiString): Integer;
  • function FindRegex(const Subject, Pattern: AnsiString): AnsiString;
  • function ReplaceRegex(const Subject, Pattern, Replacement: AnsiString): AnsiString;
  • function FindWindowTitlePart(Title: AnsiString; CaseSensitive: Boolean): Boolean;
  • function TBitmapFromBmp(Bitmap: TBitmap; Bmp: Integer): Boolean;
  • function GetBitmapAreaColors(xs, ys, xe, ye: Integer): T2DIntArray;
  • procedure CopyClientToBitmap(bitmap: Integer; xs, ys, xe, ye: Integer);
  • function FastGetPixel(const Bmp, x, y: Integer): Integer;
  • procedure FastSetPixel(const Bmp, x, y, Color: Integer);
  • procedure FastDrawClear(bitmap: Integer; Color: TColor);
  • procedure SetTargetBitmap(bitmap: Integer);
  • function RotateBitmap(bitmap: Integer; angle: Extended): Integer;
  • procedure SetWindowText(const Wnd: Hwnd; const Text: string);
  • function FindTransparentBitmaps(Bitmap: Integer; var Points: TPointArray; TranspCol, xs, ys, xe, ye: Integer): Boolean;
  • function FindTransparentBitmapsTolerance(Bitmap: Integer; var Points: TPointArray; TranspCol, xs, ys, xe, ye, Tol: Integer): Boolean;
  • procedure FastDrawTransparent(x, y: Integer; SourceBitmap, TargetBitmap: Integer);
  • procedure FastDrawSizeTransparent(x1, y1, x2, y2: Integer; sourcebitmap, targetbitmap: Integer);
  • procedure SetBitmapFastDrawTarget(bitmap: Integer);
  • procedure SetTransparentColor(bitmap, color: Integer);
  • procedure SetTransparencyFromBitmap(Bitmap, AlphaMaskBitmap: Integer);
  • function CountTransparentBitmap(Bitmap: Integer; TranspCol, xs, ys, xe, ye: Integer): Integer;
  • function CountTransparentBitmapTolerance(Bitmap: Integer; TranspCol, xs, ys, xe, ye, Tol: Integer): Integer;
  • function FindWindowBySize(Width, Height: Integer): Boolean;
  • TIntegerArray (alias)
  • T2DIntegerArray (alias)
  • TExtendedArray (alias)
  • TStringArray (alias)
  • function MiddleTPA(const TPA: TPointArray): TPoint; (alias)
  • function MiddleTPAEx(const TPA: TPointArray; out x, y: Integer): Boolean; (alias)
  • procedure TPARemoveDupl(var TPA: TPointArray); (alias)
  • function GetTPABounds(const TPA: TPointArray): TBox; (alias)
  • procedure TPAInvert(var TPA: TPointArray); (alias)
  • function TPACombine(const TPA1, TPA2: TPointArray): TPointArray; (alias)
  • function TPARandom(const Count, XRange, YRange: Integer): TPointArray; (alias)
  • procedure TPARemovePointEx(var TPA: TPointArray; const Point: TPoint; const All: Boolean); (alias)
  • procedure TPARemovePoint(var TPA: TPointArray; const Point: TPoint); (alias)
  • function TPAChain(const TPA: TPointArray; const Dist: Integer): T2DPointArray; (alias)
  • function TPAChainEx(const TPA: TPointArray; const XMax, YMax: Integer): T2DPointArray; (alias)
  • procedure ATPASortBySize(var ATPA: T2DPointArray); (alias)
  • function GroupTPA(const TPA: TPointArray; const Dist: Integer): T2DPointArray; (alias)
  • function TPAToATPA(const TPA: TPointArray; const Dist: Integer): T2DPointArray; (alias)
  • function TPAGroupEx(const TPA: TPointArray; const XMax, YMax: Integer): T2DPointArray; (alias)
  • function TPAToATPAEx(const TPA: TPointArray; const XMax, YMax: Integer): T2DPointArray; (alias)

New in SCAR Divi 3.34.00 (May 28, 2012)

  • Bugfixes:
  • TPAUnique and TIAUnique didn't always return a unique array
  • Script could not be stopped when paused
  • When pausing on a breakpoint the editor showed 2 icons in the gutter instead of 1
  • Preprocessor had issues with single characters on a line or between directives
  • The filetype filters for the save dialog on the debug and report boxes were broken
  • Tweaks:
  • TPAAppend now returns the index of the appended element
  • TIAAppend now returns the index of the appended element
  • RewriteFile, AppendFile and OpenFile now throw an error when a file can't be accessed
  • SCAR now always uses a dot as decimal separator rather than the localized one
  • New:
  • function TPAEmpty(const TPA: TPointArray): Boolean;
  • function TPAInsert(var TPA: TPointArray; const Index: Integer; const Point: TPoint): Integer;
  • function TIAEmpty(const TIA: TIntArray): Boolean;
  • function TIAMax(const TIA: TIntArray): Integer; (Alias for AMax)
  • function TIAMaxEx(const TIA: TIntArray; out Index: Integer): Integer;
  • function TIAMin(const TIA: TIntArray): Integer; (Alias for AMin)
  • function TIAMinEx(const TIA: TIntArray; out Index: Integer): Integer;
  • function TIAInsert(var TIA: TIntArray; const Index, Int: Integer): Integer;
  • procedure OffsetTIA(var TIA: TIntArray; const Offset: Integer);
  • TExtArray = array of Extended; (Alias for TExtendedArray)
  • function TEAInTEA(const TEA1, TEA2: TExtArray): Boolean;
  • function TEAEmpty(const TEA: TExtArray): Boolean;
  • procedure TEAUnique(var TEA: TExtArray);
  • function TEAToStr(const TEA: TIntArray): string;
  • function StrToTEA(const Str: string): TExtArray;
  • function TEAContains(const TEA: TExtArray; const Ext: Extended): Boolean;
  • function TEAPos(const TEA: TExtArray; const Ext: Integer): Integer;
  • function TEAPosEx(const TEA: TExtArray; const Ext: Extended; const From: Integer): Integer;
  • function TEADelete(var TEA: TExtArray; const Index: Integer): Integer;
  • function TEAAppend(var TEA: TExtArray; const Ext: Extended): Integer;
  • TStrArray = array of string (Alias for TStringArray)
  • function CountStr(const SubStr, Str: string): Integer;

New in SCAR Divi 3.33.00 (Apr 23, 2012)

  • Bugfixes:
  • Memory leak in client system
  • Bug in client system with multi-monitor setups
  • FindColorSkipCoords(Tolerance) failed when a TPA with duplicate coordinates was entered
  • Types were not exported correctly from plugins
  • ScriptFile and TimeRunning did not function correctly when used with ThreadSafeCall
  • LoadDebugBitmap always returned False
  • FindColorSpiral2 was off by a few pixels
  • Tweaks:
  • Improved firewall system + now powered by SQLite3 rather than XML
  • New library system
  • Legacy libraries now support OnLoadLib and OnUnloadLib callbacks
  • Legacy libraries once again receive all previously included functions though SetFunctions except for those removed from SCAR
  • BitmapAssigned, CreateBitmap, GetBitmapSize, ResizeBitmap and FreeBitmap now export to legacy libraries
  • Functions updated/improved and ported to new framework:
  • FindColorSkipBox(Array)(Tolerance)
  • FindColorSpiral(Tolerance)
  • FindColorsSpiralTolerance
  • FindColorSpiral2
  • New:
  • procedure SortTPAByRow(var TPA: TPointArray);
  • procedure TPAExtractCircle(var TPA: TPointArray; const Center: TPoint; const Radius: Extended);
  • procedure TPAFilterCircle(var TPA: TPointArray; const Center: TPoint; const Radius: Extended);
  • Firewall rules editor
  • function CreateBitmap(const Width, Height, Color: Integer): Integer;
  • function FindColorsSpiral(const X, Y: Integer; out Points: TPointArray; const Color, XS, YS, XE, YE: Integer): Boolean;
  • function TPACenter(const TPA: TPointArray): TPoint;
  • Removed:
  • FindColorComp
  • TColorComp
  • MakeScreenPath
  • BitmapFromMem

New in SCAR Divi 3.32.01 (Apr 2, 2012)

  • Bug fixes:
  • Undo was no longer Ctrl+Y
  • Tab no longer indented on multiline selection
  • Code completion only worked with clicking
  • Small bug in new settingsmanager
  • Tweaks:
  • CTS 3 is now 40% faster
  • Opening messages tab when message available now optional
  • When opening messages option is enabled, debug will be opened when running with no messages
  • TIADelete now throws an error when the Index parameter is out of bounds
  • Functions updated/improved and ported to new framework:
  • FindColor(s)(Tolerance)
  • CountColor(Tolerance)
  • FindColorCircle(Tolerance)
  • FindColorTriangle(Tolerance)
  • FindColorSkipCoords(Tolerance)
  • SimilarColors
  • GetTolerance
  • GetClosestColor
  • New: Option to clear debug box before compiling

New in SCAR Divi 3.32.00 (Mar 27, 2012)

  • Bugfixes:
  • Small bug in the function parser
  • Execution errors were mapped incorrectly
  • Bug in code completion caused by 3rd party component
  • TPAFromBox didn't calculate the box size correctly
  • Incorrect handling of trying to open non-existing files
  • TPADensity returned an incorrect result
  • Small bug in stats system causing issues with offline devices on first run
  • Italic or Underline types couldn't be toggled off once toggled on for a syntax style
  • All click actions now have the same effect when the primary mouse buttons are swapped
  • In rare cases FindColorSpiral(Tolerance) threw access violations
  • ScriptPath returned an empty string when used in ThreadSafeCall
  • Improvements:
  • New code editor
  • Ported to Delphi XE2
  • New settings manager (based on SQLite3 rather than XML)
  • WriteLn/AddToReport no longer open and set focus to the Debug/Report tabs
  • Additions:
  • Line states
  • Regex searching/replacing
  • Code folding
  • [#48] New Defines: SCAR_PREALPHA, SCAR_ALPHA, SCAR_BETA, SCAR_RC, SCAR_FINAL
  • Removed:
  • Option to print without syntax
  • GetDebugParams
  • SetDebugParams
  • TDebugParams

New in SCAR Divi 3.31.00 (Feb 14, 2012)

  • Bugfixes:
  • Small bug in loading toolbars/docks
  • ReadLn didn't return the result
  • Bug in the settingsmanager caused issues when changing the editor format
  • CallProc didn't return the proper result
  • Local variables were bugged in code completion
  • Bitmap updater tool had some issues with converting the b format
  • 37] Bug in FindColorSpiral(Tolerance) threw access violation when initial x and y were outside of search bounds
  • Improvements:
  • New interface for script engine
  • Improved compile/running time measurement
  • Vastly improved speed for displaying variable content while debugging
  • Updated bitmap encoding
  • Additions:
  • function FileAge(const Path: string): TDateTime;
  • function ScriptFile: AnsiString;
  • function Base64ToStr(const Str: AnsiString): AnsiString;
  • function StrToBase64(const Str: AnsiString): AnsiString;
  • function HexToStr(const Str: AnsiString): AnsiString;
  • function StrToHex(const Str: AnsiString): AnsiString;
  • function ZLibCompress(const Str: AnsiString): AnsiString;
  • function ZLibDecompress(const Str: AnsiString): AnsiString;
  • function WorkspacePath: AnsiString;
  • const SQL_OK, SQL_ERROR, SQL_INTERNAL, SQL_PERM, SQL_ABORT, SQL_BUSY, SQL_LOCKED, SQL_FULL, SQL_ROW, SQL_DONE
  • function SQLOpen(const Path: string; const CreateIfNotFound: Boolean): Integer;
  • function SQLFree(const DBIndex: Integer): Boolean;
  • function SQLAssigned(const DBIndex: Integer): Boolean;
  • function SQLLastID(const DBIndex: Integer): Integer;
  • procedure SQLStart(const DBIndex: Integer; const TransactionType: TSQLTransactionType);
  • procedure SQLCommit(const DBIndex: Integer);
  • procedure SQLRollback(const DBIndex: Integer);
  • procedure SQLQuery(const DBIndex: Integer; const Query: string);
  • function SQLQueryEx(const DBIndex: Integer; const Query: string): Integer;
  • function SQLQueryFree(const QueryIndex: Integer): Boolean;
  • function SQLQueryAssigned(const QueryIndex: Integer): Boolean;
  • function SQLQueryStep(const QueryIndex: Integer): Integer;
  • function SQLQueryReset(const QueryIndex: Integer): Integer;
  • procedure SQLBindStr(const QueryIndex, ParamIndex: Integer; const Str: string);
  • procedure SQLBindInt(const QueryIndex, ParamIndex: Integer; const Int: Integer);
  • procedure SQLBindInt64(const QueryIndex, ParamIndex: Integer; const Int: Int64);
  • procedure SQLBindByte(const QueryIndex, ParamIndex: Integer; const _Byte: Byte);
  • procedure SQLBindBool(const QueryIndex, ParamIndex: Integer; const Bool: Boolean);
  • function SQLColumnStr(const QueryIndex, ColumnIndex: Integer): string;
  • function SQLColumnInt(const QueryIndex, ColumnIndex: Integer): Integer;
  • function SQLColumnInt64(const QueryIndex, ColumnIndex: Integer): Int64;
  • function SQLColumnByte(const QueryIndex, ColumnIndex: Integer): Byte;
  • function SQLColumnBool(const QueryIndex, ColumnIndex: Integer): Boolean;
  • Removed:
  • BitmapFromString2