Solved

Copy all items from 1 listview to another

Posted on 2007-11-27
3
1,306 Views
Last Modified: 2008-02-01
Hi all,

I have 2 ListViews (They are exactly the same!)

I need to copy all items in listview1 to listview2

Anyone know how to do this please?

Thanks

ST3VO
0
Comment
Question by:ST3VO
3 Comments
 
LVL 5

Accepted Solution

by:
Steven-Fernandez earned 500 total points
ID: 20357013
Try this:
 

 ListView1.SelectAll;

 ListView1.CopySelection(ListView2);

Open in new window

0
 

Author Comment

by:ST3VO
ID: 20357042
Perfect...Thanks!!!! :o)
0
 
LVL 1

Expert Comment

by:carcotasu
ID: 20357045
You can save ListView1 an load in to ListView2

This cod it's not created by me.

{  This Code allows you to Load/Save items & subitems of a

  TListView in a file.
 

  The Code has been extracted & adapted from

  TSmartListView 1.01, Freeware

  by Fabio De Pasquale.

}
 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, comctrls,

  StdCtrls;
 

type

  TForm1 = class(TForm)

    ListView1: TListView;

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    procedure SaveListViewToFile(AListView: TListView; sFileName: string);

    procedure LoadListViewToFile(AListView: TListView; sFileName: string);

  public

  end;
 

const

  Msg1 = 'File "%s" does not exist!';

  Msg2 = '"%s" is not a ListView file!';
 

var

  Form1: TForm1;
 

implementation
 

{$R *.DFM}
 

procedure TForm1.SaveListViewToFile(AListView: TListView; sFileName: string);

var

  idxItem, idxSub, IdxImage: Integer;

  F: TFileStream;

  pText: PChar;

  sText: string;

  W, ItemCount, SubCount: Word;

  MySignature: array [0..2] of Char;

begin

  //Initialization

  with AListView do

  begin

    ItemCount := 0;

    SubCount  := 0;

    //****

    MySignature := 'LVF';

    //  ListViewFile

    F := TFileStream.Create(sFileName, fmCreate or fmOpenWrite);

    F.Write(MySignature, SizeOf(MySignature));
 

    if Items.Count = 0 then

      // List is empty

      ItemCount := 0

    else

      ItemCount := Items.Count;

    F.Write(ItemCount, SizeOf(ItemCount));
 

    if Items.Count > 0 then

    begin

      for idxItem := 1 to ItemCount do

      begin

        with Items[idxItem - 1] do

        begin

          //Save subitems count

          if SubItems.Count = 0 then

            SubCount := 0

          else

            SubCount := Subitems.Count;

          F.Write(SubCount, SizeOf(SubCount));

          //Save ImageIndex

          IdxImage := ImageIndex;

          F.Write(IdxImage, SizeOf(IdxImage));

          //Save Caption

          sText := Caption;

          w     := Length(sText);

          pText := StrAlloc(Length(sText) + 1);

          StrPLCopy(pText, sText, Length(sText));

          F.Write(w, SizeOf(w));

          F.Write(pText^, w);

          StrDispose(pText);

          if SubCount > 0 then

          begin

            for idxSub := 0 to SubItems.Count - 1 do

            begin

              //Save Item's subitems

              sText := SubItems[idxSub];

              w     := Length(sText);

              pText := StrAlloc(Length(sText) + 1);

              StrPLCopy(pText, sText, Length(sText));

              F.Write(w, SizeOf(w));

              F.Write(pText^, w);

              StrDispose(pText);

            end;

          end;

        end;

      end;

    end;

    F.Free;

  end;

end;
 
 
 

procedure TForm1.LoadListViewToFile(AListView: TListView; sFileName: string);

var

  F: TFileStream;

  IdxItem, IdxSubItem, IdxImage: Integer;

  W, ItemCount, SubCount: Word;

  pText: PChar;

  PTemp: PChar;

  MySignature: array [0..2] of Char;

  sExeName: string;

begin

  with AListView do

  begin

    ItemCount := 0;

    SubCount  := 0;
 

    sExeName := ExtractFileName(sFileName);
 

    if not FileExists(sFileName) then

    begin

      MessageBox(Handle, PChar(Format(Msg1, [sExeName])), 'I/O Error', MB_ICONERROR);

      Exit;

    end;
 

    F := TFileStream.Create(sFileName, fmOpenRead);

    F.Read(MySignature, SizeOf(MySignature));
 

    if MySignature <> 'LVF' then

    begin

      MessageBox(Handle, PChar(Format(Msg2, [sExeName])), 'I/O Error', MB_ICONERROR);

      Exit;

    end;
 

    F.Read(ItemCount, SizeOf(ItemCount));

    Items.Clear;
 

    for idxItem := 1 to ItemCount do

    begin

      with Items.Add do

      begin

        //Read imageindex

        F.Read(SubCount, SizeOf(SubCount));

        //Read imageindex

        F.Read(IdxImage, SizeOf(IdxImage));

        ImageIndex := IdxImage;

        //Read the Caption

        F.Read(w, SizeOf(w));

        pText := StrAlloc(w + 1);

        pTemp := StrAlloc(w + 1);

        F.Read(pTemp^, W);

        StrLCopy(pText, pTemp, W);

        Caption := StrPas(pText);

        StrDispose(pTemp);

        StrDispose(pText);

        if SubCount > 0 then

        begin

          for idxSubItem := 1 to SubCount do

          begin

            F.Read(w, SizeOf(w));

            pText := StrAlloc(w + 1);

            pTemp := StrAlloc(w + 1);

            F.Read(pTemp^, W);

            StrLCopy(pText, pTemp, W);

            Items[idxItem - 1].SubItems.Add(StrPas(pText));

            StrDispose(pTemp);

            StrDispose(pText);

          end;

        end;

      end;

    end;
 

    F.Free;

  end;

end;
 

// Example:
 

procedure TForm1.Button1Click(Sender: TObject);

begin

  // Save Items and Clear the ListView

  SaveListViewToFile(ListView1, 'MyListView.sav');

  ListView1.Items.Clear;

end;
 

procedure TForm1.Button2Click(Sender: TObject);

begin

  // Load Items

  LoadListViewToFile(ListView1, 'MyListView.sav');

end;

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
A short film showing how OnPage and Connectwise integration works.

932 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

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now