На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > Сохранение и загрузка TListView
      Способ 1:

      ExpandedWrap disabled
        Procedure SaveListView(S: String; ListView: TListView);
        // © Song
        Const Delimiter = '|';
        Var ff: TextFile;
            t: Integer;
        begin
         AssignFile(ff, S);
         ReWrite(ff);
         try
          With ListView Do For t:=0 to Items.Count - 1 Do
           WriteLn(ff,StringReplace(Items[t].Caption + Delimiter + Items.Item[t].SubItems.Text,#13#10,Delimiter,[rfReplaceAll]));
         finally
          CloseFile(ff);
         end;
        end;
         
        procedure TForm1.Button1Click(Sender: TObject);
        begin
         SaveListView('c:\1.txt',ListView1);
        end;
         
        Procedure ReadListView(S: String; ListView: TListView);
        // © Song
        Const Delimiter = '|';
        Var ff: TextFile;
            S: String;
        Begin
         AssignFile(ff, S);
         Reset(ff);
         try
          While not Eof(ff) Do
           Begin
            ReadLn(ff,S);
            With ListView.Items.Add Do
             Begin
              Caption:=Copy(S,1,Pos(Delimiter,S)-1);
              System.Delete(S,1,Pos(Delimiter,S));
              S:=StringReplace(S,Delimiter,#13#10,[rfReplaceAll]);
              SubItems.Text:=S;
             End; {With}
           End; {While}
         finally
          CloseFile(ff);
         end;
        End;
         
        Procedure TForm1.Button2Click(Sender: TObject);
        Begin
         ReadListView('c:\1.txt', ListView1);
        End;


      Способ 2:

      ExpandedWrap disabled
        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;
         
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          // Save Items and Clear the ListView
          SaveListViewToFile(ListView1, 'MyListView.sav');
          ListView1.Items.Clear;
        end;
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script Execution time: 0,0639 ]   [ 15 queries used ]   [ Generated: 11.11.19, 22:47 GMT ]