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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2014, 18:54   #1
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
Восклицание Переход по папкам

Люди помоги уже голова кипит. Суть такая, организовал шаги по папкам туда обратно ну и запуск если это файл, проблема в том что передвижение по папкам нормально, но вот запуск не осуществляется. Объясню почему тут все так сложно и используется SR:TSearchRec; все из-за того что в ListView файлы выходят без расширения (то есть вот так ChangeFileExt(SR.Name,'')), для более симпатии. Но потом снова приходится проверять что это папка или файла. Вобщем вот код:

Код:
{Переход по папкам лево}
procedure TForm1.ListView1DblClick(Sender: TObject);
var
Dir:String; //Переменная для пути которая отображается для пользователя в Label1
SR:TSearchRec;
begin
Dir:=Label1.Caption;
if ListView1.Selected.Caption='..' then
 begin
  Dir:=ExtractFilePath(ExtractFileDir(Label1.Caption));{Шаг назад по папке}
  UpdateFile(ListView1,ImageList1,Dir);{Обновления}
  Label1.Caption:=Dir;
 end
  else
   begin
    dir:=Dir+ListView1.Selected.Caption;
    if FindFirst(Dir,faAnyFile,SR)=NO_ERROR then{Проверяем отсутствие ошибок}
     if (SR.Attr and faDirectory)=faDirectory then
      begin
       Dir:=Dir+pref;
       UpdateFile(ListView1,ImageList1,Dir);{Обновления Лево}
       Label1.Caption:=Dir;
      end
       else
       begin
       if ListView2.Selected.Caption=ChangeFileExt(SR.Name,'') then
        begin
         Dir:=Label1.Caption+SR.Name;
         ShellExecute(Handle,nil,PChar(Dir),nil,nil,SW_SHOW);
        end;
       end;
   end;
end;
Пытался облегчить но увы получилось только так. И прошу не говорить про то что скопировал, код сам писал и вот может по этому проблемки)
HTTqp вне форума Ответить с цитированием
Старый 23.04.2014, 21:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
для более симпатии
Ну это тебе и аукнулось.
Уж лучше бы сделал колонку в ЛистВью либо невидимой лобо шириной в ноль, и там хранил расширение.
Хотя на твоем месте я бы расширение не прятал. Наверное ты не сталкивался с боками .doc и .docx особенно когда имя файла одно и то же, но благодаря расширению файлы разные.
Если хочешь такой красоты опиши OnDrawItem Для Листвью и попросту отрисовывай без расширения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2014, 00:03   #3
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну это тебе и аукнулось.
Уж лучше бы сделал колонку в ЛистВью либо невидимой лобо шириной в ноль, и там хранил расширение.
Хотя на твоем месте я бы расширение не прятал. Наверное ты не сталкивался с боками .doc и .docx особенно когда имя файла одно и то же, но благодаря расширению файлы разные.
Если хочешь такой красоты опиши OnDrawItem Для Листвью и попросту отрисовывай без расширения.
Блин насколько все просто) Только параллельно еще вопрос как спрятать колонку, пробовал так

Код:
ListView1.Column[1].Width:=0;
ListView1.Column[1].MaxWidth:=0;
Но все равно ее можно раздвинуть, в чем косяк?
HTTqp вне форума Ответить с цитированием
Старый 24.04.2014, 08:15   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну раздвинуть это да. Это я так сказать погорячился.
Потому я и намекнул на OnDrawItem.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2014, 08:25   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Колонку можно и не делать. А сделать не отображаемый subitem
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.04.2014, 11:08   #6
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Колонку можно и не делать. А сделать не отображаемый subitem
Хорошо а как занести, а потом использовать из не отображаемого subitem?
HTTqp вне форума Ответить с цитированием
Старый 24.04.2014, 16:51   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Что мешает как в тотале показывать колонку с расширением? И прятать колонку расширения не нужно. В нем нет отображения файла в таком виде [%filename%], там просто %filename%.%ext%
Со скобками, например, отображает тотал только папки [%dir%]
* Еще гибче VirtualStringTree. Отрисовывает как захотите.
Изображения
Тип файла: png fmcol.png (33.4 Кб, 95 просмотров)

Последний раз редактировалось Alter; 24.04.2014 в 16:53.
Alter вне форума Ответить с цитированием
Старый 24.04.2014, 21:23   #8
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Alter , у меня также. я пытался присоединить первый строку из первой колонки со второй строкой, второй колонки. Но не получается не знаю как осуществить. Как дать понять что нужно присоеденить соседнюю строку.
Изображения
Тип файла: png Снимок.PNG (15.1 Кб, 88 просмотров)
HTTqp вне форума Ответить с цитированием
Старый 25.04.2014, 16:15   #9
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Там же есть SubItems. И писать имя столбца "Формат" не верно. Правильнее "Расширение".

Пример:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

const
  ExtF :array[0..5] of string = ('pif', 'exe', 'lnk', 'com', 'avi', '[Папка]');

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ListView1DblClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  N :Byte;
  Itm :TListItem;
begin // генерируем строку имени "файла/папки"
 Itm := ListView1.Items.Add;
 if Assigned(Itm) then
 begin
   N := Random(Length(ExtF));
   with Itm do
   begin
     Caption := IntToHex(Random(4096), 8);
       // расширение
     if N < 5 then
      SubItems.Add(ExtF[N]) // file
     else
      SubItems.Add(''); // dir
       // размер
     if N < 5 then
      SubItems.Add(IntToStr(10000)) // file
     else
      SubItems.Add(ExtF[N]); // dir
   end;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin // очищаем
 ListView1.Items.Clear;
end;

procedure TForm1.ListView1DblClick(Sender: TObject);
var
  S :string;
  Itm :TListItem;
begin // "запускаем"
 Itm := ListView1.Selected;
 if Assigned(Itm) then
 begin
   if CompareText(Itm.SubItems[1], ExtF[High(ExtF)]) <> 0 then
   begin
     S := Format('%s.%s', [Itm.Caption, itm.SubItems[0]]);
     ShowMessage('Файл: "'+S+'"');
   end
    else
   begin
     ShowMessage('Это папка');
   end;
 end
  else
 ShowMessage('Не выбран файл/папка');
end;

end.

Последний раз редактировалось Alter; 25.04.2014 в 16:19.
Alter вне форума Ответить с цитированием
Старый 26.04.2014, 11:57   #10
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Все, спасибо. Выход нашел сам. Но Alter твои советы тоже помогли.
HTTqp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пути к папкам Максим139 Помощь студентам 5 11.04.2011 07:46
Раскидывальщик по папкам Obey177 Общие вопросы Delphi 11 07.09.2010 00:31
доступ к папкам в windows 7 my_last_breath Windows 11 07.10.2009 23:11
Настройка доступа к папкам gogy2 Win Api 0 22.11.2008 23:42