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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2011, 15:45   #1
Vadja-Son
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 40
По умолчанию Цикл действий на(в) одно кнопке

Всем привет!

Немогу сделать одну задачку. Скажем есть 3 Label, пускай они будут называтся Label1, Label2 и Label3. Нажимаем конпу, пускай она будет Button1, и у Label1 фон становится красным, тоесть:

Код:
begin
 Label1.Color:=clRed;
end;
Как сделать, чтобы при повторном нажатии этой же кнопки Button1, он становится красным у Label2? Есчо раз нажимаем, и фон становится красным у Label3, и так далее....

Возможно ли это???
Vadja-Son вне форума Ответить с цитированием
Старый 07.02.2011, 16:35   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

можно сделать так
Код:
if label2.color<>clred then label1.color:=clred
else  if label2.color <>clred then label2.color:=clred
else if label3.color <>clred then label3.color:=clred
else showmessage('все уже окрашены');
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.02.2011 в 16:38.
evg_m на форуме Ответить с цитированием
Старый 08.02.2011, 01:49   #3
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Точнее так:
Код:
if Label3.Color=clRed then
  begin
    Label3.Color:=Form1.Color;
    Label1.Color:=clRed;
  end else
    if Label1.Color=clRed then
    begin
      Label1.Color:=Form1.Color;
      Label2.Color:=clRed;
    end else
      if Label2.Color=clRed then
      begin
        Label2.Color:=Form1.Color;
        Label3.Color:=clRed;
      end else Label1.Color:=clRed;
(После окрашвания 3-ого, закрашивается 1-ый)
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 08.02.2011, 04:45   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ну ребят, вы чему людей учите? Мы ж не индусы.
Код:
var
  Labels: array of TLabel;
  LabelIndex: Integer;
  Col: TColor;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength (Labels, 3);
  Labels [0] := Label1;
  Labels [1] := Label2;
  Labels [2] := Label3;
  LabelIndex := 0;

  Randomize;
  Col := clRed;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if LabelIndex > -1 then begin
    Labels [LabelIndex].Color := Col;
    if LabelIndex = Length(Labels)-1 then begin
      LabelIndex := 0;
      Col := TColor (Random ($FFFFFF));
    end
    else begin
      Inc (LabelIndex);
    end;
  end;
end;
FormCreate можно сделать и так. Тут уже все от случая зависит.
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  SetLength (Labels, 0);
  LabelIndex := 0;
  for i := 0 to ComponentCount-1 do begin
    if Components[i] is TLabel then begin
      Inc (LabelIndex);
      SetLength (Labels, LabelIndex);
      Labels [LabelIndex-1] := TLabel (Components[i]);
    end;
  end;
  if LabelIndex > 0 then
    LabelIndex := 0
  else
    LabelIndex := -1;

  Randomize;
  Col := clRed;
end;
Есть еще хороший вариант с очередью, но это если вам нужно именно один проход сделать.

Последний раз редактировалось Sibedir; 08.02.2011 в 11:24.
Sibedir вне форума Ответить с цитированием
Старый 08.02.2011, 09:23   #5
Vadja-Son
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 40
По умолчанию

Большое спасибо всем!

Но я забыл указать один интендент в задачке - при каждом нажатие кнопки, загарается только 1 Label, тоесть:

Button1 нажали, фон становится красным у Label1.
Снова Button1 нажали, фон становится красным у Label2, а у 1 Label возврощается исходный.
Снова Button1 нажали, фон становится красным у Label3, а у 2 Label возврощается исходный.
и.т.д.

Кстати, все 3 варианта неработают.
Варинаты
Цитата:
856100
и
Цитата:
evg_m
в результати выходит всё как у меня, загарается только 1 Label.

Вариант Sibedir вообще не работает, он мне выдаёт ошибку на implementation

Последний раз редактировалось Stilet; 11.02.2011 в 17:03.
Vadja-Son вне форума Ответить с цитированием
Старый 08.02.2011, 09:46   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Код модуля (ВЕСЬ) в студию. Чаво эт там у меня не работает?
Sibedir вне форума Ответить с цитированием
Старый 08.02.2011, 10:28   #7
Vadja-Son
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 40
По умолчанию

Давай так, я присылаю основной код программы, и обьесня где и чего должно работать, а вы вставить свой шедевр в мой так назваемый огррызок

Код:
unit Unit1;

interface

...
бла бла бла
...

  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Button1Click( Sender: TObject);
var
  qwest : string;
  I,J,K, Temp : integer;
begin
 EditQuestion.Clear;
 QueryQuestion.SQL.Clear;
 qwest:=('SELECT TOP 1 * FROM Questions where ID ORDER BY RND(id);');
 QueryQuestion.SQL.Add(qwest);
 QueryQuestion.Active := true;
 if (not QueryQuestion.eof)then
  begin
   if QueryQuestion.eof then Application.MessageBox('Apsveicu! Spele ir pabeigta', 'Tu uzvareji', MB_OK);
  end;

 // massiv otvet
 //  pravelnij otvet - pervij!!!!!!!!!
 M[1] := QueryQuestion.FieldByName('TrueAsk').AsString;
 for I := 2 to CountAnswer do
   M[I] := QueryQuestion.FieldByName('FalseAsk'+Trim(IntToStr(I-1))).AsString;

 for I := 1 to CountAnswer do
     Indx[I] := I;

 //masiv s Index
 for J := 1 to 50 do
   for I := 1 to CountAnswer do begin
     repeat
       K := Random(CountAnswer)+1;
     until K<>I;
     Temp := Indx[K];
     Indx[K] := Indx[I];
     Indx[I] := Temp
   end;
   begin
         Variant1.Caption := '1 Variants';
         Variant2.Caption := '2 Variants';
         Variant3.Caption := '3 Variants';
         Variant4.Caption := '4 Variants';
      end;
 EditQuestion.Text := QueryQuestion.FieldByName('Question').AsString;
 Memo1.Lines.Text := M[Indx[1]];
 Memo2.Lines.Text := M[Indx[2]];
 Memo3.Lines.Text := M[Indx[3]];
 Memo4.Lines.Text := M[Indx[4]];

 begin
  Label4.Caption:='Laipni ludzam uz speli kas grib klut par miljonari';
  Label5.Caption:='Spiediet uz taustinu Uzdot jautajumu ';
  Label6.Caption:='Jums jaizvelas vienu no cetriem variantiem';
  Label7.Caption:='Jus varat izmantot papildiespejas';
end;
begin
 if label9.color<>clred then label8.color:=clred
 else  if label10.color <>clred then label9.color:=clred
 else if label11.color <>clred then label10.color:=clred
 else showmessage('poluchilosj');

end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var I : integer;
begin
 Randomize;
 Memo1.Lines.Clear;
 Memo2.Lines.Clear;
 Memo3.Lines.Clear;
 Memo4.Lines.Clear;
 ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
      ExtractFilePath(Application.ExeName)+'Data.mdb;Persist Security Info=False';
 ADOConnection1.Connected:=true;
 for I := 1 to CountAnswer do
     Indx[I] := 0;
 Variant1.Tag := 1;
 Variant2.Tag := 2;
 Variant3.Tag := 3;
 Variant4.Tag := 4;
end;

// u knopok Tag
procedure TForm1.VariantCheckClick(Sender: TObject);
var ButtonTag : integer;
begin
   // proverka pravelnosti
   ButtonTag := TButton(Sender).Tag;
   if (ButtonTag<=0) or (ButtonTag>CountAnswer) then begin
     Application.MessageBox('Sis  variants nav iespejams!', 'Kluda', MB_ICONSTOP or MB_OK);
   // oshibka programmista v tagah
     Exit;
   end;

   if Indx[ButtonTag] = 0 then begin
     Application.MessageBox('Jautajums vel nav uzdots!', 'Kluda', MB_ICONSTOP or MB_OK);
     Exit;
   end;

   if Indx[ButtonTag]=1 then
     Application.MessageBox('Apsveicu! Atbilde ir pareiza', 'Informacija', MB_OK)
   else begin
     Application.MessageBox('Atbilde nav pareiza! Spele ir pabeigta, pamegini velreiz!', 'Tu zaudeji', MB_ICONSTOP or MB_OK);
     Application.Terminate;
   end;

end;

...
бла бла бла
...

end.
такс

Код:
procedure TForm1.Button1Click( Sender: TObject);
в эту кнопку мне нужно встваить... у меня 12 Label

Нажал Button, Label8 красный, есчо раз нажал, Label9 красный, а Label8 изночальный (тоесть серый), есчо раз нажал, Label10 красный, а Label9 изночальный (тоесть серый), есчо раз нажал, Label11 красный, а Label10 изночальный (тоесть серый), есчо раз нажал, Label12 красный, а Label11 изночальный (тоесть серый), есчо раз нажал, Label13 красный, а Label12 изночальный (тоесть серый), есчо раз нажал, Label14 красный, а Label13 изночальный (тоесть серый), есчо раз нажал, Label15 красный, а Label14 изночальный (тоесть серый), есчо раз нажал, Label16 красный, а Label15 изночальный (тоесть серый), есчо раз нажал, Label17 красный, а Label16 изночальный (тоесть серый), есчо раз нажал, Label18 красный, а Label17 изночальный (тоесть серый), есчо раз нажал, Label19 красный, а Label18 изночальный (тоесть серый), есчо раз нажал, все Label изночальные (тоесть серые).

воть
Vadja-Son вне форума Ответить с цитированием
Старый 08.02.2011, 10:42   #8
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Не. Давай так. Ты вставляешь после implementation мой
Код:
var
  бла бла бла
А после begin'ов в FormCreate и Button1Click вставляешь мой код. И все работает.
Sibedir вне форума Ответить с цитированием
Старый 08.02.2011, 11:09   #9
Vadja-Son
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 40
По умолчанию

Всё сделал.

Нажимаю на кнопку, а он мне Error LabelIndex...

Или я тупой, незнаю чегото

просто мне кажется LabelIndex вместо Index должен быть номер Label
Vadja-Son вне форума Ответить с цитированием
Старый 08.02.2011, 11:16   #10
Vadja-Son
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 40
По умолчанию

errror.jpg
ну какбы вот
Vadja-Son вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34