Contributor: RICHARD HOWARD
{coolbox.pas}
{A note from the author:
 I needed to do some spiffy things with the listboxes so I wrote this. If it already exists, then great, but I couldn't find it. With this small program, you can multi-select items from ListBox1 and drag them to ListBox2. No big deal, except that you
 The really cool thing here is that you can select an item in ListBox2 and move it into a another spot within the list by using the arrows or by dragging and dropping. Again, I couldn't find any code that already did this. I hope you find this code us
Richard Howard 71553,2544
Mei Technology Corporation
26 August 1995}
unit CoolBox;
interface
uses
 SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
 Forms, Dialogs, StdCtrls, Buttons, Spin;
type
 TForm1 = class(TForm)
 ListBox1: TListBox;
 ListBox2: TListBox;
 SpinButton1: TSpinButton; {for moving items in listbox2.}
 procedure ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
 procedure ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
 procedure ListBox2MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
 procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
 procedure FormCreate(Sender: TObject);
 procedure MoveUp(Sender: TObject);
 procedure MoveDown(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
 MoveSelectedItem : Integer; {the item in ListBox2 being moved}
 DnListBox1 : Boolean; {indicates which listbox to work with}
 DnListBox2 : Boolean; {indicates which listbox to work with}
implementation
{$R *.DFM}
procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
 if (Source is TListBox) then Accept := True;
 {because this is such a small program, 'ACCEPT := True' would work. But
 larger programs need a little more control.}
end;
procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
var
 i : Integer; {serves two purposes: 1) a counting variable for ListBox1,
 and 2) the item that the SELECTED item is being dropped on to
 in ListBox 2}
begin {procedure}
 {instructions for moving items from ListBox1 to ListBox2}
 if DnListBox1 then
 begin {if 1}
 for i := 0 to ListBox1.Items.Count - 1 do {look at ALL items in ListBox1}
 begin {for}
 if ListBox1.Selected[i] then
 ListBox2.Items.Insert(ListBox2.ItemAtPos(Point(X,Y), True), ListBox1.Items[i]);
 ListBox1.Selected[i] := False; {after copying to LB2, UNselect it}
 end; {for}
 DnListBox1 := False;
 end; {if 1}
 {instructions for moving an item WITHIN ListBox2}
 if DnListBox2 then
 begin {if 2}
 {i = the item UNDER the moving, selected item}
 i := ListBox2.ItemAtPos(Point(X, Y), True);
 ListBox2.Items.Move(MoveSelectedItem, i); {puts the moved item into place}
 ListBox2.ItemIndex := i; {select (highlight) the item you moved}
 if i = -1 then ListBox2.ItemIndex := ListBox2.Items.Count-1;
 DnListBox2 := False;
 end; {if 2}
end; {procedure}
procedure TForm1.ListBox2MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin {procedure}
 DnListBox1 := False;{tells the OnDragDrop procedure which instructions to use}
 DnListBox2 := True;{tells the OnDragDrop procedure which instructions to use}
 if Button = mbLeft then
 if ListBox2.ItemAtPos(Point(X, Y), True)>= 0 then
 MoveSelectedItem := ListBox2.ItemIndex;
end; {procedure}
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
 DnListBox1 := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 {I just threw these in here to look nice. They can be pretty handy.}
 SendMessage(ListBox1.Handle, LB_SetHorizontalExtent, 1000, LongInt(0));
 SendMessage(ListBox2.Handle, LB_SetHorizontalExtent, 1000, LongInt(0));
end;
procedure TForm1.MoveUp(Sender: TObject);
var
 i : Integer;
begin {procedure}
 if ListBox2.ItemIndex> 0 then
 begin {if}
 i := ListBox2.ItemIndex;
 ListBox2.Items.Move(i, i-1);
 ListBox2.ItemIndex := i-1;
 end; {if}
end; {procedure}
procedure TForm1.MoveDown(Sender: TObject);
var
 i : Integer;
begin {procedure}
 if (ListBox2.ItemIndex < ListBox2.Items.Count-1) and (ListBox2.ItemIndex  -1) then
 begin {if}
 i := ListBox2.ItemIndex;
 ListBox2.Items.Move(i, i+1);
 ListBox2.ItemIndex := i+1;
 end; {if}
end; {procedure}
end.
{*********************}
{coolproj.dpr}
program Coolproj;
uses
 Forms,
 Coolbox in 'COOLBOX.PAS' {Form1};
{$R *.RES}
begin
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.
{*********************}
{Coolbox.dfm}
object Form1: TForm1
 Left = 245
 Top = 163
 Width = 349
 Height = 253
 Caption = 'Form1'
 Font.Color = clWindowText
 Font.Height = -13
 Font.Name = 'System'
 Font.Style = []
 PixelsPerInch = 96
 OnCreate = FormCreate
 TextHeight = 16
 object ListBox1: TListBox
 Left = 16
 Top = 24
 Width = 129
 Height = 177
 DragMode = dmAutomatic
 ItemHeight = 16
 Items.Strings = (
 'List 1'
 'List 2'
 'List 3'
 'List 4'
 'List 5'
 'List 6')
 MultiSelect = True
 TabOrder = 0
 OnDragOver = ListBox1DragOver
 end
 object ListBox2: TListBox
 Left = 168
 Top = 24
 Width = 129
 Height = 177
 DragMode = dmAutomatic
 ItemHeight = 16
 Items.Strings = (
 'Test 1'
 'Test 2'
 'Test 3'
 'Test 4')
 TabOrder = 1
 OnDragDrop = ListBox2DragDrop
 OnDragOver = ListBox2DragOver
 OnMouseDown = ListBox2MouseDown
 end
 object SpinButton1: TSpinButton
 Left = 308
 Top = 76
 Width = 20
 Height = 53
 DownGlyph.Data = {
 7E040000424D7E04000000000000360400002800000009000000060000000100
 0800000000004800000000000000000000000000000000000000000000000000
 80000080000000808000800000008000800080800000C0C0C00061898D00A5BF
 C200000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 000000000000000000000000000000000000D2E0E100A4A0A000808080000000
 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030303030303
 0303030000000303030300030303030000000303030000000303030000000303
 0000000000030300000003000000000000000300000003030303030303030300
 0000}
 TabOrder = 2
 UpGlyph.Data = {
 7E040000424D7E04000000000000360400002800000009000000060000000100
 0800000000004800000000000000000000000000000000000000000000000000
 80000080000000808000800000008000800080800000C0C0C00061898D00A5BF
 C200000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 000000000000000000000000000000000000D2E0E100A4A0A000808080000000
 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030303030303
 0303030000000300000000000000030000000303000000000003030000000303
 0300000003030300000003030303000303030300000003030303030303030300
 0000}
 OnDownClick = MoveDown
 OnUpClick = MoveUp
 end
end


AltStyle によって変換されたページ (->オリジナル) /