Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Делфи. Создать "Тест" (http://www.tehnari.ru/f41/t98655/)

Aksinia 02.10.2014 03:28

Делфи. Создать "Тест"
 
:tehnari_ru_837:Здравствуйте!
Надеюсь на Вашу помощь.
Задание:
1. Перед пользователем окно, в котором он должен ввести свои ФИО.
2. Во втором окне пользователю предлагается выбрать тест, который он хочет пройти через OpenDialog.
3. Название,которое выбирается в OpenDialog сохраняется в переменную.
4. Открывается этот файл с именем этой переменной. В 3-ей форме создается некоторое количество лейблов и столько же едитов. В каждый лейбл записывается вопрос -1 строка из файла. В соседний едит пользователь должен ввести ответ на него.
5. Результатом проги является то, что все ответы пользователя сохраняются в отдельный файл, а еще этому файлу нужно обеспечить защиту от ручной корректировки результатов.
Надеюсь, что объяснила понятно. То, что у меня получилось (3 юнита) здесь. Буду очень благодарна, если найдете ошибку

PHP код:

unit Unit1;

{
$mode objfpc}{$H+}

interface

uses
  Classes
SysUtilsFileUtilFormsControlsGraphicsDialogsStdCtrls;

type

  
TForm1 }

  
TForm1 = class(TForm)
    
Button1TButton;
    
Button2TButton;
    
Edit1TEdit;
    
Label1TLabel;
    
procedure Button1Click(SenderTObject);
    
procedure Button2Click(SenderTObject);
  private
    { private 
declarations }
  public
    { public 
declarations }
  
end;

var
  
Form1TForm1;

implementation
uses Unit2
;

TForm1 }

procedure TForm1.Button2Click(SenderTObject);
begin
  close
;
end;

procedure TForm1.Button1Click(SenderTObject);
begin
  Form2
.Label2.Caption:=Form1.Edit1.Text;
  
Form2.ShowModal;
end;

{
$R *.lfm}

end

PHP код:

unit Unit2;

{
$mode objfpc}{$H+}

interface

uses
  Classes
SysUtilsFileUtilFormsControlsGraphicsDialogsStdCtrls;

type

  
TForm2 }

  
TForm2 = class(TForm)
    
Button1TButton;
    
Label1TLabel;
    
Label2TLabel;
    
Label3TLabel;
    
OpenDialog1TOpenDialog;
    
procedure Button1Click(SenderTObject);
  private
    { private 
declarations }
  public
    
Nametext:string;
    { public 
declarations }
  
end;

var
  
Form2TForm2;

implementation
 uses Unit3
;

 { 
TForm2 }

 
procedure TForm2.Button1Click(SenderTObject);
 
begin
    OpenDialog1
.Execute;
  if(
OpenDialog1.FileName <> ''then begin
    Nametext
:= FileUtil.UTF8ToSys(OpenDialog1.FileName);
    
Form3.ShowModal;
end;
 
end;

{
$R *.lfm}

end

PHP код:

unit Unit3;

{
$mode objfpc}{$H+}

interface

uses
  Classes
SysUtilsFileUtilFormsControlsGraphicsDialogsStdCtrls;

type

  
TForm3 }

  
TForm3 = class(TForm)
    
Button1TButton;
    
Button2TButton;
    
procedure fclose(SenderTObject);
    
procedure orm(SenderTObject);
    
procedure write(SenderTObject);
  private
    { private 
declarations }
  public
    { public 
declarations }
  
end;

var
  
Form3TForm3;
  
f,f2:TextFile;count:integer;
implementation
 uses Unit2
,Unit1;

 { 
TForm3 }

 
procedure TForm3.orm(SenderTObject);
 var 
edtTEdit;lblTLabel;toop1:integer;S:string;
begin
  AssignFile
(f,Form2.Nametext);
    
Reset(f);
    
toop1:=10;count:=1;
    while 
Not EOF(f) do
    
begin
      Readln
(fS);
         
edt:=TEdit.Create(Form3);
         
edt.Parent:=Form3;
         
edt.Top:=toop1;
         
edt.Left:=100;
         
lbl:=TLabel.Create(Form3);
         
lbl.Parent:=Form3;
         
lbl.Caption := S;
         
lbl.Top:=toop1;
         
inc(count);
      
inc(toop1,20);
      
CloseFile(f);
end;end;

procedure TForm3.fclose(SenderTObject);
begin
  close
;Form1.Close;
Form2.Close;
end;

procedure TForm3.write(SenderTObject);
var 
i:integer;
begin
  AssignFile
(f2,'Answers');
  
Rewrite(f2);
  
Append(f2);
  for 
i:=1 to count do
  
begin
  Writeln
(f2,TEdit(FindComponent('Edit'+IntToStr(i))).Text);
end;
closefile(f2);
end;

{
$R *.lfm}

end


AlexZir 02.10.2014 06:20

ООП предполагает задание свойств для используемых объектов, так что приведенных листингов маловато будет для анализа вашего проекта. Плюс вы нигде не упомянули о типе возникающей ошибки.

poiu 02.10.2014 10:25

дада. маловато листингов. надо архив с проектом.

Aksinia 02.10.2014 11:43

Вложений: 1
Немного переделала.
Ошибка возникает при работе программы, во время открытия OpenDialog.
Ошибка RunError 217.
Файл приложен.

Aksinia 02.10.2014 11:51

Вложений: 1
Еще немного переделала.
Ошибка возникает при работе программы, во время открытия OpenDialog.
Ошибка RunError 217.
Файл приложен.

poiu 02.10.2014 15:58

пункт 1 красиво реализуется встроенной функцией InputQuery.
а с файлами люблю работать через TStringList. умеет делать OpenFile и работать по-строчно.

poiu 03.10.2014 12:17

Вложений: 1
набросал тут
надеюсь задание понял верно))

Debianer 03.10.2014 14:47

При беглом просмотре в глаза бросилось следующее:
procedure TForm2.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
if(OpenDialog1.FileName <> '') then begin
Nametext:= FileUtil.UTF8ToSys(OpenDialog1.FileName);
Form3.ShowModal;
end;
end;


Первое. Делать не просто Execute, а if OpenDialog.Execute then begin ... - в этом случае, если пользователь выбрал файл, но нажал кнопку в диалоге "Отмена", то событие Execute возвращает False. А так у вас может возвращать в качестве имени файла мусор.
Второе. UTF8ToSys - зачем? Диалог и так работает в системной кодировке, и возвращает имя файла в ней же.


Часовой пояс GMT +4, время: 21:04.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.