1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Открытие и сохранение листа

Тема в разделе 'Delphi', создана пользователем roxio71, 26 окт 2012.

  1. TopicStarter Overlay

    roxio71 Пользователи

    Сообщения:
    0
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    Имеется данный код открытия первого листа elements.data написал с помощью Delphi 2010

    Код:
    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.
    
    Суть вопроса хотел узнать как реализовать сохранения новых параметров и сохранения самой страницы обратно в elements.data

    И ещё один вопрос как можно реализовать открытия второй страницы elements.data (какие значения нужно изменить или добавить)

    Заранее спасибо.
  2. JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    948
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    Говнокод от пилы, помню-помню.

    Автору вопрос: Делфи на уровне основ (типы, циклы, массивы, файловые потоки) знаешь? Если да - милости прошу мне в асю/скайп (для управляющих танковыми средствами передвижения: в профиле).
  3. TopicStarter Overlay

    roxio71 Пользователи

    Сообщения:
    0
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    Дельфи только начел учить недавно, пока что очень плохо знаю это так что как подучу получше тогда напишу. Я так понял без основных знаний цикл и т.д. редактор не написать так что пошел подучивать.
  4. Quantity Программист Пользователи White List

    Сообщения:
    64
    Лайки:
    96
    Репутация:
    0
    Команда:
    PW Developers
    Офигеть логика. Не зная циклов, лезть в редакторы.. facepalm
  5. JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    948
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    Ну о файловых потоках могу сам поведать. Главное - циклы, записи (record), основные типы переменных (и их размеры), массивы.
  6. TopicStarter Overlay

    roxio71 Пользователи

    Сообщения:
    0
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    Ну типы я знаю их всего 8, а вот остальное я подучу получше то знаю очень плохо и тогда отпишу.
  7. Yaru Пользователи

    Сообщения:
    12
    Лайки:
    0
    Репутация:
    0
    Команда:
    Ololosha
    Ого, а я думал меньше моих знаний в делфах (полгода изучения в универе) быть не может. Оказывается может. хд
Черновик сохранён Черновик удалён

Поделиться этой страницей