Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > CheckListBox


Автор: AyanTai 26.12.2008, 13:34
Доброго времени суток всем!
Проблема такая: выбираю нужную директорию SelectDirectory, как можно отобразить dbf файлы из этой директории в CheckListBox?
Просто не представляю как это сделать... smile  по поисковику ничего подобного не нашел((

procedure TForm1.btDirOut_ordClick(Sender: TObject);
var
tmp_path : string;
begin
  if SelectDirectory('Выберите диркторию', '', tmp_path) then
  begin
    Edit2.text:=tmp_path;
  end;

Автор: newalex 26.12.2008, 13:55
Код на билдере, но думаю идея понятна.

Код

 AnsiString Path = ExtractFilePath(Application->ExeName);
  SelectDirectory("Выберите папку","",Path);
  if (Path==NULL)
    return;

  TSearchRec DirInfo;
  Path = IncludeTrailingBackslash(Path);
  CheckListBox1->Items->Clear();

  int r = FindFirst(Path + "*.data", faAnyFile, DirInfo); // расширение твое тут вместо data
  while (r==0)
  {
     if (((DirInfo.Attr && faDirectory) != faDirectory) &&
        ((DirInfo.Attr && faVolumeID) != faVolumeID))
     {
        CheckListBox1->Items->Add(DirInfo.Name);
     }
     r = FindNext(DirInfo);
  }

 

Автор: THandle 26.12.2008, 14:02
Просто находишь все файлы с нужным расширением и добавляешь в CheckListBox.

Посмотри темы:
http://forum.vingrad.ru/sources/topic-205111.html
http://forum.vingrad.ru/forum/topic-238020.html

Вот этот код, думаю то что требуется:
http://forum.vingrad.ru/index.php?showtopic=238020&view=findpost&p=1715688


Автор: AyanTai 27.12.2008, 05:06
Спасибо, сейчас гляну!

Автор: AyanTai 27.12.2008, 07:01
все здорово -   smile 
спасибо ребята - сделал!
а как  сделать так: для ВСЕХ выбранных файлов в CheckListBox dbf выполнять некую процедуру...?

if CheckListBox1.selected[0] then <процедура>  - так этож для конкретного файла....а для всех сразу ?

Автор: THandle 27.12.2008, 10:24
AyanTai, хм... Ну объединяй все выбранные элементы в какой нибудь список(TStringList, массив...), или кто мешает поочередно, в цикле, для каждого по очереди вызывать нужную процедуру?smile

Автор: AyanTai 29.12.2008, 05:18
у меня просто будет много файлов... и надо будет их все поочередно загонять на одну и ту же процедуру...   smile 

Автор: AyanTai 29.12.2008, 08:36
Вопрос: вот у меня в CheckListBox1 выводятся найденные файлы, я один файл отметил галочкой, есть у CheckListBox1 свойство чтоб выдавал имя отмеченного файла??? что-то похожее на OpenDialog1.FileName

Автор: THandle 29.12.2008, 08:42
Ну а чем просто не угодило брать каждый раз отмеченный галочкой файл?
Код


procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
begin
  with CheckListBox1 do
    if Checked[ItemIndex] then
      Proc(Items[ItemIndex]);
end;


Proc тут - твоя процедура.


Цитата(AyanTai @  29.12.2008,  08:36 Найти цитируемый пост)
имя отмеченного файла??? что-то похожее на OpenDialog1.FileName 


http://forum.vingrad.ru/faq/topic-212851.html

Автор: AyanTai 29.12.2008, 08:47
и как можно узнать количество отмеченных файлов в CheckListBox1?? просто хочу сделать цикл
For i:=0 to кол-во отмеченных do begin
       if CheckListBox1.selected[i] then
       тут надо вывести название выбранного файла....(((
        <процедуры..>
end;

Добавлено через 3 минуты и 14 секунд
THandle,  спасибо!! Респект! буду делать)

Автор: THandle 29.12.2008, 08:58
AyanTai, Количество выделенных ты никак не узнаешь smile (ну если сам не посчитаешь)

Для этого производится проверка на выделенность:

Цитата(AyanTai @  29.12.2008,  08:47 Найти цитируемый пост)
if CheckListBox1.selected[i] then


Код

var
  I: Integer;
begin
  for I := 0 to CheckListBox1.Items.Count - 1 do
    if CheckListBox1.Selected[I] then
      Proc();
end;


ну и with сюда для удобства:

Код

var
  I: Integer;
begin
  with CheckListBox1 do
    for I := 0 to Items.Count - 1 do
      if Selected[I] then
        Proc();
end;



А еще посмотри вот такой код(подсчет идет без цикла, прям во время нажатия), хотя тебе вряд ли пригодится тут этот вариант, но все же глянь:

http://forum.vingrad.ru/index.php?showtopic=232132&view=findpost&p=1667962

Автор: AyanTai 29.12.2008, 10:16
THandle,   ----  Спасибо!!!!

Автор: AyanTai 29.12.2008, 10:56
а чтоб получить имя файла надо будет так сделать:

procedure TForm1.Button2Click(Sender: TObject);            
var
  I: Integer;
begin
  with CheckListBox1 do
    for I := 0 to Items.Count - 1 do
      if Selected[I] then
       Form1.ADOTable1.TableName:=ExtractFileName(CheckListBox1.Selected[I]);
       Proc();
end;

????

Автор: THandle 29.12.2008, 13:40
AyanTai, в асе ответил smile

Код

Form1.ADOTable1.TableName:=ExtractFileName(CheckListBox1.Items[I]);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)