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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2014, 11:03   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
otv[i] очень похож по структуре на массив чекбоксов.
похож. ну, хотелось бы от автора программы услышать, что он подразумевал и чего хотел добиться этим кодом.

Цитата:
Сообщение от IliaIT Посмотреть сообщение
но как его стандартным способом объявить в дельфи я чего то не помню.
дык, можно через обычный массив (судя по коду, обращение идёт от 1 до 4-х):
Код:
var 
  otv : array[1..4] of TCheckBox;
Только, в этом случае, прежде чем обращаться к этим чекбоксам, их нужно ОБЯЗАТЕЛЬНО предварительно создать, а после завершения программы - уничтожить.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.05.2014, 11:06   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что тут не так?
Думаю тебе нужно вместо otv: integer; писать otv: array of TCheckBox;

И наполнять так:
Код:
var i:integer;
begin
...
 SetLength(otv,4);
 for i:=Low(otv) to high(otv) do begin
   readln(f1,s);
   otv[i]:=TCheckBox.Create(self);
   otv[i].Parent:=self;
   otv[i].Caption :=s;
   otv[i].Checked :=false;
   otv[i].Tag:=0;
   if s[1]='+' then otv[i].Tag:=1;
   delete(s,1,1);
   otv[i].Caption :=s;
   otv[i].Align:=alTop;
   otv[i].Show;
 end;
А вообще конечно тут все не правильно.
Цитата:
Учись сам. Литература в топике этого раздела. Удачи.
И зачем тогда тут твои комменты, если "учись сам"?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.05.2014, 11:19   #13
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
И зачем тогда тут твои комменты, если "учись сам"?
А ты учитель?
И я что-то сильно сомневаюсь что топикстартер собирался создавать динамический массив TCheckBox. Максимум CheckListBox.
doktor255 вне форума Ответить с цитированием
Старый 08.05.2014, 11:38   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А ты учитель?
Я тебя попрошу проходить мимо тех тем, в которых тебе нечего кроме нравоучений сказать. Хорошо?
Я же надеюсь ты не хочешь, чтоб на тебя форумчане продолжили жаловаться мне в личку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.05.2014, 15:29   #15
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

Еще ошибки:

Цитата:
[dcc32 Warning] Unit1.pas(41): W1019 For loop control variable must be simple local variable
[dcc32 Error] Unit1.pas(43): E2010 Incompatible types: 'TCheckBox' and 'TRadioButton'
[dcc32 Warning] Unit1.pas(69): W1019 For loop control variable must be simple local variable
[dcc32 Warning] Unit1.pas(81): W1019 For loop control variable must be simple local variable
[dcc32 Warning] Unit1.pas(94): W1019 For loop control variable must be simple local variable
[dcc32 Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    RadioButton1: TRadioButton;
    OpenFile: TOpenDialog;
    Button1: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    procedure N2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  verno,n,i: integer;
  f1: textfile;
  s:string;
  otv: array of TCheckBox;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
For i:=1 to 4 Do
Begin
otv[i] := TRadioButton.Create(RadioButton1);
otv [i].Parent := Form1;
otv[i].Left := RadioButton1.Left;
otv[i].Top:= RadioButton1.Top+i*40;
otv [i].Visible :=true;
otv [i].Width := RadioButton1.Width ;
otv [i].Height := RadioButton1.Height ;
otv [i].Color := RadioButton1.Color ;
otv[i].Checked :=false;
otv[i].Font :=  RadioButton1.font;
end;
RadioButton1.Visible :=false;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
If openfile.Execute Then
Begin
assignfile(f1,openfile.FileName);
reset(f1);
readln(f1,s);
form1.Caption :=s;
verno:=0;
n:=0;
button1.Enabled :=true;
label1.Caption :='';
for i:=1 to 4 do
begin
otv[i].Caption :='';
otv[i].Checked :=false;
end;
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if n>0 then
for i:=1 to 4 do
if (otv[i].Checked =true) and (otv[i].tag=1) then verno:=verno+1;
if eof(f1) then
begin
showmessage(' кол-во верных ответов='+inttostr(verno));
closefile(f1);
button1.Enabled :=false;
exit;
end;
n:=n+1;
readln(f1,s);
delete(s,1,1);
label1.Caption :=s;
for i:=1 to 4 do
begin
readln(f1,s);
otv[i].Checked :=false;
otv[i].Tag:=0;
if s[1]='+' then otv[i].Tag:=1;
delete(s,1,1);
otv[i].Caption :=s;
end;
end;

end.
UKRtortik вне форума Ответить с цитированием
Старый 08.05.2014, 15:38   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
otv: array of TRadioButton;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.05.2014, 15:51   #17
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Побочный эффект применения метода "скопировать - вставить". Лечится применением функции "Прочитать книгу по программированию".
doktor255 вне форума Ответить с цитированием
Старый 08.05.2014, 16:16   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
UKRtortik
Кстати. Весь твой код по загрузке тестов можно упростить компонентом TRadioGroup:
Цитата:
procedure TForm1.N2Click(Sender: TObject);
begin
If openfile.Execute Then
RadioGroup1.Items.LoadFromFile(open file.FileName);
end;
Ибо все равно ты делаешь неверно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.05.2014, 16:53   #19
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

Stilet, спасибо большое!
UKRtortik вне форума Ответить с цитированием
Старый 08.05.2014, 18:07   #20
mahatmaQL
Пользователь
 
Регистрация: 02.04.2014
Сообщений: 18
По умолчанию

вот это предупреждение Unit1.pas(41): W1019 For loop control variable must be simple local variable говорит, что в качестве переменной цикла надо использовать локальную переменную.

ты используешь i в разделе var раздела interface, а нужно i объявить в разделе var процедуры procedure TForm1.FormCreate(Sender: TObject).

И так всегда: переменная в цикле for должна определяться локально!

В твоем случае в каждой процедуре должно быть
var i: integer;

Последний раз редактировалось mahatmaQL; 08.05.2014 в 18:11.
mahatmaQL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как бороться с ошибкой E2016 Array type required Celestia Общие вопросы Delphi 4 18.11.2010 13:03
Ошибка array type required _alis_ Компоненты Delphi 1 31.05.2010 17:27
Ошибка " Record, object or class type required " (Запись, объектный или классический тип требовались) kta87 Помощь студентам 2 28.02.2010 10:04
Record, object or class type required @mazonk@ Помощь студентам 0 07.06.2009 13:03
Выдает ошибку Array type required! LIEN Общие вопросы Delphi 19 17.05.2009 11:08