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


Автор: Михалыч 29.8.2011, 20:01
Подскажите как правильно можно сделать следующее:
Программа работает с ресурсами ,в данном случае с dll , в папке с программой лежат файлы с ресурсами .
В своей программе из  combobox я выбираю к какому ресурсу буду обращаться, в ресурсах лежат иконки ,
Нужно сделать так,что бы пользователи могли сами добавить файл с ресурсами в мою папку, но нужно что бы соответственно
в combobox появился items на данную папку

Автор: sCreator 29.8.2011, 20:30
При запуске программы просматриваешь папку по маске '*.dll' и формируешь из имен файлов список комбобокс ( расширение можно откинуть ).

Автор: Михалыч 29.8.2011, 22:30
Сформировал в combobox . 
например в папке были файлы :  1111.dll , 2222.dll ,3333.dll  в списке combobox они тоже появились , далее как правильно я понял в обрабтчике combobox  надо проверять по списку, как в списке называется файл,то к такому же и обращаться в папке?


Автор: Михалыч 30.8.2011, 18:01
Ну подскажите кто нибудь ,как обрабатывать вызов файла из combobox под другим именем .
Вместо 1111.dll  например что бы было название  Windows

Автор: superVad 30.8.2011, 18:40
Михалыч, Items в комбобоксе это что то вроде StringList. Т.е. к каждому элементу может крепиться еще и объект.
Сделай класс с одним полем - полный путь к файлу. Прикрепляй к каждому айтиму объект такого класса и задавай в поле полный путь к необходимому файлу. Текст к таком случае может быть любым.

Автор: Михалыч 30.8.2011, 19:36
Спасибо конечно большое, но в моем мега мозге все это не укладывается, если Вас не затруднит ,не могли бы Вы в поисковике
найти ссылку на данную тему ,я просто не знаю по каким запросам все это искать в поисковике, или может пример есть

Автор: superVad 30.8.2011, 20:03
Михалыч
Набросал на коленке - но смысл, думаю, ясен.
Код

  //объект
  TPathObj = class(TObject)
  public
    path: string;
  end;

//процедура для добавления строчки в комбобокс
procedure TForm1.add_item(cmb_bx: TComboBox; screen_str, path_str: string);
var
  obj_id: Integer;
begin
  obj_id := cmb_bx.Items.AddObject(screen_str, TPathObj.Create);
  TPathObj(cmb_bx.Items.Objects[obj_id]).path := path_str;
end;

//так добавляем
procedure TForm1.Button1Click(Sender: TObject);
begin
  add_item(ComboBox1, 'item_' + IntToStr(ComboBox1.Items.Count), 'тут путь №' + IntToStr(ComboBox1.Items.Count));
end;

//так читаем
procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(TPathObj(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).path);
end;


Почитай про TStringList - http://forum.vingrad.ru/articles/topic-208756.html.

Автор: Frees 30.8.2011, 20:08
superVad, TPathObj утекет

Код

procedure TForm1.FormClose(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to cmb_bx.Items.Count - 1 do
    cmb_bx.Items.Objects[i].Free;
end;

Автор: superVad 30.8.2011, 20:21
Цитата(Frees @  30.8.2011,  19:08 Найти цитируемый пост)
superVad, TPathObj утекет

Абсолютная правда smile

Добавлено через 6 минут и 42 секунды
О!
А если наследовать TPathObj от TComponent:
Код

  TPathObj = class(TComponent)
  public
    path: string;
  end;

procedure TForm1.add_item(cmb_bx: TComboBox; screen_str, path_str: string);
var
  obj_id: Integer;
begin
  obj_id := cmb_bx.Items.AddObject(screen_str, TPathObj.Create(cmb_bx));
  TPathObj(cmb_bx.Items.Objects[obj_id]).path := path_str;
end;

По идее тогда объекты автоматом уничтожатся. Но я не уверен, что это правильное решение smile

Автор: Frees 30.8.2011, 20:45
Цитата(superVad @  30.8.2011,  23:21 Найти цитируемый пост)
По идее тогда объекты автоматом уничтожатся. Но я не уверен, что это правильное решение

как то это сурова, ради строки Tcomponent создавать
а еще можно попробовать в Objects сразу string класть.

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