294 lines
8.1 KiB
ObjectPascal
294 lines
8.1 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvFDualLst.PAS, released on 2002-07-04.
|
|
|
|
The Initial Developers of the Original Code are: Fedor Koshevnikov, Igor Pavluk and Serge Korolev
|
|
Copyright (c) 1997, 1998 Fedor Koshevnikov, Igor Pavluk and Serge Korolev
|
|
Copyright (c) 2001,2002 SGB Software
|
|
All Rights Reserved.
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.sourceforge.net
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvDualListForm.pas 10612 2006-05-19 19:04:09Z jfudickar $
|
|
|
|
unit JvDualListForm;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF UNITVERSIONING}
|
|
JclUnitVersioning,
|
|
{$ENDIF UNITVERSIONING}
|
|
Windows, Classes, Graphics, Controls, Forms, StdCtrls, ExtCtrls,
|
|
{$IFDEF VCL}
|
|
JvListBox, JvCtrls,
|
|
{$ENDIF VCL}
|
|
JvComponent, JvExStdCtrls;
|
|
|
|
type
|
|
{$IFDEF VisualCLX}
|
|
TJvListBox = TListBox;
|
|
{$ENDIF VisualCLX}
|
|
TJvDualListForm = class(TJvForm)
|
|
SrcList: TJvListBox;
|
|
DstList: TJvListBox;
|
|
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
|
|
function GetShowHelp: Boolean;
|
|
procedure SetShowHelp(Value: Boolean);
|
|
{$IFDEF VCL}
|
|
protected
|
|
procedure CreateParams(var Params: TCreateParams); override;
|
|
{$ENDIF VCL}
|
|
public
|
|
procedure SetButtons;
|
|
property ShowHelp: Boolean read GetShowHelp write SetShowHelp default True;
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
const
|
|
UnitVersioning: TUnitVersionInfo = (
|
|
RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_32/run/JvDualListForm.pas $';
|
|
Revision: '$Revision: 10612 $';
|
|
Date: '$Date: 2006-05-19 21:04:09 +0200 (ven., 19 mai 2006) $';
|
|
LogPath: 'JVCL\run'
|
|
);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
implementation
|
|
|
|
uses
|
|
Consts,
|
|
JvBoxProcs;
|
|
|
|
{$R *.dfm}
|
|
|
|
{$IFDEF VCL}
|
|
procedure TJvDualListForm.CreateParams(var Params: TCreateParams);
|
|
begin
|
|
inherited CreateParams(Params);
|
|
end;
|
|
{$ENDIF VCL}
|
|
|
|
procedure TJvDualListForm.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 TJvDualListForm.GetShowHelp: Boolean;
|
|
begin
|
|
Result := HelpBtn.Enabled and HelpBtn.Visible;
|
|
end;
|
|
|
|
procedure TJvDualListForm.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 TJvDualListForm.IncBtnClick(Sender: TObject);
|
|
begin
|
|
BoxMoveSelectedItems(SrcList, DstList);
|
|
SetButtons;
|
|
end;
|
|
|
|
procedure TJvDualListForm.IncAllBtnClick(Sender: TObject);
|
|
begin
|
|
BoxMoveAllItems(SrcList, DstList);
|
|
SetButtons;
|
|
end;
|
|
|
|
procedure TJvDualListForm.ExclBtnClick(Sender: TObject);
|
|
begin
|
|
BoxMoveSelectedItems(DstList, SrcList);
|
|
SetButtons;
|
|
end;
|
|
|
|
procedure TJvDualListForm.ExclAllBtnClick(Sender: TObject);
|
|
begin
|
|
BoxMoveAllItems(DstList, SrcList);
|
|
SetButtons;
|
|
end;
|
|
|
|
procedure TJvDualListForm.SrcListDragOver(Sender, Source: TObject;
|
|
X, Y: Integer; State: TDragState; var Accept: Boolean);
|
|
begin
|
|
BoxDragOver(SrcList, Source, X, Y, State, Accept, SrcList.Sorted);
|
|
{$IFDEF VCL}
|
|
if State = dsDragLeave then
|
|
(Source as TJvListBox).DragCursor := crDrag;
|
|
if (State = dsDragEnter) and ((Source as TJvListBox).SelCount > 1) then
|
|
(Source as TJvListBox).DragCursor := crMultiDrag;
|
|
{$ENDIF VCL}
|
|
end;
|
|
|
|
procedure TJvDualListForm.DstListDragOver(Sender, Source: TObject;
|
|
X, Y: Integer; State: TDragState; var Accept: Boolean);
|
|
begin
|
|
BoxDragOver(DstList, Source, X, Y, State, Accept, DstList.Sorted);
|
|
{$IFDEF VCL}
|
|
if State = dsDragLeave then
|
|
(Source as TJvListBox).DragCursor := crDrag;
|
|
if (State = dsDragEnter) and ((Source as TJvListBox).SelCount > 1) then
|
|
(Source as TJvListBox).DragCursor := crMultiDrag;
|
|
{$ENDIF VCL}
|
|
end;
|
|
|
|
procedure TJvDualListForm.SrcListDragDrop(Sender, Source: TObject;
|
|
X, Y: Integer);
|
|
begin
|
|
if Source = DstList then
|
|
ExclBtnClick(SrcList)
|
|
else
|
|
if Source = SrcList then
|
|
BoxMoveFocusedItem(SrcList, SrcList.ItemAtPos(Point(X, Y), True));
|
|
end;
|
|
|
|
procedure TJvDualListForm.DstListDragDrop(Sender, Source: TObject;
|
|
X, Y: Integer);
|
|
begin
|
|
if Source = SrcList then
|
|
IncBtnClick(DstList)
|
|
else
|
|
if Source = DstList then
|
|
BoxMoveFocusedItem(DstList, DstList.ItemAtPos(Point(X, Y), True));
|
|
end;
|
|
|
|
procedure TJvDualListForm.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 TJvDualListForm.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 TJvDualListForm.HelpBtnClick(Sender: TObject);
|
|
begin
|
|
{$IFDEF VCL}
|
|
Application.HelpContext(HelpContext);
|
|
{$ENDIF VCL}
|
|
{$IFDEF VisualCLX}
|
|
Application.ContextHelp(HelpContext);
|
|
{$ENDIF VisualCLX}
|
|
end;
|
|
|
|
procedure TJvDualListForm.FormCreate(Sender: TObject);
|
|
begin
|
|
OkBtn.Caption := SOKButton;
|
|
CancelBtn.Caption := SCancelButton;
|
|
HelpBtn.Caption := SHelpButton;
|
|
{$IFDEF VCL}
|
|
if NewStyleControls then
|
|
Font.Style := [];
|
|
{$ENDIF VCL}
|
|
end;
|
|
|
|
procedure TJvDualListForm.ListClick(Sender: TObject);
|
|
begin
|
|
SetButtons;
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
initialization
|
|
RegisterUnitVersion(HInstance, UnitVersioning);
|
|
|
|
finalization
|
|
UnregisterUnitVersion(HInstance);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
end.
|