Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

с listview в файл? [D7, WinXP]


linox ©   (2006-09-17 14:24:00) 

Такой вот вопрос:
есть данные в листвью, они добавляются и удаляются. нужно что бы добавляимые данные записывались в текстовый документ (лог-файл). если это первая запись нужно програмно создать этот файл? помогите если кто может


Весь в делах   (2006-09-20 16:02:00) [1]

Ivolg ©

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, jpeg, ComCtrls, ImgList;

type
TForm1 = class(TForm)
  lv: TListView;
  procedure SaveToFile(Dir:string);
  function LoadFromFile(Dir:string):boolean;
private
  { Private declarations }
public
  { Public declarations }
end;

var
Form1: TForm1;
Signature,FileName:string;
implementation

uses Unit1, Unit5;

{$R *.dfm}
{------------------------------------Сохранение----------------------------}
procedure TForm1.SaveToFile(Dir:string);
var
idxItem, idxSub, IdxImage: Integer;
F: TFileStream;
pText: PChar;
sText: string;
W, ItemCount, SubCount: Word;
MySignature: array [0..7] of Char;
begin
FileName:=dir;
StrPCopy(MySignature, Signature);
F := TFileStream.Create(FileName, fmCreate or fmOpenWrite);
F.Write(MySignature, SizeOf(MySignature));
ItemCount := lv.Items.Count;
F.Write(ItemCount, SizeOf(ItemCount));
if lv.Items.Count > 0 then
  for idxItem := 1 to ItemCount do
     with lv.Items[idxItem - 1] do
        begin
          SubCount := Subitems.Count;
          F.Write(SubCount, SizeOf(SubCount));
          IdxImage := ImageIndex;
          F.Write(IdxImage, SizeOf(IdxImage));
          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
            for idxSub := 0 to SubItems.Count - 1 do
              begin
                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;
F.Free;
end;
{------------------------------------------Загрузка-------------------------}
function TForm1.LoadFromFile(Dir:string):boolean;
var
F: TFileStream;
IdxItem, IdxSubItem, IdxImage: Integer;
W, ItemCount, SubCount: Word;
pText: PChar;
PTemp: PChar;
MySignature: array [0..7] of Char;
begin
FileName:=Dir;
Result:=True;
if not FileExists(FileName) then
  begin
    Result:=False;
    Exit;
  end;
lv.Items.BeginUpdate;
F := TFileStream.Create(FileName, fmOpenRead);
F.Read(MySignature, SizeOf(MySignature));
if MySignature <> Signature then
  begin
    F.Free;
    Result:=False;
    Exit;
  end;
F.Read(ItemCount, SizeOf(ItemCount));
lv.Items.Clear;
for idxItem := 1 to ItemCount do
  with lv.Items.Add do
    begin
      F.Read(SubCount, SizeOf(SubCount));
      F.Read(IdxImage, SizeOf(IdxImage));
      ImageIndex := IdxImage;
      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
        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);
            lv.Items[idxItem - 1].SubItems.Add(StrPas(pText));
            StrDispose(pTemp);
            StrDispose(pText);
          end;
    end;
F.Free;
lv.Items.EndUpdate;
end;


Dmitrij_K   (2006-09-20 15:58:00) [2]


> Весь в делах   (20.09.06 15:32) [11]
> TStream

Причет тут stream?


Наиль   (2006-09-20 15:44:00) [3]

AssignFile+F1 Examle


Весь в делах   (2006-09-20 15:32:00) [4]

TStream


linox   (2006-09-20 15:25:00) [5]

ненашел


Весь в делах   (2006-09-17 19:13:00) [6]

Ищи в архивах там есть ответ


Весь в делах   (2006-09-17 19:12:00) [7]

убейсибяапстену


linox   (2006-09-17 19:05:00) [8]

?????....savetofile(form1.listview1....?????7);
я не расдупляюсь как правильно записать....


linox   (2006-09-17 15:34:00) [9]

linox   (17.09.06 15:30) [4]


Ketmar   (2006-09-17 15:32:00) [10]

> [4] linox   (17.09.06 15:30)
неко, иди в анус.


linox   (2006-09-17 15:30:00) [11]

2 Ketmar:
можеш на орт вместо петросяна выступать, а то он уже старый и теряет свои позиции


Ketmar   (2006-09-17 15:26:00) [12]

> [2] linox   (17.09.06 15:05)
оставить клавиатуру! в хозяйственном продаются замечателные мётлы! купить -- и на улицу, трудиться во благо Родины.


linox   (2006-09-17 15:05:00) [13]

2 Dmitrij_K:
а как именно делать запись в файл, я не знаю


Dmitrij_K   (2006-09-17 14:58:00) [14]

AssignFile(F, 'log.txt');
If FileExists('log.txt') then Append(F) else ReWrite(F);
for j:=0 to pred(ListView1.Items.Count) do
begin
// тут писать в файл
end;
CloseFile(F)


Наверх

Титульная страница Поиск, карта сайта Написать письмо