unit mckCCtrls;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ExtCtrls, mirror, mckCtrls, KOLCCtrls;

{$I KOLDEF.INC}

type
  TKOLTrackBar = class(TKOLControl)
  private
    FOptions: TTrackbarOptions;
    FPosition: Integer;
    FRangeMin: Integer;
    FSelStart: Integer;
    FThumbLen: Integer;
    FRangeMax: Integer;
    FLineSize: Integer;
    FPageSize: Integer;
    FSelEnd: Integer;
    FOnScroll: TOnScroll;
    procedure SetOptions(const Value: TTrackbarOptions);
    procedure SetPosition(const Value: Integer);
    procedure SetLineSize(const Value: Integer);
    procedure SetPageSize(const Value: Integer);
    procedure SetRangeMax(const Value: Integer);
    procedure SetRangeMin(const Value: Integer);
    procedure SetSelEnd(const Value: Integer);
    procedure SetSelStart(const Value: Integer);
    procedure SetThumbLen(const Value: Integer);
    procedure SetOnScroll(const Value: TOnScroll);
  protected
    function AdditionalUnits: string; override;
    function TabStopByDefault: Boolean; override;
    procedure SetupFirst(SL: TStringList; const AName, AParent, Prefix: string); override;
    function SetupParams(const AName, AParent: string): string; override;
    procedure SetupConstruct(SL: TStringList; const AName, AParent, Prefix: string); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Options: TTrackbarOptions read FOptions write SetOptions;
    property Position: Integer read FPosition write SetPosition;
    property RangeMin: Integer read FRangeMin write SetRangeMin;
    property RangeMax: Integer read FRangeMax write SetRangeMax;
    property PageSize: Integer read FPageSize write SetPageSize;
    property LineSize: Integer read FLineSize write SetLineSize;
    property ThumbLen: Integer read FThumbLen write SetThumbLen;
    property SelStart: Integer read FSelStart write SetSelStart;
    property SelEnd: Integer read FSelEnd write SetSelEnd;
    property OnScroll: TOnScroll read FOnScroll write SetOnScroll;
    property TabStop;
    property TabOrder;
  end;

  { SPC CONTROLS }

  TSPCDirectoryEditBox = class(TKOLControl)
  private
    { Private declarations }
    fPath: string;
    fCaptionEmpty: string;
    fTitle: string;
    fNotAvailable: Boolean;
    procedure SetTitle(Value: string);
    procedure SetCaptionEmpty(Value: string);
    procedure SetPath(Value: string);
  protected
    { Protected declarations }
    function AdditionalUnits: string; override;
    procedure SetupFirst(SL: TStringList; const AName, AParent, Prefix: string); override;
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override;
  published
    { Published declarations }
    property Path: string read fPath write SetPath;
    property Title: string read fTitle write SetTitle;
    property Font;
    property CaptionEmpty: string read fCaptionEmpty write SetCaptionEmpty;
    property OnChange;
    property OnShow: Boolean read FNotAvailable;
    property OnScroll: Boolean read FNotAvailable;
    property OnResize: Boolean read FNotAvailable;
    property OnPaint: Boolean read FNotAvailable;
    property OnMove: Boolean read FNotAvailable;
    property OnMouseWheel: Boolean read FNotAvailable;
    property OnMouseUp: Boolean read FNotAvailable;
    property OnMouseMove: Boolean read FNotAvailable;
    property OnMouseLeave: Boolean read FNotAvailable;
    property OnMouseEnter: Boolean read FNotAvailable;
    property OnMouseDown: Boolean read FNotAvailable;
    property OnMouseDblClk: Boolean read FNotAvailable;
    property OnMessage: Boolean read FNotAvailable;
    property OnHide: Boolean read FNotAvailable;
    property OnEraseBkgnd: Boolean read FNotAvailable;
    property OnDropFiles: Boolean read FNotAvailable;
    property OnDestroy: Boolean read FNotAvailable;
    property OnClick: Boolean read FNotAvailable;
  end;

  TSortBy = (sbName, sbExtention);
  TSPCFileListBox = class(TKOLListBox)
  private
    { Private declarations }
    fIntegralHeight: Boolean;
    fDoCase: TCase;
    fPath: string;
    fFilters: string;
    FNotAvailable: Boolean;
    fExecuteOnDblClk: Boolean;
    fSortBy: TSortBy;
    procedure SetPath(Value: string);
    procedure SetFilters(Value: string);
    procedure SetIntegralHeight(Value: Boolean);
    procedure SetCase(Value: TCase);
    procedure SetExecuteOnDblClk(Value: Boolean);
    procedure SetSortBy(Value: TSortBy);
  protected
    { Protected declarations }
    function AdditionalUnits: string; override;
    procedure SetupFirst(SL: TStringList; const AName, AParent, Prefix: string); override;
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override;
  published
    { Published declarations }
    property SortBy: TSortBy read fSortBy write SetSortBy;
    property Path: string read fPath write SetPath;
    property ExecuteOnDblClk: Boolean read fExecuteOnDblClk write SetExecuteOnDblClk;
    property Filters: string read fFilters write SetFilters;
    property DoCase: TCase read fDoCase write SetCase;
    property IntegralHeight: Boolean read fIntegralHeight write SetIntegralHeight;
    property OnChange: Boolean read FNotAvailable;
    property OnShow: Boolean read FNotAvailable;
    property OnResize: Boolean read FNotAvailable;
    property OnPaint: Boolean read FNotAvailable;
    property OnMove: Boolean read FNotAvailable;
    property OnMouseWheel: Boolean read FNotAvailable;
    property OnMouseUp: Boolean read FNotAvailable;
    property OnMouseMove: Boolean read FNotAvailable;
    property OnMouseLeave: Boolean read FNotAvailable;
    property OnMouseEnter: Boolean read FNotAvailable;
    property OnMouseDown: Boolean read FNotAvailable;
    //    property OnMOuseDblClk: Boolean read FNotAvailable;
    property OnMessage: Boolean read FNotAvailable;
    property OnMeasureItem: Boolean read FNotAvailable;
    property OnLeave: Boolean read FNotAvailable;
    property OnKeyUp: Boolean read FNotAvailable;
    property OnKeyDown: Boolean read FNotAvailable;
    property OnHide: Boolean read FNotAvailable;
    property OnEnter: Boolean read FNotAvailable;
    property OnDropFiles: Boolean read FNotAvailable;
    property OnDropDown: Boolean read FNotAvailable;
    property OnDrawItem: Boolean read FNotAvailable;
    property OnDestroy: Boolean read FNotAvailable;
    property OnEraseBkgnd: Boolean read FNotAvailable;
    property OnCloseUp: Boolean read FNotAvailable;
    property OnClick: Boolean read FNotAvailable;
    property OnChar: Boolean read FNotAvailable;
    property OnScroll: Boolean read FNotAvailable;
    //    property Items: Boolean read FNotAvailable;
  end;

  TSPCDirectoryListBox = class(TKOLListView)
  private
    { Private declarations }
    fIntegralHeight: Boolean;
    fDoIndent: Boolean;
    fPath: string;
    FNotAvailable: Boolean;
    fFileListBox: TSPCFileListBox;
    procedure SetPath(Value: string);
    procedure SetIndent(Value: Boolean);
    procedure SetIntegralHeight(Value: Boolean);
    procedure SetFileListBox(Value: TSPCFileListBox);
  protected
    { Protected declarations }
    function AdditionalUnits: string; override;
    procedure SetupFirst(SL: TStringList; const AName, AParent, Prefix: string); override;
    procedure SetupLast(SL: TStringList; const AName, AParent, Prefix: string); override;
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override;
  published
    { Published declarations }
    property FileListBox: TSPCFileListBox read fFileListBox write SetFileListBox;
    property Items: Boolean read FNotAvailable;
    property ImageListState: Boolean read FNotAvailable;
    property ImageListSmall: Boolean read FNotAvailable;
    property ImageListNormal: Boolean read FNotAvailable;
    property Path: string read fPath write SetPath;
    property IntegralHeight: Boolean read fIntegralHeight write SetIntegralHeight;
    property DoIndent: Boolean read fDoIndent write SetIndent;
    //    property OnChange: Boolean read FNotAvailable;
    property OnShow: Boolean read FNotAvailable;
    property OnResize: Boolean read FNotAvailable;
    property OnPaint: Boolean read FNotAvailable;
    property OnMove: Boolean read FNotAvailable;
    property OnMouseWheel: Boolean read FNotAvailable;
    property OnMouseUp: Boolean read FNotAvailable;
    property OnMouseMove: Boolean read FNotAvailable;
    property OnMouseLeave: Boolean read FNotAvailable;
    property OnMouseEnter: Boolean read FNotAvailable;
    property OnMouseDown: Boolean read FNotAvailable;
    property OnMessage: Boolean read FNotAvailable;
    property OnMeasureItem: Boolean read FNotAvailable;
    property OnLeave: Boolean read FNotAvailable;
    property OnKeyUp: Boolean read FNotAvailable;
    property OnKeyDown: Boolean read FNotAvailable;
    property OnHide: Boolean read FNotAvailable;
    property OnEnter: Boolean read FNotAvailable;
    property OnDropFiles: Boolean read FNotAvailable;
    property OnDropDown: Boolean read FNotAvailable;
    property OnDrawItem: Boolean read FNotAvailable;
    property OnDestroy: Boolean read FNotAvailable;
    property OnEraseBkgnd: Boolean read FNotAvailable;
    property OnCloseUp: Boolean read FNotAvailable;
    property OnClick: Boolean read FNotAvailable;
    property OnChar: Boolean read FNotAvailable;
    property OnScroll: Boolean read FNotAvailable;
    property OnLVStateChange: Boolean read FNotAvailable;
    property OnLVData: Boolean read FNotAvailable;
    property OnLVDelete: Boolean read FNotAvailable;
    property OnEndEditLVItem: Boolean read FNotAvailable;
    property OnDeleteLVItem: Boolean read FNotAvailable;
    property OnDeleteAllLVItems: Boolean read FNotAvailable;
    property OnCompareLVItems: Boolean read FNotAvailable;
    property OnColumnClick: Boolean read FNotAvailable;
  end;

  TSPCDriveComboBox = class(TKOLComboBox)
  private
    { Private declarations }
    fDrive: char;
    FNotAvailable: Boolean;
    fDirectoryListBox: TSPCDirectoryListBox;
    procedure SetDrive(Value: char);
    procedure SetDirectoryListBox(Value: TSPCDirectoryListBox);
  protected
    { Protected declarations }
    function AdditionalUnits: string; override;
    procedure SetupFirst(SL: TStringList; const AName, AParent, Prefix: string); override;
    procedure SetupLast(SL: TStringList; const AName, AParent, Prefix: string); override;
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override;
  published
    { Published declarations }
    property DirectoryListBox: TSPCDirectoryListBox read fDirectoryListBox write SetDirectoryListBox;
    property Drive: char read fDrive write SetDrive;
    property OnSelChange: Boolean read FNotAvailable;
    property OnShow: Boolean read FNotAvailable;
    property OnResize: Boolean read FNotAvailable;
    property OnPaint: Boolean read FNotAvailable;
    property OnMove: Boolean read FNotAvailable;
    property OnMouseWheel: Boolean read FNotAvailable;
    property OnMouseUp: Boolean read FNotAvailable;
    property OnMouseMove: Boolean read FNotAvailable;
    property OnMouseLeave: Boolean read FNotAvailable;
    property OnMouseEnter: Boolean read FNotAvailable;
    property OnMouseDown: Boolean read FNotAvailable;
    property OnMOuseDblClk: Boolean read FNotAvailable;
    property OnMessage: Boolean read FNotAvailable;
    property OnMeasureItem: Boolean read FNotAvailable;
    property OnLeave: Boolean read FNotAvailable;
    property OnKeyUp: Boolean read FNotAvailable;
    property OnKeyDown: Boolean read FNotAvailable;
    property OnHide: Boolean read FNotAvailable;
    property OnEnter: Boolean read FNotAvailable;
    property OnDropFiles: Boolean read FNotAvailable;
    property OnDropDown: Boolean read FNotAvailable;
    property OnDrawItem: Boolean read FNotAvailable;
    property OnDestroy: Boolean read FNotAvailable;
    property OnEraseBkgnd: Boolean read FNotAvailable;
    property OnCloseUp: Boolean read FNotAvailable;
    property OnClick: Boolean read FNotAvailable;
    property OnChar: Boolean read FNotAvailable;
    property Items: Boolean read FNotAvailable;
  end;

  TSPCFilterComboBox = class(TKOLComboBox)
  private
    { Private declarations }
    fLines: TStrings;
    FNotAvailable: Boolean;
    fFileListBox: TSPCFileListBox;
    //    procedure SetText(Value: TStrings);
    //    function GetText: TStrings;
    procedure SetFileListBox(Value: TSPCFileListBox);
  protected
    { Protected declarations }
    function AdditionalUnits: string; override;
    procedure SetupFirst(SL: TStringList; const AName, AParent, Prefix: string); override;
    procedure SetupLast(SL: TStringList; const AName, AParent, Prefix: string); override;
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override;
  published
    { Published declarations }
    property FileListBox: TSPCFileListBox read fFileListBox write SetFileListBox;
    //    property Items: Boolean read FNotAvailable;
    //    property Filters: TStrings read GetText write SetText;
    property OnSelChange: Boolean read FNotAvailable;
    property OnShow: Boolean read FNotAvailable;
    property OnResize: Boolean read FNotAvailable;
    property OnPaint: Boolean read FNotAvailable;
    property OnMove: Boolean read FNotAvailable;
    property OnMouseWheel: Boolean read FNotAvailable;
    property OnMouseUp: Boolean read FNotAvailable;
    property OnMouseMove: Boolean read FNotAvailable;
    property OnMouseLeave: Boolean read FNotAvailable;
    property OnMouseEnter: Boolean read FNotAvailable;
    property OnMouseDown: Boolean read FNotAvailable;
    property OnMOuseDblClk: Boolean read FNotAvailable;
    property OnMessage: Boolean read FNotAvailable;
    property OnMeasureItem: Boolean read FNotAvailable;
    property OnLeave: Boolean read FNotAvailable;
    property OnKeyUp: Boolean read FNotAvailable;
    property OnKeyDown: Boolean read FNotAvailable;
    property OnHide: Boolean read FNotAvailable;
    property OnEnter: Boolean read FNotAvailable;
    property OnDropFiles: Boolean read FNotAvailable;
    property OnDropDown: Boolean read FNotAvailable;
    property OnDrawItem: Boolean read FNotAvailable;
    property OnDestroy: Boolean read FNotAvailable;
    property OnEraseBkgnd: Boolean read FNotAvailable;
    property OnCloseUp: Boolean read FNotAvailable;
    property OnClick: Boolean read FNotAvailable;
    property OnChar: Boolean read FNotAvailable;
  end;

  TSPCStatusBar = class(TKOLControl)
  private
    { Private declarations }
    FNotAvailable: Boolean;
    fSimpleStatusText: string;
    fSizeGrip: Boolean;
    procedure SetSimpleStatusText(Value: string);
    procedure SetSizeGrip(Value: Boolean);
  protected
    { Protected declarations }
    function AdditionalUnits: string; override;
    procedure SetupFirst(SL: TStringList; const AName, AParent, Prefix: string); override;
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override;
  published
    { Published declarations }
    property SizeGrip: Boolean read fSizeGrip write SetSizeGrip;
    property OnShow: Boolean read FNotAvailable;
    property SimpleStatusText: string read fSimpleStatusText write SetSimpleStatusText;
    property Caption: Boolean read FNotAvailable;
    property OnPaint: Boolean read FNotAvailable;
    property OnMove: Boolean read FNotAvailable;
    property OnMouseWheel: Boolean read FNotAvailable;
    property OnMouseUp: Boolean read FNotAvailable;
    property OnMouseMove: Boolean read FNotAvailable;
    property OnMouseLeave: Boolean read FNotAvailable;
    property OnMouseEnter: Boolean read FNotAvailable;
    property OnMouseDown: Boolean read FNotAvailable;
    property OnMOuseDblClk: Boolean read FNotAvailable;
    property OnMessage: Boolean read FNotAvailable;
    property OnMeasureItem: Boolean read FNotAvailable;
    property OnLeave: Boolean read FNotAvailable;
    property OnKeyUp: Boolean read FNotAvailable;
    property OnKeyDown: Boolean read FNotAvailable;
    property OnHide: Boolean read FNotAvailable;
    property OnEnter: Boolean read FNotAvailable;
    property OnDropFiles: Boolean read FNotAvailable;
    property OnDropDown: Boolean read FNotAvailable;
    property OnDrawItem: Boolean read FNotAvailable;
    property OnDestroy: Boolean read FNotAvailable;
    property OnEraseBkgnd: Boolean read FNotAvailable;
    property OnCloseUp: Boolean read FNotAvailable;
    property OnClick: Boolean read FNotAvailable;
    property OnChar: Boolean read FNotAvailable;
    property Items: Boolean read FNotAvailable;
  end;

procedure Register;

(*)
{$R mckCCtrls.dcr}
(*)

implementation

procedure Register;
begin
  RegisterComponents('KOLAddons', [TKOLTrackBar, TSPCDirectoryEditBox,
    TSPCDirectoryListBox, TSPCDriveComboBox, TSPCFileListBox, TSPCFilterComboBox,
      TSPCStatusBar]);
end;

{ TKOLTrackBar }

function TKOLTrackBar.AdditionalUnits: string;
begin
  Result := ', KOLCCtrls';
end;

constructor TKOLTrackBar.Create(AOwner: TComponent);
begin
  inherited;
  Width := 200;
  DefaultWidth := Width;
  Height := 40;
  DefaultHeight := Height;
end;

procedure TKOLTrackBar.SetLineSize(const Value: Integer);
begin
  FLineSize := Value;
  Change;
end;

procedure TKOLTrackBar.SetOnScroll(const Value: TOnScroll);
begin
  FOnScroll := Value;
  Change;
end;

procedure TKOLTrackBar.SetOptions(const Value: TTrackbarOptions);
begin
  FOptions := Value;
  Change;
end;

procedure TKOLTrackBar.SetPageSize(const Value: Integer);
begin
  FPageSize := Value;
  Change;
end;

procedure TKOLTrackBar.SetPosition(const Value: Integer);
begin
  FPosition := Value;
  Change;
end;

procedure TKOLTrackBar.SetRangeMax(const Value: Integer);
begin
  FRangeMax := Value;
  Change;
end;

procedure TKOLTrackBar.SetRangeMin(const Value: Integer);
begin
  FRangeMin := Value;
  Change;
end;

procedure TKOLTrackBar.SetSelEnd(const Value: Integer);
begin
  FSelEnd := Value;
  Change;
end;

procedure TKOLTrackBar.SetSelStart(const Value: Integer);
begin
  FSelStart := Value;
  Change;
end;

procedure TKOLTrackBar.SetThumbLen(const Value: Integer);
begin
  FThumbLen := Value;
  Change;
end;

procedure TKOLTrackBar.SetupConstruct(SL: TStringList; const AName,
  AParent, Prefix: string);
var
  S                 : string;
begin
  S := GenerateTransparentInits;
  SL.Add(Prefix + AName + ' := PTrackbar( New' + TypeName + '( '
    + SetupParams(AName, AParent) + ' )' + S + ');');
end;

procedure TKOLTrackBar.SetupFirst(SL: TStringList; const AName, AParent,
  Prefix: string);
begin
  inherited;
  if RangeMin <> 0 then
    SL.Add(Prefix + AName + '.RangeMin := ' + IntToStr(RangeMin) + ';');
  if RangeMax <> 0 then
    SL.Add(Prefix + AName + '.RangeMax := ' + IntToStr(RangeMax) + ';');
  if PageSize <> 0 then
    SL.Add(Prefix + AName + '.PageSize := ' + IntToStr(PageSize) + ';');
  if LineSize <> 0 then
    SL.Add(Prefix + AName + '.LineSize := ' + IntToStr(LineSize) + ';');
  if Position <> 0 then
    SL.Add(Prefix + AName + '.Position := ' + IntToStr(Position) + ';');
  if ThumbLen <> 0 then
    SL.Add(Prefix + AName + '.ThumbLen := ' + IntToStr(ThumbLen) + ';');
  if SelStart <> 0 then
    SL.Add(Prefix + AName + '.SelStart := ' + IntToStr(SelStart) + ';');
  if SelEnd <> 0 then
    SL.Add(Prefix + AName + '.SelEnd := ' + IntToStr(SelEnd) + ';');
end;

function TKOLTrackBar.SetupParams(const AName, AParent: string): string;
var
  S                 : string;
begin
  S := '';
  if trbAutoTicks in Options then S := 'trbAutoTicks,';
  if trbEnableSelRange in Options then S := S + 'trbEnableSelRange,';
  if trbFixedLength in Options then S := S + 'trbFixedLength,';
  if trbNoThumb in Options then S := S + 'trbNoThumb,';
  if trbNoTicks in Options then S := S + 'trbNoTicks,';
  if trbTooltips in Options then S := S + 'trbTooltips,';
  if trbTopLeftMarks in Options then S := S + 'trbTopLeftMarks,';
  if trbVertical in Options then S := S + 'trbVertical,';
  if trbNoBorder in Options then S := S + 'trbNoBorder,';
  S := Copy(S, 1, Length(S) - 1);
  Result := AParent + ', [' + S + '], ';
  if TMethod(OnScroll).Code <> nil then
    Result := Result + 'Result.' + ParentForm.MethodName(TMethod(OnScroll).Code)
  else
    Result := Result + 'nil';
end;

function TKOLTrackBar.TabStopByDefault: Boolean;
begin
  Result := TRUE;
end;

{ TSPCDirectoryEditBox }

constructor TSPCDirectoryEditBox.Create;
var
  TS                : string;
begin
  inherited;
  Width := 145;
  Height := 21;
  Title := 'Select folder:';
  GetDir(0, TS);
  Path := TS;
  Font.FontHeight := -11;
  Color := $FFFFFF;
end;

function TSPCDirectoryEditBox.AdditionalUnits;
begin
  Result := ', KOLCCtrls';
end;

procedure TSPCDirectoryEditBox.SetPath(Value: string);
begin
  if DirectoryExists(Value) then fPath := Value else fPath := '';
  Change;
end;

procedure TSPCDirectoryEditBox.SetCaptionEmpty(Value: string);
begin
  fCaptionEmpty := Value;
  Change;
end;

procedure TSPCDirectoryEditBox.SetTitle(Value: string);
begin
  fTitle := Value;
  Change;
end;

procedure TSPCDirectoryEditBox.SetupFirst;
begin
  inherited;
  SL.Add(Prefix + AName + '.Color:=' + IntToStr(Color) + ';');
  SL.Add(Prefix + AName + '.Title:=''' + Title + ''';');
  SL.Add(Prefix + AName + '.CaptionEmpty:=''' + CaptionEmpty + ''';');
  SL.Add(Prefix + AName + '.Initialize;');
  SL.Add(Prefix + AName + '.Path:=''' + Path + ''';');
  SL.Add(Prefix + AName + '.Top:=' + IntToStr(Top) + ';');
  SL.Add(Prefix + AName + '.Left:=' + IntToStr(Left) + ';');
  SL.Add(Prefix + AName + '.Width:=' + IntToStr(Width) + ';');
  SL.Add(Prefix + AName + '.Height:=' + IntToStr(Height) + ';');
end;

{ TSPCDirectoryListBox }

procedure TSPCDirectoryListBox.SetIndent(Value: Boolean);
begin
  fDoIndent := Value;
  Change;
end;

constructor TSPCDirectoryListBox.Create;
var
  TS                : string;
begin
  inherited;
  Width := 145;
  Height := 105;
  DoIndent := True;
  GetDir(0, TS);
  Path := TS;
end;

function TSPCDirectoryListBox.AdditionalUnits;
begin
  Result := ', KOLCCtrls';
end;

function Boolean2Str(b: Boolean): string;
begin
  if b then
    Result := 'True'
  else
    Result := 'False';
end;

procedure TSPCDirectoryListBox.SetupFirst;
//var St: string;
begin
  inherited;
  SL.Add(Prefix + AName + '.Top:=' + IntToStr(Top) + ';');
  SL.Add(Prefix + AName + '.Left:=' + IntToStr(Left) + ';');
  SL.Add(Prefix + AName + '.Width:=' + IntToStr(Width) + ';');
  SL.Add(Prefix + AName + '.Height:=' + IntToStr(Height) + ';');
  SL.Add(Prefix + AName + '.DoIndent:=' + Boolean2Str(DoIndent) + ';');
  SL.Add(Prefix + AName + '.IntegralHeight:=' + Boolean2Str(IntegralHeight) + ';');
  SL.Add(Prefix + AName + '.Path:=''' + Path + ''';');
end;

procedure TSPCDirectoryListBox.SetupLast(SL: TStringList; const AName, AParent, Prefix: string);
begin
  if Assigned(fFileListBox) then if Length(fFileListBox.Name) > 0 then SL.Add(Prefix + AName + '.FileListBox:=Result.' + fFileListBox.Name + ';');
end;

procedure TSPCDirectoryListBox.SetFileListBox(Value: TSPCFileListBox);
begin
  fFileListBox := Value;
  Change;
end;

procedure TSPCDirectoryListBox.SetIntegralHeight(Value: Boolean);
begin
  fIntegralHeight := Value;
  Change;
end;

procedure TSPCDirectoryListBox.SetPath(Value: string);
var
  fT                : string;
begin
  fT := Value;
  if Value[Length(Value)] = '\' then fT := Value else
    if Length(Value) = 1 then fT := Value + ':\' else fT := Value + '\';
  if DirectoryExists(fT) then fPath := fT else fPath := '';
  Change;
end;

{ TSPCDriveComboBox }

constructor TSPCDriveComboBox.Create;
var
  TS                : string;
begin
  inherited;
  Width := 145;
  Height := 22;
  Color := clWhite;
  GetDir(0, TS);
  Drive := TS[1];
end;

function TSPCDriveComboBox.AdditionalUnits;
begin
  Result := ', KOLCCtrls';
end;

procedure TSPCDriveComboBox.SetupFirst;
begin
  inherited;
  SL.Add(Prefix + AName + '.Top:=' + IntToStr(Top) + ';');
  SL.Add(Prefix + AName + '.Left:=' + IntToStr(Left) + ';');
  SL.Add(Prefix + AName + '.Width:=' + IntToStr(Width) + ';');
  SL.Add(Prefix + AName + '.Height:=' + IntToStr(Height) + ';');
  SL.Add(Prefix + AName + '.Color:=' + IntToStr(Color) + ';');
  SL.Add(Prefix + AName + '.Drive:=''' + Drive + ''';');
end;

procedure TSPCDriveComboBox.SetupLast(SL: TStringList; const AName, AParent, Prefix: string);
begin
  if Assigned(fDirectoryListBox) then if Length(fDirectoryListBox.Name) > 0 then SL.Add(Prefix + AName + '.DirectoryListBox:=Result.' + fDirectoryListBox.Name + ';');
end;

procedure TSPCDriveComboBox.SetDirectoryListBox(Value: TSPCDirectoryListBox);
begin
  fDirectoryListBox := Value;
  Change;
end;

procedure TSPCDriveComboBox.SetDrive;
var
  fC                : Char;
begin
  fC := Value;
  if DirectoryExists(fC + ':') then
    fDrive := Value;
  Change;
end;

{ TSPCFileListBox }

constructor TSPCFileListBox.Create;
var
  TS                : string;
begin
  inherited;
  Width := 145;
  Height := 105;
  Filters := '*.*';
  DoCase := ctLower;
  GetDir(0, TS);
  Path := TS;
  Font.FontHeight := -11;
end;

function TSPCFileListBox.AdditionalUnits;
begin
  Result := ', KOLCCtrls';
end;

procedure TSPCFileListBox.SetupFirst;
var
  St                : string;
begin
  inherited;
  case DoCase of
    ctDefault: St := 'ctDefault';
    ctLower: St := 'ctLower';
    ctUpper: St := 'ctUpper';
  end;
  SL.Add(Prefix + AName + '.DoCase:=' + St + ';');
  SL.Add(Prefix + AName + '.IntegralHeight:=' + Boolean2Str(IntegralHeight) + ';');
  SL.Add(Prefix + AName + '.Filters:=''' + Filters + ''';');
  SL.Add(Prefix + AName + '.Color:=' + IntToStr(Color) + ';');
  SL.Add(Prefix + AName + '.Top:=' + IntToStr(Top) + ';');
  SL.Add(Prefix + AName + '.Left:=' + IntToStr(Left) + ';');
  SL.Add(Prefix + AName + '.Width:=' + IntToStr(Width) + ';');
  SL.Add(Prefix + AName + '.Height:=' + IntToStr(Height) + ';');
  SL.Add(Prefix + AName + '.Path:=''' + Path + ''';');
  SL.Add(Prefix + AName + '.ExecuteOnDblClk:=' + Boolean2Str(ExecuteOnDblClk) + ';');
  case fSortBy of
    sbName: SL.Add(Prefix + AName + '._SortBy:=sbName;');
    sbExtention: SL.Add(Prefix + AName + '._SortBy:=sbExtention;');
  end;
end;

procedure TSPCFileListBox.SetCase(Value: TCase);
begin
  fDoCase := Value;
  Change;
end;

procedure TSPCFileListBox.SetIntegralHeight(Value: Boolean);
begin
  fIntegralHeight := Value;
  Change;
end;

procedure TSPCFileListBox.SetFilters(Value: string);
begin
  fFilters := Value;
  Change;
end;

procedure TSPCFileListBox.SetPath(Value: string);
begin
  if DirectoryExists(Value) then
  begin
    if Value[Length(Value)] = '\' then fPath := Value else fPath := Value + '\';
  end else fPath := '';
  Change;
end;

procedure TSPCFileListBox.SetExecuteOnDblClk(Value: Boolean);
begin
  fExecuteOnDblClk := Value;
  Change;
end;

procedure TSPCFileListBox.SetSortBy(Value: TSortBy);
begin
  fSortBy := Value;
  Change;
end;

{ TSPCFilterComboBox }

constructor TSPCFilterComboBox.Create;
//var
//  TS: string;
begin
  inherited;
  Width := 145;
  Height := 22;
  Color := clWhite;
  fLines := TStringList.Create;
  Font.FontHeight := -11;
end;

function TSPCFilterComboBox.AdditionalUnits;
begin
  Result := ', KOLCCtrls';
end;

procedure TSPCFilterComboBox.SetFileListBox(Value: TSPCFileListBox);
begin
  fFileListBox := Value;
  Change;
end;

{procedure TSPCFilterComboBox.SetText;
begin
  fLines.Text:=Value.Text;
  Change;
end;

function TSPCFilterComboBox.GetText: TStrings;
begin
  Result:=fLines;
end;}

procedure TSPCFilterComboBox.SetupFirst;
//var
//  i: Integer;
begin
  inherited;
  if (Length(FLines.Text) > 0) then
    AddLongTextField(SL, Prefix, AName + '.Text:=', FLines.Text, ';');
  SL.Add(Prefix + AName + '.Color:=' + IntToStr(Color) + ';');
  //   SL.Add( Prefix + AName + '.BuildList;');
  SL.Add(Prefix + AName + '.Top:=' + IntToStr(Top) + ';');
  SL.Add(Prefix + AName + '.Left:=' + IntToStr(Left) + ';');
  SL.Add(Prefix + AName + '.Width:=' + IntToStr(Width) + ';');
  SL.Add(Prefix + AName + '.Height:=' + IntToStr(Height) + ';');
end;

procedure TSPCFilterComboBox.SetupLast(SL: TStringList; const AName, AParent, Prefix: string);
begin
  if Assigned(fFileListBox) then if Length(fFileListBox.Name) > 0 then SL.Add(Prefix + AName + '.FileListBox:=Result.' + fFileListBox.Name + ';');
end;

{ TSPCStatusBar }

constructor TSPCStatusBar.Create;
//var
//  TS: string;
begin
  inherited;
  Width := 145;
  Height := 19;
  Align := TKOLAlign(caBottom);
end;

function TSPCStatusBar.AdditionalUnits;
begin
  Result := ', KOLCCtrls';
end;

procedure TSPCStatusBar.SetupFirst;
//var
//  St: string;
begin
  inherited;
  SL.Add(Prefix + AName + '.Top:=' + IntToStr(Top) + ';');
  SL.Add(Prefix + AName + '.Left:=' + IntToStr(Left) + ';');
  SL.Add(Prefix + AName + '.Width:=' + IntToStr(Width) + ';');
  SL.Add(Prefix + AName + '.Height:=' + IntToStr(Height) + ';');
  SL.Add(Prefix + AName + '.SimpleStatusText:=''' + SimpleStatusText + ''';');
  SL.Add(Prefix + AName + '.SizeGrip:=' + Boolean2Str(SizeGrip) + ';');
end;

procedure TSPCStatusBar.SetSimpleStatusText(Value: string);
begin
  fSimpleStatusText := Value;
  Change;
end;

procedure TSPCStatusBar.SetSizeGrip(Value: Boolean);
begin
  fSizeGrip := Value;
  Change;
end;

end.

