![]() |
|
|
#1
|
|||
|
|||
|
как в листобоксе сделать считывание файла из директории и удалением его формата
"c:\wer\qwer.qw" а что бы в листбоксе показывалось лишь название то есть "qwe" ![]() |
|
#2
|
|||
|
|||
|
помойму через массивы это всё делалось
|
|
#3
|
|||
|
|||
|
FileListBox1 то что нужно было, )) вот только что то расширения файлов не могу убрать и как задать директорию(((
Последний раз редактировалось жекаизжека, 01.10.2008 в 15:02. Причина: добавление |
|
#4
|
|||
|
|||
|
Насколько я понимаю те надо из строки удалить нескколькл символов после точки?
Как это сделать непомню... Но примерно так должно быть : 1. Слово := Директория; 2. В Слове ищем "." 3. Узнаем сколько после нее знаков это будет N; 4. Удаляем с конца строки N + 1 знаков (плюс сама точка); Или тебе не это нужно? |
|
#5
|
||||
|
||||
|
По моему вышеописанный способ весьма примитивен >:-О
используй функции ExtractFileName('FileName') ExtractFileExt('FileName') для решения твоей проблемы вижу 2способа. Использовать просто обычный КомбоБокс и искать файлы ручками, либо перепиши сам контрол. Есть на закладке `самплз` и другой ему аналог - поищи, там это вроде можно реализовать. про директорию. Для этого придется на форму повесить ещё 2 контрола. На той же закладке есть компоненты ДрайвЛистБокс и второй для работы с директориями. свяжи их в инспекторе объектов, и всё. ну и напоследок. Я не уверен, но вроде можно напрямую с Итемами в ФайлЛистБокс работать..а там уже всё просто Последний раз редактировалось Ferra, 02.10.2008 в 14:13. |
|
#6
|
|||
|
|||
|
Блин, через поиск файлы в директории находишь и ищещь точку... Копируешь в доп переменную что получится (через POS('.',S) возвращает номер буквы с точкой). потом снова ищещь до точки(вдруг точек несколько). Вот и все
|
|
#7
|
|||
|
|||
|
Ребята, все гораздо проще.
Варианта 2: 1. Вот функция (и класс-хелпер), которая добавляет строчку в лист бокс. Принимает на вход имя файла, помещает в контрол "чистое" имя (без пути и без расширения), а в коллекцию Objects - экземпляр класса-хелпера, содержащего полное имя файла. Ну и в довесок функция получения полного имени файла по индексу. внимание! В этом коде доп. ссылки на объекты-хелперы не сохраняются, так что при удалении строки из ListBox'а надо позаботиться об удалении соответсвующего хелпера. Код целиком вставляется в секцию имплементации. Если нужен доступ снаружи, то вынесите описания функций в секцию интерфейса. Код:
type
TFileNameHelper = class
FileName : String;
end;
function AddFileName(AListBox : TListBox; AFileName : TFileName) : Integer;
var
AHelper : TFileNameHelper;
begin
AHelper := TFileNameHelper.Create;
AHelper.FileName : =AFileName;
Result := AListBox.AddObject(ChangeFileExt(ExtractFileName(AFileName),''),AHelper);
end;
function GetFileName(AListBox : TListBox; AIndex : Integer) : String
begin
Result := (AListBox.Items.Objects[AIndex] As TFileNameHelper).FileName;
end;================================== Вариант 2ой - OwnerDraw. Файлы добавляются с полным путем как обычно: Код:
ListBox1.Items.Add('c:\myfolder\myfile.ext');А вот отрисовку итема листбокса делаем руками (в данном примере грубо, просто отрисовываем). Что надо для этого сделать: 1. У ListBox'а поставить свойство Style в значение lbOwnerDrawFixed. 2. Реализовать обработчик события OnDrawItem примерно так: Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
ACanvas : TCanvas;
AText : String;
begin
ACanvas := (Control As TListBox).Canvas;
If State In [odSelected, odFocused]
Then
Begin
ACanvas.Brush.Color := clHighlight;
ACanvas.Font.Color := clHighlightText;
End
Else
Begin
ACanvas.Brush.Color := clWindow;
ACanvas.Font.Color := clWindowText;
End;
ACanvas.FillRect(Rect);
AText := ChangeFileExt(ExtractFileName((Control As TListBox).Items[Index),'');
ACanvas.TextOut(Rect.Left,Rect.Top,AText);
end;При этом получение реального имени файла останется таким же, как было бы, если бы выводилось все обычным образом: Код:
AFileName := ListBox1.Items[AIndex]; |
|
#8
|
|||
|
|||
|
все разобрался...с расширениями даже лучше,мне больше подходит))), только теперь не могу понят, выделяю файл нажимаю на кнопку и пишет ошибку что не может найти файл, ниже код
это работает нормально без FileListBox1, при нажатие кнопки FS:=TFileStream.Create('files\1.txt', fmOpenRead); При выделении пункта из FileListBox и нажатие кнопки, выдает ошибку, где ошибка, можете подсказать. FS:=TFileStream.Create('+FileListBox1.OnChange+', fmOpenRead); маска в FileListBox1 прописана так Mask = files\*.* Последний раз редактировалось жекаизжека, 03.10.2008 в 13:26. |
|
#9
|
||||
|
||||
|
Есть такая функция....
ExpandFileName И как раз получится: "c:\wer\qwer.qw" -> "qwer" |
|
#10
|
|||
|
|||
|
Тупой инет! плохой инет!!! =(
|
|
#11
|
|||
|
|||
|
Цитата:
![]() |