|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Реализация светофора (проблема)
Задача в том чтобы поставить на форму светофор, который мог бы работать в ручном и автоматическом режиме. Светофор я нарисовал и сделал ручной режим его работы. Подскажите, как сделать чтобы светофор работал в автоматическом режиме (цвета сами по себе переключались с течением заданного времени) и возможно ли это сделать без таймеров?
|
#2
|
||||
|
||||
Поток запользовать.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Цитата:
Можно еще на OnIdle "сесть" |
#4
|
|||
|
|||
а поконкретней можно, как это работает?
|
#5
|
|||
|
|||
Цитата:
|
#6
|
|||
|
|||
Можно и через таймеры, только как грамотно это сделать...? Отдельно могу сделать через три таймера (для каждого цвета свой таймер), а внедряю в программу - получается фигня. Ниже программка, может кто исправит косяк.
Последний раз редактировалось Setup_007, 28.03.2011 в 13:46. |
#7
|
||||
|
||||
вот реализация схемы:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; CheckBox1: TCheckBox; Timer1: TTimer; procedure CheckBox1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; const arr: array [0..15] of Byte = ( 1, 1, 1, 1, 3, 3, 4, 4, 4, 4, 0, 4, 0, 4, 2, 2 ); implementation {$R *.dfm} procedure TForm1.CheckBox1Click(Sender: TObject); begin Label1.Visible:=False; Label2.Visible:=False; Label3.Visible:=False; Tag:=0; Timer1.Enabled:=CheckBox1.Checked; if Timer1.Enabled then Timer1Timer(Timer1); end; procedure TForm1.Timer1Timer(Sender: TObject); begin if Tag>=Length(arr) then Tag:=0; Label1.Visible:=(arr[Tag] and 1)>0; Label2.Visible:=(arr[Tag] and 2)>0; Label3.Visible:=(arr[Tag] and 4)>0; Tag:=Tag+1; end; end. 0 разряд - красный цвет (десятичное 1) 1 разряд - желтый цвет (десятичное 2) 2 разряд - зеленый цвет (десятичное 4) комбинируя разряды можно получить различные режимы: группировка цветов, мигание и т.д. http://data.cod.ru/95350 Пишу программы за еду. __________________ |
#8
|
|||
|
|||
Огромное спасибо Сейчас буду пробовать..
|