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

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

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

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

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

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

Пишу свой файловый менеджер, ну для начала чтобы разобраться как работать с файлами, не суть важно. Вылетает ошибка не пойму почему, вот код:

Код:
unit Unit1;
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([])FIELDS([])PROPERTIES([])}
interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.StdCtrls,
  Vcl.Menus, frxDock;

type
  TForm1 = class(TForm)
    Bevel1: TBevel;
    Splitter1: TSplitter;
    frxTBPanel1: TfrxTBPanel;
    ListView1: TListView;
    frxTBPanel2: TfrxTBPanel;
    ListView2: TListView;
    Bevel2: TBevel;
    Edit1: TEdit;
    Edit2: TEdit;
    Bevel3: TBevel;
    Bevel4: TBevel;
    procedure FormCreate(Sender: TObject);
  private
   { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  Handle: THandle;
  FindData: TWin32FindData;
  dDir: String;
  temp_ext,result,Temp_Cap: String;
  Attr:Integer;
begin
  dDir := IncludeTrailingPathDelimiter('D:\Временные файлы\');
  SetCurrentDir(dDir);
  ListView1.Clear;
  Handle:=FindFirstFile(PChar(dDir + '*'), FindData);
  if Handle <> INVALID_HANDLE_VALUE then
  try
    while FindNextFile(Handle, FindData) do
    begin
     with ListView1.Items.Add do
     begin
        Temp_Cap:=ExtractFileName(FindData.cFileName);
        if (FindData.dwFileAttributes and faDirectory)<>faDirectory then
        Caption:=(copy(Temp_Cap,1,pos('.',Temp_Cap)-1)) else Caption:=Temp_Cap;
        temp_ext:=ExtractFileExt(FindData.cFileName);
        if  (FindData.dwFileAttributes and faDirectory)=faDirectory then
         ListView1.Selected.SubItems[1]:=('[Папка]')
        else
          ListView1.Selected.SubItems[2]:=(Copy(temp_ext, 2, Length(temp_ext) - 1));
          if (FindData.dwFileAttributes and faDirectory)<>faDirectory then
          ListView1.Selected.SubItems[3]:=(FloatToStrF(FindData.nFileSizeHigh*1024 + FindData.nFileSizeLow, ffNumber, 18, 0));
          ListView1.Selected.SubItems[3]:=((FindData.ftLastAccessTime));        Result:='';
        if (FILE_ATTRIBUTE_ARCHIVE and FindData.dwFileAttributes)>0 then Result:=Result+'a' else Result:=Result+'-';
        if (FILE_ATTRIBUTE_READONLY and FindData.dwFileAttributes)>0 then Result:=Result+'r' else Result:=Result+'-';
        if (FILE_ATTRIBUTE_HIDDEN and FindData.dwFileAttributes)>0 then Result:=Result+'h' else Result:=Result+'-';
        if (FILE_ATTRIBUTE_SYSTEM and FindData.dwFileAttributes)>0 then Result:=Result+'s' else Result:=Result+'-';
        ListView1.Selected.SubItems[4]:=Result;
      end;
    end;
  finally
    ListView1.Items.EndUpdate;
  end;
end;

end.
ошибки предположительно выделенны красным, и помогите получить время и дату создания файла и вывести ее в 4 колонку
HTTqp вне форума Ответить с цитированием
Старый 12.01.2014, 00:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я так понимаю тексты ошибки опять засекречены?
Ох школота...
Ладно. Телепатирую:
Цитата:
ListView1.Items.Add
Нет тут ощибки, ты запарился.
Цитата:
ListView1.Selected.SubItems[3]:=((FindData.ftLastAccessTime));
1) Нет такой колонки под номером 3, а точнее в листе нет 5-й колонки.
2) ftLastAccessTime никак не строкового типа. Видимо FILETIME. А значит:
Код:
function TFTPFinder.FileTimeAsDateTime(ft: FILETIME): TDateTime;
var tst:TSystemTime;
begin
 FileTimeToSystemTime(ft,tst);
 Result:=SystemTimeToDateTime(tst);
end;
...
ListView1.Selected.SubItems[3]:=DateTimeToStr(FileTimeAsDateTime(FindData.ftLastAccessTime));
Цитата:
вывести ее в 4 колонку
4-я колонка это SubItems[2]. Ты уж определись.

P.S. Еще кое что:
Раз ты использовал with ListView1.Items.Add do, то логично что ListView1.Selected. внутри этого оператора станет помехой.
Определись писать тебе в вновь добавленную строку листа или в выбранную.
I'm learning to live...

Последний раз редактировалось Stilet; 12.01.2014 в 00:31.
Stilet вне форума Ответить с цитированием
Старый 12.01.2014, 01:23   #3
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

прошу прощение на счет уточнения ошибкиhttp://radikall.com/images/2014/01/12/1fyjF.png
а как тогда запить вместо ListView1.Items.Add после with ?
HTTqp вне форума Ответить с цитированием
Старый 12.01.2014, 02:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для начала поубирай везде ListView1.Selected.
Тогда все действия будут вестись с добавленной строкой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.01.2014, 02:26   #5
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Ошибок сразу три.
1) Ты пытаешься менять содержимое ячейки, не создав саму ячейку.
2) Ты используешь метод Selected, который возвращает тебе -1 так как в процессе выполнения кода ты не выделяешь ячейки.
3) Неверное понимание метода with.
Пробуй.

Код:
function FileTimeToDateTimeStr(FileTime:TFileTime):string;
 var LocFTime:TFileTime;
 SysFTime:TSystemTime;
 dt,tm:TDateTime;
 begin
   FileTimeToLocalFileTime(FileTime,LocFTime);
   FileTimeToSystemTime(LocFTime,SysFTime);
   try
     with SysFtime do
     begin
       dt:=EncodeDate(wYear,wMonth,wDay);
       tm:=encodeTime(whour,wminute,wsecond,wmilliseconds);
     end;
    result:=datetimetostr(dt+tm);
    except
    result:='';
    end;
 end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Handle: THandle;
  FindData: TWin32FindData;
  dDir: String;
  temp_ext,result,Temp_Cap: String;
  Attr:Integer;
begin
  dDir := IncludeTrailingPathDelimiter('D:\');
  SetCurrentDir(dDir);
  ListView1.Clear;
  Handle:=FindFirstFile(PChar(dDir + '*'), FindData);
  if Handle <> INVALID_HANDLE_VALUE then
  try
    while FindNextFile(Handle, FindData) do
    begin
     with ListView1.Items.Add do
     begin
        SubItems.Add('');// первая ошибка, не было инициализации субстрок
        SubItems.Add('');
        SubItems.Add('');
        SubItems.Add('');
        SubItems.Add('');
        Temp_Cap:=ExtractFileName(FindData.cFileName);
        if (FindData.dwFileAttributes and faDirectory)<>faDirectory then
        Caption:=(copy(Temp_Cap,1,pos('.',Temp_Cap)-1)) else Caption:=Temp_Cap;
        temp_ext:=ExtractFileExt(FindData.cFileName);
        if  (FindData.dwFileAttributes and faDirectory)=faDirectory then
         SubItems[1]:=('[Папка]') //третья ошибка, правильное использование метода with
        else
          SubItems[2]:=(Copy(temp_ext, 2, Length(temp_ext) - 1));
          if (FindData.dwFileAttributes and faDirectory)<>faDirectory then
          SubItems[3]:=(FloatToStrF(FindData.nFileSizeHigh*1024 + FindData.nFileSizeLow, ffNumber, 18, 0));
          SubItems[3]:= fileTimeToDateTimeStr(FindData.ftLastAccessTime);        Result:='';
        if (FILE_ATTRIBUTE_ARCHIVE and FindData.dwFileAttributes)>0 then Result:=Result+'a' else Result:=Result+'-';
        if (FILE_ATTRIBUTE_READONLY and FindData.dwFileAttributes)>0 then Result:=Result+'r' else Result:=Result+'-';
        if (FILE_ATTRIBUTE_HIDDEN and FindData.dwFileAttributes)>0 then Result:=Result+'h' else Result:=Result+'-';
        if (FILE_ATTRIBUTE_SYSTEM and FindData.dwFileAttributes)>0 then Result:=Result+'s' else Result:=Result+'-';
        SubItems[4]:=Result;
      end;
    end;
  finally
    ListView1.Items.EndUpdate;
  end;
end;
И сдвинь все индексы на -1, так как во всех контроллах индексация начинается с нуля, а не с единицы (SubItems[0], SubItems[1] и т.д.).
P.S. Правила форума запрещают создавать темы с бессмысленными названиями, не отражающими сути вопроса. Не знание правил не освобождает от ответственности.

Последний раз редактировалось Stilet; 12.01.2014 в 11:18.
doktor255 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nero - ошибка драйвера DMA. ошибка CRC NecRoMat Софт 5 09.05.2012 01:29
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка run-time Error 1004 общая ошибка ODBC kaval88 Microsoft Office Excel 0 27.02.2011 20:20
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
...Ошибка 101 (net::ERR_CONNECTION_RESET): Неизвестная ошибка... infrared Помощь студентам 0 16.04.2009 17:44