[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21 | 21
NapísalOffline : 25.02.2010 23:37 | [delphi] listview load/save to file

potrebujem ukladat data z listview do suboru a naopak. Nasiel som si nato hotovu funkciu. Az nato ze haluzi ak nacitam ulozeny listview zo suboru, nieco pridam a znova ulozin (v mieste pridania to nahadze stvorceky). Alebo ak ukladam aj enter (mam v bunke viac riadkov, napr text z richedit vlozeny do bunky). Vtedy to tiez pridava stvorceky. Jak to vyriesit?

Vyzera to ze ak ulozim, ukoncim program, spustim program a nacitam subor do listview tak vtedy to robi chyby, a akoby odreze prve 2 znaky...

Kód:
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;


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21 | 21
Napísal autor témyOffline : 28.02.2010 22:28 | [delphi] listview load/save to file

tak tyka sa to asi len D2010 ta chyba


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2 | 2
NapísalOffline : 15.04.2010 13:09 | [delphi] listview load/save to file

ak si dobre pamatam tak componenta TListView ma prvok Items ktory je typu TStringList a ten ma metodu SaveToFile. alebo sa mylim ? ak sa mylim tak prepac, davno som s delphi nerobil.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21 | 21
Napísal autor témyOffline : 18.04.2010 23:13 | [delphi] listview load/save to file

nie, items nema savetofile. Ale uz som si nato napisal vlastnu funkciu.


 [ Príspevkov: 4 ] 


[delphi] listview load/save to file



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

[Delphi] Progressbar do Listview

v Delphi, Visual Basic

2

670

10.09.2010 21:24

coldak

V tomto fóre nie sú ďalšie neprečítané témy.

Java - save to txt file

v Assembler, C, C++, Pascal, Java

2

262

07.12.2012 9:58

Mike7400

V tomto fóre nie sú ďalšie neprečítané témy.

Prehratie zvuku pri vyskoceni okna open/save file v IE

v Sieťové a internetové programy

2

386

01.06.2010 19:11

don jebot

V tomto fóre nie sú ďalšie neprečítané témy.

Delphi 2009 *.dcu file

v Delphi, Visual Basic

2

496

23.03.2010 14:09

myxall

V tomto fóre nie sú ďalšie neprečítané témy.

delphi zapis cisla do editu v delphi

v Delphi, Visual Basic

3

1151

11.05.2008 12:02

p360t

V tomto fóre nie sú ďalšie neprečítané témy.

Vkladanie údajov do ListView

v Delphi, Visual Basic

2

566

10.01.2011 13:09

coldak

V tomto fóre nie sú ďalšie neprečítané témy.

android ListView a jeho dynamicke nacitavanie

v Android, iOS, Windows Phone (Mobile)

10

689

05.05.2014 21:54

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

ListView a WebBrowser (Visual Basic 2010)

v Delphi, Visual Basic

0

496

10.04.2012 11:30

lukas15

V tomto fóre nie sú ďalšie neprečítané témy.

jQuery & load

v JavaScript, VBScript, Ajax

7

420

18.07.2014 10:42

hatto13

V tomto fóre nie sú ďalšie neprečítané témy.

pomaly load netu

v Antivíry a antispywary

9

759

16.09.2008 17:44

don jebot

V tomto fóre nie sú ďalšie neprečítané témy.

Problém s LOAD

v JavaScript, VBScript, Ajax

4

501

14.04.2016 20:48

Padnex

V tomto fóre nie sú ďalšie neprečítané témy.

Failed to load resource

v JavaScript, VBScript, Ajax

6

525

03.07.2016 16:15

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Windows XP - Load DLL

v Operačné systémy Microsoft

1

414

01.01.2010 22:43

FERDA23

V tomto fóre nie sú ďalšie neprečítané témy.

cmos checksum error - default load

v AMD čipové sady

9

2910

12.10.2008 8:14

cassyopea

V tomto fóre nie sú ďalšie neprečítané témy.

return confirm() pred jQuery.load()

v JavaScript, VBScript, Ajax

2

488

13.10.2010 15:42

emer

V tomto fóre nie sú ďalšie neprečítané témy.

Gtx 760 , GPU load 70%

v nVidia grafické karty

11

497

24.09.2013 22:54

roman10



© 2005 - 2024 PCforum, edited by JanoF