home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 September / Chip_2001-09_cd1.bin / zkuste / delphi / kolekce / d123456 / DFS.ZIP / ExtColEd.pas < prev    next >
Pascal/Delphi Source File  |  2000-02-23  |  7KB  |  272 lines

  1. unit ExtColEd;
  2. (******************************************************************************
  3. *
  4. * Description :  A Property Editor for the TdfsExtListColumns class
  5. *
  6. * Author      : Mike Lindre
  7. * Edited for use with TdfsExtListView v3.00 with Delphi 2 by Brad Stowers
  8. *
  9. *
  10. ******************************************************************************)
  11.  
  12. interface
  13.  
  14. uses
  15.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  16.   StdCtrls, ExtListView, DsgnIntf;
  17.  
  18. type
  19.   TfrmExtListColumns = class(TForm)
  20.     btnOk: TButton;
  21.     btnCancel: TButton;
  22.     GroupBox2: TGroupBox;
  23.     Label1: TLabel;
  24.     edtImageIndex: TEdit;
  25.     GroupBox3: TGroupBox;
  26.     lbColumns: TListBox;
  27.     btnNew: TButton;
  28.     btnDelete: TButton;
  29.     cmbAlignment: TComboBox;
  30.     Label2: TLabel;
  31.     procedure FormCreate(Sender: TObject);
  32.     procedure FormDestroy(Sender: TObject);
  33.     procedure btnNewClick(Sender: TObject);
  34.     procedure btnDeleteClick(Sender: TObject);
  35.     procedure lbColumnsClick(Sender: TObject);
  36.     procedure edtImageIndexChange(Sender: TObject);
  37.     procedure FormShow(Sender: TObject);
  38.     procedure cmbAlignmentChange(Sender: TObject);
  39.   private
  40.     { Private declarations }
  41.     Updating: Boolean;
  42.     FColumns: TdfsExtListColumns;
  43. //    Str: TStrings;
  44.     function  GetExtColumns: TdfsExtListColumns;
  45.     procedure SetExtColumns(Value: TdfsExtListColumns);
  46.     procedure RefreshList;
  47.     procedure BeginUpdate;
  48.     procedure EndUpdate;
  49.     procedure UpdateComboBox;
  50.   public
  51.     { Public declarations }
  52.     property ExtColumns: TdfsExtListColumns read GetExtColumns write SetExtColumns;
  53.   end;
  54.  
  55.   {The TClassProperty object is the default property editor for all
  56.    properties which are themselves objects. Users cannot modify object-type
  57.    properties directly, but the editor displays the name of the object type,
  58.    and allows editing of the object's properties as subproperties of the property.}
  59.  
  60.   {This is the Animation Property Class
  61.    Edit - Will Copy the Current TListColBitMaps Object in the Component
  62.           and display it in an Editor.
  63.  
  64.           This Editor will allow the Object to be replaced or cleared
  65.  
  66.    GetAttributes - Select and Edit TFrame Object only using
  67.                    a dialog box
  68.   }
  69.  
  70.   TdfsExtListColumnsProperty = class(TClassProperty)
  71.   public
  72.     procedure Edit; override;
  73.     function GetAttributes: TPropertyAttributes; override;
  74.   end;
  75.  
  76. implementation
  77.  
  78. {$R *.DFM}
  79.  
  80. uses ComCtrls,CommCtrl;
  81.  
  82. Const
  83.   STR_LEFT_JUST  = 0;
  84.   STR_RIGHT_JUST = 1;
  85.   ALIGN_STRS : array[STR_LEFT_JUST..STR_RIGHT_JUST] of string =
  86.      ('Left of Text','Right of Text');
  87.  
  88.  
  89. {  TdfsExtListColumnsProperty}
  90. procedure TdfsExtListColumnsProperty.Edit;
  91. var
  92.   frmExtListColumns: TfrmExtListColumns;
  93.   AListColumns: TdfsExtListColumns;
  94. begin
  95.   AListColumns := TdfsExtListColumns(GetOrdValue);
  96.   frmExtListColumns := TfrmExtListColumns.Create(Application);
  97.   try
  98.     frmExtListColumns.ExtColumns := AListColumns;
  99.     frmExtListColumns.ShowModal;
  100.     {If OK is pressed re-Copy the Object from the Editor to the Component}
  101.     If frmExtListColumns.ModalResult = mrOK then
  102.     begin
  103.        AListColumns.Assign(frmExtListColumns.ExtColumns);
  104.        Modified;
  105.     end;
  106.   finally
  107.     frmExtListColumns.Free;
  108.   end;
  109.  
  110. end;
  111.  
  112. function TdfsExtListColumnsProperty.GetAttributes: TPropertyAttributes;
  113. begin
  114.   {The property Can only be Edited using a Dialog}
  115.   Result := [paDialog];
  116. end;
  117.  
  118. procedure TfrmExtListColumns.FormCreate(Sender: TObject);
  119. begin
  120.   FColumns := TdfsExtListColumns.Create(nil);
  121.   Updating  := False;
  122. end;
  123.  
  124. procedure TfrmExtListColumns.FormDestroy(Sender: TObject);
  125. begin
  126.   FColumns.Free;
  127. end;
  128.  
  129. function  TfrmExtListColumns.GetExtColumns:TdfsExtListColumns;
  130. begin
  131.  Result := FColumns;
  132. end;
  133.  
  134. procedure TfrmExtListColumns.SetExtColumns(Value:TdfsExtListColumns);
  135. begin
  136.   FColumns.Assign(Value);
  137.   RefreshList;
  138. end;
  139.  
  140. procedure TfrmExtListColumns.RefreshList;
  141. var
  142.   Count: integer;
  143.   Align, Space:String;
  144. begin
  145.   lbColumns.Items.Clear;
  146.   for Count := 0 to FColumns.Count - 1 do
  147.   begin
  148.     if FColumns[Count].ImageIndex <> -1 then
  149.     begin
  150.       if FColumns[Count].ImageAlignment = ciaLeftOfText then
  151.         Align := ALIGN_STRS[STR_LEFT_JUST]
  152.       else
  153.         Align := ALIGN_STRS[STR_RIGHT_JUST];
  154.       if FColumns[Count].ImageIndex > 9 then
  155.         Space := '   '
  156.       else
  157.         Space := '     ';
  158.       lbColumns.Items.Add(IntToStr(Count) + ' - ' + 'Image    Index No: ' +
  159.          IntToStr(FColumns[Count].ImageIndex) + Space + 'Align: ' + Align);
  160.     end else
  161.       lbColumns.Items.Add(IntToStr(Count) + ' - ' + 'No Image');
  162.   end;
  163. end;
  164.  
  165. procedure TfrmExtListColumns.btnNewClick(Sender: TObject);
  166. begin
  167.   FColumns.Add;
  168.   RefreshList;
  169.   SendMessage(lbColumns.Handle,LB_SETCURSEL,lbColumns.Items.Count-1,0);
  170.   lbColumnsClick(nil);
  171. end;
  172.  
  173. procedure TfrmExtListColumns.btnDeleteClick(Sender: TObject);
  174. begin
  175.   if lbColumns.ItemIndex <> -1 then
  176.   begin
  177.     FColumns[lbColumns.ItemIndex].Free;
  178.     RefreshList;
  179.     SendMessage(lbColumns.Handle,LB_SETCURSEL,lbColumns.Items.Count-1,0);
  180.     lbColumnsClick(nil);
  181.   end;
  182. end;
  183.  
  184. procedure TfrmExtListColumns.lbColumnsClick(Sender: TObject);
  185. begin
  186.   BeginUpdate;
  187.   try
  188.     if lbColumns.ItemIndex <> -1 then
  189.     begin
  190.       edtImageIndex.Text := InttoStr(FColumns[lbColumns.ItemIndex].ImageIndex);
  191.       UpdateComboBox;
  192.     end;
  193.   finally
  194.     EndUpdate;
  195.   end;
  196. end;
  197.  
  198. procedure TfrmExtListColumns.UpdateComboBox;
  199. begin
  200.   if FColumns[lbColumns.ItemIndex].ImageIndex = -1 then
  201.   begin
  202.     cmbAlignment.Enabled := False;
  203.     SendMessage(cmbAlignment.Handle,CB_SETCURSEL,0,0);
  204.   end else begin
  205.     cmbAlignment.Enabled := True;
  206.     SendMessage(cmbAlignment.Handle,CB_SETCURSEL,
  207.        longint(FColumns[lbColumns.ItemIndex].ImageAlignment),0);
  208.   end;
  209. end;
  210.  
  211. procedure TfrmExtListColumns.edtImageIndexChange(Sender: TObject);
  212. var
  213.   X, Index: Integer;
  214. begin
  215.   if not Updating and (lbColumns.ItemIndex <> -1) then
  216.   begin
  217.     try
  218.       X := StrToInt(edtImageIndex.Text);
  219.       Index := lbColumns.ItemIndex;
  220.       FColumns[Index].ImageIndex := X;
  221.       RefreshList;
  222.       SendMessage(lbColumns.Handle,LB_SETCURSEL,Index,0);
  223.       UpdateComboBox;
  224.     except
  225.       // do nothing
  226.     end;
  227.   end;
  228. end;
  229.  
  230. procedure TfrmExtListColumns.BeginUpdate;
  231. begin
  232.   Updating := True;
  233. end;
  234.  
  235. procedure TfrmExtListColumns.EndUpdate;
  236. begin
  237.   Updating := False;
  238. end;
  239.  
  240. procedure TfrmExtListColumns.FormShow(Sender: TObject);
  241. begin
  242.   if lbColumns.Items.Count > 0 then
  243.   begin
  244.     SendMessage(lbColumns.Handle,LB_SETCURSEL,0,0);
  245.     lbColumnsClick(nil);
  246.   end;
  247. end;
  248.  
  249. procedure TfrmExtListColumns.cmbAlignmentChange(Sender: TObject);
  250. var
  251.   Index: Integer;
  252.   Align: TColumnImageAlign;
  253. begin
  254.   if not Updating and (lbColumns.ItemIndex <> -1) then
  255.   begin
  256.     try
  257.       if CompareText(cmbAlignment.Text,ALIGN_STRS[STR_LEFT_JUST]) = 0 then
  258.         Align := ciaLeftOfText
  259.       else
  260.         Align := ciaRightOfText;
  261.       Index := lbColumns.ItemIndex;
  262.       FColumns[Index].ImageAlignment := Align;
  263.       RefreshList;
  264.       SendMessage(lbColumns.Handle,LB_SETCURSEL,Index,0);
  265.     except
  266.       // do nothing
  267.     end;
  268.   end;
  269. end;
  270.  
  271. end.
  272.