Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit MainUnit;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.Grids, Vcl.StdCtrls,
- Vcl.Menus;
- type
- TMainForm = class(TForm)
- ClearButton: TButton;
- MainMenu: TMainMenu;
- FileMenu: TMenuItem;
- OpenFromFileMenu: TMenuItem;
- SaveToFileMenu: TMenuItem;
- DeveloperInfoMenu: TMenuItem;
- OpenFromFile: TOpenDialog;
- OutputLabel: TLabel;
- SaveToFile: TSaveDialog;
- sgArray: TStringGrid;
- TaskInfo: TLabel;
- addButton: TButton;
- DeleteLabel: TLabel;
- DeleteButton: TButton;
- ReverseButton: TButton;
- procedure AddElem(Str: String);
- procedure DeleteElem;
- procedure DeveloperInfoMenuClick(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure MainCreate(Sender: TObject);
- procedure DeleteButtonClick(Sender: TObject);
- procedure addButtonClick(Sender: TObject);
- procedure ReverseButtonClick(Sender: TObject);
- procedure AddFromFile(Sender: TObject);
- procedure SaveToFileMenuClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- MainForm: TMainForm;
- implementation
- {$R *.dfm}
- uses deleteElem, addElem;
- Type
- TPList = ^TList;
- TList = Record
- Data: String;
- PNext: TPList;
- PPrev: TPList;
- End;
- function IsOutFileCorrect(Path: String): Boolean;
- stdcall; external 'Lib.dll';
- function IsInFileCorrect(const Path: String): Boolean;
- stdcall; external 'Lib.dll';
- var
- Head: TPList;
- Tail: TPList;
- Len: Integer;
- procedure TMainForm.addButtonClick(Sender: TObject);
- begin
- MainForm.Enabled := False;
- AddForm.Show;
- end;
- procedure TMainForm.AddElem(Str: String);
- var
- Temp: TPList;
- begin
- New(Temp);
- Temp^.Data := Str;
- if Head = nil then
- Head := Temp
- else
- if Tail = nil then
- begin
- Head^.pNext := Temp;
- Tail := Temp;
- Tail^.pPrev := Head;
- end
- else
- begin
- Tail^.pNext := Temp;
- Temp^.pPrev := Tail;
- Tail := Temp;
- end;
- Inc(Len);
- ClearButton.Enabled := True;
- DeleteButton.Enabled := True;
- SaveToFileMenu.Enabled := True;
- if Len > 1 then
- ReverseButton.Enabled := True;
- end;
- procedure TMainForm.AddFromFile(Sender: TObject);
- Var
- i, Temp, Size: Integer;
- inFile: TextFile;
- IsCorrect: Boolean;
- begin
- IsCorrect := True;
- if OpenFromFile.Execute() then
- begin
- if (IsInFileCorrect(OpenFromFile.FileName)) then
- begin
- AssignFile(InFile, OpenFromFile.FileName);
- Reset(InFile);
- Read(InFile, Size);
- for i := 0 to Size - 1 do
- begin
- Read(InFile,Temp);
- AddElem(IntToStr(Temp));
- if MainForm.sgArray.Cells[0,1] <> '' then
- MainForm.sgArray.ColCount := MainForm.sgArray.ColCount + 1;
- MainForm.sgArray.Cells[MainForm.sgArray.ColCount - 1, 0] := IntToStr(MainForm.sgArray.ColCount);
- MainForm.sgArray.Cells[MainForm.sgArray.ColCount - 1, 1] := IntToStr(Temp);
- end;
- CloseFile(InFile);
- SaveToFileMenu.Enabled := True;
- end
- else
- IsCorrect := False;
- end
- else
- IsCorrect := False;
- if not IsCorrect then
- Application.MessageBox('Работа с файлом некорректна', 'Ошибка', MB_ICONERROR);
- end;
- procedure TMainForm.DeleteButtonClick(Sender: TObject);
- begin
- DeleteForm.Show;
- end;
- procedure TMainForm.DeleteElem;
- var
- isDeleted: Boolean;
- Index, Counter, i: Integer;
- Temp, List: TPList;
- begin
- isDeleted := False;
- Index := StrToInt(DeleteLabel.Caption);
- DeleteLabel.Caption := '';
- if (Index = 1) then
- begin
- if Len <> 1 then
- begin
- Head := Head^.pNext;
- Head^.pPrev := nil;
- end
- else
- Head := nil;
- IsDeleted := True;
- end
- else
- if (Index = Len) then
- begin
- Tail := Tail^.pPrev;
- Tail^.pNext := nil;
- IsDeleted := True;
- end;
- if (not IsDeleted) then
- begin
- if (Index <= Len - 1 - Index) then
- begin
- temp := head;
- counter := 0;
- while (counter <> Index) do
- begin
- Temp := Temp^.pNext;
- Inc(Counter);
- end;
- end
- else
- begin
- Temp := Tail;
- Counter := Len - 1;
- while (Counter <> Index) do
- begin
- Temp := Temp^.pPrev;
- Inc(Counter);
- end;
- end;
- Temp^.pPrev^.pNext := Temp^.pNext;
- Temp^.pNext^.pPrev := Temp^.pPrev;
- end;
- SgArray.Cells[Index - 1,1] := '';
- if Index <> Len then
- for i := Index - 1 to Len - 2 do
- SgArray.Cells[i,1] := SgArray.Cells[i + 1,1];
- SgArray.Cells[Len,0] := '';
- SgArray.Cells[Len,1] := '';
- if SgArray.ColCount <> 1 then
- SgArray.ColCount := SgArray.ColCount - 1
- else
- SgArray.Cells[0,0] := '';
- Dec(Len);
- if Len = 0 then
- begin
- ClearButton.Enabled := False;
- DeleteButton.Enabled := False;
- ReverseButton.Enabled := False;
- SaveToFileMenu.Enabled := False;
- end
- else
- if Len = 1 then
- ReverseButton.Enabled := False;
- end;
- procedure TMainForm.DeveloperInfoMenuClick(Sender: TObject);
- begin
- Application.MessageBox('Студент группы 151002, Вакарь Егор', 'О разработчике');
- end;
- procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- var
- WND: HWND;
- lpCaption, lpText: PChar;
- Tip: Integer;
- begin
- WND := MainForm.Handle;
- lpCaption := 'Выход';
- lpText := 'Вы уверены, что хотите выйти?';
- Tip := MB_YESNO + MB_ICONINFORMATION + MB_DEFBUTTON2;
- case MessageBox(WND, lpText, lpCaption, Tip) of
- IDYES : CanClose := True;
- IDNO : CanClose := False;
- end
- end;
- procedure TMainForm.MainCreate(Sender: TObject);
- var
- i: Integer;
- begin
- for i := 0 to Len - 1 do
- begin
- SgArray.Cells[i,0] := '';
- SgArray.Cells[i,1] := '';
- end;
- SgArray.ColCount := 1;
- Head := nil;
- Tail := nil;
- Len := 0;
- ClearButton.Enabled := False;
- DeleteButton.Enabled := False;
- ReverseButton.Enabled := False;
- SaveToFileMenu.Enabled := False;
- end;
- procedure TMainForm.ReverseButtonClick(Sender: TObject);
- var
- FromHead, FromTail: TPList;
- Counter: Integer;
- Temp: String;
- begin
- FromHead := Head;
- FromTail := Tail;
- Counter := 0;
- while (Counter <> (Len div 2)) do
- begin
- Temp := FromHead^.Data;
- FromHead^.data := FromTail^.Data;
- SgArray.Cells[Counter,1] := FromTail^.Data;
- FromTail^.Data := Temp;
- SgArray.Cells[Len - 1 - Counter,1] := FromTail^.Data;
- FromHead := FromHead^.pNext;
- FromTail := FromTail^.pPrev;
- Inc(Counter);
- end;
- end;
- procedure TMainForm.SaveToFileMenuClick(Sender: TObject);
- Var
- Temp: TPList;
- OutFile: TextFile;
- IsCorrect: Boolean;
- i: Integer;
- begin
- IsCorrect := True;
- if OpenFromFile.Execute() then
- if IsOutFileCorrect(OpenFromFile.FileName) then
- begin
- AssignFile(OutFile, OpenFromFile.FileName);
- Rewrite(OutFile);
- Writeln(OutFile, 'Список:');
- Temp := Head;
- for i := 1 to Len do
- begin
- Write(OutFile, Temp^.Data + ' ');
- Temp := Temp^.PNext;
- end;
- CloseFile(OutFile);
- end
- else
- IsCorrect := False
- else
- IsCorrect := False;
- if not IsCorrect then
- Application.MessageBox('Работа с файлом некорректна', 'Ошибка', MB_ICONERROR)
- else
- Application.MessageBox('Данные сохранены в файл', 'Успех');
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement