Нашел такой вот код под листбоксы....
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
S, Name : String;
i, Len : Integer;
Lb : TListBox;
Od : TOpenDialog;
begin
Od := OpenDialog1;
if Od.InitialDir = '' then
Od.InitialDir := ExtractFilePath( ParamStr(0) )
;
if not Od.Execute then Exit;
if not FileExists(Od.FileName) then begin
MessageDlg(
'Файл с заданным именем не найден. Действие отменено.'
,mtWarning, [mbOK], 0
);
Exit;
end;
for i := 0 to Self.ComponentCount - 1 do begin
if not (Self.Components[i] is TListBox) then Continue;
Lb := Self.Components[i] as TListBox;
Lb.Clear;
end;
AssignFile(F, Od.FileName);
Reset(F);
Lb := ListBox1;
while not Eof(F) do begin
Readln(F, S);
//Отслеживаем строки-заголовки с информацией о том,
//для какого ListBox предназначены строки.
if Copy(S, 1, 10) = '----------' then begin
Len := Length(S);
Name := Copy(S, 11, Len - 10);
Lb := TListBox( Self.FindComponent(Name) );
//Пропускаем строку загловка.
Continue;
end;
//Записываем данные в ListBox, только если такой ListBox существует.
if Lb <> nil then Lb.Items.Add(S);
end;
CloseFile(F);
end;
//Запись в файл.
procedure TForm1.Button2Click(Sender: TObject);
var
Sd : TSaveDialog;
i, Res : Integer;
S : String;
Fs : TFileStream;
Lb : TListBox;
begin
Sd := SaveDialog1;
if Sd.InitialDir = '' then
Sd.InitialDir := ExtractFilePath( ParamStr(0) )
;
if not Sd.Execute then Exit;
if FileExists(Sd.FileName) then begin
Res := MessageDlg(
'Файл с заданным именем уже существует. Перезаписать?'
,mtConfirmation, [mbYes, mbNo], 0
);
if Res = mrNo then Exit;
end;
Fs := TFileStream.Create(Sd.FileName, fmCreate, fmShareDenyWrite);
for i := 0 to Self.ComponentCount - 1 do begin
if not (Self.Components[i] is TListBox) then Continue;
Lb := Self.Components[i] as TListBox;
//Формируем строку заголовка - помещаем в неё метку из знаков "-"
//и сведения о том, какому ListBox будут принадлежать строки.
S := '----------' + Lb.Name + #13#10;
//Запись строки-заголовка.
Fs.Write(Pointer(S)^, Length(S));
//Запись содержимого ListBox.
Lb.Items.SaveToStream(Fs);
end;
Fs.Free;
end;
Попробовал переделать под мемки...
Код:
procedure TForm4.Button2Click(Sender: TObject);
var
Sd : TSaveDialog;
i, Res : Integer;
S : String;
Fs : TFileStream;
Mo : TMemo;
begin
Sd := SaveDialog1;
if Sd.InitialDir = '' then
Sd.InitialDir := ExtractFilePath( ParamStr(0) );
if not Sd.Execute then Exit;
if FileExists(Sd.FileName) then begin
Res := MessageDlg(
'Файл с заданным именем уже существует. Перезаписать?'
,mtConfirmation, [mbYes, mbNo], 0
);
if Res = mrNo then Exit;
end;
Fs := TFileStream.Create(Sd.FileName, fmCreate, fmShareDenyWrite);
for i := 0 to Self.ComponentCount - 1 do begin
if not (Self.Components[i] is TMemo) then Continue;
Mo := Self.Components[i] as TMemo;
S := '----------' + Mo.Name + #13#10;
Fs.Write(Pointer(S)^, Length(S));
Mo.Items.SaveToStream(Fs);
end;
Fs.Free;
end;
procedure TForm4.Button3Click(Sender: TObject);
var
F : TextFile;
S, Name : String;
i, Len : Integer;
Mo : TMemo;
Od : TOpenDialog;
begin
Od := OpenDialog1;
if Od.InitialDir = '' then
Od.InitialDir := ExtractFilePath( ParamStr(0) )
;
if not Od.Execute then Exit;
if not FileExists(Od.FileName) then begin
MessageDlg(
'Файл с заданным именем не найден. Действие отменено.'
,mtWarning, [mbOK], 0
);
Exit;
end;
for i := 0 to Self.ComponentCount - 1 do begin
if not (Self.Components[i] is TMemo) then Continue;
Mo := Self.Components[i] as TMemo;
Mo.Clear;
end;
AssignFile(F, Od.FileName);
Reset(F);
Mo := Memo1;
while not Eof(F) do begin
Readln(F, S);
if Copy(S, 1, 10) = '----------' then begin
Len := Length(S);
Name := Copy(S, 11, Len - 10);
Mo := TMemo( Self.FindComponent(Name) );
Continue;
end;
if Mo <> nil then Mo.Items.Add(S);
end;
CloseFile(F);
end;
end.
Должен сохранять как
Код:
----------ListBox1
LB1, Строка 1.
LB1, Строка 2.
LB1, Строка 3.
----------ListBox2
LB2, Строка 1.
LB2, Строка 2.
LB2, Строка 3.
----------ListBox3
LB3, Строка 1.
LB3, Строка 2.
LB3, Строка 3.
У мну же получается
Код:
----------Memo1
мемо1----------Memo2
мемо2----------Memo3
мемо3----------Memo4
мемо4----------Memo5
мемо6----------Memo6
мемо7----------Memo7
мемо5----------Memo8
мемо8----------Memo9
мемо9----------Memo10
мемо10
при чтении из файла он весь фаил запихивает в Memo1