Дайте совет по разработке класса.

gera3323
Дата: 18.02.2014 08:00:16
Есть OLE сервер, это сервер работает с 4я светофорами. Надо создать единый интерфейс для работы с ними.

Получение флагов светофора(какой цвет включен, включен ли вообще светофор).
Переключение цвета светофора.


Дайте подобный материал, статью, теорию.

Или пример


Спасибо заранее.
zubilow
Дата: 18.02.2014 08:20:32
1> Есть OLE сервер, это сервер работает с 4я светофорами.
2> Надо создать единый интерфейс для работы с ними.

эти параграфы противоречат друг другу: если сервер уже есть, у него уже есть какой-то интерфейс!

> Дайте подобный материал, статью, теорию.

вам вместе с заданием список литературы разве не давали?
а погуглить?
http://www.helloworld.ru/texts/comp/lang/delphi/delphi1/les22.htm
http://rutracker.org/forum/viewtopic.php?t=979303
совет по разработке класса
Дата: 18.02.2014 08:29:49
Guest2013
Дата: 18.02.2014 11:01:40
gera3323,

если опустить слова по поводу OLE сервера:

То класс можно описать примерно так:
+

unit USvetofor;

interface

uses
  Forms,
  Classes,
  Graphics,
  ExtCtrls;

type
  svColor = (Red = clRed, Yelow = clYellow, Green = clGreen);
  TSvetofor = class
  private
    FTimer: TTimer;
    FColor: svColor;
    FLastColor: svColor;
    FEnabled: Boolean;
    FOnChange: TNotifyEvent;
    procedure SetColor(const Value: svColor);
    procedure SetEnabled(const Value: Boolean);
    procedure OnTimer(Sender: TObject);
  protected
    procedure DoChange(Sender: TObject);
  public
    constructor Create; 
    destructor Destroy; override;
    property Color: svColor read FColor write SetColor;
    property Enabled: Boolean read FEnabled write SetEnabled;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

implementation

uses SysUtils;

{ Svetofor }

constructor TSvetofor.Create;
begin
  inherited;
  FTimer := TTimer.Create(Application);
  FTimer.Interval := 3000; //тут у нормальных светофоров обычно ставят от минуты и больше 
  FTimer.Enabled := False;
  FTimer.OnTimer := OnTimer;
end;


destructor TSvetofor.Destroy;
begin
  Enabled := False;
  FreeAndNil(FTimer);
  inherited;
end;


procedure TSvetofor.DoChange(Sender: TObject);
begin
  if Assigned(FOnChange) then FOnChange(self);
end;


procedure TSvetofor.OnTimer(Sender: TObject);
begin
  if (Color = Red) or (Color = Green) then
    Color := Yelow
  else begin
    if FLastColor = Red then
      Color := Green
    else
      Color := Red;
  end;
end;


procedure TSvetofor.SetColor(const Value: svColor);
begin
  FLastColor := FColor;
  FColor := Value;
  DoChange(Self);
end;


procedure TSvetofor.SetEnabled(const Value: Boolean);
begin
  FEnabled := Value;
  FTimer.Enabled := Value;
  FColor := Red;
  DoChange(Self);
end;


А использовать примерно так:
+
type
  TForm1 = class(TForm)
    {...}
    Shape1: TShape;
    {...}
  private
    {...}
    ExcelApp: OLEVariant;
    FSvetofor: TSvetofor;
    procedure SvetoforChange(Sender: TObject);
    {...}
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  {...}
  FSvetofor := TSvetofor.Create;   //создаем светофор 
  FSvetofor.OnChange := SvetoforChange; //назначаем обработчик события
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  {...}
  FSvetofor.Enabled := True;  //включаем светофор
end;

procedure TForm1.SvetoforChange(Sender: TObject);
var cl: Integer;
begin
  cl := Integer((Sender as TSvetofor).Color);
  Shape1.Brush.Color := TColor(cl);
  Shape1.Repaint;
end;

Ну а уж какой там OLE сервер мне неведомо...
s62
Дата: 18.02.2014 11:06:04
zubilow
1> Есть OLE сервер, это сервер работает с 4я светофорами.
2> Надо создать единый интерфейс для работы с ними.

эти параграфы противоречат друг другу: если сервер уже есть, у него уже есть какой-то интерфейс!
Не противоречат, если вспомнить, что интерфейс - это способ взаимодействия и может означать например и тип данных (IUnknown и т.д.), и интерфейс пользователя. Я так предполагаю, что ТС нужно сделать интерфейс пользователя для работы с 4 светофорами. А у OLE севера есть другой интерфейс - COM-интерфейс. ))


автор
Дайте подобный материал, статью, теорию.

http://docwiki.embarcadero.com/RADStudio/XE5/en/Developing_COM-based_Applications_Index
Теория: http://www.delphikingdom.ru/lyceum/seminar.asp?ID=5