Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программа Delphi с массивами.

Николай Задорожный Ученик (51), закрыт 7 лет назад
procedure TForm1.Button1Click(Sender: TObject);
var
x: array [1..3] of dword;
n:integer;
begin
x[1] := clRed; x[2]:=clYellow; x[3]:=clBlue;
n:=1;
if (n < 3) then begin
inc(n);
Form1.Color:= x[n];
end
else Form1.Color:=x[1];

end;
end.
Программа заключается в том, что по нажатию кнопки цвет формы должен меняться. Но он не меняется, потому что по нажатию кнопки параметру n всегда присваивается только число 1. Что здесь поменять???
Дополнен 7 лет назад
Или помогите написать по-другому программу)
Лучший ответ
Икар Кабачков Просветленный (23556) 7 лет назад
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
n: integer=0;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
const x: array [0..2] of tcolor=(clRed,clYellow,clBlue);
begin
Form1.Color:= x[n];
n:=(n+1)mod 3;
end;

end.
Николай ЗадорожныйУченик (51) 7 лет назад
А почему mod 3? И получается, что только в глобальных переменных можно задавать первоначальное значение n, чтобы оно использовалось один раз?
Икар Кабачков Просветленный (23556) mod 3 дает число в диапазоне 0..2. это соответствует индексам массива. если не делать mod, то программа выйдет за границы массива, что приведет к ошибке. на счет глобальных переменных ты прав.
Николай ЗадорожныйУченик (51) 7 лет назад
Огромное спасибо!
Остальные ответы
ByShark Мастер (2341) 7 лет назад
А зачем нут массивы? Можно просто поставить рандомом
Николай ЗадорожныйУченик (51) 7 лет назад
нужно, чтобы программа последовательно меняла цвета
Николай ЗадорожныйУченик (51) 7 лет назад
Меня заинтересовал ваш метод. Подскажите, что тут не так?
procedure TForm1.Button1Click(Sender: TObject);
const
x:array[0..2] of tcolor=(clred,clgreen,clyellow);
var
n:integer;
begin
for n:=0 to 2 do
random(n);
form1.color:=x[n];
end;

end.
MS Оракул (81627) 7 лет назад
Убери n = 1, определи n в виде глобальной переменной и назнач его при создании формы
Николай ЗадорожныйУченик (51) 7 лет назад
А как его сделать?
MS Оракул (81627) Вместо n = 1 надо поставить for n = 1 to 3 do
Николай ЗадорожныйУченик (51) 7 лет назад
А как это записать?
MS Оракул (81627) исправил ответ
Николай ЗадорожныйУченик (51) 7 лет назад
А как назначить при создании формы?
Manunich Мудрец (15855) 7 лет назад
У тебя при каждом нажатии на кнопку n задается равная одному и следовательно всегда один цвет. Инициализация массива с цветами должна делаться один раз, при загрузке формы.
Похожие вопросы