Advertisement
Guest User

Untitled

a guest
Oct 17th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.11 KB | None | 0 0
  1. unit uDesignPrograms;
  2.  
  3. ////////////////////////////////////////////////////////////////////////////////
  4. /// Visual Program Designer in VCL (Delphi)                                  ///
  5. /// ------------------------------------------------------------------------ ///
  6. /// (c) 2016 Dennis Göhlert                                                  ///
  7. ///                                                                          ///
  8. /// LICENSE: Mozilla Public License v2.0                                     ///
  9. ////////////////////////////////////////////////////////////////////////////////
  10.  
  11. interface
  12.  
  13. uses
  14.   System.Generics.Defaults, System.Generics.Collections;
  15.  
  16. type
  17.   PCommand = ^TCommand;
  18.  
  19.   TCommand = record
  20.   private
  21.     FID: Byte;
  22.     FDuration: Cardinal;
  23.     FOrder: Word;
  24.   public
  25.     property ID: Byte read FID write FID;
  26.     property Duration: Cardinal read FDuration write FDuration;
  27.     property Order: Word read FOrder write FOrder;
  28.   end;
  29.  
  30.   TCommandComparer = class(TComparer<TCommand>)
  31.   public
  32.     function Compare(const Left, Right: TCommand): Integer; override;
  33.   end;
  34.  
  35.   TProgram = class(TList<TCommand>)
  36.   private
  37.     FName: String;
  38.   public
  39.     property Name: String read FName;
  40.     constructor Create(AName: String);
  41.     procedure Exchange(Index1, Index2: Integer);
  42.   end;
  43.  
  44.   TPrograms = TArray<TProgram>;
  45.  
  46. var
  47.   Programs: TPrograms;
  48.  
  49. implementation
  50.  
  51. var
  52.   Index, CommandIndex: Integer;
  53.  
  54. function TCommandComparer.Compare(const Left, Right: TCommand): Integer;
  55. begin
  56.   Result := Left.Order - Right.Order;
  57. end;
  58.  
  59. constructor TProgram.Create(AName: String);
  60. begin
  61.   inherited Create(TCommandComparer.Create);
  62.   FName := AName;
  63. end;
  64.  
  65. procedure TProgram.Exchange(Index1, Index2: Integer);
  66. var
  67.   Buffer1, Buffer2: TCommand;
  68. begin
  69.   Buffer1 := Items[Index1];
  70.   Buffer2 := Items[Index2];
  71.   Buffer1.Order := Items[Index2].Order;
  72.   Buffer2.Order := Items[Index1].Order;
  73.   Items[Index1] := Buffer2;
  74.   Items[Index2] := Buffer1;
  75. end;
  76.  
  77. initialization
  78.  
  79. finalization
  80.   for Index := Low(Programs) to High(Programs) do
  81.   begin
  82.     Programs[Index].Free;
  83.   end;
  84.  
  85. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement