Ver la Versión Completa : Formularios con TListView?
ungrande87
19-03-2012, 04:23:54
Hola necesito ayuda para lo siguiente: Tengo 3 Tform.El 1ro es el principal con enlaces a los otros dos, el 2do tiene un TListView donde deberian estar los articulos cargados y 3 botones (Nuevo, Eliminar y Modificar) y el 3ro Tform donde cargo los arcticulos. Mi consulta es como debo manejar el TListView para cargar desde un formulario y que al cerrar o minimizar el mismo se actualice el la segunda pantalla al instante y como seria la forma correcta para manejar el TlistView, aclaro que soy un poco novato por eso necesito que me ayuden.
Les agradeceria muchisimo a quien pudiese brindarme ayuda...
PD: estoy programando en Delphi 7 y el TListView carga datos en forma temporal nomas, es decir es sin base de datos ni nada raro, estoy empezando recien con delphi por eso necesito que me ayuden.
ecfisa
19-03-2012, 09:47:33
Mi consulta es como debo manejar el TListView para cargar desde un formulario y que al cerrar o minimizar el mismo se actualice el la segunda pantalla al instante
Hola ungrande87.
Te pongo un ejemplo simplificado de una forma en que podrías implementarlo:
Form1:
...
uses ..., Unit2;
type
TAccion = (acAdd, acUpd); // nuevo, modifica
TForm1 = class(TForm)
ListView1: TListView;
btNuevo: TButton;
btModifica: TButton;
btBorra: TButton;
procedure FormCreate(Sender: TObject);
procedure btNuevoClick(Sender: TObject);
procedure btModificaClick(Sender: TObject);
procedure btBorraClick(Sender: TObject);
private
FAccion: TAccion;
procedure ArticuloChange(Value: TArticulo);
public
end;
...
implementation
(* Recibe evento cambio en artículo *)
procedure TForm1.ArticuloChange(Value: TArticulo);
begin
case FAccion of
acAdd: with ListView1.Items.Add do // nuevo
begin
SubItems.Add(Articulo.Codigo);
SubItems.Add(Articulo.Nombre)
end;
acUpd: with ListView1.Items[ListView1.ItemIndex] do // modifica
begin
SubItems[0]:= Articulo.Codigo;
SubItems[1]:= Articulo.Nombre
end;
end;
end;
(* Valores iniciales *)
procedure TForm1.FormCreate(Sender: TObject);
var
Col: TListColumn;
begin
with ListView1 do
begin
ViewStyle:= vsReport;
ReadOnly:= True;
RowSelect:= True;
Col:= Columns.Add;
Col.Caption:= 'ID';
Col.Width:= 0; // (oculta, no la uso en el ejemplo)
Col:= Columns.Add;
Col.Caption:= 'CODIGO';
Col:= Columns.Add;
Col.Caption:= 'NOMBRE';
end;
end;
(* Nuevo artículo *)
procedure TForm1.btNuevoClick(Sender: TObject);
begin
FAccion:= acAdd; // nuevo
with TForm2.Create(Self) do
try
ArticuloOnChange:= ArticuloChange;
ShowModal;
finally
Free;
end;
end;
(* Modificar artículo *)
procedure TForm1.btModificaClick(Sender: TObject);
begin
FAccion:= acUpd; // modifica
with TForm2.Create(Self) do
try
ArticuloOnChange:= ArticuloChange;
ShowModal;
finally
Free;
end;
end;
(* Borrar artículo *)
procedure TForm1.btBorraClick(Sender: TObject);
begin
ListView1.Items[ListView1.ItemIndex].Delete;
end;
...
Form2:
type
TArticulo = record
Codigo: string;
Nombre: string;
end;
TCambioArticulo = procedure(Value: TArticulo) of object;
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
btAceptar: TButton;
procedure btAceptarClick(Sender: TObject);
private
FCambioArticulo: TCambioArticulo;
public
property ArticuloOnChange: TCambioArticulo read FCambioArticulo
write FCambioArticulo;
end;
...
implementation
procedure TForm2.btAceptarClick(Sender: TObject);
begin
if Assigned(FCambioArticulo) then
begin
Articulo.Codigo:= Edit1.Text;
Articulo.Nombre:= Edit2.Text;
FCambioArticulo(Articulo);
end;
Close;
end;
...
En el ejemplo actualiza en el evento OnClick del botón aceptar del segundo form.
Saludos.
ungrande87
19-03-2012, 13:27:18
Hola ungrande87.
Te pongo un ejemplo simplificado de una forma en que podrías implementarlo:
Form1:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)
...
uses ..., Unit2;
type
TAccion = (acAdd, acUpd); // nuevo, modifica
TForm1 = class(TForm)
ListView1: TListView;
btNuevo: TButton;
btModifica: TButton;
btBorra: TButton;
procedure FormCreate(Sender: TObject);
procedure btNuevoClick(Sender: TObject);
procedure btModificaClick(Sender: TObject);
procedure btBorraClick(Sender: TObject);
private
FAccion: TAccion;
procedure ArticuloChange(Value: TArticulo);
public
end;
...
implementation
(* Recibe evento cambio en artículo *)
procedure TForm1.ArticuloChange(Value: TArticulo);
begin
case FAccion of
acAdd: with ListView1.Items.Add do // nuevo
begin
SubItems.Add(Articulo.Codigo);
SubItems.Add(Articulo.Nombre)
end;
acUpd: with ListView1.Items[ListView1.ItemIndex] do // modifica
begin
SubItems[0]:= Articulo.Codigo;
SubItems[1]:= Articulo.Nombre
end;
end;
end;
(* Valores iniciales *)
procedure TForm1.FormCreate(Sender: TObject);
var
Col: TListColumn;
begin
with ListView1 do
begin
ViewStyle:= vsReport;
ReadOnly:= True;
RowSelect:= True;
Col:= Columns.Add;
Col.Caption:= 'ID';
Col.Width:= 0; // (oculta, no la uso en el ejemplo)
Col:= Columns.Add;
Col.Caption:= 'CODIGO';
Col:= Columns.Add;
Col.Caption:= 'NOMBRE';
end;
end;
(* Nuevo artículo *)
procedure TForm1.btNuevoClick(Sender: TObject);
begin
FAccion:= acAdd; // nuevo
with TForm2.Create(Self) do
try
ArticuloOnChange:= ArticuloChange;
ShowModal;
finally
Free;
end;
end;
(* Modificar artículo *)
procedure TForm1.btModificaClick(Sender: TObject);
begin
FAccion:= acUpd; // modifica
with TForm2.Create(Self) do
try
ArticuloOnChange:= ArticuloChange;
ShowModal;
finally
Free;
end;
end;
(* Borrar artículo *)
procedure TForm1.btBorraClick(Sender: TObject);
begin
ListView1.Items[ListView1.ItemIndex].Delete;
end;
...
Form2:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)
type
TArticulo = record
Codigo: string;
Nombre: string;
end;
TCambioArticulo = procedure(Value: TArticulo) of object;
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
btAceptar: TButton;
procedure btAceptarClick(Sender: TObject);
private
FCambioArticulo: TCambioArticulo;
public
property ArticuloOnChange: TCambioArticulo read FCambioArticulo
write FCambioArticulo;
end;
...
implementation
procedure TForm2.btAceptarClick(Sender: TObject);
begin
if Assigned(FCambioArticulo) then
begin
Articulo.Codigo:= Edit1.Text;
Articulo.Nombre:= Edit2.Text;
FCambioArticulo(Articulo);
end;
Close;
end;
...
En el ejemplo actualiza en el evento OnClick del botón aceptar del segundo form.
Saludos.
Muchisimas gracias amigo, me super sirvio tu ejemplo.
Ahora una consulta mas, y si quisiera implementar en una nueva pantalla una consulta por: alfabeto o codigo descendiente por ejemplo, como tendria que hacer para que me filtre de ese modo el ListView, cargando datos en un Edit1?
Casimiro Notevi
19-03-2012, 14:01:04
Recuerda nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), preguntas distintas en hilos distintos ;). Gracias por tu colaboración.
kapcomx
19-03-2012, 19:51:31
PD: estoy programando en Delphi 7 y el TListView carga datos en forma temporal nomas, es decir es sin base de datos ni nada raro,
Para mi lo raro seria no usar una B.D. jeje:cool:
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.