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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2011, 21:15   #1
Antidelphik_)
Пользователь
 
Регистрация: 22.03.2011
Сообщений: 29
Восклицание ООП в делфи

не понимаю очень многие функции из этой программы и вообще не вкуриваю фишку с ООП, помогите пожалуйста разобраться
Код:
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;
Antidelphik_) вне форума Ответить с цитированием
Старый 27.04.2011, 21:17   #2
Antidelphik_)
Пользователь
 
Регистрация: 22.03.2011
Сообщений: 29
По умолчанию

Код:
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;                                              
          ShowState;
          Start :=   now;                                                       

          While SecondsBetween(Start,now) < 2 do                               
            begin
              if fStop then exit;                                            
              ShowState;                                                     
              Application.ProcessMessages;                                      
              Wait(50);
            end;
Antidelphik_) вне форума Ответить с цитированием
Старый 27.04.2011, 21:17   #3
Antidelphik_)
Пользователь
 
Регистрация: 22.03.2011
Сообщений: 29
По умолчанию

Код:
 //  Âêëþ÷àåì çåëåíûé, ãîðèì 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_) вне форума Ответить с цитированием
Старый 27.04.2011, 21:18   #4
Antidelphik_)
Пользователь
 
Регистрация: 22.03.2011
Сообщений: 29
По умолчанию

Код дюже здоровый поэтому в 3 куска кидать пришлось
Antidelphik_) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП kiss2 Помощь студентам 4 16.06.2010 10:31
ООП RABERT Общие вопросы C/C++ 3 18.12.2009 20:32
ООП VladimirVB Общие вопросы Delphi 4 18.11.2009 22:51
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55