Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-04-2009
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 608
Poder: 21
mRoman Va por buen camino
Mover o cambiar lineas dentro de un ListBox

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
    { Private declarations }
  public
    { Public declarations }
    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

  // Se debe aceptar
  Accept := (Source = SrcList);

end;

procedure TDualListDlg.DstListDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  // Llamar al oton que pasa de Izq a derecha
  Self.IncludeBtnClick(nil);
end;

procedure TDualListDlg.SrcListDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  // Se debe aceptar
  Accept := (Source = DstList);
end;

procedure TDualListDlg.SrcListDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  // Llamar al boton que pasa de der. a Izq
  Self.ExcludeBtnClick(nil);
end;

procedure TDualListDlg.OKBtnClick(Sender: TObject);
begin
  // cerrar
  Self.Close;
end;

procedure TDualListDlg.Label2Click(Sender: TObject);
begin
    ShellExecute(Handle,
             'open',
             'http://neftali.clubdelphi.com/',
             nil,
             nil,
             SW_SHOW);
end;

end.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Buscar dentro del ListBox FrianxD C++ Builder 9 06-03-2008 07:20:27
Mover todos los elementos entre dos listbox creus Varios 2 05-11-2006 11:59:37
Mover elementos de un listbox a otro creus Varios 2 05-11-2006 09:03:32
Mover posiciones dentro de un list Box creus Varios 13 04-11-2006 18:03:44
ListBox con líneas de colores. DarkByte Varios 2 01-08-2004 19:58:52


La franja horaria es GMT +2. Ahora son las 07:22:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi