Solved

How to cut and paste in Tlistview

Posted on 2000-04-09
7
324 Views
Last Modified: 2010-04-04
my Delphi app has listview and i want to be able to cut and paste with multivalues in it,how to do it?
sample code please.

Rgds.

Shekou
0
Comment
Question by:shekou
  • 4
  • 3
7 Comments
 
LVL 1

Expert Comment

by:Probie
ID: 2697555
What do you wan't to cut and paste?
And how do you want the result to be?

/Probie

0
 

Author Comment

by:shekou
ID: 2697565
I want to cut records in a Listview and
paste it back again.

Rgds

Shekou
0
 
LVL 1

Accepted Solution

by:
Probie earned 100 total points
ID: 2697593
Here is an example...

Basicly I create a second TListView and uses a listitem there as a buffer:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    CopyButton: TButton;
    PasteButton: TButton;
    procedure CopyButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure PasteButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  BufferItem : TListItem;
  BufferItems : TListItems;
  BufferListView : TCustomListView;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 BufferListView := TCustomListView.CreateParented(handle);
 BufferItems := TListItems.Create(BufferListView);
 BufferItems.BeginUpdate;
 BufferItem := TListItem.Create(BufferItems);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 BufferListView.free;
end;

procedure TForm1.CopyButtonClick(Sender: TObject);
// Copy Item
begin
 if Assigned(ListView1.Selected) then begin
  bufferItem.Caption := 'test';
  BufferItem.Assign(ListView1.Selected);
 end;
end;

procedure TForm1.PasteButtonClick(Sender: TObject);
begin
 ListView1.Items.Add.Assign(BufferItem);
end;

end.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:shekou
ID: 2699220
Thank you probie:

1. you give out copy and paste sample,
   how about CUT and paste?
2. Your sample only work with single
   records, how about multivalues?
   I mean if i want cut 5 records at
   the same time and then paste them   back again, how to do it?


Thanks

Shekou
0
 

Author Comment

by:shekou
ID: 2699706
waiting...
0
 
LVL 1

Expert Comment

by:Probie
ID: 2700139
Ok, here is the code you need...

Rgds
Probie

----


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    CopyButton: TButton;
    CutButton: TButton;
    PasteButton: TButton;
    procedure CopyButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure PasteButtonClick(Sender: TObject);
    procedure CutButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  BufferItem : TListItem;
  BufferItems : TListItems;
  BufferListView : TCustomListView;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 BufferListView := TCustomListView.CreateParented(handle);
 BufferItems := TListItems.Create(BufferListView);
 BufferItems.BeginUpdate;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 BufferListView.free;
end;

procedure TForm1.CopyButtonClick(Sender: TObject);
// Copy Item
var lp0 : integer;
begin
 BufferItems.Clear;
 for lp0 := 0 to ListView1.Items.Count-1 do begin
  if ListView1.Items[lp0].Selected then begin
   BufferItems.Add.Assign(ListView1.Items[lp0]);
  end;
 end;
end;

procedure TForm1.PasteButtonClick(Sender: TObject);
// Paste
var lp0,idx : integer;
begin
 if Assigned(ListView1.Selected) then begin
  idx := ListView1.Selected.Index;
  for lp0 := 0 to BufferItems.Count-1 do begin
   ListView1.Items.Insert(idx).Assign(BufferItems[lp0]);
  end;
 end else begin
  for lp0 := 0 to BufferItems.Count-1 do begin
   ListView1.Items.Add.Assign(BufferItems[lp0]);
  end;
 end;
end;

procedure TForm1.CutButtonClick(Sender: TObject);
// Cut
var lp0 : integer;
begin
 BufferItems.Clear;
 for lp0 := ListView1.Items.Count-1 downto 0 do begin
  if ListView1.Items[lp0].Selected then begin
   BufferItems.Add.Assign(ListView1.Items[lp0]);
   ListView1.Items[lp0].Delete;
  end;
 end;
end;

end.
0
 

Author Comment

by:shekou
ID: 2703094
Thank you very probie, it works fine.

Rgds

Shekou
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
Attackers love to prey on accounts that have privileges. Reducing privileged accounts and protecting privileged accounts therefore is paramount. Users, groups, and service accounts need to be protected to help protect the entire Active Directory …

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question