<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=42985&amp;view=findpost&amp;p=281333</guid>
        <pubDate>Thu, 15 Jan 2004 07:22:14 +0000</pubDate>
        <title>Сохранение и загрузка TListView</title>
        <link>https://forum.sources.ru/index.php?showtopic=42985&amp;view=findpost&amp;p=281333</link>
        <description><![CDATA[Song: <strong class='tag-b'>Способ 1:</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Procedure SaveListView(S: String; ListView: TListView);</div><div class="code_line">// © Song</div><div class="code_line">Const Delimiter = &#39;|&#39;;</div><div class="code_line">Var ff: TextFile;</div><div class="code_line">&nbsp;&nbsp; &nbsp;t: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;AssignFile(ff, S);</div><div class="code_line">&nbsp;ReWrite(ff);</div><div class="code_line">&nbsp;try</div><div class="code_line">&nbsp;&nbsp;With ListView Do For t:=0 to Items.Count - 1 Do </div><div class="code_line">&nbsp;&nbsp; WriteLn(ff,StringReplace(Items[t].Caption + Delimiter + Items.Item[t].SubItems.Text,#13#10,Delimiter,[rfReplaceAll]));</div><div class="code_line">&nbsp;finally</div><div class="code_line">&nbsp;&nbsp;CloseFile(ff);</div><div class="code_line">&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;SaveListView(&#39;c:.txt&#39;,ListView1);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">Procedure ReadListView(S: String; ListView: TListView);</div><div class="code_line">// © Song</div><div class="code_line">Const Delimiter = &#39;|&#39;;</div><div class="code_line">Var ff: TextFile;</div><div class="code_line">&nbsp;&nbsp; &nbsp;S: String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;AssignFile(ff, S);</div><div class="code_line">&nbsp;Reset(ff);</div><div class="code_line">&nbsp;try</div><div class="code_line">&nbsp;&nbsp;While not Eof(ff) Do</div><div class="code_line">&nbsp;&nbsp; Begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;ReadLn(ff,S);</div><div class="code_line">&nbsp;&nbsp; &nbsp;With ListView.Items.Add Do</div><div class="code_line">&nbsp;&nbsp; &nbsp; Begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Caption:=Copy(S,1,Pos(Delimiter,S)-1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;System.Delete(S,1,Pos(Delimiter,S));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;S:=StringReplace(S,Delimiter,#13#10,[rfReplaceAll]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SubItems.Text:=S;</div><div class="code_line">&nbsp;&nbsp; &nbsp; End; {With}</div><div class="code_line">&nbsp;&nbsp; End; {While}</div><div class="code_line">&nbsp;finally</div><div class="code_line">&nbsp;&nbsp;CloseFile(ff);</div><div class="code_line">&nbsp;end;</div><div class="code_line">End;</div><div class="code_line">&nbsp;</div><div class="code_line">Procedure TForm1.Button2Click(Sender: TObject);</div><div class="code_line">Begin</div><div class="code_line">&nbsp;ReadListView(&#39;c:.txt&#39;, ListView1);</div><div class="code_line">End;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<strong class='tag-b'>Способ 2:</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TForm1.SaveListViewToFile(AListView: TListView; sFileName: string);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;idxItem, idxSub, IdxImage: Integer;</div><div class="code_line">&nbsp;&nbsp;F: TFileStream;</div><div class="code_line">&nbsp;&nbsp;pText: PChar;</div><div class="code_line">&nbsp;&nbsp;sText: string;</div><div class="code_line">&nbsp;&nbsp;W, ItemCount, SubCount: Word;</div><div class="code_line">&nbsp;&nbsp;MySignature: array [0..2] of Char;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;//Initialization</div><div class="code_line">&nbsp;&nbsp;with AListView do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;ItemCount := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SubCount &nbsp;:= 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//****</div><div class="code_line">&nbsp;&nbsp; &nbsp;MySignature := &#39;LVF&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// &nbsp;ListViewFile</div><div class="code_line">&nbsp;&nbsp; &nbsp;F := TFileStream.Create(sFileName, fmCreate or fmOpenWrite);</div><div class="code_line">&nbsp;&nbsp; &nbsp;F.Write(MySignature, SizeOf(MySignature));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Items.Count = 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// List is empty</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ItemCount := 0</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ItemCount := Items.Count;</div><div class="code_line">&nbsp;&nbsp; &nbsp;F.Write(ItemCount, SizeOf(ItemCount));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Items.Count &#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for idxItem := 1 to ItemCount do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;with Items[idxItem - 1] do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Save subitems count</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if SubItems.Count = 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SubCount := 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SubCount := Subitems.Count;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F.Write(SubCount, SizeOf(SubCount));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Save ImageIndex</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IdxImage := ImageIndex;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F.Write(IdxImage, SizeOf(IdxImage));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Save Caption</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sText := Caption;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;w &nbsp; &nbsp; := Length(sText);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pText := StrAlloc(Length(sText) + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StrPLCopy(pText, sText, Length(sText));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F.Write(w, SizeOf(w));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F.Write(pText^, w);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StrDispose(pText);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if SubCount &#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for idxSub := 0 to SubItems.Count - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Save Item&#39;s subitems</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sText := SubItems[idxSub];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;w &nbsp; &nbsp; := Length(sText);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pText := StrAlloc(Length(sText) + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StrPLCopy(pText, sText, Length(sText));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F.Write(w, SizeOf(w));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F.Write(pText^, w);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StrDispose(pText);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;F.Free;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.LoadListViewToFile(AListView: TListView; sFileName: string);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;F: TFileStream;</div><div class="code_line">&nbsp;&nbsp;IdxItem, IdxSubItem, IdxImage: Integer;</div><div class="code_line">&nbsp;&nbsp;W, ItemCount, SubCount: Word;</div><div class="code_line">&nbsp;&nbsp;pText: PChar;</div><div class="code_line">&nbsp;&nbsp;PTemp: PChar;</div><div class="code_line">&nbsp;&nbsp;MySignature: array [0..2] of Char;</div><div class="code_line">&nbsp;&nbsp;sExeName: string;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;with AListView do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;ItemCount := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SubCount &nbsp;:= 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;sExeName := ExtractFileName(sFileName);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if not FileExists(sFileName) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MessageBox(Handle, PChar(Format(Msg1, [sExeName])), &#39;I/O Error&#39;, MB_ICONERROR);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;F := TFileStream.Create(sFileName, fmOpenRead);</div><div class="code_line">&nbsp;&nbsp; &nbsp;F.Read(MySignature, SizeOf(MySignature));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if MySignature &#60;&#62; &#39;LVF&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MessageBox(Handle, PChar(Format(Msg2, [sExeName])), &#39;I/O Error&#39;, MB_ICONERROR);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;F.Read(ItemCount, SizeOf(ItemCount));</div><div class="code_line">&nbsp;&nbsp; &nbsp;Items.Clear;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for idxItem := 1 to ItemCount do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;with Items.Add do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Read imageindex</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;F.Read(SubCount, SizeOf(SubCount));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Read imageindex</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;F.Read(IdxImage, SizeOf(IdxImage));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ImageIndex := IdxImage;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Read the Caption</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;F.Read(w, SizeOf(w));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pText := StrAlloc(w + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pTemp := StrAlloc(w + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;F.Read(pTemp^, W);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;StrLCopy(pText, pTemp, W);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Caption := StrPas(pText);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;StrDispose(pTemp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;StrDispose(pText);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if SubCount &#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for idxSubItem := 1 to SubCount do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F.Read(w, SizeOf(w));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pText := StrAlloc(w + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pTemp := StrAlloc(w + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F.Read(pTemp^, W);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StrLCopy(pText, pTemp, W);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Items[idxItem - 1].SubItems.Add(StrPas(pText));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StrDispose(pTemp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StrDispose(pText);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;F.Free;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;// Save Items and Clear the ListView</div><div class="code_line">&nbsp;&nbsp;SaveListViewToFile(ListView1, &#39;MyListView.sav&#39;);</div><div class="code_line">&nbsp;&nbsp;ListView1.Items.Clear;</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>Song</author>
        <category>VCL</category>
      </item>
	
      </channel>
      </rss>
	