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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2016, 18:26   #1
sistemsx
Пользователь
 
Регистрация: 20.05.2013
Сообщений: 11
По умолчанию Связь по компонентам

Добрый день или вечер
Не знаю как точно задать свой вопрос, но попробую по конкретней объяснить. В общем суть такая, кидаем на форму компоненты которые отвечают за отображение информации, например (Image, listbox, FileListBox, memo, WebBrowser, и. т. д) Далее заполняем listfox или FileListBox строками. После при выборе строк открывались данные в этих компонентах, то есть например в FileListBox строка1 в memo выводиться текст в Image картинка. Выбрали строка2 в memo другой текст и Image другая картинка. Как то вот так. Вариант базы данных не предлагать.
sistemsx вне форума Ответить с цитированием
Старый 20.12.2016, 20:16   #2
Zis67
Пользователь
 
Аватар для Zis67
 
Регистрация: 06.04.2011
Сообщений: 80
По умолчанию

Код:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
memo1.lines.add(inttostr(listbox1.ItemIndex));
image1.Picture.LoadFromFile(('C:\Изображения\'+inttostr(listbox1.ItemIndex)+'.jpg'));
end;

Последний раз редактировалось Вадим Мошев; 20.12.2016 в 21:27.
Zis67 вне форума Ответить с цитированием
Старый 20.12.2016, 20:36   #3
sistemsx
Пользователь
 
Регистрация: 20.05.2013
Сообщений: 11
По умолчанию

Что то я не правильно свою мысль высказал. Скорей всего так, допустим в директории есть три папки, в каждой папке по одному файла txt и jpg. Я думаю что придется создавать еще один связывающий файл с listbox и с файлами которые в папках (типо ссылок), можно ли так реализовать?
sistemsx вне форума Ответить с цитированием
Старый 20.12.2016, 20:55   #4
Zis67
Пользователь
 
Аватар для Zis67
 
Регистрация: 06.04.2011
Сообщений: 80
По умолчанию

если назвать файлы 1,2,3... то полагаю необязательно. либо по содержанию строки листбокса(его можно заполнять названиями соответствующих файлов). в противном случае наверное да.
Zis67 вне форума Ответить с цитированием
Старый 20.12.2016, 21:04   #5
sistemsx
Пользователь
 
Регистрация: 20.05.2013
Сообщений: 11
По умолчанию

не получится, при выборе строки в listbox нужно чтобы отобразилась одновременно в image картинка, а в memo текст
sistemsx вне форума Ответить с цитированием
Старый 20.12.2016, 23:05   #6
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от sistemsx Посмотреть сообщение
не получится, при выборе строки в listbox нужно чтобы отобразилась одновременно в image картинка, а в memo текст
А вам что, Борланд заблокировал метод
Memo.LoadFromFile('inttostr(listbox 1.ItemIndex)+'.txt')?
kropotkina-alice вне форума Ответить с цитированием
Старый 21.12.2016, 12:40   #7
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Что мешает сделать поиск каталогов внутри конкретной директории "[КАРТИНКИ-ТЕКСТ]"? И в листбох вывести названия папок:
[КАРТИНКИ-ТЕКСТ]
В листбоксе:
{- Папка 1
- Папка 2
- Папка 3}
ПРи клике на ликсбох заходим по пути и грузим картинку в картинку текст в текст

Код поиска всех файлов внутри каталога и в подкаталогах через рекурсию :
Код:
procedure Tlogins.GetAllFiles(Path: string; lb: Tlistbox);
var
sRec: TSearchRec;
isFound: boolean;
begin
isFound := FindFirst(Path + '/*.*', faAnyFile, sRec ) = 0;
while isFound do
begin
if ( sRec.Name<>'.' ) and ( sRec.Name<>'..' )  then
begin
if ( sRec.Attr and faDirectory ) = faDirectory then
GetAllFiles( Path + '/' + sRec.Name, Lb );
Lb.Items.Add(sRec.Name);
end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );

end;
Код поиска только каталогов внутри директории без рекурсии
Код:
procedure Tlogins.GetAllDIR(Path: string);
var
sRec: TSearchRec;
isFound: boolean;
begin
isFound := FindFirst(Path + '/*.*', faDirectory, sRec ) = 0;
while isFound do
begin
if ( sRec.Name<>'.' ) and ( sRec.Name<>'..' )  then
begin
if ( sRec.Attr and faDirectory ) = faDirectory then
begin
SetLength(Style_mass,Length(Style_mass)+1); 
Style_mass[Length(Style_mass)-1]:=sRec.Name; Тут не массив у вас, а в листбох
end;

end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );
end;
Пишу много и развернуто

Последний раз редактировалось Heneken87; 21.12.2016 в 12:48.
Heneken87 вне форума Ответить с цитированием
Старый 21.12.2016, 15:08   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Есть еще вариант в ListBox.Items.AddObject в этх строках можно хранить массив со всей информацией о ссылках на файлы и т.д. так сказать расширить этот компонент. Могу подробней описать

Код:
 
//Массив с нужной инфой
 type
  PObjectInfo = ^TObjectInfo;
  TObjectInfo = record
  FileNameImage: string; //Ссылка на картинку
  FileNamenтxt: string;// ссылка на текст
  end;

//Загрузка в ListBox массивных данных
procedure TForm1.Button3Click(Sender: TObject);
var
ObjectInfo: PObjectInfo;
begin
new(ObjectInfo);
ObjectInfo.FileNameImage:= 'D:\Иванов.jpg';
ObjectInfo.FileNameTxt:= 'D:\Иванов.txt';
ListBox1.Items.AddObject('Иванов', TObject(ObjectInfo));

new(ObjectInfo);
ObjectInfo.FileNameImage:= 'D:\Петров.jpg';
ObjectInfo.FileNameTxt:= 'D:\Петров.txt';
ListBox1.Items.AddObject('Петров', TObject(ObjectInfo));
.................
и т.д.
end;

//При выборе строки в ListBox нужная инфа отразиться в нужных компонентах
procedure TForm1.ListBox1Click(Sender: TObject);
var
ObjectInfo: PObjectInfo;
begin
ObjectInfo:= PObjectInfo(ListBox1.Items.Objects[ListBox1.ItemIndex]);
if ObjectInfo <> nil then
begin
 // проверяем существование файла
If FileExists(ObjectInfo.FileNameImage) then
Image1.Picture.LoadFromFile(ObjectInfo.FileNameImage);

// проверяем существование файла
If FileExists(ObjectInfo.FileNameTxt) then 
memo1.Lines.LoadFromFile(ObjectInfo.FileNameTxt);
end;
end;

//Чистка ListBox от массивных данных 
procedure TForm1.Button4Click(Sender: TObject);
var
i: integer;
begin
for i:= 0 to ListBox1.Items.Count -1 do
dispose(PObjectInfo(ListBox1.Items.Objects[i]));
 ListBox1.Clear;
end;
Переделать этот код не сложно под себя
Для быстроты загрузки можно хранить уже загруженные данные если конечно строк не очень много иначе память грузить будет

Последний раз редактировалось Aliens_wolfs; 21.12.2016 в 16:26.
Aliens_wolfs вне форума Ответить с цитированием
Старый 22.12.2016, 17:40   #9
sistemsx
Пользователь
 
Регистрация: 20.05.2013
Сообщений: 11
По умолчанию

Добрый день. Не пойму почему не работает, делфи ругается на GetAllFiles, что надо добавить в uses?
sistemsx вне форума Ответить с цитированием
Старый 22.12.2016, 18:20   #10
sistemsx
Пользователь
 
Регистрация: 20.05.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от sistemsx Посмотреть сообщение
Добрый день. Не пойму почему не работает, делфи ругается на GetAllFiles, что надо добавить в uses?
delphi xe3
sistemsx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по компонентам Fahman Общие вопросы Delphi 8 10.02.2014 10:55
путь к компонентам. Nikai Компоненты Delphi 0 18.01.2013 15:05
Tab: переход по компонентам new player Общие вопросы Delphi 2 18.10.2010 11:49
Присвоение процедур компонентам N!ckeL Компоненты Delphi 4 26.04.2008 18:22
Обращение к компонентам из цикла satana Общие вопросы Delphi 4 16.07.2007 12:16