![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка файла из списка ComboBox [D7]
Кос © (2012-03-02 10:05:00)
procedure TForm1.FormCreate(Sender: TObject);
var
SR: TSearchRec;
FindRes: Integer;
begin
ComboBox1.Clear;
FindRes := FindFirst('C:\1\*.*', faAnyFile, SR);
while FindRes = 0 do
begin
ComboBox1.Items.Add(SR.Name);
FindRes := FindNext(SR);
end;
FindClose(SR);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
List : TStringList;
i,j : integer;
S : String;
begin
List := TStringList.Create;
S:=ComboBox1.Items[5];
List.LoadFromFile(S);
StringGrid1.RowCount := List.Count;
for i:=0 to StringGrid1.RowCount-1 do
with StringGrid1.Rows[i] do
begin
Delimiter:=' ';
DelimitedText:=List[i];
end;
end;
Собственно в выпадающем списке имена файлов находящихся в папке 1 диска С. Кстати как их отсортировать по дате и выбросить из списка ComboBox ( . и ..), которые при поиске записываются в Items ComboBox'a ? Далее хочу при выборе файла из списка загружать его в StringGrid, если ручками прописать конкретный файл, то код работает. Не получается реализовать с изменяющимся файлом S.
CRLF (2012-03-02 13:09:00) [21]
> AV © (02.03.12 12:40) [11]
1. Параметризуешь -- так уж параметризуй по-людски... А то учишь новичка половину запараметризовать, а вторую половину в глобальные переменные распихать :-(
2. В TSearchRec.FindData лежат дата-время создания, модицикации и последнего доступа. Игнорировать эту уже найденную информацию и гонять в цикле FileAge и FileExist крайне глупо.
Anatoly Podgoretsky (2012-03-02 12:46:00) [22]
> А сортировку как по дате применить не подскажите ?
У Кнута целый, толстый том посвящен сортировке, а ты хочешь в несколько строк.
AV (2012-03-02 12:40:00) [23]или аля как-то так, т.к. дата уже есть - это же не просто строки, это файлы
procedure AddIt(s: string);
begin
if FileExist() и прочая лабудень then
for i:= ComboBox1.Items.Count - 1 downto 0 do
begin
if FileAge(s) > FileAge(ComboBox1.Items[i]) then
begin
ComboBox1.Items.Insert(i, s); Exit;
end;
end;
ComboBox1.Items.Add(s);
CRLF (2012-03-02 12:05:00) [24]как вариант: создай список, который будет хранить даты, при нахождении очередного файла определяй, на какую позицию нужно вставить файл, чтобы список оставался отсортированным, вставляй дату файла в этот список, а имя файла в то, что у тебя фигурирует как List.
CRLF (2012-03-02 12:03:00) [25]во-первых, почитай про try finally end.
во-вторых, с сортировкой по дате так "в лоб" не получится. нужно хранить пары "дата-имя", сортировать по дате, а затем в список запихивать имена файлов.
Кос (2012-03-02 11:51:00) [26]А сортировку как по дате применить не подскажите ?
procedure TForm1.FormCreate(Sender: TObject);
var
List:Tstringlist;
SR: TSearchRec;
FindRes: Integer;
begin
List:=Tstringlist.Create;
ComboBox1.Clear;
FindRes := FindFirst('C:\контрольные файлы\*.*', faAnyFile, SR);
while FindRes = 0 do
begin
if (SR.Name <> '.') and (SR.Name <> '..') then
ComboBox1.Items.Add(SR.Name);
FindRes := FindNext(SR);
end;
FindClose(SR);
List.Sort;
ComboBox1.Items:=List.Text;
List.Free;
вот накидал на скорую руку
CRLF (2012-03-02 11:46:00) [27]можешь сохранять с путями, можешь сначала установить текущий каталог, затем загружать так, как ты сейчас загружаешь
Кос (2012-03-02 11:45:00) [28]
List.LoadFromFile('C:\1\'+S);
Вопрос снят, спасибо
Кос (2012-03-02 11:36:00) [29]А как тогда реализовать ?
AV (2012-03-02 11:00:00) [30]если не указанj полное имя, файл ищется в папке по умолчанию(каталогу где находится проект) и папках по путям в %Path%
Кос (2012-03-02 10:46:00) [31]
S:=ComboBox1.Text;
List.LoadFromFile(S);
Почему, обращение при этом идёт к каталогу где находится проект. Соответственно закрывается ошибкой файл не найден.
CRLF (2012-03-02 10:39:00) [32]
> если ручками прописать конкретный файл, то код работает.
> Не получается реализовать с изменяющимся файлом S
С путями что-то напутал 100%
AV (2012-03-02 10:21:00) [33]
> выбросить из списка ComboBox ( . и ..)
это директории
faAnyFile xor faDirectory
> как их отсортировать по дате
любым способом сортировки
> хочу при выборе файла из списка загружать его в StringGrid
S:=ComboBox1.Text;
List.LoadFromFile(S);