Changeset 74 for trunk/Packages/Common


Ignore:
Timestamp:
Jan 18, 2018, 11:54:13 PM (7 years ago)
Author:
chronos
Message:
  • Fixed: Build under Lazarus 1.8.0.
Location:
trunk/Packages/Common
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Packages/Common/Common.lpk

    r73 r74  
    1 <?xml version="1.0"?>
     1<?xml version="1.0" encoding="UTF-8"?>
    22<CONFIG>
    33  <Package Version="4">
     
    2222    <License Value="GNU/GPL"/>
    2323    <Version Minor="7"/>
    24     <Files Count="17">
     24    <Files Count="19">
    2525      <Item1>
    2626        <Filename Value="StopWatch.pas"/>
     
    9393      <Item17>
    9494        <Filename Value="UListViewSort.pas"/>
     95        <HasRegisterProc Value="True"/>
    9596        <UnitName Value="UListViewSort"/>
    9697      </Item17>
     98      <Item18>
     99        <Filename Value="UPersistentForm.pas"/>
     100        <HasRegisterProc Value="True"/>
     101        <UnitName Value="UPersistentForm"/>
     102      </Item18>
     103      <Item19>
     104        <Filename Value="UFindFile.pas"/>
     105        <HasRegisterProc Value="True"/>
     106        <UnitName Value="UFindFile"/>
     107      </Item19>
    97108    </Files>
    98109    <i18n>
  • trunk/Packages/Common/Common.pas

    r73 r74  
    1111  UMemory, UResetableThread, UPool, ULastOpenedList, URegistry,
    1212  UJobProgressView, UXMLUtils, UApplicationInfo, USyncCounter, UListViewSort,
    13   LazarusPackageIntf;
     13  UPersistentForm, UFindFile, LazarusPackageIntf;
    1414
    1515implementation
     
    2121  RegisterUnit('UJobProgressView', @UJobProgressView.Register);
    2222  RegisterUnit('UApplicationInfo', @UApplicationInfo.Register);
     23  RegisterUnit('UListViewSort', @UListViewSort.Register);
     24  RegisterUnit('UPersistentForm', @UPersistentForm.Register);
     25  RegisterUnit('UFindFile', @UFindFile.Register);
    2326end;
    2427
  • trunk/Packages/Common/UApplicationInfo.pas

    r73 r74  
    5555procedure Register;
    5656begin
    57   RegisterComponents('Samples', [TApplicationInfo]);
     57  RegisterComponents('Common', [TApplicationInfo]);
    5858end;
    5959
  • trunk/Packages/Common/UCommon.pas

    r73 r74  
    66
    77uses
    8   {$IFDEF Windows}Windows,{$ENDIF}
     8  {$ifdef Windows}Windows,{$endif}
     9  {$ifdef Linux}baseunix,{$endif}
    910  Classes, SysUtils, StrUtils, Dialogs, Process, LCLIntf,
    1011  FileUtil; //, ShFolder, ShellAPI;
     
    6465procedure ExecuteProgram(CommandLine: string);
    6566procedure FreeThenNil(var Obj);
     67function RemoveQuotes(Text: string): string;
     68function ComputerName: string;
     69function OccurenceOfChar(What: Char; Where: string): Integer;
     70function GetDirCount(Dir: string): Integer;
     71function MergeArray(A, B: array of string): TArrayOfString;
     72function LoadFileToStr(const FileName: TFileName): AnsiString;
    6673
    6774
     
    107114  Find := FindFirst(UTF8Decode(Path + AFileSpec), faAnyFile xor faDirectory, SearchRec);
    108115  while Find = 0 do begin
    109     DeleteFileUTF8(Path + UTF8Encode(SearchRec.Name));
     116    DeleteFile(Path + UTF8Encode(SearchRec.Name));
    110117
    111118    Find := SysUtils.FindNext(SearchRec);
     
    286293  L: LongWord;
    287294begin
    288 
    289295  L := MAX_USERNAME_LENGTH + 2;
    290296  SetLength(Result, L);
     
    301307  end;
    302308end;
    303 
     309{$endif}
     310
     311function ComputerName: string;
     312{$ifdef mswindows}
     313const
     314 INFO_BUFFER_SIZE = 32767;
     315var
     316  Buffer : array[0..INFO_BUFFER_SIZE] of WideChar;
     317  Ret : DWORD;
     318begin
     319  Ret := INFO_BUFFER_SIZE;
     320  If (GetComputerNameW(@Buffer[0],Ret)) then begin
     321    Result := UTF8Encode(WideString(Buffer));
     322  end
     323  else begin
     324    Result := 'ERROR_NO_COMPUTERNAME_RETURNED';
     325  end;
     326end;
     327{$endif}
     328{$ifdef unix}
     329var
     330  Name: UtsName;
     331begin
     332  fpuname(Name);
     333  Result := Name.Nodename;
     334end;
     335{$endif}
     336
     337{$ifdef windows}
    304338function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    305339const
     
    416450
    417451procedure OpenWebPage(URL: string);
    418 var
    419   Process: TProcess;
    420   Browser, Params: string;
    421452begin
    422453  OpenURL(URL);
    423   {try
    424     Process := TProcess.Create(nil);
    425     Browser := '';
    426     //FindDefaultBrowser(Browser, Params);
    427     //Process.Executable := Browser;
    428     //Process.Parameters.Add(Format(Params, [ApplicationInfo.HomePage]);
    429     Process.CommandLine := 'cmd.exe /c start ' + URL;
    430     Process.Options := [poNoConsole];
    431     Process.Execute;
     454end;
     455
     456procedure OpenFileInShell(FileName: string);
     457begin
     458  ExecuteProgram('cmd.exe /c start "' + FileName + '"');
     459end;
     460
     461function RemoveQuotes(Text: string): string;
     462begin
     463  Result := Text;
     464  if (Pos('"', Text) = 1) and (Text[Length(Text)] = '"') then
     465    Result := Copy(Text, 2, Length(Text) - 2);
     466end;
     467
     468function OccurenceOfChar(What: Char; Where: string): Integer;
     469var
     470  I: Integer;
     471begin
     472  Result := 0;
     473  for I := 1 to Length(Where) do
     474    if Where[I] = What then Inc(Result);
     475end;
     476
     477function GetDirCount(Dir: string): Integer;
     478begin
     479  Result := OccurenceOfChar(DirectorySeparator, Dir);
     480  if Copy(Dir, Length(Dir), 1) = DirectorySeparator then
     481    Dec(Result);
     482end;
     483
     484function MergeArray(A, B: array of string): TArrayOfString;
     485var
     486  I: Integer;
     487begin
     488  SetLength(Result, Length(A) + Length(B));
     489  for I := 0 to Length(A) - 1 do
     490    Result[I] := A[I];
     491  for I := 0 to Length(B) - 1 do
     492    Result[Length(A) + I] := B[I];
     493end;
     494
     495function LoadFileToStr(const FileName: TFileName): AnsiString;
     496var
     497  FileStream: TFileStream;
     498  Read: Integer;
     499begin
     500  Result := '';
     501  FileStream := TFileStream.Create(FileName, fmOpenRead);
     502  try
     503    if FileStream.Size > 0 then begin
     504      SetLength(Result, FileStream.Size);
     505      Read := FileStream.Read(Pointer(Result)^, FileStream.Size);
     506      SetLength(Result, Read);
     507    end;
    432508  finally
    433     Process.Free;
    434   end;}
    435 end;
    436 
    437 procedure OpenFileInShell(FileName: string);
    438 begin
    439   ExecuteProgram('cmd.exe /c start "' + FileName + '"');
    440 end;
     509    FileStream.Free;
     510  end;
     511end;
     512
     513
    441514
    442515initialization
  • trunk/Packages/Common/UDebugLog.pas

    r73 r74  
    3131    Items: TListObject;
    3232    Lock: TCriticalSection;
    33     procedure Add(Group: string; Text: string);
     33    procedure Add(Text: string; Group: string = '');
    3434    procedure WriteToFile(Text: string);
    3535    constructor Create(AOwner: TComponent); override;
     
    5252procedure Register;
    5353begin
    54   RegisterComponents('Samples', [TDebugLog]);
     54  RegisterComponents('Common', [TDebugLog]);
    5555end;
    5656
     
    6969end;
    7070
    71 procedure TDebugLog.Add(Group: string; Text: string);
     71procedure TDebugLog.Add(Text: string; Group: string = '');
    7272var
    7373  NewItem: TDebugLogItem;
     
    103103  try
    104104    if ExtractFileDir(FileName) <> '' then
    105       ForceDirectoriesUTF8(ExtractFileDir(FileName));
    106     if FileExistsUTF8(FileName) then LogFile := TFileStream.Create(UTF8Decode(FileName), fmOpenWrite)
     105      ForceDirectories(ExtractFileDir(FileName));
     106    if FileExists(FileName) then LogFile := TFileStream.Create(UTF8Decode(FileName), fmOpenWrite)
    107107      else LogFile := TFileStream.Create(UTF8Decode(FileName), fmCreate);
    108108    LogFile.Seek(0, soFromEnd);
  • trunk/Packages/Common/UFindFile.pas

    r73 r74  
    6464procedure Register;
    6565begin
    66   RegisterComponents('Samples', [TFindFile]);
     66  RegisterComponents('Common', [TFindFile]);
    6767end;
    6868
  • trunk/Packages/Common/UJobProgressView.pas

    r73 r74  
    169169procedure Register;
    170170begin
    171   RegisterComponents('Samples', [TJobProgressView]);
     171  RegisterComponents('Common', [TJobProgressView]);
    172172end;
    173173
  • trunk/Packages/Common/ULastOpenedList.pas

    r73 r74  
    4040procedure Register;
    4141begin
    42   RegisterComponents('Samples', [TLastOpenedList]);
     42  RegisterComponents('Common', [TLastOpenedList]);
    4343end;
    4444
  • trunk/Packages/Common/UListViewSort.pas

    r73 r74  
    99uses
    1010  {$IFDEF Windows}Windows, CommCtrl, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils,
    11   Controls, DateUtils, Dialogs, SpecializedList;
     11  Controls, DateUtils, Dialogs, SpecializedList, Forms, Grids, StdCtrls, ExtCtrls;
    1212
    1313type
     
    1919  TListFilterEvent = procedure (ListViewSort: TListViewSort) of object;
    2020
    21   TListViewSort = class
     21  TListViewSort = class(TComponent)
    2222  private
    2323    FListView: TListView;
     
    4343    List: TListObject;
    4444    Source: TListObject;
    45     constructor Create;
     45    constructor Create(AOwner: TComponent); override;
    4646    destructor Destroy; override;
    4747    function CompareTime(Time1, Time2: TDateTime): Integer;
     
    5050    function CompareBoolean(Value1, Value2: Boolean): Integer;
    5151    procedure Refresh;
     52  published
    5253    property ListView: TListView read FListView write SetListView;
    5354    property OnCompareItem: TCompareEvent read FOnCompareItem
     
    6162  end;
    6263
     64  { TListViewFilter }
     65
     66  TListViewFilter = class(TWinControl)
     67  private
     68    FOnChange: TNotifyEvent;
     69    FStringGrid1: TStringGrid;
     70    procedure DoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
     71  public
     72    constructor Create(AOwner: TComponent); override;
     73    procedure UpdateFromListView(ListView: TListView);
     74    function TextEntered: Boolean;
     75    function GetColValue(Index: Integer): string;
     76    property StringGrid: TStringGrid read FStringGrid1 write FStringGrid1;
     77  published
     78    property OnChange: TNotifyEvent read FOnChange write FOnChange;
     79    property Align;
     80    property Anchors;
     81  end;
     82
     83procedure Register;
     84
     85
    6386implementation
     87
     88procedure Register;
     89begin
     90  RegisterComponents('Common', [TListViewSort, TListViewFilter]);
     91end;
     92
     93{ TListViewFilter }
     94
     95procedure TListViewFilter.DoOnKeyUp(Sender: TObject; var Key: Word;
     96  Shift: TShiftState);
     97begin
     98  if Assigned(FOnChange) then
     99    FOnChange(Self);
     100end;
     101
     102constructor TListViewFilter.Create(AOwner: TComponent);
     103begin
     104  inherited Create(AOwner);
     105  FStringGrid1 := TStringGrid.Create(Self);
     106  FStringGrid1.Align := alClient;
     107  FStringGrid1.Parent := Self;
     108  FStringGrid1.Visible := True;
     109  FStringGrid1.ScrollBars := ssNone;
     110  FStringGrid1.FixedCols := 0;
     111  FStringGrid1.FixedRows := 0;
     112  FStringGrid1.RowCount := 1;
     113  FStringGrid1.Options := [goFixedHorzLine, goFixedVertLine, goVertLine,
     114    goHorzLine, goRangeSelect, goEditing, goAlwaysShowEditor, goSmoothScroll];
     115  FStringGrid1.OnKeyUp := DoOnKeyUp;
     116end;
     117
     118procedure TListViewFilter.UpdateFromListView(ListView: TListView);
     119var
     120  I: Integer;
     121  NewColumn: TGridColumn;
     122begin
     123  with FStringGrid1 do begin
     124    Columns.Clear;
     125    while Columns.Count > ListView.Columns.Count do Columns.Delete(Columns.Count - 1);
     126    while Columns.Count < ListView.Columns.Count do NewColumn := Columns.Add;
     127    for I := 0 to ListView.Columns.Count - 1 do begin
     128      Columns[I].Width := ListView.Columns[I].Width;
     129    end;
     130  end;
     131end;
     132
     133function TListViewFilter.TextEntered: Boolean;
     134var
     135  I: Integer;
     136begin
     137  Result := False;
     138  for I := 0 to FStringGrid1.ColCount - 1 do begin
     139    if FStringGrid1.Cells[I, 0] <> '' then begin
     140      Result := True;
     141      Break;
     142    end;
     143  end;
     144end;
     145
     146function TListViewFilter.GetColValue(Index: Integer): string;
     147begin
     148  if (Index >= 0) and (Index < StringGrid.Columns.Count) then
     149    Result := StringGrid.Cells[Index, 0]
     150    else Result := '';
     151end;
    64152
    65153{ TListViewSort }
     
    160248end;
    161249
    162 constructor TListViewSort.Create;
    163 begin
     250constructor TListViewSort.Create(AOwner: TComponent);
     251begin
     252  inherited;
    164253  List := TListObject.Create;
    165254  List.OwnsObjects := False;
  • trunk/Packages/Common/URegistry.pas

    r73 r74  
    1717    rrKeyDynData = HKEY($80000006));
    1818
     19  { TRegistryContext }
     20
    1921  TRegistryContext = record
    2022    RootKey: HKEY;
    2123    Key: string;
     24    class operator Equal(A, B: TRegistryContext): Boolean;
    2225  end;
    2326
     
    4952  Result.RootKey := RootKey;
    5053  Result.Key := Key;
     54end;
     55
     56{ TRegistryContext }
     57
     58class operator TRegistryContext.Equal(A, B: TRegistryContext): Boolean;
     59begin
     60  Result := (A.Key = B.Key) and (A.RootKey = B.RootKey);
    5161end;
    5262
Note: See TracChangeset for help on using the changeset viewer.