Hola amigos.
Voy al grano (de lleno al problema), como se dice en México, tengo un ListBox el cual lleno con algunos datos de 2 campos, y actualmente lo programe de una forma que actualmente ya no es práctico. Ahora necesito mover o cambiar de linea algun item que el usuario haya seleccionado, a otra linea ya sea antes o despues de la actual, esto para que?, digamos q este orden sera con el que se grabe en BD.
Bueno, talvez tengan una mejor idea de como mejorar esto. Estoy tratando de utilizar la tecla Shift+(Tecla de Flecha hacia arriba o hacia abajo), pero no me sale.
Seré mas explicito en lo que quiero hacer, quiero que el mismo usuario usando las teclas de Shift+flecha, pueda cambiar de posicion del registro que el haya seleccionado, al mismo tiempo que tambien pueda insertar y borrar, sé que talvez esto pueda resolverlo con el DataSet y asociarle un Navigator, pero no es factible por otras razones, largars de explicar, bueno el caso es que al final ya que el usuario haya terminado con el acomodo, tendra que grabar lo realizado y el mismo sistema les asignara un numero....el cual será consecutivo en el orden en que el usuario los haya ordernado.
ANTES DE ORDERNAR
CAMPO1 CAMPO1
23234 A
23090 H
23330 J
DESPUES DE ORDENAR
23330 J
23234 A
23090 H
He encontrado algunos ejemplos los cuales estoy estudiando, por ejemplo pasar lineas de ListBox a otro ListBox....esto me podria servir q en vez de utilizar otro ListBox use el mismo ListBox....bueno estoy en ese proceso, pero de igual manera les agradezco sus comentarios.
codigo q estoy estudiando
Código Delphi
[-]unit DragOnDualListBox;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Forms, Dialogs, Controls, StdCtrls,
Buttons;
type
TDualListDlg = class(TForm)
OKBtn: TButton;
SrcList: TListBox;
DstList: TListBox;
SrcLabel: TLabel;
DstLabel: TLabel;
IncludeBtn: TSpeedButton;
IncAllBtn: TSpeedButton;
ExcludeBtn: TSpeedButton;
ExAllBtn: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
procedure IncludeBtnClick(Sender: TObject);
procedure ExcludeBtnClick(Sender: TObject);
procedure IncAllBtnClick(Sender: TObject);
procedure ExcAllBtnClick(Sender: TObject);
procedure DstListDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure DstListDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure SrcListDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure SrcListDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure OKBtnClick(Sender: TObject);
procedure Label2Click(Sender: TObject);
private
public
procedure MoveSelected(List: TCustomListBox; Items: TStrings);
procedure SetItem(List: TListBox; Index: Integer);
function GetFirstSelection(List: TCustomListBox): Integer;
procedure SetButtons;
end;
var
DualListDlg: TDualListDlg;
implementation
{$R *.dfm}
uses
ShellAPI;
procedure TDualListDlg.IncludeBtnClick(Sender: TObject);
var
Index: Integer;
begin
Index := GetFirstSelection(SrcList);
MoveSelected(SrcList, DstList.Items);
SetItem(SrcList, Index);
end;
procedure TDualListDlg.ExcludeBtnClick(Sender: TObject);
var
Index: Integer;
begin
Index := GetFirstSelection(DstList);
MoveSelected(DstList, SrcList.Items);
SetItem(DstList, Index);
end;
procedure TDualListDlg.IncAllBtnClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to SrcList.Items.Count - 1 do
DstList.Items.AddObject(SrcList.Items[i],
SrcList.Items.Objects[i]);
SrcList.Items.Clear;
SetItem(SrcList, 0);
end;
procedure TDualListDlg.ExcAllBtnClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to DstList.Items.Count - 1 do
SrcList.Items.AddObject(DstList.Items[i], DstList.Items.Objects[i]);
DstList.Items.Clear;
SetItem(DstList, 0);
end;
procedure TDualListDlg.MoveSelected(List: TCustomListBox; Items: TStrings);
var
I: Integer;
begin
for I := List.Items.Count - 1 downto 0 do
if List.Selected[i] then
begin
Items.AddObject(List.Items[i], List.Items.Objects[i]);
List.Items.Delete(I);
end;
end;
procedure TDualListDlg.SetButtons;
var
SrcEmpty, DstEmpty: Boolean;
begin
SrcEmpty := SrcList.Items.Count = 0;
DstEmpty := DstList.Items.Count = 0;
IncludeBtn.Enabled := not SrcEmpty;
IncAllBtn.Enabled := not SrcEmpty;
ExcludeBtn.Enabled := not DstEmpty;
ExAllBtn.Enabled := not DstEmpty;
end;
function TDualListDlg.GetFirstSelection(List: TCustomListBox): Integer;
begin
for Result := 0 to List.Items.Count - 1 do
if List.Selected[Result] then Exit;
Result := LB_ERR;
end;
procedure TDualListDlg.SetItem(List: TListBox; Index: Integer);
var
MaxIndex: Integer;
begin
with List do
begin
SetFocus;
MaxIndex := List.Items.Count - 1;
if Index = LB_ERR then Index := 0
else if Index > MaxIndex then Index := MaxIndex;
Selected[Index] := True;
end;
SetButtons;
end;
procedure TDualListDlg.DstListDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := (Source = SrcList);
end;
procedure TDualListDlg.DstListDragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
Self.IncludeBtnClick(nil);
end;
procedure TDualListDlg.SrcListDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := (Source = DstList);
end;
procedure TDualListDlg.SrcListDragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
Self.ExcludeBtnClick(nil);
end;
procedure TDualListDlg.OKBtnClick(Sender: TObject);
begin
Self.Close;
end;
procedure TDualListDlg.Label2Click(Sender: TObject);
begin
ShellExecute(Handle,
'open',
'http://neftali.clubdelphi.com/',
nil,
nil,
SW_SHOW);
end;
end.