Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2012, 17:41   #1
Filipock
Пользователь
 
Регистрация: 26.06.2012
Сообщений: 17
По умолчанию Вывод массива в ListBox1

Привет, массив, ListBox1 и ListBox2.
В массиве пути к файлам (.txt,html - расширения) около 50 путей.
Как сделать чтобы каждый путь выводился в ListBox1 в таком формате ( Например c:\1.txt вывод 1.txt или "1" )
Далее... Предположем что мы сделали первое задание, все пути у нас в ListBox1.
Как сделать при нажатии или выделение (Желательно выделение) определенного пути в ListBox1 выводилось содержимое файла в ListBox2.


Первый пример загрузке мне показали "загрузка массива в ListBox1".

Код:
var
  files: array of string;
  i: integer;
begin
  SetLength(files, 2);
  files[0] := 'C:\1.txt';
  files[1] := 'E:\excel.xls';
  ListBox1.Items.Clear;
  for i := 0 to length(files) - 1 do
    ListBox1.Items.Add(ExtractFileName(files[i]));
end;

Но как мне теперь содержимое выделенного файла из ListBox1 загрузить в ListBox2
Filipock вне форума Ответить с цитированием
Старый 09.07.2012, 17:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ExtractFileName
В этом случае никак, потому как хранишь ты только имена файлов. А чтоб считать файл нормально нужно путь, причем полный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2012, 17:55   #3
Filipock
Пользователь
 
Регистрация: 26.06.2012
Сообщений: 17
По умолчанию

А как тогда сделать полный путь? У меня есть массив в нем полные пути к файлам. Как можно организовать мою затею?

Последний раз редактировалось Filipock; 09.07.2012 в 18:00.
Filipock вне форума Ответить с цитированием
Старый 09.07.2012, 18:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если массив есть это хорошо:
Код:
if ListBox1.ItemIndex<>-1 then
 ListBox2.Items.LoadFromFile(files[ListBox1.ItemIndex]);
Это в OnClick на listBox1
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2012, 18:09   #5
Filipock
Пользователь
 
Регистрация: 26.06.2012
Сообщений: 17
По умолчанию

Во спасибо тебе!!!

Но возникла другая проблема.
На форме memo1, ListBox2,ListBox1,edit1,edit2, label1,label2.
Если в мемо1 появился текст такова примера.

Код:
qwert=true;Комментарий
qwert=false;Комментарий
После того как загрузили, текст в ListBox1 выделяем строку в ListBox1 например qwert=false;Комментарий.
То в edit1 появляется значение после знака = то есть false а в edit2 после знака ; идет Комментарий.
(Идет парсинг строк)
Тут вроде все понятно.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StrUtils, sListBox, sCheckListBox;

type
  TData = record
    item: Integer;
    name: string;
    value: string;
    description: string;
  end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    ListBox1: TListBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    ListBox2: TListBox;
    Button1: TButton;
    sCheckListBox1: TsCheckListBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure sCheckListBox1Click(Sender: TObject);
  private
    FData: array of TData;
    procedure ParseFile(const sl: TStrings);
    procedure SelectData(const item: Integer);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  qwe :array [0..1] of   string;

implementation

{$R *.dfm}

procedure TForm1.ParseFile(const sl: TStrings);
var
  i, c: Integer;
  s: string;
  r, d: Integer;
  Data: TData;
begin
  Label1.Caption := '';
  Label2.Caption := '';
  Edit1.Clear;
  Edit2.Clear;
  SetLength(FData, 0);

  ListBox1.Clear;
  ListBox1.Items.BeginUpdate;

  c := sl.Count - 1;
  for i := 0 to c do
  begin
    s := sl.Strings[i];

    r := Pos('=', s);
    if r = 0 then Continue;

    d := PosEx(';', s, r + 1);
    if d = 0 then
      d := Length(s) + 1;

    Data.name         := Trim(Copy(s, 1, r - 1));
    Data.value        := Trim(Copy(s, r + 1, d - r - 1));
    Data.description  := Trim(Copy(s, d + 1, Length(s)));

    Data.item := i;

    r := Length(FData);
    SetLength(FData, r + 1);
    FData[r] := Data;

    ListBox1.Items.Add(Data.name);
  end;

  ListBox1.Items.EndUpdate;
  ListBox1.ItemIndex := -1;
end;

procedure TForm1.SelectData(const item: Integer);
begin
  Label1.Caption := FData[item].name;
  Label2.Caption := Format('Line: %u', [FData[item].item]);
  Edit1.Text := FData[item].value;
  Edit2.Text := FData[item].description;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
qwe[0]:='test.txt';
qwe[1]:='test.txt';

  Memo1.Clear;
  Label1.Caption := '';
  Label2.Caption := '';
  Edit1.Clear;
  Edit2.Clear;
  ListBox1.Clear;
  Memo1.Text := 'Здесь исходный текст.';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin

  ListBox1.Items.Clear;
  for i := 0 to length(qwe) - 1 do
    sCheckListBox1.Items.Add(ExtractFileName(qwe[i]));
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  if ListBox1.ItemIndex = -1 then Exit;
  SelectData(ListBox1.ItemIndex);
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  ParseFile(Memo1.lines);
end;

procedure TForm1.sCheckListBox1Click(Sender: TObject);
begin
if sCheckListBox1.ItemIndex<>-1 then
 ListBox1.Items.LoadFromFile(qwe[sCheckListBox1.ItemIndex]);
end;
Помогите пожалуйста)
Вложения
Тип файла: rar Project1.rar (174.4 Кб, 8 просмотров)

Последний раз редактировалось Filipock; 09.07.2012 в 21:18.
Filipock вне форума Ответить с цитированием
Старый 09.07.2012, 19:57   #6
Filipock
Пользователь
 
Регистрация: 26.06.2012
Сообщений: 17
По умолчанию

Ошибка "raised exception class eaccessviolation with message access violation at address"

Указывает на
Код:
  Label1.Caption := FData[item].name;
  Label2.Caption := Format('Line: %u', [FData[item].item]);
  Edit1.Text := FData[item].value;
  Edit2.Text := FData[item].description;
Если убрать
Код:
  if ListBox1.ItemIndex = -1 then Exit;
  SelectData(ListBox1.ItemIndex);
Ошибки нету но пол кода не работает.
Я так понимаю это что то с массивом.
Помогите
Filipock вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
вывод массива saix Общие вопросы C/C++ 3 26.03.2011 23:13
вывод массива DrSMERTb C++ Builder 6 23.02.2011 18:07
вывод сообщений из Unit2 в Unit1 ListBox1 fize Помощь студентам 4 12.12.2009 17:35
ListBox1 Rahim1993 Общие вопросы Delphi 1 02.01.2008 17:56