PDA

Ver la Versión Completa : Copiar y pegar en un Grid desde un Listbox


CarlosAlberto
11-10-2011, 00:58:42
Estimados amigos del club: le agradecería si me pueden ayudar con el siguiente problema: Tengo un listbox y un StringGrid ¿cómo puedo pasar un elemento seleccionado del Listbox a una celda del StringGrid con el mouse o copiando y pegando?
Gracias y Saludos
Carlos Alberto

ecfisa
11-10-2011, 01:27:54
Hola Carlos.

Arrastrando y soltando con el mouse dese el ListBox a la celda seleccionada del StringList:

....
implementation

procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ListBox1.BeginDrag(True);
end;

procedure TForm1.StringGrid1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept:= Source is TListBox;
end;

procedure TForm1.StringGrid1DragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
with TStringGrid(Sender) do
Cells[Col,Row]:= TListBox(Source).Items[TListBox(Source).ItemIndex];
end;
...


Un saludo.

CarlosAlberto
11-10-2011, 02:18:10
Estimado Moderador: lo probé y resultó lo esperado. Gracias
Saludos
Carlos Alberto

ecfisa
11-10-2011, 02:33:44
Hola de nuevo.

Sin usar TClipBoard que haría más complejo el ejemplo, una forma sencilla de copiar y pegar usando un TPopupMenu es:

...
implementation
var
Aux: string;

procedure TForm1.Copiar1Click(Sender: TObject);
begin
if (ListBox1.ItemIndex > -1)and(PopupMenu1.PopupComponent.Name = 'ListBox1') then
Aux:= ListBox1.Items[ListBox1.ItemIndex];
end;

procedure TForm1.Pegar1Click(Sender: TObject);
begin
if PopupMenu1.PopupComponent.Name = 'StringGrid1' then
with StringGrid1 do Cells[Col,Row]:= Aux;
end;

Podrías mejorar el código mostrando mensajes si alguna condición necesaria no se cumple, como por ejemplo que un item esté seleccionado.

Saludos.