Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.04.2011, 12:18
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
Восклицание Delphi ООП не понимаю многие слова отсюда

не понимаю очень многие команды в этом тексте
Код:
unit UnTrafficLight;

interface
  uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, DateUtils;

  type
    TTrafficLight = class(TObject)
      private
      { Private declarations }

        fLightRed,                                                                  
        fLightYellow,                                                             
        fLightGreen,                                                             
        fStop

          : boolean;

        fCanvas: TCanvas;                                                          

       public
       { Public declarations }
          property LightRed  : boolean read   fLightRed;                       
          property LightYellow : boolean read fLightYellow;                    
          property LightGreen : boolean read fLightGreen;                      

          constructor Create(Canvas : TCanvas);                                 

          procedure DrawLight(LightColor: TColor; clear: boolean = false);   
          procedure ClearTrafficLight;                                         
          procedure ShowState;                                                 
          procedure Wait(time: integer);                                     
          procedure StopCycle;                                                 
          procedure StartLightCycle;                                          
    end;
implementation

  constructor TTrafficLight.Create(Canvas : TCanvas);                                       
    begin
      inherited Create;
      fCanvas :=  Canvas;
      fCanvas.Brush.Style := bsSolid;
      fLightRed     :=  false;                                                                  
      fLightYellow  :=  false;                                                              
      fLightGreen   :=  false;
      ShowState;
    end;

  procedure TTrafficLight.DrawLight(LightColor: TColor; clear: boolean = false);                      
    begin
      if clear then fCanvas.Brush.Color :=  clSilver
               else fCanvas.Brush.Color :=  LightColor;
      case LightColor of
        clRed     :  fcanvas.Ellipse(35,20,85,70);
        clYellow  :  fcanvas.Ellipse(35,90,85,140);
        clGreen    :  fcanvas.Ellipse(35,160,85,210);
      end;
    end;

  procedure TTrafficLight.ClearTrafficLight;                                             
    begin
      DrawLight(clRed, true);                                         
      DrawLight(clYellow, true);                                   
      DrawLight(clGreen, true);                                      
    end;

  procedure TTrafficLight.ShowState;                                            
    begin
      DrawLight(clRed, not fLightRed);                                         
      DrawLight(clYellow, not fLightYellow);                                  
      DrawLight(clGreen, not fLightGreen);                                   
    end;

  procedure TTrafficLight.Wait(time: integer);
    var h: THandle;
    begin
      h:=CreateEvent(nil,true,false,'');
      WaitForSingleObject(h,time);
      CloseHandle(h);
    end;
 procedure TTrafficLight.StopCycle;                                            
    begin
      fStop := true;
      ClearTrafficLight;
    end;

  procedure TTrafficLight.StartLightCycle;                                  
    var start : TDateTime;
    begin
      fStop :=  false;

      While not fStop do
        begin
          Application.ProcessMessages;
          If fStop then exit;

          //  Исходное состояние - красный свет
          fLightRed     :=  true;                                                                 
          fLightYellow  :=  false;                                                              
          fLightGreen   :=  false;
          ShowState;
          Start :=   now;                                                      
          While SecondsBetween(Start,now) < 15 do                             
            begin
              if fStop then exit;                                               
              ShowState;                                                       
              Application.ProcessMessages;                                     
              Wait(50);
            end;

          //  Включаем желтый и красный, горим 2 секунды
          fLightRed     :=  true;                                               
          fLightYellow  :=  true;                                              
          fLightGreen   :=  false;
          ShowState;
          Start :=   now;                                                    

          While SecondsBetween(Start,now) < 2 do                             
            begin
              if fStop then exit;                                             
              ShowState;                                                       
              Application.ProcessMessages;                                     
              Wait(50);
            end;


          //  Включаем зеленый, горим 30 секунд
          fLightRed     :=  false;                                             
          fLightYellow  :=  false;                                              
          fLightGreen   :=  true;
          ShowState;
          Start :=   now;                                                      

          While SecondsBetween(Start,now) < 30 do                            
            begin
              if fStop then exit;                                              
              ShowState;                                                       
              Application.ProcessMessages;                                     
              Wait(50);
            end;


          //  Зеленый мигает 3 секунд
          Start :=   now;                                                     
          While SecondsBetween(Start,now) < 3 do                              
            begin
              fLightGreen   :=  not fLightGreen;                               
              if fStop then exit;                                              
              ShowState;                                                        
              Application.ProcessMessages;                                      
              Wait(500);
            end;

          //  Включаем желтый, горим 3 секунд
          fLightRed     :=  false;                                             
          fLightYellow  :=  true;                                               
          fLightGreen   :=  false;
          ShowState;
          Start :=   now;                                                     
          While SecondsBetween(Start,now) < 2 do                               
            begin
              if fStop then exit;                                               
              ShowState;                                                      
              Application.ProcessMessages;                                     
              Wait(50);
            end;

        end;

      fLightRed     :=  false;                                                               
      fLightYellow  :=  false;                                                              
      fLightGreen   :=  false;

    end;





end.

Последний раз редактировалось Antidelphik, 28.04.2011 в 12:21.
Ответить с цитированием
  #2  
Старый 28.04.2011, 12:24
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

И в чем вопрос?
Ответить с цитированием
  #3  
Старый 28.04.2011, 12:24
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

не понимаю что значит в
Код:
procedure TTrafficLight.ShowState;
слово not используемое в
Код:
 DrawLight(clRed, not fLightRed)
Ответить с цитированием
  #4  
Старый 28.04.2011, 12:26
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

ещё абсолютно не могу понять что делает
Код:
 procedure TTrafficLight.Wait(time: integer);
то есть понимаю что она нужна для того чтобы делать паузу между включениями разных цветов, но как она это делает в частности что значит
Код:
 h:=CreateEvent(nil,true,false,'');

Последний раз редактировалось Antidelphik, 28.04.2011 в 12:29.
Ответить с цитированием
  #5  
Старый 28.04.2011, 12:34
Аватар для Antidelphik
Antidelphik Antidelphik вне форума
Новичок
 
Регистрация: 28.04.2011
Сообщения: 67
Репутация: 10
По умолчанию

НУ КТО-НИБУДЬ, ПОМОГИТЕ ПОЖАЛУЙСТА!
Ответить с цитированием
  #6  
Старый 28.04.2011, 13:02
Raskolnikov Raskolnikov вне форума
Прохожий
 
Регистрация: 20.04.2011
Адрес: Киров
Сообщения: 35
Версия Delphi: 7 Enterprise
Репутация: 148
По умолчанию

Код:
h:=CreateEvent(nil,true,false,'');
Создает пустое событие и записывает его Handle (4-байтовый идентификатор) в переменную h.
Код:
 WaitForSingleObject(h,time);
Присостанавливает выполнение программы до наступления созданного нами события, но не более чем на time миллисекунд. Так как событие пустое, оно не наступит никогда, и программа будет приостановлена ровно на time мс.

Функция CloseHandle удаляет наше событие, освобождает занимаемую им память и возвращает системе его Handle.
Ответить с цитированием
  #7  
Старый 29.04.2011, 10:55
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от Antidelphik
не понимаю что значит
слово not
not - логическая инверсия (противоположное значение):
not True = False
not False = True
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter