Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: CL | DM;

Вниз

Работа со списком. Что к чему?   Найти похожие ветки 

 
Герасим   (2007-05-06 21:25) [0]

Добрый вечер!

Помогите решить задачу, которую решаю не один день.
На форме расположены два компонента Listbox. В каждом свои значения.
Как можно сохранить эти два листбокса в один файл, а потом обратно загрузить файл в два листбокса?

Помогите пожалуйста!


 
default ©   (2007-05-06 21:27) [1]

всё потому что мало решаешь
день-другой и всё получится! иначе в нашем деле никак!


 
{RASkov} ©   (2007-05-06 21:32) [2]

> [0] Герасим   (06.05.07 21:25)

Ты покажи ход своих мыслей, авось и помогут.... иначе.... вариантов куча.
А почему в два файла не хочется? Вообще все просто будет...


 
Герасим   (2007-05-06 21:35) [3]

Это решение длится уже неделю :(

Не получается потому, что начинающий.
В два файла не охота. Хочу реализовать что-то наподобие сохранения параметров. Сохранить эти два листбокса в два разных файла для меня просто.

вот код:

procedure TForm1.Button1Click(Sender: TObject);
var
 List1, List2, MyList: TStringList;
 i,j: integer;
begin
 List1:= TStringList.Create;
 List2:= TStringList.Create;
 MyList:=TStringList.Create;
 for i:=0 to listbox1.Items.Count-1 do
 List1.Add(listbox1.Items.Strings[i]);
 for i:=0 to listbox1.Items.Count-1 do
 List2.Add(listbox2.Items.Strings[j]);
 MyList.Add(list1.Strings[i]+list2.Strings[j]);
 if savedialog1.Execute then
 begin
   MyList.SaveToFile(savedialog1.FileName);
 end;
 list1.Free;
 list2.Free;
 MyList.Free;
end;


 
default ©   (2007-05-06 21:43) [4]

всё просто до ужаса

есть ListBox1.Lines и есть ListBox2.Lines
создаёшь commonList: TStringList
и
сохранение
commonList.Add(IntToStr(ListBox1.Lines.Count))
for i := 0 to ListBox1.Lines.Count-1 do commonList.Add(ListBox1.Lines(i));
for i := 0 to ListBox2.Lines.Count-1 do commonList.Add(ListBox2.Lines(i));
commonList.SaveToFile("...");
commonList.Clear;
загрузка
commonList.LoadFromFile("...");
for i := 1 to StrToInt(commonList(0)) do ListBox1.Lines.Add(commonList(i));
for i := StrToInt(commonList(0))+1 to commonList.Count-1 do ListBox2.Lines.Add(commonList(i));
commonList.Clear;

примерно так(может где чё оптимизируешь, на твоё усмотрение это)


 
{RASkov} ©   (2007-05-06 21:45) [5]

или так:
const SRazd = "[SEPARATORLISTS]";
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
procedure FillLists;
var N: Integer;
begin
  for N := 0 to 10 do ListBox1.Items.Add("Item?"+IntToStr(N));
  for N := 0 to 10 do ListBox2.Items.Add("Str?"+IntToStr(N));
end;
procedure LoadLists;
var F: TextFile; S: String; FFirst: Boolean;
begin
  AssignFile(F, "Lists.ddd");
  Reset(F); FFirst:=True;
  try
   while not EOF(F) do begin
    ReadLn(F, S);
    if FFirst and (S=SRazd) then begin FFirst:=False; Continue; end;
    if FFirst then ListBox1.Items.Add(S) else ListBox2.Items.Add(S)
   end;
  finally CloseFile(F); end;
end;
begin
 if FileExists("Lists.ddd") then LoadLists else FillLists;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var F: TextFile; N: Integer;
begin
 AssignFile(F, "Lists.ddd");
 ReWrite(F);
 try
   for N := 0 to ListBox1.Count-1 do WriteLn(F, ListBox1.Items[N]);
   WriteLn(F, SRazd);
   for N := 0 to ListBox2.Count-1 do WriteLn(F, ListBox2.Items[N]);
 finally CloseFile(F); end;
end;

ну и последнея строка из [4]....


 
{RASkov} ©   (2007-05-06 21:46) [6]

> последнея

*последняя :)


 
Герасим   (2007-05-06 21:49) [7]

Спасибо больщое!
Разобрался наконец-то.
Да это, блин, просто оказывается!
Спасибо ещё раз!


 
Vasiliy   (2007-05-06 21:58) [8]

Самому стало интересно :)

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   ListBox2: TListBox;
   btSave: TButton;
   btLoad: TButton;
   btClear: TButton;
   procedure btSaveClick(Sender: TObject);
   procedure btLoadClick(Sender: TObject);
   procedure btClearClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btSaveClick(Sender: TObject);
var
Stream: TStream;
C: Integer;
begin
Stream := TFileStream.Create("listboxes", fmCreate);
try
 C := ListBox1.Count;
 Stream.Write(C, SizeOf(C));
 ListBox1.Items.SaveToStream(Stream);
 ListBox2.Items.SaveToStream(Stream);
finally
 Stream.Free;
end;
end;

procedure TForm1.btLoadClick(Sender: TObject);
var
Stream: TStream;
C, I: Integer;
List: TStringList;
begin
Stream := TFileStream.Create("listboxes", fmOpenRead);
List := TStringList.Create;
try
 Stream.Read(C, SizeOf(C));
 List.LoadFromStream(Stream);
 For I := 0 to C - 1 do ListBox1.Items.Add(List.Strings[I]);
 For I := C to List.Count - 1 do ListBox2.Items.Add(List.Strings[I]);
finally
 Stream.Free;
 List.Free;
end;
end;

procedure TForm1.btClearClick(Sender: TObject);
begin
ListBox1.Clear;
ListBox2.Clear;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2007.05.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
10-1123905651
kblc
2005-08-13 08:00
2007.05.27
Как создать SingletonComServer?


15-1177417389
ArtemESC
2007-04-24 16:23
2007.05.27
Вопросик интересный...


3-1173733501
Андрей123
2007-03-13 00:05
2007.05.27
Как послать на Delphi комманду SQL: UPDATE


11-1160053393
Thaddy
2006-10-05 17:03
2007.05.27
New kol website


4-1166907320
Степан
2006-12-23 23:55
2007.05.27
НЕстандартная панель инструментов