Fduallst.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:6k
- {*******************************************************}
- { }
- { Delphi VCL Extensions (RX) }
- { }
- { Copyright (c) 1995 AO ROSNO }
- { }
- {*******************************************************}
- unit FDualLst;
- {$I RX.INC}
- {$L-,S-}
- interface
- uses SysUtils, {$IFDEF WIN32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF}
- Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, RXCtrls,
- ExtCtrls, Buttons;
- type
- TDualListForm = class(TForm)
- SrcList: TTextListBox;
- DstList: TTextListBox;
- SrcLabel: TLabel;
- DstLabel: TLabel;
- IncBtn: TButton;
- IncAllBtn: TButton;
- ExclBtn: TButton;
- ExclAllBtn: TButton;
- OkBtn: TButton;
- CancelBtn: TButton;
- HelpBtn: TButton;
- Bevel1: TBevel;
- procedure IncBtnClick(Sender: TObject);
- procedure IncAllBtnClick(Sender: TObject);
- procedure ExclBtnClick(Sender: TObject);
- procedure ExclAllBtnClick(Sender: TObject);
- procedure SrcListDragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- procedure DstListDragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- procedure SrcListDragDrop(Sender, Source: TObject; X, Y: Integer);
- procedure DstListDragDrop(Sender, Source: TObject; X, Y: Integer);
- procedure SrcListKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure DstListKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure HelpBtnClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure ListClick(Sender: TObject);
- private
- { Private declarations }
- function GetShowHelp: Boolean;
- procedure SetShowHelp(Value: Boolean);
- protected
- procedure CreateParams(var Params: TCreateParams); override;
- public
- { Public declarations }
- procedure SetButtons;
- property ShowHelp: Boolean read GetShowHelp write SetShowHelp
- default True;
- end;
- implementation
- uses Consts, VCLUtils, BoxProcs;
- {$R *.DFM}
- { TDualListForm }
- procedure TDualListForm.CreateParams(var Params: TCreateParams);
- begin
- inherited CreateParams(Params);
- end;
- procedure TDualListForm.SetButtons;
- var
- SrcEmpty, DstEmpty: Boolean;
- begin
- SrcEmpty := (SrcList.Items.Count = 0);
- DstEmpty := (DstList.Items.Count = 0);
- IncBtn.Enabled := not SrcEmpty and (SrcList.SelCount > 0);
- IncAllBtn.Enabled := not SrcEmpty;
- ExclBtn.Enabled := not DstEmpty and (DstList.SelCount > 0);
- ExclAllBtn.Enabled := not DstEmpty;
- end;
- function TDualListForm.GetShowHelp: Boolean;
- begin
- Result := (HelpBtn.Enabled) and (HelpBtn.Visible);
- end;
- procedure TDualListForm.SetShowHelp(Value: Boolean);
- const
- x_FrmBtn = 16;
- x_GrpBtn = 15;
- x_BtnBtn = 8;
- begin
- with HelpBtn do begin
- Enabled := Value;
- Visible := Value;
- end;
- if Value then begin
- HelpBtn.Left := Width - HelpBtn.Width - x_FrmBtn;
- CancelBtn.Left := HelpBtn.Left - CancelBtn.Width - x_GrpBtn;
- OkBtn.Left := CancelBtn.Left - OkBtn.Width - x_BtnBtn;;
- end
- else begin
- CancelBtn.Left := Width - CancelBtn.Width - x_FrmBtn;
- OkBtn.Left := CancelBtn.Left - OkBtn.Width - x_BtnBtn;;
- end;
- end;
- procedure TDualListForm.IncBtnClick(Sender: TObject);
- begin
- BoxMoveSelectedItems(SrcList, DstList);
- SetButtons;
- end;
- procedure TDualListForm.IncAllBtnClick(Sender: TObject);
- begin
- BoxMoveAllItems(SrcList, DstList);
- SetButtons;
- end;
- procedure TDualListForm.ExclBtnClick(Sender: TObject);
- begin
- BoxMoveSelectedItems(DstList, SrcList);
- SetButtons;
- end;
- procedure TDualListForm.ExclAllBtnClick(Sender: TObject);
- begin
- BoxMoveAllItems(DstList, SrcList);
- SetButtons;
- end;
- procedure TDualListForm.SrcListDragOver(Sender, Source: TObject; X,
- Y: Integer; State: TDragState; var Accept: Boolean);
- begin
- BoxDragOver(SrcList, Source, X, Y, State, Accept, SrcList.Sorted);
- if State = dsDragLeave then
- (Source as TTextListBox).DragCursor := crDrag;
- if (State = dsDragEnter) and ((Source as TTextListBox).SelCount > 1) then
- (Source as TTextListBox).DragCursor := crMultiDrag;
- end;
- procedure TDualListForm.DstListDragOver(Sender, Source: TObject; X,
- Y: Integer; State: TDragState; var Accept: Boolean);
- begin
- BoxDragOver(DstList, Source, X, Y, State, Accept, DstList.Sorted);
- if State = dsDragLeave then
- (Source as TTextListBox).DragCursor := crDrag;
- if (State = dsDragEnter) and ((Source as TTextListBox).SelCount > 1) then
- (Source as TTextListBox).DragCursor := crMultiDrag;
- end;
- procedure TDualListForm.SrcListDragDrop(Sender, Source: TObject; X,
- Y: Integer);
- begin
- if Source = DstList then ExclBtnClick(SrcList)
- else if Source = SrcList then begin
- BoxMoveFocusedItem(SrcList, SrcList.ItemAtPos(Point(X, Y), True));
- end;
- end;
- procedure TDualListForm.DstListDragDrop(Sender, Source: TObject; X,
- Y: Integer);
- begin
- if Source = SrcList then IncBtnClick(DstList)
- else if Source = DstList then begin
- BoxMoveFocusedItem(DstList, DstList.ItemAtPos(Point(X, Y), True));
- end;
- end;
- procedure TDualListForm.SrcListKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- var
- Incr: Integer;
- begin
- if not SrcList.Sorted then begin
- if (ssCtrl in Shift) and ((Key = VK_DOWN) or (Key = VK_UP)) then begin
- if Key = VK_DOWN then Incr := 1
- else Incr := -1;
- BoxMoveFocusedItem(SrcList, SrcList.ItemIndex + Incr);
- Key := 0;
- end;
- end;
- end;
- procedure TDualListForm.DstListKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- var
- Incr: Integer;
- begin
- if not DstList.Sorted then begin
- if (ssCtrl in Shift) and ((Key = VK_DOWN) or (Key = VK_UP)) then begin
- if Key = VK_DOWN then Incr := 1
- else Incr := -1;
- BoxMoveFocusedItem(DstList, DstList.ItemIndex + Incr);
- Key := 0;
- end;
- end;
- end;
- procedure TDualListForm.HelpBtnClick(Sender: TObject);
- begin
- Application.HelpContext(HelpContext);
- end;
- procedure TDualListForm.FormCreate(Sender: TObject);
- begin
- OkBtn.Caption := ResStr(SOKButton);
- CancelBtn.Caption := ResStr(SCancelButton);
- HelpBtn.Caption := ResStr(SHelpButton);
- if NewStyleControls then Font.Style := [];
- end;
- procedure TDualListForm.ListClick(Sender: TObject);
- begin
- SetButtons;
- end;
- end.