|
#1
|
|||
|
|||
Работа с ListBox
как в листобоксе сделать считывание файла из директории и удалением его формата
"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 контрола. На той же закладке есть компоненты ДрайвЛистБокс и второй для работы с директориями. свяжи их в инспекторе объектов, и всё. ну и напоследок. Я не уверен, но вроде можно напрямую с Итемами в ФайлЛистБокс работать..а там уже всё просто Нет повести печальнее на свете, чем повесть о заклиневшем Resete. Последний раз редактировалось 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
|
|||
|
|||
Цитата:
Я ни в чем никогда не уверен... И в этом тоже... |