Fduallst.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:6k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {         Delphi VCL Extensions (RX)                    }
  4. {                                                       }
  5. {         Copyright (c) 1995 AO ROSNO                   }
  6. {                                                       }
  7. {*******************************************************}
  8. unit FDualLst;
  9. {$I RX.INC}
  10. {$L-,S-}
  11. interface
  12. uses SysUtils, {$IFDEF WIN32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF}
  13.   Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, RXCtrls,
  14.   ExtCtrls, Buttons;
  15. type
  16.   TDualListForm = class(TForm)
  17.     SrcList: TTextListBox;
  18.     DstList: TTextListBox;
  19.     SrcLabel: TLabel;
  20.     DstLabel: TLabel;
  21.     IncBtn: TButton;
  22.     IncAllBtn: TButton;
  23.     ExclBtn: TButton;
  24.     ExclAllBtn: TButton;
  25.     OkBtn: TButton;
  26.     CancelBtn: TButton;
  27.     HelpBtn: TButton;
  28.     Bevel1: TBevel;
  29.     procedure IncBtnClick(Sender: TObject);
  30.     procedure IncAllBtnClick(Sender: TObject);
  31.     procedure ExclBtnClick(Sender: TObject);
  32.     procedure ExclAllBtnClick(Sender: TObject);
  33.     procedure SrcListDragOver(Sender, Source: TObject; X, Y: Integer;
  34.       State: TDragState; var Accept: Boolean);
  35.     procedure DstListDragOver(Sender, Source: TObject; X, Y: Integer;
  36.       State: TDragState; var Accept: Boolean);
  37.     procedure SrcListDragDrop(Sender, Source: TObject; X, Y: Integer);
  38.     procedure DstListDragDrop(Sender, Source: TObject; X, Y: Integer);
  39.     procedure SrcListKeyDown(Sender: TObject; var Key: Word;
  40.       Shift: TShiftState);
  41.     procedure DstListKeyDown(Sender: TObject; var Key: Word;
  42.       Shift: TShiftState);
  43.     procedure HelpBtnClick(Sender: TObject);
  44.     procedure FormCreate(Sender: TObject);
  45.     procedure ListClick(Sender: TObject);
  46.   private
  47.     { Private declarations }
  48.     function GetShowHelp: Boolean;
  49.     procedure SetShowHelp(Value: Boolean);
  50.   protected
  51.     procedure CreateParams(var Params: TCreateParams); override;
  52.   public
  53.     { Public declarations }
  54.     procedure SetButtons;
  55.     property ShowHelp: Boolean read GetShowHelp write SetShowHelp
  56.       default True;
  57. end;
  58. implementation
  59. uses Consts, VCLUtils, BoxProcs;
  60. {$R *.DFM}
  61. { TDualListForm }
  62. procedure TDualListForm.CreateParams(var Params: TCreateParams);
  63. begin
  64.   inherited CreateParams(Params);
  65. end;
  66. procedure TDualListForm.SetButtons;
  67. var
  68.   SrcEmpty, DstEmpty: Boolean;
  69. begin
  70.   SrcEmpty := (SrcList.Items.Count = 0);
  71.   DstEmpty := (DstList.Items.Count = 0);
  72.   IncBtn.Enabled := not SrcEmpty and (SrcList.SelCount > 0);
  73.   IncAllBtn.Enabled := not SrcEmpty;
  74.   ExclBtn.Enabled := not DstEmpty and (DstList.SelCount > 0);
  75.   ExclAllBtn.Enabled := not DstEmpty;
  76. end;
  77. function TDualListForm.GetShowHelp: Boolean;
  78. begin
  79.   Result := (HelpBtn.Enabled) and (HelpBtn.Visible);
  80. end;
  81. procedure TDualListForm.SetShowHelp(Value: Boolean);
  82. const
  83.   x_FrmBtn = 16;
  84.   x_GrpBtn = 15;
  85.   x_BtnBtn = 8;
  86. begin
  87.   with HelpBtn do begin
  88.     Enabled := Value;
  89.     Visible := Value;
  90.   end;
  91.   if Value then begin
  92.     HelpBtn.Left := Width - HelpBtn.Width - x_FrmBtn;
  93.     CancelBtn.Left := HelpBtn.Left - CancelBtn.Width - x_GrpBtn;
  94.     OkBtn.Left := CancelBtn.Left - OkBtn.Width - x_BtnBtn;;
  95.   end
  96.   else begin
  97.     CancelBtn.Left := Width - CancelBtn.Width - x_FrmBtn;
  98.     OkBtn.Left := CancelBtn.Left - OkBtn.Width - x_BtnBtn;;
  99.   end;
  100. end;
  101. procedure TDualListForm.IncBtnClick(Sender: TObject);
  102. begin
  103.   BoxMoveSelectedItems(SrcList, DstList);
  104.   SetButtons;
  105. end;
  106. procedure TDualListForm.IncAllBtnClick(Sender: TObject);
  107. begin
  108.   BoxMoveAllItems(SrcList, DstList);
  109.   SetButtons;
  110. end;
  111. procedure TDualListForm.ExclBtnClick(Sender: TObject);
  112. begin
  113.   BoxMoveSelectedItems(DstList, SrcList);
  114.   SetButtons;
  115. end;
  116. procedure TDualListForm.ExclAllBtnClick(Sender: TObject);
  117. begin
  118.   BoxMoveAllItems(DstList, SrcList);
  119.   SetButtons;
  120. end;
  121. procedure TDualListForm.SrcListDragOver(Sender, Source: TObject; X,
  122.   Y: Integer; State: TDragState; var Accept: Boolean);
  123. begin
  124.   BoxDragOver(SrcList, Source, X, Y, State, Accept, SrcList.Sorted);
  125.   if State = dsDragLeave then
  126.     (Source as TTextListBox).DragCursor := crDrag;
  127.   if (State = dsDragEnter) and ((Source as TTextListBox).SelCount > 1) then
  128.     (Source as TTextListBox).DragCursor := crMultiDrag;
  129. end;
  130. procedure TDualListForm.DstListDragOver(Sender, Source: TObject; X,
  131.   Y: Integer; State: TDragState; var Accept: Boolean);
  132. begin
  133.   BoxDragOver(DstList, Source, X, Y, State, Accept, DstList.Sorted);
  134.   if State = dsDragLeave then
  135.     (Source as TTextListBox).DragCursor := crDrag;
  136.   if (State = dsDragEnter) and ((Source as TTextListBox).SelCount > 1) then
  137.     (Source as TTextListBox).DragCursor := crMultiDrag;
  138. end;
  139. procedure TDualListForm.SrcListDragDrop(Sender, Source: TObject; X,
  140.   Y: Integer);
  141. begin
  142.   if Source = DstList then ExclBtnClick(SrcList)
  143.   else if Source = SrcList then begin
  144.     BoxMoveFocusedItem(SrcList, SrcList.ItemAtPos(Point(X, Y), True));
  145.   end;
  146. end;
  147. procedure TDualListForm.DstListDragDrop(Sender, Source: TObject; X,
  148.   Y: Integer);
  149. begin
  150.   if Source = SrcList then IncBtnClick(DstList)
  151.   else if Source = DstList then begin
  152.     BoxMoveFocusedItem(DstList, DstList.ItemAtPos(Point(X, Y), True));
  153.   end;
  154. end;
  155. procedure TDualListForm.SrcListKeyDown(Sender: TObject; var Key: Word;
  156.   Shift: TShiftState);
  157. var
  158.   Incr: Integer;
  159. begin
  160.   if not SrcList.Sorted then begin
  161.     if (ssCtrl in Shift) and ((Key = VK_DOWN) or (Key = VK_UP)) then begin
  162.       if Key = VK_DOWN then Incr := 1
  163.       else Incr := -1;
  164.       BoxMoveFocusedItem(SrcList, SrcList.ItemIndex + Incr);
  165.       Key := 0;
  166.     end;
  167.   end;
  168. end;
  169. procedure TDualListForm.DstListKeyDown(Sender: TObject; var Key: Word;
  170.   Shift: TShiftState);
  171. var
  172.   Incr: Integer;
  173. begin
  174.   if not DstList.Sorted then begin
  175.     if (ssCtrl in Shift) and ((Key = VK_DOWN) or (Key = VK_UP)) then begin
  176.       if Key = VK_DOWN then Incr := 1
  177.       else Incr := -1;
  178.       BoxMoveFocusedItem(DstList, DstList.ItemIndex + Incr);
  179.       Key := 0;
  180.     end;
  181.   end;
  182. end;
  183. procedure TDualListForm.HelpBtnClick(Sender: TObject);
  184. begin
  185.   Application.HelpContext(HelpContext);
  186. end;
  187. procedure TDualListForm.FormCreate(Sender: TObject);
  188. begin
  189.   OkBtn.Caption := ResStr(SOKButton);
  190.   CancelBtn.Caption := ResStr(SCancelButton);
  191.   HelpBtn.Caption := ResStr(SHelpButton);
  192.   if NewStyleControls then Font.Style := [];
  193. end;
  194. procedure TDualListForm.ListClick(Sender: TObject);
  195. begin
  196.   SetButtons;
  197. end;
  198. end.