Показать сообщение отдельно
  #2  
Старый 22.04.2008, 17:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я бы пошел другим путем.
Во первых, я бы не ориентировался на текстовый файл. Что стоит сделать запись типа
Код:
type
  PMySheduler = ^TMySheduler;
  TMySheduler = record
    FDate : TDateTime;
    FType : String;
    FMessage : String;
  end;
и далее ее просто писать/читать с помощью потоков, а хранить в TList. При этом у тебя будет 1 запись на каждое задание.

Но если уж ты пошел по пути текстового файла, то тогда у тебя опять же несколько вариантов.

Вычислять ID'ы нужных записей, исходя из индекса записи в визуальном списке (благо, у тебя их в StringList'е всегода по 4), либо при добавлении Item'а в ListView в его проперть Data писать ID первого элемента из StringList'а, а далее удалить 4 записи, начиная с этого ID'а.

Первый вариант:
Код:
procedure TForm1.DeleteRecord(AVisualID : Integer); // принимаем индекс записи в TListView
var
  I, ASLID : Integer;
begin
  ASLID := AVisualID * 4;  // у нас по 4 строки в StringList на каждую запись

  // Теперь проверим, что у нас достаточно записей на удаление.
  If StringList.Count < ASLID + 3 Then
    Raise Exception.Create('Записей-то не хватает!');

  // Ну, типа, все ОК - удаляем...
  For I := 1 To 4 Do // удаляем 4 записи
    StringList.Delete(ASLID);

  // итем в ListView грохнуть придется самостоятельно
end;
Здесь, StringList - это тот список, где у тебя храняться данные.

Второй вариант:
При добавлении записи:
Код:
var
  Item : TListItem;
...
  Item := ListView1.Items.Add;
  Item.Data := Pointer(I); // Если помню точно, то там в цикле заполнение, где I - номер текущей строки в StringList, увеличиваемый на 4 при каждой итерации

При удалении:
Код:
procedure TForm1.DeleteListViewItem(AItem : TListItem);
var
  I, ASLID : Integer;
begin
  ASLID := Integer(AItem.Data); // получили ID первой стоки в StringList
  
  // Теперь проверим, что у нас достаточно записей на удаление.
  If StringList.Count < ASLID + 3 Then
    Raise Exception.Create('Записей-то не хватает!');

  // Ну, типа, все ОК - удаляем...
  For I := 1 To 4 Do // удаляем 4 записи
    StringList.Delete(ASLID);

  AItem.Delete; // Удаляем сам итем.
end;

Вызов будет выглядеть примерно так:
DeleteListViewItem(ListView1.Selected);
Ответить с цитированием