• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Делфи. Создать "Тест"

  • Автор темы Автор темы Aksinia
  • Дата начала Дата начала

Aksinia

Новые
Регистрация
15 Дек 2013
Сообщения
31
Реакции
1
Баллы
0
Делфи. Создать "Тест"

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

PHP:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation
uses Unit2;

{ TForm1 }

procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;

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

{$R *.lfm}

end.

PHP:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm2 }

  TForm2 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    Nametext:string;
    { public declarations }
  end;

var
  Form2: TForm2;

implementation
 uses Unit3;

 { TForm2 }

 procedure TForm2.Button1Click(Sender: TObject);
 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, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm3 }

  TForm3 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure fclose(Sender: TObject);
    procedure orm(Sender: TObject);
    procedure write(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

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

 { TForm3 }

 procedure TForm3.orm(Sender: TObject);
 var edt: TEdit;lbl: TLabel;toop1:integer;S:string;
begin
  AssignFile(f,Form2.Nametext);
    Reset(f);
    toop1:=10;count:=1;
    while Not EOF(f) do
    begin
      Readln(f, S);
         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(Sender: TObject);
begin
  close;Form1.Close;
Form2.Close;
end;

procedure TForm3.write(Sender: TObject);
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.
 
ООП предполагает задание свойств для используемых объектов, так что приведенных листингов маловато будет для анализа вашего проекта. Плюс вы нигде не упомянули о типе возникающей ошибки.
 
дада. маловато листингов. надо архив с проектом.
 
Немного переделала.
Ошибка возникает при работе программы, во время открытия OpenDialog.
Ошибка RunError 217.
Файл приложен.
 

Вложения

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

Вложения

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

Вложения

  • my.rar
    my.rar
    7.2 KB · Просмотры: 19
При беглом просмотре в глаза бросилось следующее:
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 - зачем? Диалог и так работает в системной кодировке, и возвращает имя файла в ней же.
 
Назад
Сверху