Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.10.2008, 01:31
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
Счастье Работа с ListBox

как в листобоксе сделать считывание файла из директории и удалением его формата
"c:\wer\qwer.qw" а что бы в листбоксе показывалось лишь название то есть "qwe"
Ответить с цитированием
  #2  
Старый 01.10.2008, 01:34
message message вне форума
Прохожий
 
Регистрация: 01.10.2008
Сообщения: 2
Репутация: 10
По умолчанию

помойму через массивы это всё делалось
Ответить с цитированием
  #3  
Старый 01.10.2008, 14:34
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

FileListBox1 то что нужно было, )) вот только что то расширения файлов не могу убрать и как задать директорию(((

Последний раз редактировалось жекаизжека, 01.10.2008 в 15:02. Причина: добавление
Ответить с цитированием
  #4  
Старый 02.10.2008, 12:42
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
По умолчанию

Насколько я понимаю те надо из строки удалить нескколькл символов после точки? Как это сделать непомню...
Но примерно так должно быть :
1. Слово := Директория;
2. В Слове ищем "."
3. Узнаем сколько после нее знаков это будет N;
4. Удаляем с конца строки N + 1 знаков (плюс сама точка);
Или тебе не это нужно?
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #5  
Старый 02.10.2008, 14:08
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

По моему вышеописанный способ весьма примитивен >:-О

используй функции
ExtractFileName('FileName')
ExtractFileExt('FileName')

для решения твоей проблемы вижу 2способа. Использовать просто обычный КомбоБокс и искать файлы ручками, либо перепиши сам контрол. Есть на закладке `самплз` и другой ему аналог - поищи, там это вроде можно реализовать.

про директорию. Для этого придется на форму повесить ещё 2 контрола. На той же закладке есть компоненты ДрайвЛистБокс и второй для работы с директориями. свяжи их в инспекторе объектов, и всё.

ну и напоследок. Я не уверен, но вроде можно напрямую с Итемами в ФайлЛистБокс работать..а там уже всё просто
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.

Последний раз редактировалось Ferra, 02.10.2008 в 14:13.
Ответить с цитированием
  #6  
Старый 02.10.2008, 14:56
DSL88 DSL88 вне форума
Новичок
 
Регистрация: 08.09.2008
Адрес: Пермь
Сообщения: 51
Репутация: 10
По умолчанию

Блин, через поиск файлы в директории находишь и ищещь точку... Копируешь в доп переменную что получится (через POS('.',S) возвращает номер буквы с точкой). потом снова ищещь до точки(вдруг точек несколько). Вот и все
__________________
Жизнь - игра: сюжет фигня... Зато какая графика!!!
Ответить с цитированием
  #7  
Старый 02.10.2008, 15:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ребята, все гораздо проще.

Варианта 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  
Старый 03.10.2008, 13:22
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

все разобрался...с расширениями даже лучше,мне больше подходит))), только теперь не могу понят, выделяю файл нажимаю на кнопку и пишет ошибку что не может найти файл, ниже код

это работает нормально без FileListBox1, при нажатие кнопки
FS:=TFileStream.Create('files\1.txt', fmOpenRead);

При выделении пункта из FileListBox и нажатие кнопки, выдает ошибку, где ошибка, можете подсказать.
FS:=TFileStream.Create('+FileListBox1.OnChange+', fmOpenRead);

маска в FileListBox1 прописана так Mask = files\*.*

Последний раз редактировалось жекаизжека, 03.10.2008 в 13:26.
Ответить с цитированием
  #9  
Старый 04.10.2008, 14:30
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Есть такая функция....
ExpandFileName
И как раз получится: "c:\wer\qwer.qw" -> "qwer"
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #10  
Старый 06.10.2008, 14:04
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
По умолчанию

Тупой инет! плохой инет!!! =(
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
  #11  
Старый 06.10.2008, 14:04
Interface Interface вне форума
Активный
 
Регистрация: 23.05.2008
Адрес: Россия, Уфа
Сообщения: 203
Репутация: 1
По умолчанию

Цитата:
Сообщение от Ferra
По моему вышеописанный способ весьма примитивен >:-О

используй функции
ExtractFileName('FileName')
ExtractFileExt('FileName')

для решения твоей проблемы вижу 2способа. Использовать просто обычный КомбоБокс и искать файлы ручками, либо перепиши сам контрол. Есть на закладке `самплз` и другой ему аналог - поищи, там это вроде можно реализовать.

про директорию. Для этого придется на форму повесить ещё 2 контрола. На той же закладке есть компоненты ДрайвЛистБокс и второй для работы с директориями. свяжи их в инспекторе объектов, и всё.

ну и напоследок. Я не уверен, но вроде можно напрямую с Итемами в ФайлЛистБокс работать..а там уже всё просто
Да да помню че то такое... Хотел написать, но забыл как это выглядит поэтому предложил удалять буковки...
__________________
Я ни в чем никогда не уверен... И в этом тоже...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter