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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2010, 21:34   #1
Final_ekb
 
Регистрация: 18.10.2010
Сообщений: 8
По умолчанию Однокнопочный светофор на Delphi 7

Суть задания в том, чтобы сделать переключение цветов светофора одной кнопкой.
Имеем 3 объекта с заданными цветами (желтый, красный, зеленый)
Суть "загорания лампочки" - смена Shape1.Brush.Style с bsDiagcross на bsSolid
С 2мя лампочками сделал, используя условия. Надо как-то сделать с тремя в такой последовательности:
1. Изначально горит красная. Затем тухнет и загорается зеленая.
2. Тухнет зеленая, загорается желтая
3. Тухнет желтая, загорается красная
4. Снова в пункт 1.

Не получается, хоть убей... помогите пожалуйста

Вот наработка на 2х лампах:

Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  If
    Shape2.Brush.Style = bsSolid
  Then
    begin
      Shape1.Brush.Style :=bsSolid;
      Shape2.Brush.Style :=bsDiagcross;
    end
  else
    begin
      Shape2.Brush.Style :=bsSolid;
      Shape1.Brush.Style :=bsDiagcross;
    end;
end;

end.

Последний раз редактировалось Final_ekb; 18.10.2010 в 21:37.
Final_ekb вне форума Ответить с цитированием
Старый 18.10.2010, 22:24   #2
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Для небольшого количества "лампочек" (3) я бы сделал так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Button1.Tag < 2 then
    Button1.Tag := Button1.Tag + 1
  else
    Button1.Tag := 0;

  case Button1.Tag of
    0:
      begin
        Shape1.Brush.Style := bsSolid;
        Shape2.Brush.Style := bsDiagcross;
        Shape3.Brush.Style := bsDiagcross;
      end;
    1:
      begin
        Shape1.Brush.Style := bsDiagcross;
        Shape2.Brush.Style := bsSolid;
        Shape3.Brush.Style := bsDiagcross;
      end;
    2:
      begin
        Shape1.Brush.Style := bsDiagcross;
        Shape2.Brush.Style := bsDiagcross;
        Shape3.Brush.Style := bsSolid;
      end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Shape1.Brush.Color := clRed;
  Shape2.Brush.Color := clYellow;
  Shape3.Brush.Color := clGreen;
  Shape1.Brush.Style := bsSolid;
  Shape2.Brush.Style := bsDiagcross;
  Shape3.Brush.Style := bsDiagcross;
  Button1.Tag := 0;
end;
Для большего количества "лампочек" нужно делать цикл по компонентам, чтобы не писать вручную каждый раз Style.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 18.10.2010 в 22:27.
Roof вне форума Ответить с цитированием
Старый 18.10.2010, 23:00   #3
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Следующий алгоритм:
Три объекта (лампочки) - Lamp1, Lamp2, Lamp3;
Переменные - step (byte) ,начальное значение = 0; _color (integer);
В обработчике нажатия кнопки (ButtonClick) применяем :
Код:
Inc(step);
         if step > 2 then  step := 0;
Заводим таймер (достаточно интервал 300 мсек) и в его обработчике пропишем
оператор выбора:
Код:
case step of
    0: begin Lamp1.Color:= clRed; Lamp2.Color:= <цвет фона>; Lamp3.Color:= <цвет фона>;end;
   1:  begin Lamp1.Color:= <цвет фона>; Lamp2.Color:= clYellow; Lamp3.Color:= <цвет фона>;end;
   2: begin Lamp1.Color:= <цвет фона>; Lamp2.Color:= <цвет фона>; Lamp3.Color:= clGreen;end;
   end;
Вот и весь алгоритм. Вместо кнопки Button можно задать время по второму таймеру и тогда светофор будет работать в автоматическом режиме.
Кстати, небезизвестные Билл Гейтц и Питер Аллен свою первую коммерческую программу написали и продали именно для управления светофором.( на Бейсике).
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 19.10.2010, 11:49   #4
Final_ekb
 
Регистрация: 18.10.2010
Сообщений: 8
По умолчанию

roof, не работает: кнопка не выполняетдействий. и что должна выполнять процедура formcreate?
Final_ekb вне форума Ответить с цитированием
Старый 19.10.2010, 12:54   #5
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 Final_ekb -
Цитата:
и что должна выполнять процедура formcreate?
Так я же написал что она должна выполнять.
Нну это можно и в инспекторе прописать. Я вот для большей ясности примера решил в событии OnCreate сделать.

а ты создал собыитя соответствующие для кнопки и для формы? У меня все работает. Или я твое задание не так понял, или ты чего-то напутал. В общем так:
1) Создай новый проект
2) Кидаешь на форму Button1
3) Кидаешь на форму 3 штуки Shape (Shape1, Shape2, Shape3)
4) Создаешь в инспекторе объектов два события - одно для формы, другое для кнопки.
5) В события вставляешь соответсвующий код.
Вот держи в архиве exe. Распакуй и запускай. Погляди как это работает.
Вложения
Тип файла: zip Project1.zip (393.1 Кб, 155 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 19.10.2010, 14:22   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Вот программа.
Вложения
Тип файла: rar светофор.rar (5.5 Кб, 216 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 19.10.2010, 15:19   #7
Final_ekb
 
Регистрация: 18.10.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Roof Посмотреть сообщение
2 Final_ekb -

Так я же написал что она должна выполнять.
Нну это можно и в инспекторе прописать. Я вот для большей ясности примера решил в событии OnCreate сделать.

а ты создал собыитя соответствующие для кнопки и для формы? У меня все работает. Или я твое задание не так понял, или ты чего-то напутал. В общем так:
1) Создай новый проект
2) Кидаешь на форму Button1
3) Кидаешь на форму 3 штуки Shape (Shape1, Shape2, Shape3)
4) Создаешь в инспекторе объектов два события - одно для формы, другое для кнопки.
5) В события вставляешь соответсвующий код.
Вот держи в архиве exe. Распакуй и запускай. Погляди как это работает.
Хм, да. У тебя верно работает. Порядок правда не тот, ну эт не важно.
В инспекторе для форм ничего не вставлял, а весь предоставленный тобой код вставил в событие при нажатии кнопки.

Я с делфи познакомился на прошлой неделе, поэтому пока с трудом ориентируюсь. Лабу сегодня сдал, сделав просто двойное ветвление с if, правильно расставив всяческие begin & end.
Можешь свой проект полностью дать посмотреть? Разобраться всё-равно охото :-) спасибо)


2 Dekot: ваш способ мне слишком не понятен, наверное потому, что вы "профессионал", поэтому я не стал его брать) у нас азы) но все равно большое спасибо за помощь

Последний раз редактировалось Final_ekb; 19.10.2010 в 15:21.
Final_ekb вне форума Ответить с цитированием
Старый 19.10.2010, 15:47   #8
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Держи в архиве весь проект.
Вложения
Тип файла: zip сфетофор.zip (12.0 Кб, 177 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 27.12.2010, 18:38   #9
Алексия
Новичок
Джуниор
 
Регистрация: 27.12.2010
Сообщений: 2
По умолчанию

у меня похожая задача,только с дополнениями,надо чтобы светофор растягивался и окно тоже,и еще чтобы было 2 режива автоматический и ручной(автоматический это как тут уже сделано,а ручной чтобы при нажатии на круг загарался соответствующий ему цвет)
это возможно сделать??помогите пожалуйста!!
Алексия вне форума Ответить с цитированием
Старый 27.12.2010, 20:02   #10
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

Алексия, да, возможно.
Kingdom_Reborn вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Светофор junkie Паскаль, Turbo Pascal, PascalABC.NET 7 23.12.2010 19:22
Светофор Porsche Общие вопросы C/C++ 2 15.05.2010 00:13
Светофор. Графика. Паскаль. Серафимий Долговяз Помощь студентам 5 10.10.2009 10:38
исправить компонент под делфи 2007 Roof Компоненты Delphi 1 31.08.2008 09:09
Иконка приложения в Делфи 2007 Roof Общие вопросы Delphi 2 22.08.2008 23:15