From: <tw...@us...> - 2021-08-02 10:04:49
|
Revision: 3571 http://sourceforge.net/p/gexperts/code/3571 Author: twm Date: 2021-08-02 10:04:46 +0000 (Mon, 02 Aug 2021) Log Message: ----------- synced with latest sources from dzlib Modified Paths: -------------- trunk/ExternalSource/dzlib/u_dzFileUtils.pas trunk/ExternalSource/dzlib/u_dzGraphicsUtils.pas trunk/ExternalSource/dzlib/u_dzStopwatch.pas trunk/ExternalSource/dzlib/u_dzStringArrayUtils.pas trunk/ExternalSource/dzlib/u_dzVariantUtils.pas trunk/ExternalSource/dzlib/u_dzVclUtils.pas Modified: trunk/ExternalSource/dzlib/u_dzFileUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzFileUtils.pas 2021-08-02 09:30:05 UTC (rev 3570) +++ trunk/ExternalSource/dzlib/u_dzFileUtils.pas 2021-08-02 10:04:46 UTC (rev 3571) @@ -742,7 +742,9 @@ /// @param Mask is the filename mask to match /// @param Filename is the name of the file which has been found, only valid if result <> mfNotFound /// @returns mfNotFound, if no file was found, or mfDirectory, mfFile or mfSpecial - /// describing the type of the file which has been found </summary> + /// describing the type of the file which has been found. + /// @NOTE: If there are multiple matches, the file name returned is not deterministic. + /// On an NTFS volume it is the last one in the NTFS sort order but that's not guaranteed. </summary> class function FindMatchingFile(const _Mask: string; out _Filename: string): TMatchingFileResult; overload; class function FindMatchingFile(const _Mask: string): TMatchingFileResult; overload; @@ -1059,7 +1061,7 @@ /// replaces the drive part of the path with the given NewDrive. </summary> procedure ReplaceDrive(const _NewDrive: string); ///<summary> - /// Replaces the directory part with the given NewDir </summary> + /// Replaces the directory part (including the drive) with the given NewDir </summary> procedure ReplaceDirectory(const _NewDir: string); ///<summary> /// Replaces filename and extension(s) with the given filename </summary> Modified: trunk/ExternalSource/dzlib/u_dzGraphicsUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzGraphicsUtils.pas 2021-08-02 09:30:05 UTC (rev 3570) +++ trunk/ExternalSource/dzlib/u_dzGraphicsUtils.pas 2021-08-02 10:04:46 UTC (rev 3571) @@ -1413,8 +1413,6 @@ Hue: Word; Saturation: Word; begin - Result := 0; - GetHls(Hue, Result, Saturation) end; Modified: trunk/ExternalSource/dzlib/u_dzStopwatch.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzStopwatch.pas 2021-08-02 09:30:05 UTC (rev 3570) +++ trunk/ExternalSource/dzlib/u_dzStopwatch.pas 2021-08-02 10:04:46 UTC (rev 3571) @@ -12,14 +12,13 @@ type TStopwatch = record -{$IFDEF DELPHI2007_UP} -// enhanced record support in Delphi 2006 was not stable +{$IFDEF SUPPORTS_ENHANCED_RECORDS} private {$ENDIF} FElapsedTicks: Int64; FIsRunning: Boolean; FStartTicks: Int64; -{$IFDEF DELPHI2007_UP} +{$IFDEF SUPPORTS_ENHANCED_RECORDS} function GetElapsedDateTimeTicks: Int64; public class function Create: TStopwatch; static; @@ -67,7 +66,7 @@ gblIsHighResolution: Boolean; gblTickFrequency: Double; -{$IFDEF DELPHI2007_UP} +{$IFDEF SUPPORTS_ENHANCED_RECORDS} { TStopwatch } class function TStopwatch.Create: TStopwatch; @@ -248,7 +247,7 @@ end; end; -{$IFDEF DELPHI2007_UP} +{$IFDEF SUPPORTS_ENHANCED_RECORDS} procedure Test; var Stopwatch: TStopwatch; Modified: trunk/ExternalSource/dzlib/u_dzStringArrayUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzStringArrayUtils.pas 2021-08-02 09:30:05 UTC (rev 3570) +++ trunk/ExternalSource/dzlib/u_dzStringArrayUtils.pas 2021-08-02 10:04:46 UTC (rev 3571) @@ -34,6 +34,16 @@ procedure TStrings_AssignStringArray(_st: TStrings; _arr: TStringArray); procedure TStrings_AppendStringArray(_st: TStrings; _arr: TStringArray); +///<summary> +/// Concatenate strings from index FromIdx to ToIdx in the array to a string, using the given separator +/// @param arr is the source array +/// @param Separator is a string which will used to separate the array items +/// @param FromIdx is the starting index, default is 0 +/// @param ToIdx is the end index, can be negative meaning Length - ToIdx, so -1 means Length-1 +/// @returns the concatenated string </summary> +//function TStringArray_ToString(const _arr: TStringArray; const _Separator: string; +// _FromIdx: Integer = 0; _ToIdx: Integer = -1): string; + implementation uses @@ -45,7 +55,7 @@ len: Integer; begin len := Length(_arr); - Setlength(Result, len); + SetLength(Result, len); for i := 0 to len - 1 do Result[i] := _arr[i]; end; @@ -72,7 +82,7 @@ i: Integer; begin cnt := _st.Count; - Setlength(Result, cnt); + SetLength(Result, cnt); for i := 0 to cnt - 1 do Result[i] := _st[i]; end; @@ -128,7 +138,7 @@ if _Index >= len - _Count then begin // delete from the end - Setlength(_arr, _Index); + SetLength(_arr, _Index); Exit; //==> end; @@ -135,7 +145,7 @@ for i := _Index to len - _Count - 1 do begin _arr[i] := _arr[i + _Count]; end; - Setlength(_arr, len - _Count); + SetLength(_arr, len - _Count); end; function TStringArray_Contains(const _arr: TStringArray; const _s: string; out _Idx: Integer): Boolean; @@ -166,7 +176,7 @@ begin Len1 := Length(_Arr1); Len2 := Length(_Arr2); - Setlength(Result, Len1 + Len2); + SetLength(Result, Len1 + Len2); for i := 0 to Len1 - 1 do Result[i] := _Arr1[i]; for i := 0 to Len2 - 1 do @@ -178,7 +188,7 @@ len: Integer; begin len := Length(_arr); - Setlength(_arr, len + 1); + SetLength(_arr, len + 1); _arr[len] := _Value; end; Modified: trunk/ExternalSource/dzlib/u_dzVariantUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzVariantUtils.pas 2021-08-02 09:30:05 UTC (rev 3570) +++ trunk/ExternalSource/dzlib/u_dzVariantUtils.pas 2021-08-02 10:04:46 UTC (rev 3571) @@ -171,7 +171,7 @@ /// @returns the extended value of v or the Default if v can not be converted </summary> function Var2Ext(const _v: Variant; const _Default: Extended): Extended; -{$IF Declared(TryStrToDateTime)} +{$IF Declared(TryStr2DateTime)} ///<summary> Converts a variant to a TDateTime. /// Raises an exception if v can not be converted. /// @param v Variant value to convert @@ -427,10 +427,10 @@ Result := _NullValue; end; -{$IF Declared(TryStrToDateTime)} +{$IF Declared(TryStr2DateTime)} function Var2DateTimeEx(const _v: Variant; const _Source: string): TDateTime; const - EXPECTED = 'Date'; // do not translate + EXPECTED = 'DateTime'; // do not translate begin if VarIsNull(_v) then raise EVarIsNull.CreateFmt(_('Variant is Null, should be %s: %s'), [EXPECTED, _Source]); @@ -437,7 +437,7 @@ if VarIsEmpty(_v) then raise EVarIsEmpty.CreateFmt(_('Variant is Empty, should be %s: %s'), [EXPECTED, _Source]); if VarIsStr(_v) then begin - if not TryStrToDateTime(_v, Result) then + if not TryStr2DateTime(_v, Result) then raise EVariantConvertError.CreateFmt(_('Variant can not be converted to %s: %s'), [EXPECTED, _Source]); end else begin try Modified: trunk/ExternalSource/dzlib/u_dzVclUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzVclUtils.pas 2021-08-02 09:30:05 UTC (rev 3570) +++ trunk/ExternalSource/dzlib/u_dzVclUtils.pas 2021-08-02 10:04:46 UTC (rev 3571) @@ -164,9 +164,13 @@ /// False, if all columns fit without scrolling /// @note that the default is to use the first 10 rows. </summary> function TGrid_Resize(_Grid: TCustomGrid): Boolean; overload; +function TGrid_Resize(_Grid: TCustomGrid; out _RequiredSize: Integer): Boolean; overload; function TGrid_Resize(_Grid: TCustomGrid; _Options: TResizeOptionSet; _RowOffset: Integer = -1): Boolean; overload; +function TGrid_Resize(_Grid: TCustomGrid; _Options: TResizeOptionSet; _RowOffset: Integer; out _RequiredSize: Integer): Boolean; overload; function TGrid_Resize(_Grid: TCustomGrid; _Options: TResizeOptionSet; const _ConstantCols: array of Integer; _RowOffset: Integer = -1): Boolean; overload; +function TGrid_Resize(_Grid: TCustomGrid; _Options: TResizeOptionSet; + const _ConstantCols: array of Integer; _RowOffset: Integer; out _RequiredSize: Integer): Boolean; overload; ///<summary> Resizes the columns of a TDbGrid to fit their contents /// @param Grid is the TCustomDbGrid to work on @@ -2691,14 +2695,32 @@ Result := TGrid_Resize(_Grid, [roUseFirstRows], [], -1); end; +function TGrid_Resize(_Grid: TCustomGrid; out _RequiredSize: Integer): Boolean; +begin + Result := TGrid_Resize(_Grid, [roUseFirstRows], [], -1, _RequiredSize); +end; + function TGrid_Resize(_Grid: TCustomGrid; _Options: TResizeOptionSet; _RowOffset: Integer): Boolean; begin Result := TGrid_Resize(_Grid, _Options, [], _RowOffset); end; +function TGrid_Resize(_Grid: TCustomGrid; _Options: TResizeOptionSet; _RowOffset: Integer; out _RequiredSize: Integer): Boolean; +begin + Result := TGrid_Resize(_Grid, _Options, [], _RowOffset, _RequiredSize); +end; + function TGrid_Resize(_Grid: TCustomGrid; _Options: TResizeOptionSet; const _ConstantCols: array of Integer; _RowOffset: Integer): Boolean; var + RequiredSize: Integer; +begin + Result := TGrid_Resize(_Grid, _Options, _ConstantCols, _RowOffset, RequiredSize); +end; + +function TGrid_Resize(_Grid: TCustomGrid; _Options: TResizeOptionSet; + const _ConstantCols: array of Integer; _RowOffset: Integer; out _RequiredSize: Integer): Boolean; +var Col, Row: Integer; Grid: TGridHack; MinWidth: Integer; @@ -2707,7 +2729,6 @@ MaxRow: Integer; ColWidths: array of Integer; FirstRow: Integer; - SumWidths: Integer; Additional: Integer; begin Grid := TGridHack(_Grid); @@ -2729,9 +2750,9 @@ FirstRow := MaxRow - 10; end; - SumWidths := MaxCol; // one spare pixel per column + _RequiredSize := MaxCol; // one spare pixel per column if goVertLine in Grid.Options then - Inc(SumWidths, Grid.GridLineWidth); + Inc(_RequiredSize, Grid.GridLineWidth); for Col := MinCol to MaxCol do begin if ArrayContains(Col, _ConstantCols) then @@ -2774,26 +2795,26 @@ ColWidths[Col] := MinWidth; end; - Inc(SumWidths, MinWidth); + Inc(_RequiredSize, MinWidth); end; - if SumWidths >= Grid.ClientWidth then begin + if _RequiredSize >= Grid.ClientWidth then begin Result := True; end else begin Result := False; if (roUseGridWidth in _Options) and (Length(_ConstantCols) < MaxCol + 1) then begin - Additional := (Grid.ClientWidth - SumWidths) div (MaxCol + 1 - Length(_ConstantCols)); + Additional := (Grid.ClientWidth - _RequiredSize) div (MaxCol + 1 - Length(_ConstantCols)); for Col := MinCol to MaxCol do begin if not ArrayContains(Col, _ConstantCols) then begin Inc(ColWidths[Col], Additional); - Inc(SumWidths, Additional); + Inc(_RequiredSize, Additional); end; end; - if SumWidths < Grid.ClientWidth then begin + if _RequiredSize < Grid.ClientWidth then begin Col := MaxCol; while ArrayContains(Col, _ConstantCols) do Dec(Col); - Inc(ColWidths[Col], Grid.ClientWidth - SumWidths); + Inc(ColWidths[Col], Grid.ClientWidth - _RequiredSize); end; end; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |