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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2010, 14:06   #1
Abigor76
 
Регистрация: 17.11.2010
Сообщений: 3
Восклицание Редактирование *.data Delphi

Уважаемые программисты! Прошу вас о помощи.

Суть программы:
Есть файл.data в котором имеется ''N'' количество листов , в каждом листе есть, так называемые, Итемы с параметрами ID и Name.
Работа программы заключается в открытии определенного листа(в данном примере это 1 лист), вывод итемов в ListBox.
При выделении одного из итемов выводит информацию о нем в edit'ы.
Вопрос:
1-Как реализовать применение и сохранение параметров итема при изменении его в Edit?
2-(не обязательно, если кто знает)Как сделать так, чтобы когда прописываеш в edit число(ID), программа искала его в заданном листе и выводила название найденного итема в label?

Исходный код программы:
Код:
unit Unit1;

interface

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

  type
  TList1 = record
    id:integer;
    name: array [0..63] of byte;
    int1:integer;
    int2:integer;
    int3:integer;
    int4:integer;
 end;

type
  TForm1 = class(TForm)
     Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    ListBox1: TListBox;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure ListBox1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
  ListPos: array [1..4] of Integer;  // сюда сохраняем смещения листa
  ListLen: array [1..4] of Integer;  // сюда сохраняем количество элементов
  ffile: tStream;
  procedure OpenList1(lb: TListBox); // это у нас собс-но открытие первого листа
  procedure FillListPos; // это будет заполнение листа
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  List1: array of TList1;


procedure TForm1.OpenList1(lb: TListBox);
var
  num: integer;
  w: widestring;
begin
  num := lb.ItemIndex;
  Edit1.Text:=IntToStr(List1[num].id);
  SetLength(w, 32);
  Move(List1[num].name[0], w[1], 64);
  Edit2.Text:=w;
  Edit3.Text:=IntToStr(List1[num].int1);
  Edit4.Text:=IntToStr(List1[num].int2);
  Edit5.Text:=IntToStr(List1[num].int3);
  Edit6.Text:=IntToStr(List1[num].int4);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  ws: WideString;
begin
  if OpenDialog1.Execute then begin
    if not FileExists(opendialog1.FileName) then exit;

    if Assigned(fFile) then
    begin
      FreeAndNil(fFile);
    end;
    // Создаем поток
    fFile := TFileStream.Create(OpenDialog1.FileName, (fmOpenReadWrite{or fmShareExclusive}));

    // Заполняем массив с позициями
    FillListPos;

    // Читаем лист 1
    SetLength(ws, 32);
    fFile.Position := ListPos[1]+4;
    SetLength(List1, ListLen[1]);
    fFile.Read(List1[0], ListLen[1]*SizeOf(TList1));
    for i := 0 to ListLen[1] - 1 do
    begin
      Move(List1[i].name, Pointer(ws)^, 64);
      ListBox1.Items.Add(IntToStr(List1[i].id) + ' - ' + ws);
    end;
  end;
end;

procedure TForm1.FillListPos;
var
  fListLen: Integer;
begin
(*
== подсчет смещений каждого последующего листа ==
8 это смещение первого листа.
8 + 4 + размер первого листа = смещение второго листа.
смещение второго листа + 4 + размер второго листа = смещение третьего, и т.д.
*)
  ListPos[1] := 8;
  if Assigned(fFile) then begin
    fFile.Position := ListPos[1]; // устанавливавем маркер в позицию начала Листа1
     fFile.Read(fListLen, SizeOf(fListLen)); // Считываем количество элементов
     ListLen[1] := fListLen;
    ListPos[2] := ListPos[1] + ListLen[1]*SizeOf(TList1) + 4; // получаем смещение второго листа
   end;
end;
// -------------------------------------------------------- //
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  openlist1(listbox1);
end;

end.
Программа с исходником и файлом.data во вложении





Отчет VirusTotal
Вложения
Тип файла: rar data.rar (1.56 Мб, 14 просмотров)
Abigor76 вне форума Ответить с цитированием
Старый 18.11.2010, 10:40   #2
Abigor76
 
Регистрация: 17.11.2010
Сообщений: 3
По умолчанию

Или же эти оба вопроса может заменить один.
Как создать список TList в данном коде и внести в него итемы с названиями и ID чтобы потом организовать поиск по нему..
Или посоветуйте литературу.
Искал я много как работать с файлами данных но не нашел, по этому обращаюсь ко всем вам.

Последний раз редактировалось Abigor76; 18.11.2010 в 10:42.
Abigor76 вне форума Ответить с цитированием
Старый 23.07.2011, 19:11   #3
bender42
Пользователь
 
Регистрация: 21.07.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Abigor76 Посмотреть сообщение
Или же эти оба вопроса может заменить один.
Как создать список TList в данном коде и внести в него итемы с названиями и ID чтобы потом организовать поиск по нему..
Или посоветуйте литературу.
Искал я много как работать с файлами данных но не нашел, по этому обращаюсь ко всем вам.
мммм..... игра
Perfect World
bender42 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XML Data Binding в Delphi 7 artemavd Общие вопросы Delphi 0 23.07.2010 06:19
delphi редактирование пакетов Игорь22 Работа с сетью в Delphi 2 24.11.2009 09:41
Remote Data Module в delphi 2007 SERG1980 Общие вопросы Delphi 0 15.04.2009 09:44
Error in export data to Excel in Delphi 2009 Ikrik БД в Delphi 2 11.02.2009 06:12
Редактирование текста в Delphi Edo Помощь студентам 5 22.04.2008 08:18