Ignore:
Timestamp:
Nov 29, 2023, 2:35:44 PM (13 months ago)
Author:
chronos
Message:
  • Modified: HighDpi branch updated to trunk version.
Location:
branches/highdpi/Packages/Common
Files:
9 added
2 edited
1 copied
48 moved

Legend:

Unmodified
Added
Removed
  • branches/highdpi/Packages/Common/AboutDialog.pas

    r462 r463  
    1 unit UAboutDialog;
    2 
    3 {$mode delphi}
     1unit AboutDialog;
    42
    53interface
     
    75uses
    86  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
    9   StdCtrls, ExtCtrls, UApplicationInfo, UCommon, UTranslator, UTheme, UFormAbout;
     7  ExtCtrls, ApplicationInfo, Common, Translator, Theme, FormAbout;
    108
    119type
     
    1614  private
    1715    FApplicationInfo: TApplicationInfo;
    18     FCoolTranslator: TTranslator;
     16    FTranslator: TTranslator;
    1917    FThemeManager: TThemeManager;
    2018  public
     
    2220    procedure Show;
    2321  published
    24     property CoolTranslator: TTranslator read FCoolTranslator write FCoolTranslator;
     22    property Translator: TTranslator read FTranslator write FTranslator;
    2523    property ThemeManager: TThemeManager read FThemeManager write FThemeManager;
    2624    property ApplicationInfo: TApplicationInfo read FApplicationInfo write
     
    5250
    5351end.
    54 
  • branches/highdpi/Packages/Common/ApplicationInfo.pas

    r462 r463  
    1 unit UApplicationInfo;
    2 
    3 {$mode delphi}
     1unit ApplicationInfo;
    42
    53interface
    64
    75uses
    8   UDpiControls, SysUtils, Classes, Forms, URegistry, Controls, Graphics, LCLType;
     6  UDpiControls, SysUtils, Classes, Forms, RegistryEx, Controls, Graphics, LCLType;
    97
    108type
     
    5957procedure Register;
    6058
     59
    6160implementation
    6261
  • branches/highdpi/Packages/Common/Common.Delay.pas

    r462 r463  
    1 unit UDelay;
    2 
    3 {$mode delphi}
     1unit Common.Delay;
    42
    53interface
     
    7371
    7472end.
    75 
  • branches/highdpi/Packages/Common/Common.lpk

    r405 r463  
    11<?xml version="1.0" encoding="UTF-8"?>
    22<CONFIG>
    3   <Package Version="4">
     3  <Package Version="5">
    44    <PathDelim Value="\"/>
    55    <Name Value="Common"/>
     
    3333      <Other>
    3434        <CompilerMessages>
    35           <IgnoredMessages idx5024="True"/>
     35          <IgnoredMessages idx6058="True" idx5071="True" idx5024="True" idx3124="True" idx3123="True"/>
    3636        </CompilerMessages>
    3737      </Other>
     
    4141Source: https://svn.zdechov.net/PascalClassLibrary/Common/"/>
    4242    <License Value="Copy left."/>
    43     <Version Minor="8"/>
    44     <Files Count="27">
     43    <Version Minor="11"/>
     44    <Files Count="33">
    4545      <Item1>
    4646        <Filename Value="StopWatch.pas"/>
     
    4848      </Item1>
    4949      <Item2>
    50         <Filename Value="UCommon.pas"/>
    51         <UnitName Value="UCommon"/>
     50        <Filename Value="Common.pas"/>
     51        <UnitName Value="Common"/>
    5252      </Item2>
    5353      <Item3>
    54         <Filename Value="UDebugLog.pas"/>
    55         <HasRegisterProc Value="True"/>
    56         <UnitName Value="UDebugLog"/>
     54        <Filename Value="DebugLog.pas"/>
     55        <HasRegisterProc Value="True"/>
     56        <UnitName Value="DebugLog"/>
    5757      </Item3>
    5858      <Item4>
    59         <Filename Value="UDelay.pas"/>
    60         <UnitName Value="UDelay"/>
     59        <Filename Value="Common.Delay.pas"/>
     60        <UnitName Value="Common.Delay"/>
    6161      </Item4>
    6262      <Item5>
    63         <Filename Value="UPrefixMultiplier.pas"/>
    64         <HasRegisterProc Value="True"/>
    65         <UnitName Value="UPrefixMultiplier"/>
     63        <Filename Value="PrefixMultiplier.pas"/>
     64        <HasRegisterProc Value="True"/>
     65        <UnitName Value="PrefixMultiplier"/>
    6666      </Item5>
    6767      <Item6>
    68         <Filename Value="UURI.pas"/>
    69         <UnitName Value="UURI"/>
     68        <Filename Value="URI.pas"/>
     69        <UnitName Value="URI"/>
    7070      </Item6>
    7171      <Item7>
    72         <Filename Value="UThreading.pas"/>
    73         <UnitName Value="UThreading"/>
     72        <Filename Value="Threading.pas"/>
     73        <UnitName Value="Threading"/>
    7474      </Item7>
    7575      <Item8>
    76         <Filename Value="UMemory.pas"/>
    77         <UnitName Value="UMemory"/>
     76        <Filename Value="Memory.pas"/>
     77        <UnitName Value="Memory"/>
    7878      </Item8>
    7979      <Item9>
    80         <Filename Value="UResetableThread.pas"/>
    81         <UnitName Value="UResetableThread"/>
     80        <Filename Value="ResetableThread.pas"/>
     81        <UnitName Value="ResetableThread"/>
    8282      </Item9>
    8383      <Item10>
    84         <Filename Value="UPool.pas"/>
    85         <UnitName Value="UPool"/>
     84        <Filename Value="Pool.pas"/>
     85        <UnitName Value="Pool"/>
    8686      </Item10>
    8787      <Item11>
    88         <Filename Value="ULastOpenedList.pas"/>
    89         <HasRegisterProc Value="True"/>
    90         <UnitName Value="ULastOpenedList"/>
     88        <Filename Value="LastOpenedList.pas"/>
     89        <HasRegisterProc Value="True"/>
     90        <UnitName Value="LastOpenedList"/>
    9191      </Item11>
    9292      <Item12>
    93         <Filename Value="URegistry.pas"/>
    94         <UnitName Value="URegistry"/>
     93        <Filename Value="RegistryEx.pas"/>
     94        <UnitName Value="RegistryEx"/>
    9595      </Item12>
    9696      <Item13>
    97         <Filename Value="UJobProgressView.pas"/>
    98         <HasRegisterProc Value="True"/>
    99         <UnitName Value="UJobProgressView"/>
     97        <Filename Value="JobProgressView.pas"/>
     98        <HasRegisterProc Value="True"/>
     99        <UnitName Value="JobProgressView"/>
    100100      </Item13>
    101101      <Item14>
    102         <Filename Value="UXMLUtils.pas"/>
    103         <UnitName Value="UXMLUtils"/>
     102        <Filename Value="XML.pas"/>
     103        <UnitName Value="XML"/>
    104104      </Item14>
    105105      <Item15>
    106         <Filename Value="UApplicationInfo.pas"/>
    107         <HasRegisterProc Value="True"/>
    108         <UnitName Value="UApplicationInfo"/>
     106        <Filename Value="ApplicationInfo.pas"/>
     107        <HasRegisterProc Value="True"/>
     108        <UnitName Value="ApplicationInfo"/>
    109109      </Item15>
    110110      <Item16>
    111         <Filename Value="USyncCounter.pas"/>
    112         <UnitName Value="USyncCounter"/>
     111        <Filename Value="SyncCounter.pas"/>
     112        <UnitName Value="SyncCounter"/>
    113113      </Item16>
    114114      <Item17>
    115         <Filename Value="UPersistentForm.pas"/>
    116         <HasRegisterProc Value="True"/>
    117         <UnitName Value="UPersistentForm"/>
     115        <Filename Value="ListViewSort.pas"/>
     116        <HasRegisterProc Value="True"/>
     117        <UnitName Value="ListViewSort"/>
    118118      </Item17>
    119119      <Item18>
    120         <Filename Value="UFindFile.pas"/>
    121         <HasRegisterProc Value="True"/>
    122         <UnitName Value="UFindFile"/>
     120        <Filename Value="PersistentForm.pas"/>
     121        <HasRegisterProc Value="True"/>
     122        <UnitName Value="PersistentForm"/>
    123123      </Item18>
    124124      <Item19>
    125         <Filename Value="UScaleDPI.pas"/>
    126         <HasRegisterProc Value="True"/>
    127         <UnitName Value="UScaleDPI"/>
     125        <Filename Value="FindFile.pas"/>
     126        <HasRegisterProc Value="True"/>
     127        <UnitName Value="FindFile"/>
    128128      </Item19>
    129129      <Item20>
    130         <Filename Value="UTheme.pas"/>
    131         <HasRegisterProc Value="True"/>
    132         <UnitName Value="UTheme"/>
     130        <Filename Value="ScaleDPI.pas"/>
     131        <HasRegisterProc Value="True"/>
     132        <UnitName Value="ScaleDPI"/>
    133133      </Item20>
    134134      <Item21>
    135         <Filename Value="UStringTable.pas"/>
    136         <UnitName Value="UStringTable"/>
     135        <Filename Value="Theme.pas"/>
     136        <HasRegisterProc Value="True"/>
     137        <UnitName Value="Theme"/>
    137138      </Item21>
    138139      <Item22>
    139         <Filename Value="UGeometric.pas"/>
    140         <UnitName Value="UGeometric"/>
     140        <Filename Value="StringTable.pas"/>
     141        <UnitName Value="StringTable"/>
    141142      </Item22>
    142143      <Item23>
    143         <Filename Value="UTranslator.pas"/>
    144         <HasRegisterProc Value="True"/>
    145         <UnitName Value="UTranslator"/>
     144        <Filename Value="MetaCanvas.pas"/>
     145        <UnitName Value="MetaCanvas"/>
    146146      </Item23>
    147147      <Item24>
    148         <Filename Value="ULanguages.pas"/>
    149         <UnitName Value="ULanguages"/>
     148        <Filename Value="Geometric.pas"/>
     149        <UnitName Value="Geometric"/>
    150150      </Item24>
    151151      <Item25>
    152         <Filename Value="UFormAbout.pas"/>
    153         <UnitName Value="UFormAbout"/>
     152        <Filename Value="Translator.pas"/>
     153        <HasRegisterProc Value="True"/>
     154        <UnitName Value="Translator"/>
    154155      </Item25>
    155156      <Item26>
    156         <Filename Value="UAboutDialog.pas"/>
    157         <HasRegisterProc Value="True"/>
    158         <UnitName Value="UAboutDialog"/>
     157        <Filename Value="Languages.pas"/>
     158        <UnitName Value="Languages"/>
    159159      </Item26>
    160160      <Item27>
    161         <Filename Value="UPixelPointer.pas"/>
    162         <UnitName Value="UPixelPointer"/>
     161        <Filename Value="FormAbout.pas"/>
     162        <UnitName Value="FormAbout"/>
    163163      </Item27>
     164      <Item28>
     165        <Filename Value="AboutDialog.pas"/>
     166        <HasRegisterProc Value="True"/>
     167        <UnitName Value="AboutDialog"/>
     168      </Item28>
     169      <Item29>
     170        <Filename Value="PixelPointer.pas"/>
     171        <UnitName Value="PixelPointer"/>
     172      </Item29>
     173      <Item30>
     174        <Filename Value="DataFile.pas"/>
     175        <UnitName Value="DataFile"/>
     176      </Item30>
     177      <Item31>
     178        <Filename Value="TestCase.pas"/>
     179        <UnitName Value="TestCase"/>
     180      </Item31>
     181      <Item32>
     182        <Filename Value="Generics.pas"/>
     183        <UnitName Value="Generics"/>
     184      </Item32>
     185      <Item33>
     186        <Filename Value="CommonPackage.pas"/>
     187        <Type Value="Main Unit"/>
     188        <UnitName Value="CommonPackage"/>
     189      </Item33>
    164190    </Files>
     191    <CompatibilityMode Value="True"/>
    165192    <i18n>
    166193      <EnableI18N Value="True"/>
  • branches/highdpi/Packages/Common/Common.pas

    r462 r463  
    1 unit UCommon;
    2 
    3 {$mode delphi}
     1unit Common;
    42
    53interface
    64
    75uses
    8   {$ifdef Windows}Windows,{$endif}
    9   {$ifdef Linux}baseunix,{$endif}
    10   Classes, SysUtils, StrUtils, Dialogs, Process, LCLIntf,
    11   FileUtil; //, ShFolder, ShellAPI;
     6  {$IFDEF WINDOWS}Windows,{$ENDIF}
     7  {$IFDEF UNIX}baseunix,{$ENDIF}
     8  Classes, SysUtils, StrUtils, Dialogs, Process, LCLIntf, Graphics,
     9  FileUtil, Generics.Collections; //, ShFolder, ShellAPI;
    1210
    1311type
    1412  TArrayOfByte = array of Byte;
    15   TArrayOfString = array of string;
    1613  TExceptionEvent = procedure(Sender: TObject; E: Exception) of object;
    1714
     
    3532  DLLHandle1: HModule;
    3633
    37 {$IFDEF Windows}
    38   GetUserNameEx: procedure (NameFormat: DWORD;
    39     lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
    40 {$ENDIF}
    41 
    42 function IntToBin(Data: Int64; Count: Byte): string;
     34  {$IFDEF WINDOWS}
     35    GetUserNameEx: procedure (NameFormat: DWORD;
     36      lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
     37  {$ENDIF}
     38
     39const
     40  clLightBlue = TColor($FF8080);
     41  clLightGreen = TColor($80FF80);
     42  clLightRed = TColor($8080FF);
     43
     44function AddLeadingZeroes(const aNumber, Length : integer) : string;
    4345function BinToInt(BinStr: string): Int64;
    44 function TryHexToInt(Data: string; var Value: Integer): Boolean;
    45 function TryBinToInt(Data: string; var Value: Integer): Boolean;
    4646function BinToHexString(Source: AnsiString): string;
    4747//function DelTree(DirName : string): Boolean;
     
    4949function BCDToInt(Value: Byte): Byte;
    5050function CompareByteArray(Data1, Data2: TArrayOfByte): Boolean;
     51procedure CopyStringArray(Dest: TStringArray; Source: array of string);
     52function CombinePaths(Path1, Path2: string): string;
     53function ComputerName: string;
     54procedure DeleteFiles(APath, AFileSpec: string);
     55function Explode(Separator: Char; Data: string): TStringArray;
     56procedure ExecuteProgram(Executable: string; Parameters: array of string);
     57procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);
     58procedure FreeThenNil(var Obj);
     59function GetDirCount(Dir: string): Integer;
    5160function GetUserName: string;
    52 function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    53 function SplitString(var Text: string; Count: Word): string;
    5461function GetBitCount(Variable: QWord; MaxIndex: Integer): Integer;
    5562function GetBit(Variable: QWord; Index: Byte): Boolean;
     63function GetStringPart(var Text: string; Separator: string): string;
     64function GenerateNewName(OldName: string): string;
     65function GetFileFilterItemExt(Filter: string; Index: Integer): string;
     66function IntToBin(Data: Int64; Count: Byte): string;
     67function Implode(Separator: Char; List: TList<string>): string;
     68function LastPos(const SubStr: String; const S: String): Integer;
     69function LoadFileToStr(const FileName: TFileName): AnsiString;
     70function LoggedOnUserNameEx(Format: TUserNameFormat): string;
     71function MergeArray(A, B: array of string): TStringArray;
     72function OccurenceOfChar(What: Char; Where: string): Integer;
     73procedure OpenWebPage(URL: string);
     74procedure OpenEmail(Email: string);
     75procedure OpenFileInShell(FileName: string);
     76function PosFromIndex(SubStr: string; Text: string;
     77  StartIndex: Integer): Integer;
     78function PosFromIndexReverse(SubStr: string; Text: string;
     79  StartIndex: Integer): Integer;
     80function RemoveQuotes(Text: string): string;
     81procedure SaveStringToFile(S, FileName: string);
    5682procedure SetBit(var Variable: Int64; Index: Byte; State: Boolean); overload;
    5783procedure SetBit(var Variable: QWord; Index: Byte; State: Boolean); overload;
    5884procedure SetBit(var Variable: Cardinal; Index: Byte; State: Boolean); overload;
    5985procedure SetBit(var Variable: Word; Index: Byte; State: Boolean); overload;
    60 function AddLeadingZeroes(const aNumber, Length : integer) : string;
    61 function LastPos(const SubStr: String; const S: String): Integer;
    62 function GenerateNewName(OldName: string): string;
    63 function GetFileFilterItemExt(Filter: string; Index: Integer): string;
    64 procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);
    65 procedure DeleteFiles(APath, AFileSpec: string);
    66 procedure OpenWebPage(URL: string);
    67 procedure OpenFileInShell(FileName: string);
    68 procedure ExecuteProgram(Executable: string; Parameters: array of string);
    69 procedure FreeThenNil(var Obj);
    70 function RemoveQuotes(Text: string): string;
    71 function ComputerName: string;
    72 function OccurenceOfChar(What: Char; Where: string): Integer;
    73 function GetDirCount(Dir: string): Integer;
    74 function MergeArray(A, B: array of string): TArrayOfString;
    75 function LoadFileToStr(const FileName: TFileName): AnsiString;
    76 procedure SaveStringToFile(S, FileName: string);
    7786procedure SearchFiles(AList: TStrings; Dir: string;
    7887  FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil);
    79 function GetStringPart(var Text: string; Separator: string): string;
     88function SplitString(var Text: string; Count: Word): string;
    8089function StripTags(const S: string): string;
    81 function PosFromIndex(SubStr: string; Text: string;
    82   StartIndex: Integer): Integer;
    83 function PosFromIndexReverse(SubStr: string; Text: string;
    84   StartIndex: Integer): Integer;
    85 procedure CopyStringArray(Dest: TStringArray; Source: array of string);
     90function TryHexToInt(Data: string; out Value: Integer): Boolean;
     91function TryBinToInt(Data: string; out Value: Integer): Boolean;
     92procedure SortStrings(Strings: TStrings);
    8693
    8794
     
    244251end;
    245252
    246 function TryHexToInt(Data: string; var Value: Integer): Boolean;
     253function TryHexToInt(Data: string; out Value: Integer): Boolean;
    247254var
    248255  I: Integer;
     
    260267end;
    261268
    262 function TryBinToInt(Data: string; var Value: Integer): Boolean;
     269function TryBinToInt(Data: string; out Value: Integer): Boolean;
    263270var
    264271  I: Integer;
     
    288295end;
    289296
    290 function Explode(Separator: char; Data: string): TArrayOfString;
    291 begin
    292   SetLength(Result, 0);
    293   while Pos(Separator, Data) > 0 do begin
     297function Explode(Separator: Char; Data: string): TStringArray;
     298var
     299  Index: Integer;
     300begin
     301  Result := Default(TStringArray);
     302  repeat
     303    Index := Pos(Separator, Data);
     304    if Index > 0 then begin
     305      SetLength(Result, Length(Result) + 1);
     306      Result[High(Result)] := Copy(Data, 1, Index - 1);
     307      Delete(Data, 1, Index);
     308    end else Break;
     309  until False;
     310  if Data <> '' then begin
    294311    SetLength(Result, Length(Result) + 1);
    295     Result[High(Result)] := Copy(Data, 1, Pos(Separator, Data) - 1);
    296     Delete(Data, 1, Pos(Separator, Data));
    297   end;
    298   SetLength(Result, Length(Result) + 1);
    299   Result[High(Result)] := Data;
    300 end;
    301 
    302 {$IFDEF Windows}
     312    Result[High(Result)] := Data;
     313  end;
     314end;
     315
     316function Implode(Separator: Char; List: TList<string>): string;
     317var
     318  I: Integer;
     319begin
     320  Result := '';
     321  for I := 0 to List.Count - 1 do begin
     322    Result := Result + List[I];
     323    if I < List.Count - 1 then Result := Result + Separator;
     324  end;
     325end;
     326
     327{$IFDEF WINDOWS}
    303328function GetUserName: string;
    304329const
     
    308333begin
    309334  L := MAX_USERNAME_LENGTH + 2;
     335  Result := Default(string);
    310336  SetLength(Result, L);
    311337  if Windows.GetUserName(PChar(Result), L) and (L > 0) then begin
     
    321347  end;
    322348end;
    323 {$endif}
     349{$ENDIF}
    324350
    325351function ComputerName: string;
    326 {$ifdef mswindows}
     352{$IFDEF WINDOWS}
    327353const
    328354 INFO_BUFFER_SIZE = 32767;
     
    339365  end;
    340366end;
    341 {$endif}
    342 {$ifdef unix}
     367{$ENDIF}
     368{$IFDEF UNIX}
    343369var
    344370  Name: UtsName;
    345371begin
     372  Name := Default(UtsName);
    346373  fpuname(Name);
    347374  Result := Name.Nodename;
    348375end;
    349 {$endif}
    350 
    351 {$ifdef windows}
     376{$ENDIF}
     377
     378{$IFDEF WINDOWS}
    352379function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    353380const
     
    427454procedure LoadLibraries;
    428455begin
    429   {$IFDEF Windows}
     456  {$IFDEF WINDOWS}
    430457  DLLHandle1 := LoadLibrary('secur32.dll');
    431458  if DLLHandle1 <> 0 then
     
    438465procedure FreeLibraries;
    439466begin
    440   {$IFDEF Windows}
     467  {$IFDEF WINDOWS}
    441468  if DLLHandle1 <> 0 then FreeLibrary(DLLHandle1);
    442469  {$ENDIF}
     
    471498end;
    472499
     500procedure OpenEmail(Email: string);
     501begin
     502  OpenURL('mailto:' + Email);
     503end;
     504
    473505procedure OpenFileInShell(FileName: string);
    474506begin
     
    499531end;
    500532
    501 function MergeArray(A, B: array of string): TArrayOfString;
    502 var
    503   I: Integer;
    504 begin
     533function MergeArray(A, B: array of string): TStringArray;
     534var
     535  I: Integer;
     536begin
     537  Result := Default(TStringArray);
    505538  SetLength(Result, Length(A) + Length(B));
    506539  for I := 0 to Length(A) - 1 do
     
    669702end;
    670703
     704function CombinePaths(Path1, Path2: string): string;
     705begin
     706  Result := Path1;
     707  if Result <> '' then Result := Result + DirectorySeparator + Path2
     708    else Result := Path2;
     709end;
     710
     711procedure SortStrings(Strings: TStrings);
     712var
     713  Tmp: TStringList;
     714begin
     715  Strings.BeginUpdate;
     716  try
     717    if Strings is TStringList then begin
     718      TStringList(Strings).Sort;
     719    end else begin
     720      Tmp := TStringList.Create;
     721      try
     722        Tmp.Assign(Strings);
     723        Tmp.Sort;
     724        Strings.Assign(Tmp);
     725      finally
     726        Tmp.Free;
     727      end;
     728    end;
     729  finally
     730    Strings.EndUpdate;
     731  end;
     732end;
     733
    671734
    672735initialization
     
    680743
    681744end.
     745
  • branches/highdpi/Packages/Common/CommonPackage.pas

    r462 r463  
    33 }
    44
    5 unit Common;
     5unit CommonPackage;
    66
    77{$warn 5023 off : no warning about unused units}
     
    99
    1010uses
    11   StopWatch, UCommon, UDebugLog, UDelay, UPrefixMultiplier, UURI, UThreading,
    12   UMemory, UResetableThread, UPool, ULastOpenedList, URegistry,
    13   UJobProgressView, UXMLUtils, UApplicationInfo, USyncCounter,
    14   UPersistentForm, UFindFile, UScaleDPI, UTheme, UStringTable, UGeometric,
    15   UTranslator, ULanguages, UFormAbout, UAboutDialog, UPixelPointer,
     11  StopWatch, Common, DebugLog, Common.Delay, PrefixMultiplier, URI, Threading,
     12  Memory, ResetableThread, Pool, LastOpenedList, RegistryEx, JobProgressView,
     13  XML, ApplicationInfo, SyncCounter, ListViewSort, PersistentForm, FindFile,
     14  ScaleDPI, Theme, StringTable, MetaCanvas, Geometric, Translator, Languages,
     15  FormAbout, AboutDialog, PixelPointer, DataFile, TestCase, Generics,
    1616  LazarusPackageIntf;
    1717
     
    2020procedure Register;
    2121begin
    22   RegisterUnit('UDebugLog', @UDebugLog.Register);
    23   RegisterUnit('UPrefixMultiplier', @UPrefixMultiplier.Register);
    24   RegisterUnit('ULastOpenedList', @ULastOpenedList.Register);
    25   RegisterUnit('UJobProgressView', @UJobProgressView.Register);
    26   RegisterUnit('UApplicationInfo', @UApplicationInfo.Register);
    27   RegisterUnit('UPersistentForm', @UPersistentForm.Register);
    28   RegisterUnit('UFindFile', @UFindFile.Register);
    29   RegisterUnit('UScaleDPI', @UScaleDPI.Register);
    30   RegisterUnit('UTheme', @UTheme.Register);
    31   RegisterUnit('UTranslator', @UTranslator.Register);
    32   RegisterUnit('UAboutDialog', @UAboutDialog.Register);
     22  RegisterUnit('DebugLog', @DebugLog.Register);
     23  RegisterUnit('PrefixMultiplier', @PrefixMultiplier.Register);
     24  RegisterUnit('LastOpenedList', @LastOpenedList.Register);
     25  RegisterUnit('JobProgressView', @JobProgressView.Register);
     26  RegisterUnit('ApplicationInfo', @ApplicationInfo.Register);
     27  RegisterUnit('ListViewSort', @ListViewSort.Register);
     28  RegisterUnit('PersistentForm', @PersistentForm.Register);
     29  RegisterUnit('FindFile', @FindFile.Register);
     30  RegisterUnit('ScaleDPI', @ScaleDPI.Register);
     31  RegisterUnit('Theme', @Theme.Register);
     32  RegisterUnit('Translator', @Translator.Register);
     33  RegisterUnit('AboutDialog', @AboutDialog.Register);
    3334end;
    3435
  • branches/highdpi/Packages/Common/DebugLog.pas

    r462 r463  
    1 unit UDebugLog;
    2 
    3 {$mode delphi}
     1unit DebugLog;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, FileUtil, fgl, SyncObjs;
     6  Classes, SysUtils, FileUtil, Generics.Collections, SyncObjs;
    97
    108type
     
    1513    Group: string;
    1614    Text: string;
     15  end;
     16
     17  TDebugLogItems = class(TObjectList<TDebugLogItem>)
    1718  end;
    1819
     
    2930    procedure SetMaxCount(const AValue: Integer);
    3031  public
    31     Items: TFPGObjectList<TDebugLogItem>;
     32    Items: TDebugLogItems;
    3233    Lock: TCriticalSection;
    3334    procedure Add(Text: string; Group: string = '');
     
    4445
    4546procedure Register;
     47
    4648
    4749implementation
     
    117119begin
    118120  inherited;
    119   Items := TFPGObjectList<TDebugLogItem>.Create;
     121  Items := TDebugLogItems.Create;
    120122  Lock := TCriticalSection.Create;
    121123  MaxCount := 100;
     
    126128destructor TDebugLog.Destroy;
    127129begin
    128   Items.Free;
    129   Lock.Free;
     130  FreeAndNil(Items);
     131  FreeAndNil(Lock);
    130132  inherited;
    131133end;
    132134
    133135end.
    134 
  • branches/highdpi/Packages/Common/FindFile.pas

    r462 r463  
    1919}
    2020
    21 unit UFindFile;
     21unit FindFile;
    2222
    2323interface
     
    3535  private
    3636    s : TStringList;
    37 
    3837    fSubFolder : boolean;
    3938    fAttr: TFileAttrib;
    4039    fPath : string;
    4140    fFileMask : string;
    42 
    4341    procedure SetPath(Value: string);
    4442    procedure FileSearch(const inPath : string);
     
    4644    constructor Create(AOwner: TComponent); override;
    4745    destructor Destroy; override;
    48 
    4946    function SearchForFiles: TStringList;
    5047  published
     
    5956  FilterAll = '*.*';
    6057{$ENDIF}
    61 {$IFDEF LINUX}
     58{$IFDEF UNIX}
    6259  FilterAll = '*';
    6360{$ENDIF}
    6461
    6562procedure Register;
     63
    6664
    6765implementation
     
    8785begin
    8886  s.Free;
    89   inherited Destroy;
     87  inherited;
    9088end;
    9189
     
    145143    SysUtils.FindClose(Rec);
    146144  end;
    147 end; 
     145end;
    148146
    149147end.
    150 
  • branches/highdpi/Packages/Common/FormAbout.lfm

    r462 r463  
    11object FormAbout: TDpiFormAbout
    22  Left = 1014
    3   Height = 402
     3  Height = 349
    44  Top = 577
    5   Width = 702
     5  Width = 609
    66  Caption = 'About'
    7   ClientHeight = 402
    8   ClientWidth = 702
    9   DesignTimePPI = 144
    10   OnCreate = FormCreate
     7  ClientHeight = 349
     8  ClientWidth = 609
     9  DesignTimePPI = 125
    1110  OnShow = FormShow
    1211  Position = poScreenCenter
    13   LCLVersion = '2.0.10.0'
     12  LCLVersion = '2.2.4.0'
    1413  object LabelDescription: TLabel
    15     Left = 30
    16     Height = 24
    17     Top = 135
    18     Width = 642
     14    Left = 26
     15    Height = 22
     16    Top = 117
     17    Width = 557
    1918    Align = alTop
    20     BorderSpacing.Left = 30
    21     BorderSpacing.Right = 30
    22     BorderSpacing.Bottom = 30
     19    BorderSpacing.Left = 26
     20    BorderSpacing.Right = 26
     21    BorderSpacing.Bottom = 26
    2322    Caption = 'Description'
    2423    ParentColor = False
     
    2726  end
    2827  object LabelContent: TLabel
    29     Left = 30
    30     Height = 24
    31     Top = 189
    32     Width = 642
     28    Left = 26
     29    Height = 22
     30    Top = 165
     31    Width = 557
    3332    Align = alTop
    34     BorderSpacing.Around = 30
     33    BorderSpacing.Around = 26
    3534    Caption = '   '
    3635    ParentColor = False
     
    3938  object PanelTop: TDpiPanel
    4039    Left = 0
    41     Height = 135
     40    Height = 117
    4241    Top = 0
    43     Width = 702
     42    Width = 609
    4443    Align = alTop
    4544    BevelOuter = bvNone
    46     ClientHeight = 135
    47     ClientWidth = 702
     45    ClientHeight = 117
     46    ClientWidth = 609
    4847    FullRepaint = False
    4948    ParentFont = False
    5049    TabOrder = 0
    5150    object LabelAppName: TLabel
    52       Left = 108
    53       Height = 84
    54       Top = 20
    55       Width = 564
     51      Left = 94
     52      Height = 73
     53      Top = 17
     54      Width = 489
    5655      Anchors = [akTop, akLeft, akRight]
    5756      AutoSize = False
    58       BorderSpacing.Around = 30
     57      BorderSpacing.Around = 26
    5958      Caption = 'Title'
    60       Font.Height = -60
     59      Font.Height = -52
    6160      ParentColor = False
    6261      ParentFont = False
     
    6463    end
    6564    object ImageLogo: TImage
    66       Left = 24
    67       Height = 74
    68       Top = 30
    69       Width = 72
     65      Left = 21
     66      Height = 64
     67      Top = 26
     68      Width = 62
    7069      Proportional = True
    7170      Stretch = True
     
    7473  object PanelButtons: TDpiPanel
    7574    Left = 0
    76     Height = 75
    77     Top = 327
    78     Width = 702
     75    Height = 65
     76    Top = 284
     77    Width = 609
    7978    Align = alBottom
    8079    BevelOuter = bvNone
    81     ClientHeight = 75
    82     ClientWidth = 702
     80    ClientHeight = 65
     81    ClientWidth = 609
    8382    TabOrder = 1
    8483    object ButtonHomePage: TButton
    85       Left = 24
    86       Height = 38
    87       Top = 24
    88       Width = 264
     84      Left = 21
     85      Height = 33
     86      Top = 21
     87      Width = 229
    8988      Anchors = [akLeft, akBottom]
    9089      Caption = 'Home page'
     
    9493    end
    9594    object ButtonClose: TButton
    96       Left = 532
    97       Height = 38
    98       Top = 24
    99       Width = 140
     95      Left = 461
     96      Height = 33
     97      Top = 21
     98      Width = 122
    10099      Anchors = [akRight, akBottom]
    101100      Caption = 'Close'
  • branches/highdpi/Packages/Common/FormAbout.pas

    r462 r463  
    1 unit UFormAbout;
    2 
    3 {$mode delphi}
     1unit FormAbout;
    42
    53interface
     
    75uses
    86  UDpiControls, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
    9   StdCtrls, ExtCtrls, UApplicationInfo, UCommon, UTranslator, UTheme;
     7  StdCtrls, ExtCtrls, ApplicationInfo, Common, Translator, Theme;
    108
    119type
     
    2220    PanelButtons: TDpiPanel;
    2321    procedure ButtonHomePageClick(Sender: TObject);
    24     procedure FormCreate(Sender: TObject);
    2522    procedure FormShow(Sender: TObject);
    26   private
    27     { private declarations }
    2823  public
    2924    AboutDialog: TObject; //TAboutDialog
     
    3732
    3833uses
    39   UAboutDialog;
     34  AboutDialog;
    4035
    4136resourcestring
     
    5045  if Assigned(AboutDialog) then
    5146  with TAboutDialog(AboutDialog) do begin
    52     if Assigned(CoolTranslator) then
    53       CoolTranslator.TranslateComponentRecursive(Self);
     47    if Assigned(Translator) then
     48      Translator.TranslateComponentRecursive(Self);
    5449    if Assigned(ThemeManager) then
    5550      ThemeManager.UseTheme(Self);
     
    7974end;
    8075
    81 procedure TFormAbout.FormCreate(Sender: TObject);
    82 begin
    83 end;
    84 
    8576end.
    86 
  • branches/highdpi/Packages/Common/Geometric.pas

    r462 r463  
    1 unit UGeometric;
    2 
    3 {$mode delphi}
     1unit Geometric;
    42
    53interface
     
    108type
    119  TPointArray = array of TPoint;
     10
     11  { TVector }
     12
     13  TVector = record
     14    Position: TPoint;
     15    Direction: TPoint;
     16    function GetLength: Double;
     17    function GetAngle: Double;
     18    procedure SetLength(Value: Double);
     19    class function Create(P1, P2: TPoint): TVector; static;
     20  end;
    1221
    1322function Distance(P1, P2: TPoint): Integer;
     
    1524function AddPoint(const P1, P2: TPoint): TPoint;
    1625function SubPoint(const P1, P2: TPoint): TPoint;
    17 function PointToLineDistance(const P, V, W: TPoint): Integer;
     26function PointToLineDistance(const P, V, W: TPoint; out Intersect: TPoint): Integer;
    1827function ComparePoint(P1, P2: TPoint): Boolean;
    1928function RotatePoint(Center, P: TPoint; Angle: Double): TPoint;
     
    2736function ShiftRect(ARect: TRect; Delta: TPoint): TRect;
    2837
     38
    2939implementation
    3040
     
    5161end;
    5262
    53 function PointToLineDistance(const P, V, W: TPoint): Integer;
     63function PointToLineDistance(const P, V, W: TPoint; out Intersect: TPoint): Integer;
    5464var
    5565  l2, t: Double;
     
    6979  if T < 0 then begin
    7080    Result := Distance(P, V);       // Beyond the 'v' end of the segment
    71     exit;
     81    Intersect := V;
     82    Exit;
    7283  end
    7384  else if T > 1 then begin
    7485    Result := Distance(P, W);  // Beyond the 'w' end of the segment
     86    Intersect := W;
    7587    Exit;
    7688  end;
     
    7890  TT.Y := Trunc(V.Y + T * (W.Y - V.Y));
    7991  Result := Distance(P, TT);
     92  Intersect := TT;
    8093end;
    8194
     
    96109  I: Integer;
    97110begin
     111  Result := Default(TPointArray);
    98112  SetLength(Result, Length(P));
    99113  for I := 0 to High(P) do
     
    162176end;
    163177
     178{ TVector }
     179
     180function TVector.GetLength: Double;
     181begin
     182  Result := Sqrt(Sqr(Direction.X) + Sqr(Direction.Y));
     183end;
     184
     185function TVector.GetAngle: Double;
     186begin
     187  Result := ArcTan2(Direction.Y, Direction.X);
     188end;
     189
     190procedure TVector.SetLength(Value: Double);
     191var
     192  Angle: Double;
     193begin
     194  Angle := GetAngle;
     195  Direction := Point(Round(Cos(Angle) * Value),
     196    Round(Sin(Angle) * Value));
     197end;
     198
     199class function TVector.Create(P1, P2: TPoint): TVector;
     200begin
     201  Result.Position := P1;
     202  Result.Direction := Point(P2.X - P1.X, P2.Y - P1.Y);
     203end;
    164204
    165205end.
  • branches/highdpi/Packages/Common/JobProgressView.lfm

    r462 r463  
    11object FormJobProgressView: TDpiFormJobProgressView
    22  Left = 467
    3   Height = 345
     3  Height = 414
    44  Top = 252
    5   Width = 539
     5  Width = 647
    66  BorderIcons = [biSystemMenu]
    7   ClientHeight = 345
    8   ClientWidth = 539
    9   DesignTimePPI = 120
     7  ClientHeight = 414
     8  ClientWidth = 647
     9  DesignTimePPI = 144
    1010  OnClose = FormClose
    1111  OnCloseQuery = FormCloseQuery
    1212  OnCreate = FormCreate
    13   OnDestroy = FormDestroy
    1413  OnHide = FormHide
    1514  OnShow = FormShow
    1615  Position = poScreenCenter
    17   LCLVersion = '2.0.2.0'
     16  LCLVersion = '2.2.0.4'
    1817  object PanelOperationsTitle: TDpiPanel
    1918    Left = 0
    20     Height = 32
     19    Height = 38
    2120    Top = 0
    22     Width = 539
     21    Width = 647
    2322    Align = alTop
    2423    BevelOuter = bvNone
    25     ClientHeight = 32
    26     ClientWidth = 539
     24    ClientHeight = 38
     25    ClientWidth = 647
    2726    FullRepaint = False
    2827    TabOrder = 0
    2928    object LabelOperation: TLabel
    30       Left = 8
    31       Height = 20
    32       Top = 8
    33       Width = 76
     29      Left = 10
     30      Height = 26
     31      Top = 10
     32      Width = 99
    3433      Caption = 'Operations:'
    35       ParentColor = False
    3634      ParentFont = False
    3735    end
     
    3937  object PanelLog: TDpiPanel
    4038    Left = 0
    41     Height = 133
    42     Top = 212
    43     Width = 539
     39    Height = 161
     40    Top = 253
     41    Width = 647
    4442    Align = alClient
    4543    BevelOuter = bvSpace
    46     ClientHeight = 133
    47     ClientWidth = 539
     44    ClientHeight = 161
     45    ClientWidth = 647
    4846    TabOrder = 1
    4947    object MemoLog: TDpiMemo
    50       Left = 8
    51       Height = 117
    52       Top = 8
    53       Width = 523
     48      Left = 10
     49      Height = 141
     50      Top = 10
     51      Width = 627
    5452      Anchors = [akTop, akLeft, akRight, akBottom]
    5553      ReadOnly = True
     
    6058  object PanelProgress: TDpiPanel
    6159    Left = 0
    62     Height = 54
    63     Top = 106
    64     Width = 539
     60    Height = 65
     61    Top = 126
     62    Width = 647
    6563    Align = alTop
    6664    BevelOuter = bvNone
    67     ClientHeight = 54
    68     ClientWidth = 539
     65    ClientHeight = 65
     66    ClientWidth = 647
    6967    TabOrder = 2
    7068    object ProgressBarPart: TProgressBar
    71       Left = 10
    72       Height = 24
    73       Top = 24
    74       Width = 523
     69      Left = 12
     70      Height = 29
     71      Top = 29
     72      Width = 628
    7573      Anchors = [akTop, akLeft, akRight]
    7674      TabOrder = 0
    7775    end
    7876    object LabelEstimatedTimePart: TLabel
    79       Left = 8
    80       Height = 20
     77      Left = 10
     78      Height = 26
    8179      Top = -2
    82       Width = 103
     80      Width = 132
    8381      Caption = 'Estimated time:'
    84       ParentColor = False
    8582    end
    8683  end
    8784  object PanelOperations: TDpiPanel
    8885    Left = 0
    89     Height = 42
    90     Top = 64
    91     Width = 539
     86    Height = 50
     87    Top = 76
     88    Width = 647
    9289    Align = alTop
    9390    BevelOuter = bvNone
    94     ClientHeight = 42
    95     ClientWidth = 539
     91    ClientHeight = 50
     92    ClientWidth = 647
    9693    FullRepaint = False
    9794    TabOrder = 3
    9895    object ListViewJobs: TDpiListView
    99       Left = 8
    100       Height = 32
    101       Top = 5
    102       Width = 523
     96      Left = 10
     97      Height = 38
     98      Top = 6
     99      Width = 627
    103100      Anchors = [akTop, akLeft, akRight, akBottom]
    104101      AutoWidthLastColumn = True
     
    107104      Columns = <     
    108105        item
    109           Width = 523
     106          Width = 614
    110107        end>
    111108      OwnerData = True
     
    120117  object PanelProgressTotal: TDpiPanel
    121118    Left = 0
    122     Height = 52
    123     Top = 160
    124     Width = 539
     119    Height = 62
     120    Top = 191
     121    Width = 647
    125122    Align = alTop
    126123    BevelOuter = bvNone
    127     ClientHeight = 52
    128     ClientWidth = 539
     124    ClientHeight = 62
     125    ClientWidth = 647
    129126    TabOrder = 4
    130127    object LabelEstimatedTimeTotal: TLabel
    131       Left = 8
    132       Height = 20
     128      Left = 10
     129      Height = 26
    133130      Top = 0
    134       Width = 141
     131      Width = 178
    135132      Caption = 'Total estimated time:'
    136       ParentColor = False
    137133    end
    138134    object ProgressBarTotal: TProgressBar
    139       Left = 8
    140       Height = 24
    141       Top = 24
    142       Width = 523
     135      Left = 10
     136      Height = 29
     137      Top = 29
     138      Width = 627
    143139      Anchors = [akTop, akLeft, akRight]
    144140      TabOrder = 0
     
    147143  object PanelText: TDpiPanel
    148144    Left = 0
    149     Height = 32
    150     Top = 32
    151     Width = 539
     145    Height = 38
     146    Top = 38
     147    Width = 647
    152148    Align = alTop
    153149    BevelOuter = bvNone
    154     ClientHeight = 32
    155     ClientWidth = 539
     150    ClientHeight = 38
     151    ClientWidth = 647
    156152    TabOrder = 5
    157153    object LabelText: TLabel
    158       Left = 8
    159       Height = 24
    160       Top = 8
    161       Width = 525
     154      Left = 10
     155      Height = 29
     156      Top = 10
     157      Width = 630
    162158      Anchors = [akTop, akLeft, akRight]
    163159      AutoSize = False
    164       ParentColor = False
    165160    end
    166161  end
    167162  object ImageList1: TDpiImageList
    168     BkColor = clForeground
    169     left = 200
    170     top = 8
     163    Left = 240
     164    Top = 10
    171165    Bitmap = {
    172       4C69020000001000000010000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
    173       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    174       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    175       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    176       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    177       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    178       FF00000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    179       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
    180       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    181       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000
    182       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    183       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000
    184       00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    185       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    186       00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00
    187       FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FFFF00
    188       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FFFF00
    189       FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FFFF00FF00FF00
    190       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    191       00FFFF00FF00000000FF000000FF000000FF000000FFFF00FF00FF00FF00FF00
    192       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000
    193       00FF000000FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00
    194       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000
    195       00FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
    196       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
    197       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    198       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    199       FF00000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    200       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    201       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    202       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    203       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    204       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    205       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    206       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    207       FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00
    208       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    209       FF00FF00FF00FF00FF00FF00FF00000000FF000000FFFF00FF00FF00FF00FF00
    210       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    211       FF00FF00FF00FF00FF00FF00FF00000000FF000084FF000000FFFF00FF00FF00
    212       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    213       00FF000000FF000000FF000000FF000000FF0000FFFF000084FF000000FFFF00
    214       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    215       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000084FF0000
    216       00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    217       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    218       84FF000000FFFF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    219       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    220       FFFF000084FF000000FFFF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    221       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    222       84FF000000FFFF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    223       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000084FF0000
    224       00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    225       00FF000000FF000000FF000000FF000000FF0000FFFF000084FF000000FFFF00
    226       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    227       FF00FF00FF00FF00FF00FF00FF00000000FF000084FF000000FFFF00FF00FF00
    228       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    229       FF00FF00FF00FF00FF00FF00FF00000000FF000000FFFF00FF00FF00FF00FF00
    230       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    231       FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00
    232       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    233       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    234       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    235       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    236       FF00FF00FF00FF00FF00FF00FF00
     166      4C7A0200000010000000100000006A0000000000000078DAE593490E00100C45
     167      7B78F72E5684A63A1142C382BE4F0708F89C955117F4B016BE67B5FC6E96DB97
     168      B0D4B9F4CD949F36DED1DF922B0F1BD11FAB5AFC68DE5C44D40220A9FA779EC8
     169      6A349FD5A435E43CADA1E3678D73F773F1DBF3EFADFFEEFEBBF97F6696BE9D36
    237170    }
    238171  end
     
    241174    Interval = 100
    242175    OnTimer = TimerUpdateTimer
    243     left = 320
    244     top = 8
     176    Left = 384
     177    Top = 10
    245178  end
    246179end
  • branches/highdpi/Packages/Common/JobProgressView.pas

    r462 r463  
    1 unit UJobProgressView;
    2 
    3 {$MODE Delphi}
     1unit JobProgressView;
    42
    53interface
     
    75uses
    86  UDpiControls, SysUtils, Variants, Classes, Graphics, Controls, Forms, Syncobjs,
    9   Dialogs, ComCtrls, StdCtrls, ExtCtrls, Contnrs, UThreading, Math,
     7  Dialogs, ComCtrls, StdCtrls, ExtCtrls, Generics.Collections, Threading, Math,
    108  DateUtils;
    119
     
    7169  end;
    7270
    73   TJobs = class(TObjectList)
     71  TJobs = class(TObjectList<TJob>)
    7472  end;
    7573
     
    105103    procedure ReloadJobList;
    106104    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    107     procedure FormDestroy(Sender: TObject);
    108105    procedure ListViewJobsData(Sender: TObject; Item: TListItem);
    109106    procedure TimerUpdateTimer(Sender: TObject);
     
    157154  end;
    158155
    159   //var
    160   //  FormJobProgressView: TFormJobProgressView;
    161 
    162156procedure Register;
    163157
    164158resourcestring
    165159  SExecuted = 'Executed';
     160
    166161
    167162implementation
     
    187182  try
    188183    try
    189       //raise Exception.Create('Exception in job');
    190184      ProgressView.CurrentJob.Method(Job);
    191185    except
     
    286280end;
    287281
    288 procedure TFormJobProgressView.FormDestroy(Sender:TObject);
    289 begin
    290 end;
    291 
    292282procedure TFormJobProgressView.ListViewJobsData(Sender: TObject; Item: TListItem);
    293283begin
    294284  if (Item.Index >= 0) and (Item.Index < JobProgressView.Jobs.Count) then
    295   with TJob(JobProgressView.Jobs[Item.Index]) do begin
     285  with JobProgressView.Jobs[Item.Index] do begin
    296286    Item.Caption := Title;
    297287    if Item.Index = JobProgressView.CurrentJobIndex then Item.ImageIndex := 1
     
    311301  Caption := SPleaseWait;
    312302  try
    313     //Animate1.FileName := ExtractFileDir(UTF8Encode(DpiApplication.ExeName)) +
     303    //Animate1.FileName := ExtractFileDir(UTF8Encode(Application.ExeName)) +
    314304    //  DirectorySeparator + 'horse.avi';
    315305    //Animate1.Active := True;
     
    405395    I := 0;
    406396    while I < Jobs.Count do
    407     with TJob(Jobs[I]) do begin
     397    with Jobs[I] do begin
    408398      CurrentJobIndex := I;
    409       CurrentJob := TJob(Jobs[I]);
     399      CurrentJob := Jobs[I];
    410400      JobProgressChange(Self);
    411401      StartTime := Now;
     
    420410        Method(CurrentJob);
    421411      end else begin
     412        Thread := TJobThread.Create(True);
    422413        try
    423           Thread := TJobThread.Create(True);
    424414          with Thread do begin
    425415            FreeOnTerminate := False;
     
    494484  if AValue = FTerminate then Exit;
    495485  for I := 0 to Jobs.Count - 1 do
    496     TJob(Jobs[I]).Terminate := AValue;
     486    Jobs[I].Terminate := AValue;
    497487  FTerminate := AValue;
    498488end;
     
    620610procedure TProgress.Increment;
    621611begin
    622   try
    623     FLock.Acquire;
     612  FLock.Acquire;
     613  try
    624614    Value := Value + 1;
    625615  finally
     
    630620procedure TProgress.Reset;
    631621begin
    632   try
    633     FLock.Acquire;
     622  FLock.Acquire;
     623  try
    634624    FValue := 0;
    635625  finally
     
    647637begin
    648638  FLock.Free;
    649   inherited Destroy;
     639  inherited;
    650640end;
    651641
     
    678668destructor TJob.Destroy;
    679669begin
    680   Progress.Free;
     670  FreeAndNil(Progress);
    681671  inherited;
    682672end;
  • branches/highdpi/Packages/Common/Languages.pas

    r462 r463  
    1 unit ULanguages;
    2 
    3 {$mode objfpc}{$H+}
     1unit Languages;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, Contnrs;
     6  Classes, SysUtils, Generics.Collections;
    97
    108type
     
    1513  end;
    1614
    17   { TLanguageList }
    18 
    19   TLanguageList = class(TObjectList)
     15  { TLanguages }
     16
     17  TLanguages = class(TObjectList<TLanguage>)
    2018    function SearchByCode(ACode: string): TLanguage;
    2119    procedure AddNew(Code: string; Name: string);
    22     constructor Create;
     20    constructor Create(FreeObjects: Boolean = True);
    2321  end;
    2422
     
    218216  SLang_za = 'Zhuang';
    219217  SLang_zh = 'Chinese';
     218  SLang_zh_Hans = 'Simplified Chinese';
     219  SLang_zh_Hant = 'Traditional Chinese';
    220220  SLang_zu = 'Zulu';
    221221
     222
    222223implementation
    223224
    224225
    225 { TLanguageList }
    226 
    227 function TLanguageList.SearchByCode(ACode: string): TLanguage;
     226{ TLanguages }
     227
     228function TLanguages.SearchByCode(ACode: string): TLanguage;
    228229var
    229230  I: Integer;
    230231begin
    231232  I := 0;
    232   while (I < Count) and (TLanguage(Items[I]).Code < ACode) do Inc(I);
    233   if I < Count then Result := TLanguage(Items[I])
     233  while (I < Count) and (Items[I].Code <> ACode) do Inc(I);
     234  if I < Count then Result := Items[I]
    234235    else Result := nil;
    235236end;
    236237
    237 procedure TLanguageList.AddNew(Code: string; Name: string);
     238procedure TLanguages.AddNew(Code: string; Name: string);
    238239var
    239240  NewItem: TLanguage;
     
    245246end;
    246247
    247 constructor TLanguageList.Create;
     248constructor TLanguages.Create(FreeObjects: Boolean);
    248249begin
    249   inherited Create;
     250  inherited;
    250251  AddNew('', SLangAuto);
    251252  AddNew('aa', SLang_aa);
     
    441442  AddNew('za', SLang_za);
    442443  AddNew('zh', SLang_zh);
     444  AddNew('zh-Hant', SLang_zh_Hant);
     445  AddNew('zh-Hans', SLang_zh_Hans);
    443446  AddNew('zu', SLang_zu);
    444447end;
    445448
    446449end.
    447 
  • branches/highdpi/Packages/Common/Languages/DebugLog.cs.po

    r462 r463  
    1010"Content-Transfer-Encoding: 8bit\n"
    1111
    12 #: udebuglog.sfilenamenotdefined
     12#: debuglog.sfilenamenotdefined
     13#, fuzzy
     14msgctxt "debuglog.sfilenamenotdefined"
    1315msgid "Filename not defined"
    1416msgstr "Neurčen soubor"
  • branches/highdpi/Packages/Common/Languages/DebugLog.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: udebuglog.sfilenamenotdefined
     4#: debuglog.sfilenamenotdefined
    55msgid "Filename not defined"
    6 msgstr "Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8"
     6msgstr ""
    77
  • branches/highdpi/Packages/Common/Languages/FindFile.cs.po

    r462 r463  
    1212"X-Generator: Poedit 1.8.9\n"
    1313
    14 #: ufindfile.sdirnotfound
     14#: findfile.sdirnotfound
     15#, fuzzy
     16msgctxt "findfile.sdirnotfound"
    1517msgid "Directory not found"
    1618msgstr "Adresář nenalezen"
  • branches/highdpi/Packages/Common/Languages/FindFile.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: ufindfile.sdirnotfound
     4#: findfile.sdirnotfound
    55msgid "Directory not found"
    66msgstr ""
  • branches/highdpi/Packages/Common/Languages/FormAbout.cs.po

    r462 r463  
    1212"X-Generator: Poedit 2.4.1\n"
    1313
    14 #: uformabout.slicense
     14#: formabout.slicense
     15#, fuzzy
     16msgctxt "formabout.slicense"
    1517msgid "License"
    1618msgstr "Licence"
    1719
    18 #: uformabout.sreleasedate
     20#: formabout.sreleasedate
     21#, fuzzy
     22msgctxt "formabout.sreleasedate"
    1923msgid "Release date"
    2024msgstr "Datum uvolnění"
    2125
    22 #: uformabout.sversion
     26#: formabout.sversion
     27#, fuzzy
     28msgctxt "formabout.sversion"
    2329msgid "Version"
    2430msgstr "Verze"
  • branches/highdpi/Packages/Common/Languages/FormAbout.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: uformabout.slicense
     4#: formabout.slicense
    55msgid "License"
    66msgstr ""
    77
    8 #: uformabout.sreleasedate
     8#: formabout.sreleasedate
    99msgid "Release date"
    1010msgstr ""
    1111
    12 #: uformabout.sversion
     12#: formabout.sversion
    1313msgid "Version"
    1414msgstr ""
  • branches/highdpi/Packages/Common/Languages/JobProgressView.cs.po

    r462 r463  
    1212"X-Generator: Poedit 2.2\n"
    1313
    14 #: ujobprogressview.sestimatedtime
     14#: jobprogressview.sestimatedtime
     15#, object-pascal-format, fuzzy
     16msgctxt "jobprogressview.sestimatedtime"
    1517msgid "Estimated time: %s"
    1618msgstr "Odhadovaný čas: %s"
    1719
    18 #: ujobprogressview.sexecuted
     20#: jobprogressview.sexecuted
     21#, fuzzy
     22msgctxt "jobprogressview.sexecuted"
    1923msgid "Executed"
    2024msgstr "Vykonané"
    2125
    22 #: ujobprogressview.sfinished
     26#: jobprogressview.sfinished
     27#, fuzzy
     28msgctxt "jobprogressview.sfinished"
    2329msgid "Finished"
    2430msgstr "Dokončené"
    2531
    26 #: ujobprogressview.spleasewait
     32#: jobprogressview.spleasewait
     33#, fuzzy
     34msgctxt "jobprogressview.spleasewait"
    2735msgid "Please wait..."
    2836msgstr "Prosím čekejte..."
    2937
    30 #: ujobprogressview.sterminate
     38#: jobprogressview.sterminate
     39#, fuzzy
     40msgctxt "jobprogressview.sterminate"
    3141msgid "Termination"
    3242msgstr "Přerušení"
    3343
    34 #: ujobprogressview.stotalestimatedtime
     44#: jobprogressview.stotalestimatedtime
     45#, object-pascal-format, fuzzy
     46msgctxt "jobprogressview.stotalestimatedtime"
    3547msgid "Total estimated time: %s"
    3648msgstr "Celkový odhadovaný čas: %s"
  • branches/highdpi/Packages/Common/Languages/JobProgressView.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: ujobprogressview.sestimatedtime
     4#: jobprogressview.sestimatedtime
     5#, object-pascal-format
    56msgid "Estimated time: %s"
    67msgstr ""
    78
    8 #: ujobprogressview.sexecuted
     9#: jobprogressview.sexecuted
    910msgid "Executed"
    1011msgstr ""
    1112
    12 #: ujobprogressview.sfinished
     13#: jobprogressview.sfinished
    1314msgid "Finished"
    1415msgstr ""
    1516
    16 #: ujobprogressview.spleasewait
     17#: jobprogressview.spleasewait
    1718msgid "Please wait..."
    1819msgstr ""
    1920
    20 #: ujobprogressview.sterminate
     21#: jobprogressview.sterminate
    2122msgid "Termination"
    2223msgstr ""
    2324
    24 #: ujobprogressview.stotalestimatedtime
     25#: jobprogressview.stotalestimatedtime
     26#, object-pascal-format
    2527msgid "Total estimated time: %s"
    2628msgstr ""
  • branches/highdpi/Packages/Common/Languages/Languages.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: ulanguages.slangauto
     4#: languages.slangauto
    55msgid "Automatic"
    66msgstr ""
    77
    8 #: ulanguages.slang_aa
     8#: languages.slang_aa
    99msgid "Afar"
    1010msgstr ""
    1111
    12 #: ulanguages.slang_ab
     12#: languages.slang_ab
    1313msgid "Abkhazian"
    1414msgstr ""
    1515
    16 #: ulanguages.slang_ae
     16#: languages.slang_ae
    1717msgid "Avestan"
    1818msgstr ""
    1919
    20 #: ulanguages.slang_af
     20#: languages.slang_af
    2121msgid "Afrikaans"
    2222msgstr ""
    2323
    24 #: ulanguages.slang_ak
     24#: languages.slang_ak
    2525msgid "Akan"
    2626msgstr ""
    2727
    28 #: ulanguages.slang_am
     28#: languages.slang_am
    2929msgid "Amharic"
    3030msgstr ""
    3131
    32 #: ulanguages.slang_an
     32#: languages.slang_an
    3333msgid "Aragonese"
    3434msgstr ""
    3535
    36 #: ulanguages.slang_ar
     36#: languages.slang_ar
    3737msgid "Arabic"
    3838msgstr ""
    3939
    40 #: ulanguages.slang_as
     40#: languages.slang_as
    4141msgid "Assamese"
    4242msgstr ""
    4343
    44 #: ulanguages.slang_av
     44#: languages.slang_av
    4545msgid "Avaric"
    4646msgstr ""
    4747
    48 #: ulanguages.slang_ay
     48#: languages.slang_ay
    4949msgid "Aymara"
    5050msgstr ""
    5151
    52 #: ulanguages.slang_az
     52#: languages.slang_az
    5353msgid "Azerbaijani"
    5454msgstr ""
    5555
    56 #: ulanguages.slang_ba
     56#: languages.slang_ba
    5757msgid "Bashkir"
    5858msgstr ""
    5959
    60 #: ulanguages.slang_be
     60#: languages.slang_be
    6161msgid "Belarusian"
    6262msgstr ""
    6363
    64 #: ulanguages.slang_bg
     64#: languages.slang_bg
    6565msgid "Bulgarian"
    6666msgstr ""
    6767
    68 #: ulanguages.slang_bh
     68#: languages.slang_bh
    6969msgid "Bihari"
    7070msgstr ""
    7171
    72 #: ulanguages.slang_bi
     72#: languages.slang_bi
    7373msgid "Bislama"
    7474msgstr ""
    7575
    76 #: ulanguages.slang_bm
     76#: languages.slang_bm
    7777msgid "Bambara"
    7878msgstr ""
    7979
    80 #: ulanguages.slang_bn
     80#: languages.slang_bn
    8181msgid "Bengali"
    8282msgstr ""
    8383
    84 #: ulanguages.slang_bo
     84#: languages.slang_bo
    8585msgid "Tibetan"
    8686msgstr ""
    8787
    88 #: ulanguages.slang_br
     88#: languages.slang_br
    8989msgid "Breton"
    9090msgstr ""
    9191
    92 #: ulanguages.slang_bs
     92#: languages.slang_bs
    9393msgid "Bosnian"
    9494msgstr ""
    9595
    96 #: ulanguages.slang_ca
     96#: languages.slang_ca
    9797msgid "Catalan"
    9898msgstr ""
    9999
    100 #: ulanguages.slang_ce
     100#: languages.slang_ce
    101101msgid "Chechen"
    102102msgstr ""
    103103
    104 #: ulanguages.slang_ch
     104#: languages.slang_ch
    105105msgid "Chamorro"
    106106msgstr ""
    107107
    108 #: ulanguages.slang_co
     108#: languages.slang_co
    109109msgid "Corsican"
    110110msgstr ""
    111111
    112 #: ulanguages.slang_cr
     112#: languages.slang_cr
    113113msgid "Cree"
    114114msgstr ""
    115115
    116 #: ulanguages.slang_cs
     116#: languages.slang_cs
    117117msgid "Czech"
    118118msgstr ""
    119119
    120 #: ulanguages.slang_cv
     120#: languages.slang_cv
    121121msgid "Chuvash"
    122122msgstr ""
    123123
    124 #: ulanguages.slang_cy
     124#: languages.slang_cy
    125125msgid "Welsh"
    126126msgstr ""
    127127
    128 #: ulanguages.slang_da
     128#: languages.slang_da
    129129msgid "Danish"
    130130msgstr ""
    131131
    132 #: ulanguages.slang_de
     132#: languages.slang_de
    133133msgid "German"
    134134msgstr ""
    135135
    136 #: ulanguages.slang_de_at
     136#: languages.slang_de_at
    137137msgid "Austrian German"
    138138msgstr ""
    139139
    140 #: ulanguages.slang_de_ch
     140#: languages.slang_de_ch
    141141msgid "Swiss German"
    142142msgstr ""
    143143
    144 #: ulanguages.slang_dv
     144#: languages.slang_dv
    145145msgid "Divehi"
    146146msgstr ""
    147147
    148 #: ulanguages.slang_dz
     148#: languages.slang_dz
    149149msgid "Dzongkha"
    150150msgstr ""
    151151
    152 #: ulanguages.slang_ee
     152#: languages.slang_ee
    153153msgid "Ewe"
    154154msgstr ""
    155155
    156 #: ulanguages.slang_el
     156#: languages.slang_el
    157157msgid "Greek"
    158158msgstr ""
    159159
    160 #: ulanguages.slang_en
     160#: languages.slang_en
    161161msgid "English"
    162162msgstr ""
    163163
    164 #: ulanguages.slang_en_au
     164#: languages.slang_en_au
    165165msgid "Australian English"
    166166msgstr ""
    167167
    168 #: ulanguages.slang_en_ca
     168#: languages.slang_en_ca
    169169msgid "Canadian English"
    170170msgstr ""
    171171
    172 #: ulanguages.slang_en_gb
     172#: languages.slang_en_gb
    173173msgid "British English"
    174174msgstr ""
    175175
    176 #: ulanguages.slang_en_us
     176#: languages.slang_en_us
    177177msgid "American English"
    178178msgstr ""
    179179
    180 #: ulanguages.slang_eo
     180#: languages.slang_eo
    181181msgid "Esperanto"
    182182msgstr ""
    183183
    184 #: ulanguages.slang_es
     184#: languages.slang_es
    185185msgid "Spanish"
    186186msgstr ""
    187187
    188 #: ulanguages.slang_et
     188#: languages.slang_et
    189189msgid "Estonian"
    190190msgstr ""
    191191
    192 #: ulanguages.slang_eu
     192#: languages.slang_eu
    193193msgid "Basque"
    194194msgstr ""
    195195
    196 #: ulanguages.slang_fa
     196#: languages.slang_fa
    197197msgid "Persian"
    198198msgstr ""
    199199
    200 #: ulanguages.slang_ff
     200#: languages.slang_ff
    201201msgid "Fulah"
    202202msgstr ""
    203203
    204 #: ulanguages.slang_fi
     204#: languages.slang_fi
    205205msgid "Finnish"
    206206msgstr ""
    207207
    208 #: ulanguages.slang_fj
     208#: languages.slang_fj
    209209msgid "Fijian"
    210210msgstr ""
    211211
    212 #: ulanguages.slang_fo
     212#: languages.slang_fo
    213213msgid "Faroese"
    214214msgstr ""
    215215
    216 #: ulanguages.slang_fr
     216#: languages.slang_fr
    217217msgid "French"
    218218msgstr ""
    219219
    220 #: ulanguages.slang_fr_be
    221 msgctxt "ulanguages.slang_fr_be"
     220#: languages.slang_fr_be
     221msgctxt "languages.slang_fr_be"
    222222msgid "Walloon"
    223223msgstr ""
    224224
    225 #: ulanguages.slang_fy
     225#: languages.slang_fy
    226226msgid "Frisian"
    227227msgstr ""
    228228
    229 #: ulanguages.slang_ga
     229#: languages.slang_ga
    230230msgid "Irish"
    231231msgstr ""
    232232
    233 #: ulanguages.slang_gd
     233#: languages.slang_gd
    234234msgid "Gaelic"
    235235msgstr ""
    236236
    237 #: ulanguages.slang_gl
     237#: languages.slang_gl
    238238msgid "Gallegan"
    239239msgstr ""
    240240
    241 #: ulanguages.slang_gn
     241#: languages.slang_gn
    242242msgid "Guarani"
    243243msgstr ""
    244244
    245 #: ulanguages.slang_gu
     245#: languages.slang_gu
    246246msgid "Gujarati"
    247247msgstr ""
    248248
    249 #: ulanguages.slang_gv
     249#: languages.slang_gv
    250250msgid "Manx"
    251251msgstr ""
    252252
    253 #: ulanguages.slang_ha
     253#: languages.slang_ha
    254254msgid "Hausa"
    255255msgstr ""
    256256
    257 #: ulanguages.slang_he
     257#: languages.slang_he
    258258msgid "Hebrew"
    259259msgstr ""
    260260
    261 #: ulanguages.slang_hi
     261#: languages.slang_hi
    262262msgid "Hindi"
    263263msgstr ""
    264264
    265 #: ulanguages.slang_ho
     265#: languages.slang_ho
    266266msgid "Hiri Motu"
    267267msgstr ""
    268268
    269 #: ulanguages.slang_hr
     269#: languages.slang_hr
    270270msgid "Croatian"
    271271msgstr ""
    272272
    273 #: ulanguages.slang_ht
     273#: languages.slang_ht
    274274msgid "Haitian"
    275275msgstr ""
    276276
    277 #: ulanguages.slang_hu
     277#: languages.slang_hu
    278278msgid "Hungarian"
    279279msgstr ""
    280280
    281 #: ulanguages.slang_hy
     281#: languages.slang_hy
    282282msgid "Armenian"
    283283msgstr ""
    284284
    285 #: ulanguages.slang_hz
     285#: languages.slang_hz
    286286msgid "Herero"
    287287msgstr ""
    288288
    289 #: ulanguages.slang_ia
     289#: languages.slang_ia
    290290msgid "Interlingua"
    291291msgstr ""
    292292
    293 #: ulanguages.slang_id
     293#: languages.slang_id
    294294msgid "Indonesian"
    295295msgstr ""
    296296
    297 #: ulanguages.slang_ie
     297#: languages.slang_ie
    298298msgid "Interlingue"
    299299msgstr ""
    300300
    301 #: ulanguages.slang_ig
     301#: languages.slang_ig
    302302msgid "Igbo"
    303303msgstr ""
    304304
    305 #: ulanguages.slang_ii
     305#: languages.slang_ii
    306306msgid "Sichuan Yi"
    307307msgstr ""
    308308
    309 #: ulanguages.slang_ik
     309#: languages.slang_ik
    310310msgid "Inupiaq"
    311311msgstr ""
    312312
    313 #: ulanguages.slang_io
     313#: languages.slang_io
    314314msgid "Ido"
    315315msgstr ""
    316316
    317 #: ulanguages.slang_is
     317#: languages.slang_is
    318318msgid "Icelandic"
    319319msgstr ""
    320320
    321 #: ulanguages.slang_it
     321#: languages.slang_it
    322322msgid "Italian"
    323323msgstr ""
    324324
    325 #: ulanguages.slang_iu
     325#: languages.slang_iu
    326326msgid "Inuktitut"
    327327msgstr ""
    328328
    329 #: ulanguages.slang_ja
     329#: languages.slang_ja
    330330msgid "Japanese"
    331331msgstr ""
    332332
    333 #: ulanguages.slang_jv
     333#: languages.slang_jv
    334334msgid "Javanese"
    335335msgstr ""
    336336
    337 #: ulanguages.slang_ka
     337#: languages.slang_ka
    338338msgid "Georgian"
    339339msgstr ""
    340340
    341 #: ulanguages.slang_kg
     341#: languages.slang_kg
    342342msgid "Kongo"
    343343msgstr ""
    344344
    345 #: ulanguages.slang_ki
     345#: languages.slang_ki
    346346msgid "Kikuyu"
    347347msgstr ""
    348348
    349 #: ulanguages.slang_kj
     349#: languages.slang_kj
    350350msgid "Kuanyama"
    351351msgstr ""
    352352
    353 #: ulanguages.slang_kk
     353#: languages.slang_kk
    354354msgid "Kazakh"
    355355msgstr ""
    356356
    357 #: ulanguages.slang_kl
     357#: languages.slang_kl
    358358msgid "Greenlandic"
    359359msgstr ""
    360360
    361 #: ulanguages.slang_km
     361#: languages.slang_km
    362362msgid "Khmer"
    363363msgstr ""
    364364
    365 #: ulanguages.slang_kn
     365#: languages.slang_kn
    366366msgid "Kannada"
    367367msgstr ""
    368368
    369 #: ulanguages.slang_ko
     369#: languages.slang_ko
    370370msgid "Korean"
    371371msgstr ""
    372372
    373 #: ulanguages.slang_kr
     373#: languages.slang_kr
    374374msgid "Kanuri"
    375375msgstr ""
    376376
    377 #: ulanguages.slang_ks
     377#: languages.slang_ks
    378378msgid "Kashmiri"
    379379msgstr ""
    380380
    381 #: ulanguages.slang_ku
     381#: languages.slang_ku
    382382msgid "Kurdish"
    383383msgstr ""
    384384
    385 #: ulanguages.slang_kv
     385#: languages.slang_kv
    386386msgid "Komi"
    387387msgstr ""
    388388
    389 #: ulanguages.slang_kw
     389#: languages.slang_kw
    390390msgid "Cornish"
    391391msgstr ""
    392392
    393 #: ulanguages.slang_ky
     393#: languages.slang_ky
    394394msgid "Kirghiz"
    395395msgstr ""
    396396
    397 #: ulanguages.slang_la
     397#: languages.slang_la
    398398msgid "Latin"
    399399msgstr ""
    400400
    401 #: ulanguages.slang_lb
     401#: languages.slang_lb
    402402msgid "Luxembourgish"
    403403msgstr ""
    404404
    405 #: ulanguages.slang_lg
     405#: languages.slang_lg
    406406msgid "Ganda"
    407407msgstr ""
    408408
    409 #: ulanguages.slang_li
     409#: languages.slang_li
    410410msgid "Limburgan"
    411411msgstr ""
    412412
    413 #: ulanguages.slang_ln
     413#: languages.slang_ln
    414414msgid "Lingala"
    415415msgstr ""
    416416
    417 #: ulanguages.slang_lo
     417#: languages.slang_lo
    418418msgid "Lao"
    419419msgstr ""
    420420
    421 #: ulanguages.slang_lt
     421#: languages.slang_lt
    422422msgid "Lithuanian"
    423423msgstr ""
    424424
    425 #: ulanguages.slang_lu
     425#: languages.slang_lu
    426426msgid "Luba-Katanga"
    427427msgstr ""
    428428
    429 #: ulanguages.slang_lv
     429#: languages.slang_lv
    430430msgid "Latvian"
    431431msgstr ""
    432432
    433 #: ulanguages.slang_mg
     433#: languages.slang_mg
    434434msgid "Malagasy"
    435435msgstr ""
    436436
    437 #: ulanguages.slang_mh
     437#: languages.slang_mh
    438438msgid "Marshallese"
    439439msgstr ""
    440440
    441 #: ulanguages.slang_mi
     441#: languages.slang_mi
    442442msgid "Maori"
    443443msgstr ""
    444444
    445 #: ulanguages.slang_mk
     445#: languages.slang_mk
    446446msgid "Macedonian"
    447447msgstr ""
    448448
    449 #: ulanguages.slang_ml
     449#: languages.slang_ml
    450450msgid "Malayalam"
    451451msgstr ""
    452452
    453 #: ulanguages.slang_mn
     453#: languages.slang_mn
    454454msgid "Mongolian"
    455455msgstr ""
    456456
    457 #: ulanguages.slang_mo
     457#: languages.slang_mo
    458458msgid "Moldavian"
    459459msgstr ""
    460460
    461 #: ulanguages.slang_mr
     461#: languages.slang_mr
    462462msgid "Marathi"
    463463msgstr ""
    464464
    465 #: ulanguages.slang_ms
     465#: languages.slang_ms
    466466msgid "Malay"
    467467msgstr ""
    468468
    469 #: ulanguages.slang_mt
     469#: languages.slang_mt
    470470msgid "Maltese"
    471471msgstr ""
    472472
    473 #: ulanguages.slang_my
     473#: languages.slang_my
    474474msgid "Burmese"
    475475msgstr ""
    476476
    477 #: ulanguages.slang_na
     477#: languages.slang_na
    478478msgid "Nauru"
    479479msgstr ""
    480480
    481 #: ulanguages.slang_nb
     481#: languages.slang_nb
    482482msgid "Norwegian Bokmaal"
    483483msgstr ""
    484484
    485 #: ulanguages.slang_nd
     485#: languages.slang_nd
    486486msgid "Ndebele, North"
    487487msgstr ""
    488488
    489 #: ulanguages.slang_ne
     489#: languages.slang_ne
    490490msgid "Nepali"
    491491msgstr ""
    492492
    493 #: ulanguages.slang_ng
     493#: languages.slang_ng
    494494msgid "Ndonga"
    495495msgstr ""
    496496
    497 #: ulanguages.slang_nl
     497#: languages.slang_nl
    498498msgid "Dutch"
    499499msgstr ""
    500500
    501 #: ulanguages.slang_nl_be
     501#: languages.slang_nl_be
    502502msgid "Flemish"
    503503msgstr ""
    504504
    505 #: ulanguages.slang_nn
     505#: languages.slang_nn
    506506msgid "Norwegian Nynorsk"
    507507msgstr ""
    508508
    509 #: ulanguages.slang_no
     509#: languages.slang_no
    510510msgid "Norwegian"
    511511msgstr ""
    512512
    513 #: ulanguages.slang_nr
     513#: languages.slang_nr
    514514msgid "Ndebele, South"
    515515msgstr ""
    516516
    517 #: ulanguages.slang_nv
     517#: languages.slang_nv
    518518msgid "Navajo"
    519519msgstr ""
    520520
    521 #: ulanguages.slang_ny
     521#: languages.slang_ny
    522522msgid "Chichewa"
    523523msgstr ""
    524524
    525 #: ulanguages.slang_oc
     525#: languages.slang_oc
    526526msgid "Occitan"
    527527msgstr ""
    528528
    529 #: ulanguages.slang_oj
     529#: languages.slang_oj
    530530msgid "Ojibwa"
    531531msgstr ""
    532532
    533 #: ulanguages.slang_om
     533#: languages.slang_om
    534534msgid "Oromo"
    535535msgstr ""
    536536
    537 #: ulanguages.slang_or
     537#: languages.slang_or
    538538msgid "Oriya"
    539539msgstr ""
    540540
    541 #: ulanguages.slang_os
     541#: languages.slang_os
    542542msgid "Ossetian"
    543543msgstr ""
    544544
    545 #: ulanguages.slang_pa
     545#: languages.slang_pa
    546546msgid "Panjabi"
    547547msgstr ""
    548548
    549 #: ulanguages.slang_pi
     549#: languages.slang_pi
    550550msgid "Pali"
    551551msgstr ""
    552552
    553 #: ulanguages.slang_pl
     553#: languages.slang_pl
    554554msgid "Polish"
    555555msgstr ""
    556556
    557 #: ulanguages.slang_ps
     557#: languages.slang_ps
    558558msgid "Pushto"
    559559msgstr ""
    560560
    561 #: ulanguages.slang_pt
     561#: languages.slang_pt
    562562msgid "Portuguese"
    563563msgstr ""
    564564
    565 #: ulanguages.slang_pt_br
     565#: languages.slang_pt_br
    566566msgid "Brazilian Portuguese"
    567567msgstr ""
    568568
    569 #: ulanguages.slang_qu
     569#: languages.slang_qu
    570570msgid "Quechua"
    571571msgstr ""
    572572
    573 #: ulanguages.slang_rm
     573#: languages.slang_rm
    574574msgid "Raeto-Romance"
    575575msgstr ""
    576576
    577 #: ulanguages.slang_rn
     577#: languages.slang_rn
    578578msgid "Rundi"
    579579msgstr ""
    580580
    581 #: ulanguages.slang_ro
     581#: languages.slang_ro
    582582msgid "Romanian"
    583583msgstr ""
    584584
    585 #: ulanguages.slang_ru
     585#: languages.slang_ru
    586586msgid "Russian"
    587587msgstr ""
    588588
    589 #: ulanguages.slang_rw
     589#: languages.slang_rw
    590590msgid "Kinyarwanda"
    591591msgstr ""
    592592
    593 #: ulanguages.slang_sa
     593#: languages.slang_sa
    594594msgid "Sanskrit"
    595595msgstr ""
    596596
    597 #: ulanguages.slang_sc
     597#: languages.slang_sc
    598598msgid "Sardinian"
    599599msgstr ""
    600600
    601 #: ulanguages.slang_sd
     601#: languages.slang_sd
    602602msgid "Sindhi"
    603603msgstr ""
    604604
    605 #: ulanguages.slang_se
     605#: languages.slang_se
    606606msgid "Northern Sami"
    607607msgstr ""
    608608
    609 #: ulanguages.slang_sg
     609#: languages.slang_sg
    610610msgid "Sango"
    611611msgstr ""
    612612
    613 #: ulanguages.slang_si
     613#: languages.slang_si
    614614msgid "Sinhalese"
    615615msgstr ""
    616616
    617 #: ulanguages.slang_sk
     617#: languages.slang_sk
    618618msgid "Slovak"
    619619msgstr ""
    620620
    621 #: ulanguages.slang_sl
     621#: languages.slang_sl
    622622msgid "Slovenian"
    623623msgstr ""
    624624
    625 #: ulanguages.slang_sm
     625#: languages.slang_sm
    626626msgid "Samoan"
    627627msgstr ""
    628628
    629 #: ulanguages.slang_sn
     629#: languages.slang_sn
    630630msgid "Shona"
    631631msgstr ""
    632632
    633 #: ulanguages.slang_so
     633#: languages.slang_so
    634634msgid "Somali"
    635635msgstr ""
    636636
    637 #: ulanguages.slang_sq
     637#: languages.slang_sq
    638638msgid "Albanian"
    639639msgstr ""
    640640
    641 #: ulanguages.slang_sr
     641#: languages.slang_sr
    642642msgid "Serbian"
    643643msgstr ""
    644644
    645 #: ulanguages.slang_ss
     645#: languages.slang_ss
    646646msgid "Swati"
    647647msgstr ""
    648648
    649 #: ulanguages.slang_st
     649#: languages.slang_st
    650650msgid "Sotho, Southern"
    651651msgstr ""
    652652
    653 #: ulanguages.slang_su
     653#: languages.slang_su
    654654msgid "Sundanese"
    655655msgstr ""
    656656
    657 #: ulanguages.slang_sv
     657#: languages.slang_sv
    658658msgid "Swedish"
    659659msgstr ""
    660660
    661 #: ulanguages.slang_sw
     661#: languages.slang_sw
    662662msgid "Swahili"
    663663msgstr ""
    664664
    665 #: ulanguages.slang_ta
     665#: languages.slang_ta
    666666msgid "Tamil"
    667667msgstr ""
    668668
    669 #: ulanguages.slang_te
     669#: languages.slang_te
    670670msgid "Telugu"
    671671msgstr ""
    672672
    673 #: ulanguages.slang_tg
     673#: languages.slang_tg
    674674msgid "Tajik"
    675675msgstr ""
    676676
    677 #: ulanguages.slang_th
     677#: languages.slang_th
    678678msgid "Thai"
    679679msgstr ""
    680680
    681 #: ulanguages.slang_ti
     681#: languages.slang_ti
    682682msgid "Tigrinya"
    683683msgstr ""
    684684
    685 #: ulanguages.slang_tk
     685#: languages.slang_tk
    686686msgid "Turkmen"
    687687msgstr ""
    688688
    689 #: ulanguages.slang_tl
     689#: languages.slang_tl
    690690msgid "Tagalog"
    691691msgstr ""
    692692
    693 #: ulanguages.slang_tn
     693#: languages.slang_tn
    694694msgid "Tswana"
    695695msgstr ""
    696696
    697 #: ulanguages.slang_to
     697#: languages.slang_to
    698698msgid "Tonga"
    699699msgstr ""
    700700
    701 #: ulanguages.slang_tr
     701#: languages.slang_tr
    702702msgid "Turkish"
    703703msgstr ""
    704704
    705 #: ulanguages.slang_ts
     705#: languages.slang_ts
    706706msgid "Tsonga"
    707707msgstr ""
    708708
    709 #: ulanguages.slang_tt
     709#: languages.slang_tt
    710710msgid "Tatar"
    711711msgstr ""
    712712
    713 #: ulanguages.slang_tw
     713#: languages.slang_tw
    714714msgid "Twi"
    715715msgstr ""
    716716
    717 #: ulanguages.slang_ty
     717#: languages.slang_ty
    718718msgid "Tahitian"
    719719msgstr ""
    720720
    721 #: ulanguages.slang_ug
     721#: languages.slang_ug
    722722msgid "Uighur"
    723723msgstr ""
    724724
    725 #: ulanguages.slang_uk
     725#: languages.slang_uk
    726726msgid "Ukrainian"
    727727msgstr ""
    728728
    729 #: ulanguages.slang_ur
     729#: languages.slang_ur
    730730msgid "Urdu"
    731731msgstr ""
    732732
    733 #: ulanguages.slang_uz
     733#: languages.slang_uz
    734734msgid "Uzbek"
    735735msgstr ""
    736736
    737 #: ulanguages.slang_ve
     737#: languages.slang_ve
    738738msgid "Venda"
    739739msgstr ""
    740740
    741 #: ulanguages.slang_vi
     741#: languages.slang_vi
    742742msgid "Vietnamese"
    743743msgstr ""
    744744
    745 #: ulanguages.slang_vo
     745#: languages.slang_vo
    746746msgid "Volapuk"
    747747msgstr ""
    748748
    749 #: ulanguages.slang_wa
    750 msgctxt "ulanguages.slang_wa"
     749#: languages.slang_wa
     750msgctxt "languages.slang_wa"
    751751msgid "Walloon"
    752752msgstr ""
    753753
    754 #: ulanguages.slang_wo
     754#: languages.slang_wo
    755755msgid "Wolof"
    756756msgstr ""
    757757
    758 #: ulanguages.slang_xh
     758#: languages.slang_xh
    759759msgid "Xhosa"
    760760msgstr ""
    761761
    762 #: ulanguages.slang_yi
     762#: languages.slang_yi
    763763msgid "Yiddish"
    764764msgstr ""
    765765
    766 #: ulanguages.slang_yo
     766#: languages.slang_yo
    767767msgid "Yoruba"
    768768msgstr ""
    769769
    770 #: ulanguages.slang_za
     770#: languages.slang_za
    771771msgid "Zhuang"
    772772msgstr ""
    773773
    774 #: ulanguages.slang_zh
     774#: languages.slang_zh
    775775msgid "Chinese"
    776776msgstr ""
    777777
    778 #: ulanguages.slang_zu
     778#: languages.slang_zh_hans
     779msgid "Simplified Chinese"
     780msgstr ""
     781
     782#: languages.slang_zh_hant
     783msgid "Traditional Chinese"
     784msgstr ""
     785
     786#: languages.slang_zu
    779787msgid "Zulu"
    780788msgstr ""
  • branches/highdpi/Packages/Common/Languages/Pool.cs.po

    r462 r463  
    1010"Content-Transfer-Encoding: 8bit\n"
    1111
    12 #: upool.sobjectpoolempty
     12#: pool.sobjectpoolempty
     13#, fuzzy
     14msgctxt "pool.sobjectpoolempty"
    1315msgid "Object pool is empty"
    1416msgstr "Zásobník objektů je prázdný"
    1517
    16 #: upool.sreleaseerror
     18#: pool.sreleaseerror
     19#, fuzzy
     20msgctxt "pool.sreleaseerror"
    1721msgid "Unknown object for release from pool"
    1822msgstr "Neznýmý objekt pro uvolnění ze zásobníku"
  • branches/highdpi/Packages/Common/Languages/Pool.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: upool.sobjectpoolempty
     4#: pool.sobjectpoolempty
    55msgid "Object pool is empty"
    6 msgstr "Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8"
     6msgstr ""
    77
    8 #: upool.sreleaseerror
     8#: pool.sreleaseerror
    99msgid "Unknown object for release from pool"
    1010msgstr ""
  • branches/highdpi/Packages/Common/Languages/ResetableThread.cs.po

    r462 r463  
    1010"Content-Transfer-Encoding: 8bit\n"
    1111
    12 #: uresetablethread.swaiterror
     12#: resetablethread.swaiterror
     13#, fuzzy
     14msgctxt "resetablethread.swaiterror"
    1315msgid "WaitFor error"
    1416msgstr "Chyba WaitFor"
  • branches/highdpi/Packages/Common/Languages/ResetableThread.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: uresetablethread.swaiterror
     4#: resetablethread.swaiterror
    55msgid "WaitFor error"
    6 msgstr "Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8"
     6msgstr ""
    77
  • branches/highdpi/Packages/Common/Languages/ScaleDPI.cs.po

    r462 r463  
    1212"X-Generator: Poedit 1.8.9\n"
    1313
    14 #: uscaledpi.swrongdpi
     14#: scaledpi.swrongdpi
     15#, object-pascal-format, fuzzy
     16msgctxt "scaledpi.swrongdpi"
    1517msgid "Wrong DPI [%d,%d]"
    1618msgstr "Chybné DPI [%d,%d]"
  • branches/highdpi/Packages/Common/Languages/ScaleDPI.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: uscaledpi.swrongdpi
     4#: scaledpi.swrongdpi
     5#, object-pascal-format
    56msgid "Wrong DPI [%d,%d]"
    67msgstr ""
  • branches/highdpi/Packages/Common/Languages/Threading.cs.po

    r462 r463  
    1010"Content-Transfer-Encoding: 8bit\n"
    1111
    12 #: uthreading.scurrentthreadnotfound
     12#: threading.scurrentthreadnotfound
     13#, object-pascal-format, fuzzy
     14msgctxt "threading.scurrentthreadnotfound"
    1315msgid "Current thread ID %d not found in virtual thread list."
    1416msgstr "Aktuální vlákno ID %d nenalezeno v seznamu virtuálních vláken."
  • branches/highdpi/Packages/Common/Languages/Threading.pot

    r462 r463  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: uthreading.scurrentthreadnotfound
    5 #, fuzzy,badformat
     4#: threading.scurrentthreadnotfound
     5#, object-pascal-format
    66msgid "Current thread ID %d not found in virtual thread list."
    7 msgstr "Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8Content-Type: text/plain; charset=UTF-8"
     7msgstr ""
    88
  • branches/highdpi/Packages/Common/LastOpenedList.pas

    r462 r463  
    1 unit ULastOpenedList;
    2 
    3 {$mode delphi}
     1unit LastOpenedList;
    42
    53interface
    64
    75uses
    8   UDpiControls, Classes, SysUtils, Registry, URegistry, Menus, XMLConf, DOM;
     6  UDpiControls, Classes, SysUtils, Registry, RegistryEx, Menus, XMLConf, DOM;
    97
    108type
     
    8482destructor TLastOpenedList.Destroy;
    8583begin
    86   Items.Free;
     84  FreeAndNil(Items);
    8785  inherited;
    8886end;
     
    9492begin
    9593  if Assigned(MenuItem) then begin
    96     MenuItem.Clear;
     94    while MenuItem.Count > Items.Count do
     95      MenuItem.Delete(MenuItem.Count - 1);
     96    while MenuItem.Count < Items.Count do begin
     97      NewMenuItem := TDpiMenuItem.Create(MenuItem);
     98      MenuItem.Add(NewMenuItem);
     99    end;
    97100    for I := 0 to Items.Count - 1 do begin
    98       NewMenuItem := TDpiMenuItem.Create(MenuItem);
    99       NewMenuItem.Caption := Items[I];
    100       NewMenuItem.OnClick := ClickAction;
    101       MenuItem.Add(NewMenuItem);
     101      MenuItem.Items[I].Caption := Items[I];
     102      MenuItem.Items[I].OnClick := ClickAction;
    102103    end;
    103104  end;
     
    193194
    194195end.
    195 
  • branches/highdpi/Packages/Common/ListViewSort.pas

    r462 r463  
    1 unit UListViewSort;
     1unit ListViewSort;
    22
    33// Date: 2019-05-17
    4 
    5 {$mode delphi}
    64
    75interface
     
    97uses
    108  UDpiControls, {$IFDEF Windows}Windows, CommCtrl, LMessages, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils,
    11   Controls, DateUtils, Dialogs, fgl, Forms, Grids, StdCtrls, ExtCtrls,
    12   LclIntf, LclType, LResources;
     9  Controls, DateUtils, Dialogs, Forms, Grids, StdCtrls, ExtCtrls,
     10  LclIntf, LclType, LResources, Generics.Collections, Generics.Defaults;
    1311
    1412type
     
    1917  TCompareEvent = function (Item1, Item2: TObject): Integer of object;
    2018  TListFilterEvent = procedure (ListViewSort: TListViewSort) of object;
     19
     20  TObjects = TObjectList<TObject>;
    2121
    2222  { TListViewSort }
     
    2727    FOnCompareItem: TCompareEvent;
    2828    FOnFilter: TListFilterEvent;
    29     FOnCustomDraw: TLVCustomDrawItemEvent;
     29    FOnCustomDraw: TDpiLVCustomDrawItemEvent;
    3030    {$IFDEF Windows}FHeaderHandle: HWND;{$ENDIF}
    3131    FColumn: Integer;
     
    4242    procedure GetCheckBias(var XBias, YBias, BiasTop, BiasLeft: Integer;
    4343      const ListView: TDpiListView);
    44     procedure ListViewCustomDrawItem(Sender: TCustomListView;
     44    procedure ListViewCustomDrawItem(Sender: TDpiCustomListView;
    4545      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    4646    procedure ListViewClick(Sender: TObject);
     
    5252    {$ENDIF}
    5353  public
    54     List: TFPGObjectList<TObject>;
    55     Source: TFPGObjectList<TObject>;
     54    Source: TObjects;
     55    List: TObjects;
    5656    constructor Create(AOwner: TComponent); override;
    5757    destructor Destroy; override;
     
    6767    property OnFilter: TListFilterEvent read FOnFilter
    6868      write FOnFilter;
    69     property OnCustomDraw: TLVCustomDrawItemEvent read FOnCustomDraw
     69    property OnCustomDraw: TDpiLVCustomDrawItemEvent read FOnCustomDraw
    7070      write FOnCustomDraw;
    7171    property OnColumnWidthChanged: TNotifyEvent read FOnColumnWidthChanged
     
    8181    FOnChange: TNotifyEvent;
    8282    FStringGrid1: TDpiStringGrid;
     83    procedure DoOnChange;
    8384    procedure GridDoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    8485    procedure GridDoOnResize(Sender: TObject);
     
    9091    function TextEnteredColumn(Index: Integer): Boolean;
    9192    function GetColValue(Index: Integer): string;
     93    procedure Reset;
    9294    property StringGrid: TDpiStringGrid read FStringGrid1 write FStringGrid1;
    9395  published
     
    147149destructor TListViewEx.Destroy;
    148150begin
    149   inherited Destroy;
     151  inherited;
    150152end;
    151153
    152154{ TListViewFilter }
     155
     156procedure TListViewFilter.DoOnChange;
     157begin
     158  if Assigned(FOnChange) then FOnChange(Self);
     159end;
    153160
    154161procedure TListViewFilter.GridDoOnKeyUp(Sender: TObject; var Key: Word;
    155162  Shift: TShiftState);
    156163begin
    157   if Assigned(FOnChange) then
    158     FOnChange(Self);
     164  DoOnChange;
    159165end;
    160166
     
    229235end;
    230236
     237procedure TListViewFilter.Reset;
     238var
     239  I: Integer;
     240begin
     241  with StringGrid do
     242  for I := 0 to ColCount - 1 do
     243    Cells[I, 0] := '';
     244  DoOnChange;
     245end;
     246
    231247{ TListViewSort }
    232248
     
    322338  ListViewSortCompare: TCompareEvent;
    323339
    324 function ListViewCompare(const Item1, Item2: TObject): Integer;
     340function ListViewCompare(constref Item1, Item2: TObject): Integer;
    325341begin
    326342  Result := ListViewSortCompare(Item1, Item2);
     
    333349  ListViewSortCompare := Compare;
    334350  if (List.Count > 0) then
    335     List.Sort(ListViewCompare);
     351    List.Sort(TComparer<TObject>.Construct(ListViewCompare));
    336352end;
    337353
     
    339355begin
    340356  if Assigned(FOnFilter) then FOnFilter(Self)
    341   else if Assigned(Source) then
    342     List.Assign(Source) else
     357  else if Assigned(Source) then begin
    343358    List.Clear;
     359    List.AddRange(Source);
     360  end else List.Clear;
    344361  if ListView.Items.Count <> List.Count then
    345362    ListView.Items.Count := List.Count;
     
    396413begin
    397414  inherited;
    398   List := TFPGObjectList<TObject>.Create;
    399   List.FreeObjects := False;
     415  List := TObjects.Create;
     416  List.OwnsObjects := False;
    400417end;
    401418
    402419destructor TListViewSort.Destroy;
    403420begin
    404   List.Free;
     421  FreeAndNil(List);
    405422  inherited;
    406423end;
     
    491508end;
    492509
    493 procedure TListViewSort.ListViewCustomDrawItem(Sender: TCustomListView;
     510procedure TListViewSort.ListViewCustomDrawItem(Sender: TDpiCustomListView;
    494511  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    495512begin
  • branches/highdpi/Packages/Common/Memory.pas

    r462 r463  
    1 unit UMemory;
    2 
    3 {$mode Delphi}{$H+}
     1unit Memory;
    42
    53interface
     
    4442  end;
    4543
     44
    4645implementation
    4746
     
    5049procedure TPositionMemory.SetSize(AValue: Integer);
    5150begin
    52   inherited SetSize(AValue);
     51  inherited;
    5352  if FPosition > FSize then FPosition := FSize;
    5453end;
     
    107106begin
    108107  Size := 0;
    109   inherited Destroy;
     108  inherited;
    110109end;
    111110
     
    121120
    122121end.
    123 
  • branches/highdpi/Packages/Common/PersistentForm.pas

    r462 r463  
    1 unit UPersistentForm;
    2 
    3 {$mode delphi}
    4 
    5 // Date: 2020-11-26
     1unit PersistentForm;
    62
    73interface
    84
    95uses
    10   UDpiControls, Classes, SysUtils, Forms, URegistry, LCLIntf, Registry, Controls, ComCtrls,
     6  UDpiControls, Classes, SysUtils, Forms, RegistryEx, LCLIntf, Registry, Controls, ComCtrls,
    117  ExtCtrls, LCLType;
    128
     
    2319    procedure SaveControl(Control: TDpiControl);
    2420  public
    25     FormNormalSize: TRect;
    2621    FormRestoredSize: TRect;
    2722    FormWindowState: TWindowState;
     
    157152    RootKey := RegistryContext.RootKey;
    158153    OpenKey(RegistryContext.Key + '\Forms\' + Form.Name, True);
    159     // Normal size
    160     FormNormalSize.Left := ReadIntegerWithDefault('NormalLeft', FormNormalSize.Left);
    161     FormNormalSize.Top := ReadIntegerWithDefault('NormalTop', FormNormalSize.Top);
    162     FormNormalSize.Right := ReadIntegerWithDefault('NormalWidth', FormNormalSize.Right - FormNormalSize.Left)
    163       + FormNormalSize.Left;
    164     FormNormalSize.Bottom := ReadIntegerWithDefault('NormalHeight', FormNormalSize.Bottom - FormNormalSize.Top)
    165       + FormNormalSize.Top;
     154
    166155    // Restored size
    167156    FormRestoredSize.Left := ReadIntegerWithDefault('RestoredLeft', FormRestoredSize.Left);
     
    171160    FormRestoredSize.Bottom := ReadIntegerWithDefault('RestoredHeight', FormRestoredSize.Bottom - FormRestoredSize.Top)
    172161      + FormRestoredSize.Top;
     162
    173163    // Other state
    174164    FormWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(FormWindowState)));
     
    185175    RootKey := RegistryContext.RootKey;
    186176    OpenKey(RegistryContext.Key + '\Forms\' + Form.Name, True);
    187     // Normal state
    188     WriteInteger('NormalWidth', FormNormalSize.Right - FormNormalSize.Left);
    189     WriteInteger('NormalHeight', FormNormalSize.Bottom - FormNormalSize.Top);
    190     WriteInteger('NormalTop', FormNormalSize.Top);
    191     WriteInteger('NormalLeft', FormNormalSize.Left);
    192     // Restored state
     177
     178    // Restored size
    193179    WriteInteger('RestoredWidth', FormRestoredSize.Right - FormRestoredSize.Left);
    194180    WriteInteger('RestoredHeight', FormRestoredSize.Bottom - FormRestoredSize.Top);
    195181    WriteInteger('RestoredTop', FormRestoredSize.Top);
    196182    WriteInteger('RestoredLeft', FormRestoredSize.Left);
     183
    197184    // Other state
    198185    WriteInteger('WindowState', Integer(FormWindowState));
     
    259246begin
    260247  Self.Form := Form;
     248
    261249  // Set default
    262   FormNormalSize := Bounds((DpiScreen.Width - Form.Width) div 2,
    263     (DpiScreen.Height - Form.Height) div 2, Form.Width, Form.Height);
    264250  FormRestoredSize := Bounds((DpiScreen.Width - Form.Width) div 2,
    265251    (DpiScreen.Height - Form.Height) div 2, Form.Width, Form.Height);
     
    269255  LoadFromRegistry(RegistryContext);
    270256
    271   if not EqualRect(FormNormalSize, FormRestoredSize) or
    272     DefaultMaximized then begin
     257  if (FormWindowState = wsMaximized) or DefaultMaximized then begin
    273258    // Restore to maximized state
    274259    Form.WindowState := wsNormal;
     
    279264    // Restore to normal state
    280265    Form.WindowState := wsNormal;
    281     if FEntireVisible then FormNormalSize := CheckEntireVisible(FormNormalSize)
     266    if FEntireVisible then FormRestoredSize := CheckEntireVisible(FormRestoredSize)
    282267      else if FMinVisiblePart > 0 then
    283     FormNormalSize := CheckPartVisible(FormNormalSize, FMinVisiblePart);
    284     if not EqualRect(FormNormalSize, Form.BoundsRect) then
    285       Form.BoundsRect := FormNormalSize;
     268        FormRestoredSize := CheckPartVisible(FormRestoredSize, FMinVisiblePart);
     269    if not EqualRect(FormRestoredSize, Form.BoundsRect) then
     270      Form.BoundsRect := FormRestoredSize;
    286271  end;
    287272  if FormFullScreen then SetFullScreen(True);
     
    292277begin
    293278  Self.Form := Form;
    294   FormNormalSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height);
    295   if not FormFullScreen then
    296     FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
    297       Form.RestoredHeight);
    298   FormWindowState := Form.WindowState;
     279  if not FormFullScreen then begin
     280    FormWindowState := Form.WindowState;
     281    if FormWindowState = wsMaximized then begin
     282      FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
     283        Form.RestoredHeight);
     284    end else
     285    if FormWindowState = wsNormal then begin
     286      FormRestoredSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height);
     287    end;
     288  end;
    299289  SaveToRegistry(RegistryContext);
    300290  SaveControl(Form);
     
    314304  if State then begin
    315305    FormFullScreen := True;
    316     FormNormalSize := Form.BoundsRect;
    317     FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
    318       Form.RestoredHeight);
     306    if Form.WindowState = wsMaximized then begin
     307      FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
     308        Form.RestoredHeight);
     309    end else
     310    if Form.WindowState = wsNormal then begin
     311      FormRestoredSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height);
     312    end;
    319313    FormWindowState := Form.WindowState;
     314    Form.WindowState := wsMaximized;
     315    Form.WindowState := wsNormal;
    320316    ShowWindow(Form.Handle, SW_SHOWFULLSCREEN);
    321317    {$IFDEF WINDOWS}
     
    329325    ShowWindow(Form.Handle, SW_SHOWNORMAL);
    330326    if FormWindowState = wsNormal then begin
    331       Form.BoundsRect := FormNormalSize;
     327      Form.WindowState := wsNormal;
     328      Form.BoundsRect := FormRestoredSize;
    332329    end else
    333330    if FormWindowState = wsMaximized then begin
     
    339336
    340337end.
    341 
  • branches/highdpi/Packages/Common/PixelPointer.pas

    r462 r463  
    1 unit UPixelPointer;
     1unit PixelPointer;
    22
    33interface
     
    1515  private
    1616    procedure SetRGB(AValue: Cardinal);
    17     function GetRGB: Cardinal;   
     17    function GetRGB: Cardinal;
    1818  public
    1919    property RGB: Cardinal read GetRGB write SetRGB;
     
    4141    procedure SetXY(X, Y: Integer); inline; // Set pixel position relative to base
    4242    procedure SetX(X: Integer); inline; // Set horizontal pixel position relative to base
     43    class function Create(Bitmap: TDpiRasterImage; BaseX: Integer = 0; BaseY: Integer = 0): TPixelPointer; inline; static;
    4344  end;
    4445  PPixelPointer = ^TPixelPointer;
    4546
    46   function PixelPointer(Bitmap: TDpiRasterImage; BaseX: Integer = 0; BaseY: Integer = 0): TPixelPointer; inline;
    4747  function SwapRedBlue(Color: TColor32): TColor32;
    4848  procedure BitmapCopyRect(DstBitmap: TDpiRasterImage; DstRect: TRect; SrcBitmap: TDpiRasterImage; SrcPos: TPoint);
     
    6060  function ColorToColor32(Color: TColor): TColor32;
    6161
     62
    6263implementation
    6364
     
    119120  SrcBitmap.BeginUpdate(True);
    120121  DstBitmap.BeginUpdate(True);
    121   SrcPtr := PixelPointer(SrcBitmap, SrcPos.X, SrcPos.Y);
    122   DstPtr := PixelPointer(DstBitmap, DstRect.Left, DstRect.Top);
     122  SrcPtr := TPixelPointer.Create(SrcBitmap, SrcPos.X, SrcPos.Y);
     123  DstPtr := TPixelPointer.Create(DstBitmap, DstRect.Left, DstRect.Top);
    123124  for Y := 0 to DstRect.Height - 1 do begin
    124125    for X := 0 to DstRect.Width - 1 do begin
     
    138139var
    139140  SrcPtr, DstPtr: TPixelPointer;
    140   SubPtr: TPixelPointer;
    141141  X, Y: Integer;
    142142  XX, YY: Integer;
     
    150150  SrcBitmap.BeginUpdate(True);
    151151  DstBitmap.BeginUpdate(True);
    152   SrcPtr := PixelPointer(SrcBitmap, SrcRect.Left, SrcRect.Top);
    153   DstPtr := PixelPointer(DstBitmap, DstRect.Left, DstRect.Top);
     152  SrcPtr := TPixelPointer.Create(SrcBitmap, SrcRect.Left, SrcRect.Top);
     153  DstPtr := TPixelPointer.Create(DstBitmap, DstRect.Left, DstRect.Top);
    154154  for Y := 0 to DstRect.Height - 1 do begin
    155155    for X := 0 to DstRect.Width - 1 do begin
     
    181181begin
    182182  Bitmap.BeginUpdate(True);
    183   Ptr := PixelPointer(Bitmap);
     183  Ptr := TPixelPointer.Create(Bitmap);
    184184  for Y := 0 to Bitmap.Height - 1 do begin
    185185    for X := 0 to Bitmap.Width - 1 do begin
     
    198198begin
    199199  Bitmap.BeginUpdate(True);
    200   Ptr := PixelPointer(Bitmap, Rect.Left, Rect.Top);
     200  Ptr := TPixelPointer.Create(Bitmap, Rect.Left, Rect.Top);
    201201  for Y := 0 to Rect.Height - 1 do begin
    202202    for X := 0 to Rect.Width - 1 do begin
     
    215215begin
    216216  Bitmap.BeginUpdate(True);
    217   Ptr := PixelPointer(Bitmap);
     217  Ptr := TPixelPointer.Create(Bitmap);
    218218  for Y := 0 to Bitmap.Height - 1 do begin
    219219    for X := 0 to Bitmap.Width - 1 do begin
     
    232232begin
    233233  Bitmap.BeginUpdate(True);
    234   Ptr := PixelPointer(Bitmap);
     234  Ptr := TPixelPointer.Create(Bitmap);
    235235  for Y := 0 to Bitmap.Height - 1 do begin
    236236    for X := 0 to Bitmap.Width - 1 do begin
     
    252252  Pixel := Color32ToPixel32(Color);
    253253  Bitmap.BeginUpdate(True);
    254   Ptr := PixelPointer(Bitmap);
     254  Ptr := TPixelPointer.Create(Bitmap);
    255255  for Y := 0 to Bitmap.Height - 1 do begin
    256256    for X := 0 to Bitmap.Width - 1 do begin
     
    295295end;
    296296
    297 function PixelPointer(Bitmap: TDpiRasterImage; BaseX: Integer;
     297class function TPixelPointer.Create(Bitmap: TDpiRasterImage; BaseX: Integer;
    298298  BaseY: Integer): TPixelPointer;
    299299begin
     
    310310end;
    311311
    312 
    313312end.
    314 
  • branches/highdpi/Packages/Common/Pool.pas

    r462 r463  
    1 unit UPool;
    2 
    3 {$mode Delphi}{$H+}
     1unit Pool;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, syncobjs, fgl, UThreading;
     6  Classes, SysUtils, syncobjs, Generics.Collections, Threading;
    97
    108type
     
    2220    function NewItemObject: TObject; virtual;
    2321  public
    24     Items: TFPGObjectList<TObject>;
    25     FreeItems: TFPGObjectList<TObject>;
     22    Items: TObjectList<TObject>;
     23    FreeItems: TObjectList<TObject>;
    2624    function Acquire: TObject; virtual;
    2725    procedure Release(Item: TObject); virtual;
     
    108106constructor TThreadedPool.Create;
    109107begin
    110   inherited Create;
     108  inherited;
    111109  Lock := TCriticalSection.Create;
    112110end;
     
    116114  TotalCount := 0;
    117115  Lock.Free;
    118   inherited Destroy;
     116  inherited;
    119117end;
    120118
     
    185183begin
    186184  inherited;
    187   Items := TFPGObjectList<TObject>.Create;
    188   FreeItems := TFPGObjectList<TObject>.Create;
    189   FreeItems.FreeObjects := False;
     185  Items := TObjectList<TObject>.Create;
     186  FreeItems := TObjectList<TObject>.Create;
     187  FreeItems.OwnsObjects := False;
    190188  FReleaseEvent := TEvent.Create(nil, False, False, '');
    191189end;
     
    201199
    202200end.
    203 
  • branches/highdpi/Packages/Common/PrefixMultiplier.pas

    r462 r463  
    1 unit UPrefixMultiplier;
     1unit PrefixMultiplier;
    22
    33// Date: 2010-06-01
    4 
    5 {$mode delphi}
    64
    75interface
     
    3331  (
    3432    (ShortText: 'y'; FullText: 'yocto'; Value: 1e-24),
    35           (ShortText: 'z'; FullText: 'zepto'; Value: 1e-21),
     33      (ShortText: 'z'; FullText: 'zepto'; Value: 1e-21),
    3634    (ShortText: 'a'; FullText: 'atto'; Value: 1e-18),
    3735    (ShortText: 'f'; FullText: 'femto'; Value: 1e-15),
     
    5452  (
    5553    (ShortText: 'ys'; FullText: 'yocto'; Value: 1e-24),
    56           (ShortText: 'zs'; FullText: 'zepto'; Value: 1e-21),
     54      (ShortText: 'zs'; FullText: 'zepto'; Value: 1e-21),
    5755    (ShortText: 'as'; FullText: 'atto'; Value: 1e-18),
    5856    (ShortText: 'fs'; FullText: 'femto'; Value: 1e-15),
     
    126124
    127125end.
    128 
  • branches/highdpi/Packages/Common/RegistryEx.pas

    r462 r463  
    1 unit URegistry;
    2 
    3 {$MODE delphi}
     1unit RegistryEx;
    42
    53interface
     
    4846    HKEY_CURRENT_CONFIG, HKEY_DYN_DATA);
    4947
     48
    5049implementation
    51 
    5250
    5351{ TRegistryContext }
     
    132130function TRegistryEx.OpenKey(const Key: string; CanCreate: Boolean): Boolean;
    133131begin
    134   {$IFDEF Linux}
     132  {$IFDEF UNIX}
    135133  //CloseKey;
    136134  {$ENDIF}
     
    140138function TRegistryEx.GetCurrentContext: TRegistryContext;
    141139begin
    142   Result.Key := CurrentPath;
     140  Result.Key := String(CurrentPath);
    143141  Result.RootKey := RootKey;
    144142end;
  • branches/highdpi/Packages/Common/ResetableThread.pas

    r462 r463  
    1 unit UResetableThread;
    2 
    3 {$mode Delphi}{$H+}
     1unit ResetableThread;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, syncobjs, UThreading, UPool;
     6  Classes, SysUtils, syncobjs, Threading, Pool;
    97
    108type
     
    167165  FreeAndNil(FStopEvent);
    168166  FreeAndNil(FLock);
    169   inherited Destroy;
     167  inherited;
    170168end;
    171169
     
    286284constructor TThreadPool.Create;
    287285begin
    288   inherited Create;
     286  inherited;
    289287end;
    290288
     
    293291  TotalCount := 0;
    294292  WaitForEmpty;
    295   inherited Destroy;
     293  inherited;
    296294end;
    297295
  • branches/highdpi/Packages/Common/ScaleDPI.pas

    r462 r463  
    1 unit UScaleDPI;
     1unit ScaleDPI;
    22
    33{ See: http://wiki.lazarus.freepascal.org/High_DPI }
    44
    5 {$mode delphi}{$H+}
    6 
    75interface
    86
    97uses
    10   UDpiControls, Classes, Forms, Graphics, Controls, ComCtrls, LCLType, SysUtils, StdCtrls,
    11   Contnrs;
     8  UDpiControls, Classes, Forms, Graphics, Controls, ComCtrls, LCLType, SysUtils,
     9  Generics.Collections;
    1210
    1311type
     12  TControlDimensions = class;
    1413
    1514  { TControlDimension }
     
    1817    BoundsRect: TRect;
    1918    FontHeight: Integer;
    20     Controls: TObjectList; // TList<TControlDimension>
     19    Controls: TControlDimensions;
    2120    // Class specifics
    2221    ButtonSize: TPoint; // TToolBar
     
    2625    constructor Create;
    2726    destructor Destroy; override;
     27  end;
     28
     29  TControlDimensions = class(TObjectList<TControlDimension>)
    2830  end;
    2931
     
    7375constructor TControlDimension.Create;
    7476begin
    75   Controls := TObjectList.Create;
     77  Controls := TControlDimensions.Create;
    7678end;
    7779
     
    7981begin
    8082  FreeAndNil(Controls);
    81   inherited Destroy;
     83  inherited;
    8284end;
    8385
     
    212214  TempBmp: TDpiBitmap;
    213215  Temp: array of TDpiBitmap;
    214   NewWidth, NewHeight: integer;
     216  NewWidth: Integer;
     217  NewHeight: Integer;
    215218  I: Integer;
    216219begin
    217220  ImgList.BeginUpdate;
    218   NewWidth := ScaleX(ImgList.Width, FromDPI.X);
    219   NewHeight := ScaleY(ImgList.Height, FromDPI.Y);
    220 
    221   SetLength(Temp, ImgList.Count);
    222   for I := 0 to ImgList.Count - 1 do
    223   begin
    224     TempBmp := TDpiBitmap.Create;
    225     TempBmp.PixelFormat := pf32bit;
    226     ImgList.GetBitmap(I, TempBmp);
    227     Temp[I] := TDpiBitmap.Create;
    228     Temp[I].SetSize(NewWidth, NewHeight);
    229     Temp[I].PixelFormat := pf32bit;
    230     Temp[I].TransparentColor := TempBmp.TransparentColor;
    231     //Temp[I].TransparentMode := TempBmp.TransparentMode;
    232     Temp[I].Transparent := True;
    233     Temp[I].Canvas.Brush.Style := bsSolid;
    234     Temp[I].Canvas.Brush.Color := Temp[I].TransparentColor;
    235     Temp[I].Canvas.FillRect(0, 0, Temp[I].Width, Temp[I].Height);
    236 
    237     if (Temp[I].Width = 0) or (Temp[I].Height = 0) then Continue;
    238     Temp[I].Canvas.StretchDraw(Rect(0, 0, Temp[I].Width, Temp[I].Height), TempBmp);
    239     TempBmp.Free;
    240   end;
    241 
    242   ImgList.Clear;
    243   ImgList.Width := NewWidth;
    244   ImgList.Height := NewHeight;
    245 
    246   for I := 0 to High(Temp) do
    247   begin
    248     ImgList.Add(Temp[I], nil);
    249     Temp[i].Free;
    250   end;
    251   ImgList.EndUpdate;
     221  try
     222    NewWidth := ScaleX(ImgList.Width, FromDPI.X);
     223    NewHeight := ScaleY(ImgList.Height, FromDPI.Y);
     224
     225    Temp := nil;
     226    SetLength(Temp, ImgList.Count);
     227    for I := 0 to ImgList.Count - 1 do
     228    begin
     229      TempBmp := TDpiBitmap.Create;
     230      try
     231        TempBmp.PixelFormat := pf32bit;
     232        ImgList.GetBitmap(I, TempBmp);
     233        Temp[I] := TDpiBitmap.Create;
     234        Temp[I].SetSize(NewWidth, NewHeight);
     235        {$IFDEF UNIX}
     236        Temp[I].PixelFormat := pf24bit;
     237        {$ELSE}
     238        Temp[I].PixelFormat := pf32bit;
     239        {$ENDIF}
     240        Temp[I].TransparentColor := TempBmp.TransparentColor;
     241        //Temp[I].TransparentMode := TempBmp.TransparentMode;
     242        Temp[I].Transparent := True;
     243        Temp[I].Canvas.Brush.Style := bsSolid;
     244        Temp[I].Canvas.Brush.Color := Temp[I].TransparentColor;
     245        Temp[I].Canvas.FillRect(0, 0, Temp[I].Width, Temp[I].Height);
     246
     247        if (Temp[I].Width = 0) or (Temp[I].Height = 0) then Continue;
     248        Temp[I].Canvas.StretchDraw(Rect(0, 0, Temp[I].Width, Temp[I].Height), TempBmp);
     249      finally
     250        TempBmp.Free;
     251      end;
     252    end;
     253
     254    ImgList.Clear;
     255    ImgList.Width := NewWidth;
     256    ImgList.Height := NewHeight;
     257
     258    for I := 0 to High(Temp) do
     259    begin
     260      ImgList.Add(Temp[I], nil);
     261      Temp[i].Free;
     262    end;
     263  finally
     264    ImgList.EndUpdate;
     265  end;
    252266end;
    253267
     
    303317
    304318  //if Control is TMemo then Exit;
    305   //if Control is TDpiForm then
     319  //if Control is TForm then
    306320  //  Control.DisableAutoSizing;
    307321  with Control do begin
     
    327341  with TDpiCoolBar(Control) do begin
    328342    BeginUpdate;
    329     for I := 0 to Bands.Count - 1 do
    330       with Bands[I] do begin
    331         MinWidth := ScaleX(MinWidth, FromDPI.X);
    332         MinHeight := ScaleY(MinHeight, FromDPI.Y);
    333         // Workaround to bad band width auto sizing
    334         //Width := ScaleX(Width, FromDPI.X);
    335         Width := ScaleX(Control.Width + 28, FromDPI.X);
    336         //Control.Invalidate;
     343    try
     344      for I := 0 to Bands.Count - 1 do
     345        with Bands[I] do begin
     346          MinWidth := ScaleX(MinWidth, FromDPI.X);
     347          MinHeight := ScaleY(MinHeight, FromDPI.Y);
     348          // Workaround to bad band width auto sizing
     349          //Width := ScaleX(Width, FromDPI.X);
     350          Width := ScaleX(Control.Width + 28, FromDPI.X);
     351          //Control.Invalidate;
     352        end;
     353      // Workaround for bad autosizing of coolbar
     354      if AutoSize then begin
     355        AutoSize := False;
     356        Height := ScaleY(Height, FromDPI.Y);
     357        AutoSize := True;
    337358      end;
    338     // Workaround for bad autosizing of coolbar
    339     if AutoSize then begin
    340       AutoSize := False;
    341       Height := ScaleY(Height, FromDPI.Y);
    342       AutoSize := True;
    343     end;
    344     EndUpdate;
     359    finally
     360      EndUpdate;
     361    end;
    345362  end;
    346363
     
    353370  end;
    354371
    355   //if Control is TDpiForm then
     372  //if Control is TForm then
    356373  //  Control.EnableAutoSizing;
    357374end;
  • branches/highdpi/Packages/Common/StopWatch.pas

    r405 r463  
    55
    66uses
    7   {$IFDEF Windows}Windows,{$ENDIF}
     7  {$IFDEF WINDOWS}Windows,{$ENDIF}
    88  SysUtils, DateUtils;
    99
     
    3232  end;
    3333
     34
    3435implementation
    3536
     
    4041  fIsRunning := False;
    4142
    42   {$IFDEF Windows}
     43  {$IFDEF WINDOWS}
    4344  fIsHighResolution := QueryPerformanceFrequency(fFrequency) ;
    4445  {$ELSE}
     
    9293
    9394end.
     95
  • branches/highdpi/Packages/Common/StringTable.pas

    r462 r463  
    1 unit UStringTable;
    2 
    3 {$mode objfpc}{$H+}
     1unit StringTable;
    42
    53interface
     
    7169end;
    7270
    73 
    7471end.
    75 
  • branches/highdpi/Packages/Common/SyncCounter.pas

    r462 r463  
    1 unit USyncCounter;
    2 
    3 {$mode delphi}
     1unit SyncCounter;
    42
    53interface
     
    2523    procedure Assign(Source: TSyncCounter);
    2624  end;
     25
    2726
    2827implementation
     
    6968begin
    7069  Lock.Free;
    71   inherited Destroy;
     70  inherited;
    7271end;
    7372
     
    7978
    8079end.
    81 
  • branches/highdpi/Packages/Common/Theme.pas

    r462 r463  
    1 unit UTheme;
     1unit Theme;
    22
    33interface
     
    55uses
    66  UDpiControls, Classes, SysUtils, Graphics, ComCtrls, Controls, ExtCtrls, Menus, StdCtrls,
    7   Spin, Forms, Contnrs, Grids;
     7  Spin, Forms, Generics.Collections, Grids;
    88
    99type
     
    1919  { TThemes }
    2020
    21   TThemes = class(TObjectList)
     21  TThemes = class(TObjectList<TTheme>)
    2222    function AddNew(Name: string): TTheme;
    2323    function FindByName(Name: string): TTheme;
     
    4242  end;
    4343
     44const
     45  ThemeNameSystem = 'System';
     46  ThemeNameLight = 'Light';
     47  ThemeNameDark = 'Dark';
     48
    4449procedure Register;
     50
    4551
    4652implementation
     
    7480procedure TThemes.LoadToStrings(Strings: TStrings);
    7581var
    76   Theme: TTheme;
     82  I: Integer;
    7783begin
    78   Strings.Clear;
    79   for Theme in Self do
    80     Strings.AddObject(Theme.Name, Theme);
     84  Strings.BeginUpdate;
     85  try
     86    while Strings.Count < Count do Strings.Add('');
     87    while Strings.Count > Count do Strings.Delete(Strings.Count - 1);
     88    for I := 0 to Count - 1 do begin
     89      Strings[I] := Items[I].Name;
     90      Strings.Objects[I] := Items[I];
     91    end;
     92  finally
     93    Strings.EndUpdate;
     94  end;
    8195end;
    8296
     
    97111  inherited;
    98112  Themes := TThemes.Create;
    99   with Themes.AddNew('System') do begin
     113  with Themes.AddNew(ThemeNameSystem) do begin
    100114    ColorWindow := clWindow;
    101115    ColorWindowText := clWindowText;
     
    105119  end;
    106120  Theme := TTheme(Themes.First);
    107   with Themes.AddNew('Dark') do begin
     121  with Themes.AddNew(ThemeNameDark) do begin
    108122    ColorWindow := RGBToColor($20, $20, $20);
    109123    ColorWindowText := clWhite;
     
    112126    ColorControlSelected := RGBToColor(96, 125, 155);
    113127  end;
    114   with Themes.AddNew('Light') do begin
     128  with Themes.AddNew(ThemeNameLight) do begin
    115129    ColorWindow := clWhite;
    116130    ColorWindowText := clBlack;
     
    123137destructor TThemeManager.Destroy;
    124138begin
    125   Themes.Free;
    126   inherited Destroy;
     139  FreeAndNil(Themes);
     140  inherited;
    127141end;
    128142
     
    167181procedure TThemeManager.UseTheme(Form: TDpiForm);
    168182begin
    169   if not Used and (FTheme.Name = 'System') then Exit;
     183  if not Used and (FTheme.Name = ThemeNameSystem) then Exit;
    170184  ApplyTheme(Form);
    171185  Used := True;
    172186end;
    173187
     188end.
    174189
    175 end.
  • branches/highdpi/Packages/Common/Threading.pas

    r462 r463  
    1 unit UThreading;
    2 
    3 {$mode delphi}
     1unit Threading;
    42
    53interface
    64
    75uses
    8   UDpiControls, Classes, SysUtils, Forms, Contnrs, SyncObjs;
     6  UDpiControls, Classes, SysUtils, Forms, Generics.Collections, SyncObjs;
    97
    108type
    119  TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;
    1210  TMethodCall = procedure of object;
    13 
    1411
    1512  { TVirtualThread }
     
    2219    function GetSuspended: Boolean; virtual; abstract;
    2320    function GetTerminated: Boolean; virtual; abstract;
    24     function GetThreadId: Integer; virtual; abstract;
     21    function GetThreadId: TThreadID; virtual; abstract;
    2522    procedure SetFreeOnTerminate(const AValue: Boolean); virtual; abstract;
    2623    procedure SetPriority(const AValue: TThreadPriority); virtual; abstract;
     
    4239    property Terminated: Boolean read GetTerminated write SetTerminated;
    4340    property Finished: Boolean read GetFinished;
    44     property ThreadId: Integer read GetThreadId;
     41    property ThreadId: TThreadID read GetThreadId;
    4542  end;
    4643
     
    6865    function GetSuspended: Boolean; override;
    6966    function GetTerminated: Boolean; override;
    70     function GetThreadId: Integer; override;
     67    function GetThreadId: TThreadID; override;
    7168    procedure SetFreeOnTerminate(const AValue: Boolean); override;
    7269    procedure SetPriority(const AValue: TThreadPriority); override;
     
    10299  { TThreadList }
    103100
    104   TThreadList = class(TObjectList)
    105     function FindById(Id: Integer): TVirtualThread;
     101  TThreadList = class(TObjectList<TVirtualThread>)
     102    function FindById(Id: TThreadID): TVirtualThread;
    106103    constructor Create; virtual;
    107104  end;
     
    164161  if MainThreadID = ThreadID then Method
    165162  else begin
    166     Thread := ThreadList.FindById(ThreadID);
     163    try
     164      ThreadListLock.Acquire;
     165      Thread := ThreadList.FindById(ThreadID);
     166    finally
     167      ThreadListLock.Release;
     168    end;
    167169    if Assigned(Thread) then begin
    168170      Thread.Synchronize(Method);
     
    173175{ TThreadList }
    174176
    175 function TThreadList.FindById(Id: Integer): TVirtualThread;
     177function TThreadList.FindById(Id: TThreadID): TVirtualThread;
    176178var
    177179  I: Integer;
    178180begin
    179181  I := 0;
    180   while (I < ThreadList.Count) and (TVirtualThread(ThreadList[I]).ThreadID <> Id) do
     182  while (I < ThreadList.Count) and (ThreadList[I].ThreadID <> Id) do
    181183    Inc(I);
    182   if I < ThreadList.Count then Result := TVirtualThread(ThreadList[I])
     184  if I < ThreadList.Count then Result := ThreadList[I]
    183185    else Result := nil;
    184186end;
     
    233235end;
    234236
    235 function TListedThread.GetThreadId: Integer;
     237function TListedThread.GetThreadId: TThreadID;
    236238begin
    237239  Result := FThread.ThreadID;
     
    290292  end;
    291293  FThread.Free;
    292   inherited Destroy;
     294  inherited;
    293295end;
    294296
     
    364366
    365367end.
    366 
  • branches/highdpi/Packages/Common/Translator.pas

    r462 r463  
    1 unit UTranslator;
    2 
    3 {$mode Delphi}{$H+}
     1unit Translator;
    42
    53interface
    64
    75uses
    8   UDpiControls, Classes, SysUtils, Forms, ExtCtrls, Controls, Contnrs, LazFileUtils, LazUTF8,
    9   Translations, TypInfo, Dialogs, FileUtil, LCLProc, ULanguages, LCLType,
    10   LCLVersion;
     6  UDpiControls, Classes, SysUtils, Forms, ExtCtrls, Controls, LazFileUtils, LazUTF8,
     7  Translations, TypInfo, Dialogs, FileUtil, LCLProc, Languages, LCLType,
     8  LCLVersion, Generics.Collections;
    119
    1210type
    1311  THandleStringEvent = function (AValue: string): string of object;
     12
     13  TPoFiles = class(TObjectList<TPOFile>)
     14  end;
    1415
    1516  { TComponentExcludes }
     
    2425  { TComponentExcludesList }
    2526
    26   TComponentExcludesList = class(TObjectList)
     27  TComponentExcludesList = class(TObjectList<TComponentExcludes>)
    2728    function FindByClassType(AClassType: TClass): TComponentExcludes;
    2829    procedure DumpToStrings(Strings: TStrings);
     
    3637    FOnAutomaticLanguage: THandleStringEvent;
    3738    FOnTranslate: TNotifyEvent;
    38     FPOFilesFolder: string;
    39     FPOFiles: TObjectList; // TObjectList<TPOFile>;
     39    FPoFilesFolder: string;
     40    FPoFiles: TPoFiles;
    4041    function GetLocale: string;
    4142    function GetLocaleShort: string;
     
    5051  public
    5152    ComponentExcludes: TComponentExcludesList;
    52     Languages: TLanguageList;
     53    Languages: TLanguages;
    5354    procedure Translate;
    54     procedure LanguageListToStrings(Strings: TStrings);
     55    procedure LanguageListToStrings(Strings: TStrings; WithCode: Boolean = True);
    5556    procedure TranslateResourceStrings(PoFileName: string);
    5657    procedure TranslateUnitResourceStrings(UnitName: string; PoFileName: string);
     
    6364    destructor Destroy; override;
    6465  published
    65     property POFilesFolder: string read FPOFilesFolder write SetPOFilesFolder;
     66    property POFilesFolder: string read FPoFilesFolder write SetPOFilesFolder;
    6667    property Language: TLanguage read FLanguage write SetLanguage;
    6768    property OnTranslate: TNotifyEvent read FOnTranslate write FOnTranslate;
     
    7172
    7273procedure Register;
     74
    7375
    7476implementation
     
    117119destructor TComponentExcludes.Destroy;
    118120begin
    119   PropertyExcludes.Free;
    120   inherited Destroy;
     121  FreeAndNil(PropertyExcludes);
     122  inherited;
    121123end;
    122124
     
    128130  I, J: Integer;
    129131  Po: TPoFile;
    130   Item: TPOFileItem;
     132  Item: TPoFileItem;
    131133begin
    132134  TranslateComponentRecursive(DpiApplication);
     
    134136  // Merge files to single translation file
    135137  try
    136     Po := TPOFile.Create;
    137     for I := 0 to FPOFiles.Count - 1 do
     138    Po := TPoFile.Create;
     139    for I := 0 to FPoFiles.Count - 1 do
    138140    with TPoFile(FPoFiles[I]) do
    139141      for J := 0 to Items.Count - 1 do
     
    162164  SearchMask: string;
    163165begin
    164   FPOFiles.Clear;
     166  FPoFiles.Clear;
    165167  if Assigned(FLanguage) then
    166168  try
    167169    LocaleShort := GetLocaleShort;
    168     //ShowMessage(ExtractFileDir(DpiApplication.ExeName) +
     170    //ShowMessage(ExtractFileDir(Application.ExeName) +
    169171    //  DirectorySeparator + 'Languages' + ' ' + '*.' + LocaleShort + '.po');
    170172    SearchMask := '*';
     
    177179      if FileExists(FileName) and (
    178180      ((LocaleShort = '') and (Pos('.', FileName) = Pos('.po', FileName))) or
    179       (LocaleShort <> '')) then FPOFiles.Add(TPOFile.Create(FileName));
     181      (LocaleShort <> '')) then FPoFiles.Add(TPOFile.Create(FileName));
    180182    end;
    181183  finally
     
    281283var
    282284  Item: TClass;
    283 
    284285  Excludes: TComponentExcludes;
    285286begin
     
    287288  Item := Component.ClassType;
    288289  while Assigned(Item) do begin
    289     //ShowMessage(Component.Name + ', ' + Component.ClassName + ', ' + Item.ClassName + ', ' + PropertyName);
    290290    Excludes := ComponentExcludes.FindByClassType(Item.ClassType);
    291291    if Assigned(Excludes) then begin
     
    301301function TTranslator.GetLangFileDir: string;
    302302begin
    303   Result := FPOFilesFolder;
     303  Result := FPoFilesFolder;
    304304  if Copy(Result, 1, 1) <> DirectorySeparator then
    305305    Result := ExtractFileDir(DpiApplication.ExeName) +
     
    307307end;
    308308
    309 procedure TTranslator.LanguageListToStrings(Strings: TStrings);
     309procedure TTranslator.LanguageListToStrings(Strings: TStrings; WithCode: Boolean = True);
    310310var
    311311  I: Integer;
     
    313313begin
    314314  with Strings do begin
    315     Clear;
    316     for I := 0 to Languages.Count - 1 do
    317     with TLanguage(Languages[I]) do
    318       if Available then begin
    319         ItemName := Name;
    320         if Code <> '' then ItemName := ItemName + ' (' + Code + ')';
    321         AddObject(ItemName, Languages[I]);
    322       end;
     315    BeginUpdate;
     316    try
     317      Clear;
     318      for I := 0 to Languages.Count - 1 do
     319      with Languages[I] do
     320        if Available then begin
     321          ItemName := Name;
     322          if WithCode and (Code <> '') then ItemName := ItemName + ' (' + Code + ')';
     323          AddObject(ItemName, Languages[I]);
     324        end;
     325    finally
     326      EndUpdate;
     327    end;
    323328  end;
    324329end;
     
    342347  if Text <> '' then begin
    343348    for I := 0 to FPoFiles.Count - 1 do begin
    344       Result := TPoFile(FPOFiles[I]).Translate(Identifier, Text);
     349      Result := TPoFile(FPoFiles[I]).Translate(Identifier, Text);
    345350      if Result <> Text then Break;
    346351    end;
     
    369374begin
    370375  LangDir := GetLangFileDir;
    371   TLanguage(Languages[0]).Available := True; // Automatic
     376  Languages.SearchByCode('').Available := True; // Automatic
    372377
    373378  for I := 1 to Languages.Count - 1 do
    374   with TLanguage(Languages[I]) do begin
     379  with Languages[I] do begin
    375380    Available := FileExists(LangDir + DirectorySeparator + ExtractFileNameOnly(DpiApplication.ExeName) +
    376381      '.' + Code + ExtensionSeparator + 'po') or (Code = 'en');
     
    381386begin
    382387  inherited;
    383   FPOFiles := TObjectList.Create;
     388  FPoFiles := TPoFiles.Create;
    384389  ComponentExcludes := TComponentExcludesList.Create;
    385   Languages := TLanguageList.Create;
     390  Languages := TLanguages.Create;
    386391  POFilesFolder := 'Languages';
    387392  CheckLanguageFiles;
     
    395400destructor TTranslator.Destroy;
    396401begin
    397   FPOFiles.Free;
    398   Languages.Free;
    399   ComponentExcludes.Free;
    400   inherited Destroy;
     402  FreeAndNil(FPoFiles);
     403  FreeAndNil(Languages);
     404  FreeAndNil(ComponentExcludes);
     405  inherited;
    401406end;
    402407
     
    564569end;
    565570
    566 
    567571end.
    568 
  • branches/highdpi/Packages/Common/URI.pas

    r462 r463  
    1 unit UURI;
     1unit URI;
    22
    33// Date: 2011-04-04
    4 
    5 {$mode delphi}
    64
    75interface
     
    8583  end;
    8684
     85
    8786implementation
    8887
     
    183182begin
    184183  Items.Free;
    185   inherited Destroy;
     184  inherited;
    186185end;
    187186
     
    232231begin
    233232  Path.Free;
    234   inherited Destroy;
     233  inherited;
    235234end;
    236235
     
    243242    Fragment := TURI(Source).Fragment;
    244243    Query := TURI(Source).Query;
    245   end else inherited Assign(Source);
     244  end else inherited;
    246245end;
    247246
     
    291290destructor TURL.Destroy;
    292291begin
    293   inherited Destroy;
     292  inherited;
    294293end;
    295294
     
    344343begin
    345344  Directory.Free;
    346   inherited Destroy;
    347 end;
    348 
     345  inherited;
     346end;
    349347
    350348end.
    351 
  • branches/highdpi/Packages/Common/XML.pas

    r462 r463  
    1 unit UXMLUtils;
    2 
    3 {$mode delphi}
     1unit XML;
    42
    53interface
     
    1614procedure WriteString(Node: TDOMNode; Name: string; Value: string);
    1715procedure WriteDateTime(Node: TDOMNode; Name: string; Value: TDateTime);
     16procedure WriteDouble(Node: TDOMNode; Name: string; Value: Double);
    1817function ReadInteger(Node: TDOMNode; Name: string; DefaultValue: Integer): Integer;
    1918function ReadInt64(Node: TDOMNode; Name: string; DefaultValue: Int64): Int64;
     
    2120function ReadString(Node: TDOMNode; Name: string; DefaultValue: string): string;
    2221function ReadDateTime(Node: TDOMNode; Name: string; DefaultValue: TDateTime): TDateTime;
     22function ReadDouble(Node: TDOMNode; Name: string; DefaultValue: Double): Double;
    2323procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
    2424
    2525
    2626implementation
     27
     28function ReadDouble(Node: TDOMNode; Name: string; DefaultValue: Double): Double;
     29var
     30  NewNode: TDOMNode;
     31begin
     32  Result := DefaultValue;
     33  NewNode := Node.FindNode(DOMString(Name));
     34  if Assigned(NewNode) then
     35    Result := StrToFloat(string(NewNode.TextContent));
     36end;
    2737
    2838procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
     
    202212end;
    203213
     214procedure WriteDouble(Node: TDOMNode; Name: string; Value: Double);
     215var
     216  NewNode: TDOMNode;
     217begin
     218  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     219  NewNode.TextContent := DOMString(FloatToStr(Value));
     220  Node.AppendChild(NewNode);
     221end;
     222
    204223function ReadInteger(Node: TDOMNode; Name: string; DefaultValue: Integer): Integer;
    205224var
     
    254273
    255274end.
    256 
Note: See TracChangeset for help on using the changeset viewer.