Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 197

/ вопрос открыт /

Здравствуйте!
Подскажите пожалуйста!
я перетаскиваю файлы методом drag&drop их иконки отображаются в связке imagelist и listview. как сохранить эти иконки и их параметры в файл, чтобы при старте программы они загрузились и отобразились?

grater Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: grater (статус: Посетитель)
Вопрос отправлен: 16 сентября 2009, 15:46
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Короче, если я правильно понял...
Берёшь компонент TSysImageList и заменяешь им свой ImageList. Затем пишешь соответствующий обработчик события ListView.OnGetImageIndex, где и подставляешь нужный ImageIndex для каждого Item'a с помощью метода TSysImageList.ImageIndexOf(<имя_файла>).
Вот и всё, иконки файлов больше не надо нигде хранить.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 16 сентября 2009, 17:50

Ответ #2. Отвечает эксперт: Жикльор

Здравствуйте, grater!

Насколько я знаю, если вы создаете ImageList, то он автоматически создают ресурсный файл, в котором все помещаеться, а при компиляции внедряеться в ехе-файл.

Ответ отправил: Жикльор (статус: 5-ый класс)
Время отправки: 18 сентября 2009, 15:37


Мини-форум вопроса

Всего сообщений: 38; последнее сообщение — 22 сентября 2009, 13:57; участников в обсуждении: 3.

Страницы: [1] [2] [Следующая »]

Вадим К

Вадим К (статус: Академик), 16 сентября 2009, 15:59 [#1]:

Хочется сохранить иконки с imagelist, что бы потом можно было их загрузить в такой же последовательности? или что то более? или ещё и с ListView надо сохранить порядок.
Галочка "подтверждения прочтения" - вселенское зло.
grater

grater (статус: Посетитель), 16 сентября 2009, 17:16 [#2]:

в такой же последовательности и с ListView надо сохранить порядок
вот как я делаю
procedure TForm1.WMDropFiles(var Msg: TMessage);
var
FileName,ex: array[0..256] of char; i:TIcon;
itm:TListItem; c:Cardinal;w:word;
begin
DragQueryFile(THandle(Msg.WParam), 0, FileName, SizeOf(Filename));
DragFinish(THandle(Msg.WParam));
i:=TIcon.create;
c:=FindExecutable(@FileName,'',@ex);
w:=0;
i.Handle:=ExtractAssociatedIcon(HInstance,@ex,w);
ImageList1.AddIcon(i);
i.Free;
itm:=ListView1.Items.Add;
itm.ImageIndex:=ImageList1.Count-1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, true);
end;
Вадим К

Вадим К (статус: Академик), 16 сентября 2009, 17:39 [#3]:

можно просто сохранить пути к файлам, а иконки вытянуть уже в момент загрузки списка, не думали о таком варианте?
Галочка "подтверждения прочтения" - вселенское зло.
grater

grater (статус: Посетитель), 16 сентября 2009, 17:58 [#4]:

можно примерчик
grater

grater (статус: Посетитель), 16 сентября 2009, 18:02 [#5]:

загрузки

16 сентября 2009, 18:13: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Взаимодействие с Windows модератором Ерёмин А.А.

Вадим К

Вадим К (статус: Академик), 16 сентября 2009, 18:16 [#6]:

припустим, что список файлов записан в файле, по одному файлу в строку. тогда
var sl:TStringList;
   itm:TListItem;
   i:integer;
begin
  sl := TStringList.Create;
  sl.LoadFromFile('filename');
  for i := 0 to i < sl.count do
  begin
    itm:=ListView1.Items.Add;
    itm.Caption := sl[i];
  end;
  sl.free;
end;
иконки самостоятельно думаю добавите.
Галочка "подтверждения прочтения" - вселенское зло.
grater

grater (статус: Посетитель), 16 сентября 2009, 18:51 [#7]:

выдает ошибку несовместимость integer и boolean
for i := 0 to i < sl.count ->do<-
Вадим К

Вадим К (статус: Академик), 16 сентября 2009, 19:03 [#8]:

ой. слишком много пишу последнее время на си++
там надо
for i := 0 to sl.count - 1 do
Галочка "подтверждения прочтения" - вселенское зло.
grater

grater (статус: Посетитель), 16 сентября 2009, 19:20 [#9]:

спасибо заработало, но при загрузки почему то не иконки файла ,а папки?
grater

grater (статус: Посетитель), 16 сентября 2009, 19:21 [#10]:

а при броске все нормально
Вадим К

Вадим К (статус: Академик), 16 сентября 2009, 19:26 [#11]:

А код для добавления иконок добавили? если да,показывайте.
Галочка "подтверждения прочтения" - вселенское зло.
grater

grater (статус: Посетитель), 16 сентября 2009, 19:29 [#12]:

procedure TForm1.FormCreate(Sender: TObject);
var sl:TStringList;
itm:TListItem;
i:integer;
FileName,ex: array[0..256] of char; f:TIcon;
c:Cardinal;w:word;
begin
DragAcceptFiles(Handle, true);
sl := TStringList.Create;
sl.LoadFromFile('C:\1.txt');
for i := 0 to sl.count - 1 do
begin
itm:=ListView1.Items.Add;
itm.Caption := sl[i];
end;
sl.free;
f:=TIcon.create;
c:=FindExecutable(@FileName,'',@ex);
w:=0;
f.Handle:=ExtractAssociatedIcon(HInstance,@ex,w);
ImageList1.AddIcon(f);
f.Free;
itm:=ListView1.Items.Add;
itm.ImageIndex:=ImageList1.Count-1
end;
Вадим К

Вадим К (статус: Академик), 16 сентября 2009, 19:55 [#13]:

ну так правильно. надо где то так
procedure TForm1.FormCreate(Sender: TObject);
var sl:TStringList;
itm:TListItem;
i:integer;
FileName,ex: array[0..256] of char; f:TIcon;
c:Cardinal;w:word;
begin
DragAcceptFiles(Handle, true);
sl := TStringList.Create;
sl.LoadFromFile('C:\1.txt');
for i := 0 to sl.count - 1 do
begin
itm:=ListView1.Items.Add;
itm.Caption := sl[i];
FileName := sl[i];
f:=TIcon.create;
c:=FindExecutable(@FileName,'',@ex);
w:=0;
f.Handle:=ExtractAssociatedIcon(HInstance,@ex,w);
ImageList1.AddIcon(f);
f.Free;
itm:=ListView1.Items.Add;
itm.ImageIndex:=ImageList1.Count-1
 
end;
sl.free;
end;
Галочка "подтверждения прочтения" - вселенское зло.
grater

grater (статус: Посетитель), 16 сентября 2009, 20:06 [#14]:

FileName := sl[i]; несовместимые Array и string
grater

grater (статус: Посетитель), 16 сентября 2009, 20:07 [#15]:

sl[i]:= FileName; так работает но те же папки
Вадим К

Вадим К (статус: Академик), 16 сентября 2009, 20:15 [#16]:

ну кто так учил объявлять.
array[0..256] of char;
там надо array[1..256] of char; или array[1..256] of char; уже не помню, помоему первый.
а sl[i]:= FileName; - это точно неверно, подумайте почему.
Галочка "подтверждения прочтения" - вселенское зло.
grater

grater (статус: Посетитель), 16 сентября 2009, 20:21 [#17]:

все равно FileName := sl[i]; несовместимые Array и string
и какая между ними разница
"там надо array[1..256] of char;
или array[1..256] of char;"
min@y™

min@y™ (статус: Доктор наук), 16 сентября 2009, 20:32 [#18]:

Чем мой ответ-то не подошёл?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
grater

grater (статус: Посетитель), 16 сентября 2009, 20:38 [#19]:

в sysimage нету

DsgnIntf.dcu
grater

grater (статус: Посетитель), 16 сентября 2009, 20:39 [#20]:

не компилирует у себя не нашел

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:57
Выполнено за 0.03 сек.