Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компонент ShellListView, Как управлять этим компонентом??? 
:(
    Опции темы
Zero
Дата 13.11.2004, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Народ, у меня возник очень важный для меня вопрос:
Как сделать так, чтобы компонент, ShellListView отображал только те элементы рабочего стола, которые я захочу.
Заранее спасибо всем за любую, помощь!!!

Это сообщение отредактировал(а) Zero - 13.11.2004, 19:48
PM MAIL ICQ   Вверх
Alex
Дата 13.11.2004, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Написать свой. smile


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 13.11.2004, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата
Написать свой.

Я бы непротив, но тогда как получить список отдельных ярлыков, и пирикинуть их на форму или на то, на чём они должны отображатся???
PM MAIL ICQ   Вверх
Alex
Дата 13.11.2004, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Возьми ListView и создай в нем столько элементов, сколько тебе нужно, а картинку возьми из ярлыка (пример извлечения иконки из ярлыка есть в DRKB)


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Girder
Дата 13.11.2004, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



1... smile
Код
uses ...ShlObj;
...
function GetFolderPath(nFolder:Integer):String;
var pidlItself:PItemIDList;
   s:string;
   hr:HResult;
   i:integer;
begin
Result:='';
hr:=SHGetSpecialFolderLocation(0,nFolder,pidlItself);
if Succeeded(hr) then
 begin
  SetLength(s,MAX_PATH*10);
  if SHGetPathFromIDList(pidlItself,PChar(s)) then
   begin
    i:=Pos(#0,s);
    if i=0 then i:=Length(s);
    Result:=trim(copy(s,1,i));
   end;
 end;
end;


2. Неуверен что правильно тебя понял... но тем неменее... smile .
Прицепи к OnAddFolder вот енту процедуру...
Код
procedure TForm1.ShellListView1AddFolder(Sender: TObject;
 AFolder: TShellFolder; var CanAdd: Boolean);
var s:string;
begin
if DeskTop='' then DeskTop:=ExtractFileName(GetFolderPath(CSIDL_DESKTOP));
try
 s:=AFolder.Parent.DisplayName;
except
 s:='';
end;
if (AnsiCompareText(s,DeskTop)=0) then
 begin
  s:=AFolder.DisplayName;
  if (AnsiCompareText(s,'Корзина')=0)or(AnsiCompareText(s,'Сетевое окружение')=0) then
   CanAdd:=false else
   begin
    s:=ExtractFileName(AFolder.PathName);
    if AnsiCompareText('MPIRun.lnk',s)=0 then
     CanAdd:=false;
   end;
 end;
end;
PS: Не показываем 'Корзину', 'Сетевое окружение' и файл 'MPIRun.lnk'

Удачи.

Это сообщение отредактировал(а) Girder - 13.11.2004, 23:34


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Zero
Дата 13.11.2004, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Упс, я извеняюсь, я не заметил, что Гирдер, мне уже выслал код...Это сообщение не к месту...
Спасибо Гирдер, буду пробывать... smile

Это сообщение отредактировал(а) Zero - 13.11.2004, 23:28
PM MAIL ICQ   Вверх
Zero
Дата 13.11.2004, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Girder, спасибо конечно за процедуры, но что-то я не совсем понял, что они делают, и идентификатор Desktop, я пологаю должен быть типа string??? А то чё-то Процедура AddFolder не компилится так.
Да кстати
Цитата
Неуверен что правильно тебя понял... но тем неменее...

На самом деле мне нужно сделать, чтобы при запуске приложения Delphi все ярлыки которые уже созданы, не отображались на ShellListView, а которые далее я создаю программным путём отображались.
Всё уже сделано кроме правильного отображения информации в ShellListView...
Пожалуйста, если знаешь как это исправить, то напиши мне ещё кусок кода, а то мне через неделю уже сдавать курсач, а у меня не сделана всего-лишь одна мелоч, но которая может существенно повлиять на оценку. smile
PM MAIL ICQ   Вверх
Zero
Дата 14.11.2004, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Ладно народ, раз уж у меня не получилось сделать тем способом, то я придумал новый, если сделать двойной щелчок мышью по компоненту ShellListView, то появится окно где путь можно поменять на не стандартный (на свой), но проблема теперь в том что на разных компьютерах он может быть разным, и мне нужно чтобы его можно было устанавливать программно, но вот это почему-то не как не получается сделать... smile
Может из вас кто-нибудь знает как это можно сделать, заранее благодарен.
Замечание: Путь содержит сво-во Root, и его-то надо програмно изменить...

Это сообщение отредактировал(а) Zero - 14.11.2004, 11:30
PM MAIL ICQ   Вверх
Alex
Дата 14.11.2004, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Код

const
 p = 'Root:\';
begin
 ShellListView1.Root:= AnsiReplaceText(p, 'Root', 'c');



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 14.11.2004, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Alex, что то при компиляции выдаётся ошибка:
[Error] Work_Table.pas(151): Undeclared identifier: 'AnsiReplaceText' smile
Может здесь несоответствие типов???
И ещё здесь получается, что если путь ставить программно, то всё равно тот который стоит в константах, и получается что его нельзя будет изменять, т.е.
У меня есть строка которая определяет путь, который должен отображатся компонентом ShellListView, но никак не получается её занести в свойство Root.
PM MAIL ICQ   Вверх
Alex
Дата 14.11.2004, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Zero @ 14.11.2004, 12:30)
Alex, что то при компиляции выдаётся ошибка:
[Error] Work_Table.pas(151): Undeclared identifier: 'AnsiReplaceText' 

У тебя Delphi какой версии?
Цитата(Zero @ 14.11.2004, 12:30)
И ещё здесь получается, что если путь ставить программно, то всё равно тот который стоит в константах, и получается что его нельзя будет изменять, т.е.

Ничего не понял

Цитата(Zero @ 14.11.2004, 12:30)
У меня есть строка которая определяет путь, который должен отображатся компонентом ShellListView, но никак не получается её занести в свойство Root.

Покажи код


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Zero
Дата 14.11.2004, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата
У тебя Delphi какой версии?

Delphi7
Цитата
Ничего не понял

Короче, если говорить по руски, то это можно представить так:
Код

Var
  s:string;  //Допустим у меня какая-то строка
...

Например при появлении формы, она присвоит какой-нибудь путь:
Код

procedure TForm1.FormShow(Sender: TObject);
begin
 s:='C:\...\MyDesktop'
end;

И потом неплохо было-бы если при написании такого кода компилятор мне не выдал бы сообщение об ошибке: smile
Код

ShellListView1.Root:=s;  //Но к сожалению так делать нельзя :(

PM MAIL ICQ   Вверх
Alex
Дата 14.11.2004, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



100% работает:
Код

procedure TForm1.Button3Click(Sender: TObject);
var
 s: String;
begin
 s:= 'C:\';
 ShellListView1.Root:= s;
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
p0s0l
Дата 14.11.2004, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



AnsiReplaceText - в юните StrUtils, Zero, я тебе уже говорил в теме про польскую запись, как находить модуль, в котором находится стандартная функция smile

Цитата
ShellListView1.Root:=s;  //Но к сожалению так делать нельзя smile
И у меня это работает! smile


--------------------
С уважением, г-н Посол.
PM   Вверх
Zero
Дата 14.11.2004, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Alex и PoSol, спасибо вам большое!!! smile
Наконец, то зароботало...
Цитата
я тебе уже говорил в теме про польскую запись

А сейчас уже (когда заработало) я вспомнил, про то что надо навести курсор на слово и нажать <F1>, но доэтого когда в голове ещё то что срок через неделю, и такая мелкая ошибка с которой пол дня сижу, всё сразу вылетело. smile
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.