Changeset 38 for trunk/Components/Common/UCommon.pas
- Timestamp:
- Apr 18, 2019, 3:34:38 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Components/Common/UCommon.pas
r34 r38 27 27 unfNameServicePrincipal = 10, // Generalized service principal name 28 28 unfDNSDomainName = 11); 29 30 TFilterMethod = function (FileName: string): Boolean of object; 31 TFileNameMethod = procedure (FileName: string) of object; 29 32 30 33 var … … 63 66 procedure OpenWebPage(URL: string); 64 67 procedure OpenFileInShell(FileName: string); 65 procedure ExecuteProgram( CommandLine:string);68 procedure ExecuteProgram(Executable: string; Parameters: array of string); 66 69 procedure FreeThenNil(var Obj); 67 70 function RemoveQuotes(Text: string): string; … … 71 74 function MergeArray(A, B: array of string): TArrayOfString; 72 75 function LoadFileToStr(const FileName: TFileName): AnsiString; 76 procedure SaveStringToFile(S, FileName: string); 77 procedure SearchFiles(AList: TStrings; Dir: string; 78 FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil); 79 function GetStringPart(var Text: string; Separator: string): string; 80 function 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); 73 86 74 87 … … 98 111 I: Integer; 99 112 begin 113 Result := ''; 100 114 for I := 1 to Length(Source) do begin 101 115 Result := Result + LowerCase(IntToHex(Ord(Source[I]), 2)); … … 112 126 Path := IncludeTrailingPathDelimiter(APath); 113 127 114 Find := FindFirst( UTF8Decode(Path + AFileSpec), faAnyFile xor faDirectory, SearchRec);128 Find := FindFirst(Path + AFileSpec, faAnyFile xor faDirectory, SearchRec); 115 129 while Find = 0 do begin 116 DeleteFile(Path + UTF8Encode(SearchRec.Name));130 DeleteFile(Path + SearchRec.Name); 117 131 118 132 Find := SysUtils.FindNext(SearchRec); … … 429 443 end; 430 444 431 procedure ExecuteProgram( CommandLine:string);445 procedure ExecuteProgram(Executable: string; Parameters: array of string); 432 446 var 433 447 Process: TProcess; 448 I: Integer; 434 449 begin 435 450 try 436 451 Process := TProcess.Create(nil); 437 Process.CommandLine := CommandLine; 452 Process.Executable := Executable; 453 for I := 0 to Length(Parameters) - 1 do 454 Process.Parameters.Add(Parameters[I]); 438 455 Process.Options := [poNoConsole]; 439 456 Process.Execute; … … 456 473 procedure OpenFileInShell(FileName: string); 457 474 begin 458 ExecuteProgram('cmd.exe /c start "' + FileName + '"');475 ExecuteProgram('cmd.exe', ['/c', 'start', FileName]); 459 476 end; 460 477 … … 511 528 end; 512 529 530 function DefaultSearchFilter(const FileName: string): Boolean; 531 begin 532 Result := True; 533 end; 534 535 procedure SaveStringToFile(S, FileName: string); 536 var 537 F: TextFile; 538 begin 539 AssignFile(F, FileName); 540 try 541 ReWrite(F); 542 Write(F, S); 543 finally 544 CloseFile(F); 545 end; 546 end; 547 548 procedure SearchFiles(AList: TStrings; Dir: string; 549 FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil); 550 var 551 SR: TSearchRec; 552 begin 553 Dir := IncludeTrailingPathDelimiter(Dir); 554 if FindFirst(Dir + '*', faAnyFile, SR) = 0 then 555 try 556 repeat 557 if (SR.Name = '.') or (SR.Name = '..') or (Assigned(FilterMethod) and (not FilterMethod(SR.Name) or 558 not FilterMethod(Copy(Dir, 3, Length(Dir)) + SR.Name))) then Continue; 559 if Assigned(FileNameMethod) then 560 FileNameMethod(Dir + SR.Name); 561 AList.Add(Dir + SR.Name); 562 if (SR.Attr and faDirectory) <> 0 then 563 SearchFiles(AList, Dir + SR.Name, FilterMethod); 564 until FindNext(SR) <> 0; 565 finally 566 FindClose(SR); 567 end; 568 end; 569 570 function GetStringPart(var Text: string; Separator: string): string; 571 var 572 P: Integer; 573 begin 574 P := Pos(Separator, Text); 575 if P > 0 then begin 576 Result := Copy(Text, 1, P - 1); 577 Delete(Text, 1, P - 1 + Length(Separator)); 578 end else begin 579 Result := Text; 580 Text := ''; 581 end; 582 Result := Trim(Result); 583 Text := Trim(Text); 584 end; 585 586 function StripTags(const S: string): string; 587 var 588 Len: Integer; 589 590 function ReadUntil(const ReadFrom: Integer; const C: Char): Integer; 591 var 592 J: Integer; 593 begin 594 for J := ReadFrom to Len do 595 if (S[j] = C) then 596 begin 597 Result := J; 598 Exit; 599 end; 600 Result := Len + 1; 601 end; 602 603 var 604 I, APos: Integer; 605 begin 606 Len := Length(S); 607 I := 0; 608 Result := ''; 609 while (I <= Len) do begin 610 Inc(I); 611 APos := ReadUntil(I, '<'); 612 Result := Result + Copy(S, I, APos - i); 613 I := ReadUntil(APos + 1, '>'); 614 end; 615 end; 616 617 function PosFromIndex(SubStr: string; Text: string; 618 StartIndex: Integer): Integer; 619 var 620 I, MaxLen: SizeInt; 621 Ptr: PAnsiChar; 622 begin 623 Result := 0; 624 if (StartIndex < 1) or (StartIndex > Length(Text) - Length(SubStr)) then Exit; 625 if Length(SubStr) > 0 then begin 626 MaxLen := Length(Text) - Length(SubStr) + 1; 627 I := StartIndex; 628 Ptr := @Text[StartIndex]; 629 while (I <= MaxLen) do begin 630 if (SubStr[1] = Ptr^) and (CompareByte(Substr[1], Ptr^, Length(SubStr)) = 0) then begin 631 Result := I; 632 Exit; 633 end; 634 Inc(I); 635 Inc(Ptr); 636 end; 637 end; 638 end; 639 640 function PosFromIndexReverse(SubStr: string; Text: string; 641 StartIndex: Integer): Integer; 642 var 643 I: SizeInt; 644 Ptr: PAnsiChar; 645 begin 646 Result := 0; 647 if (StartIndex < 1) or (StartIndex > Length(Text)) then Exit; 648 if Length(SubStr) > 0 then begin 649 I := StartIndex; 650 Ptr := @Text[StartIndex]; 651 while (I > 0) do begin 652 if (SubStr[1] = Ptr^) and (CompareByte(Substr[1], Ptr^, Length(SubStr)) = 0) then begin 653 Result := I; 654 Exit; 655 end; 656 Dec(I); 657 Dec(Ptr); 658 end; 659 end; 660 end; 661 662 procedure CopyStringArray(Dest: TStringArray; Source: array of string); 663 var 664 I: Integer; 665 begin 666 SetLength(Dest, Length(Source)); 667 for I := 0 to Length(Dest) - 1 do 668 Dest[I] := Source[I]; 669 end; 513 670 514 671
Note:
See TracChangeset
for help on using the changeset viewer.