Einzelnen Beitrag anzeigen

SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Noch mal zu neuen Komponenten - Neue Events - Methoden

  Alt 29. Aug 2017, 16:17
Ich kämpfe mich weiter voran..

Ich möchte in meiner neuen Komponente eine procedure "Starten einfügen" dazu sollen einige
bool-Variablen übernommen werden.

Ich habe es mir mal so gedacht (bzw. abgeschrieben ),

Delphi-Quellcode:
unit Elevator;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls;


type
  TElevatorStart = procedure (var starten,motorschutz,stern_ein,
          dreieck_ein,motor_ein,schief_oben,schief_unten,drehzahl: boolean) of object;

  TElevator = class(TGraphicControl)
  private
    { Private-Deklarationen }

    //Eingänge nur lesen

    FAdr_Motorschutz: Integer;
.......
.......
 
   
    //Ausgänge lesen und schreiben
    FStart:Boolean;
........
........
    FDoStart :TElevatorStart;

  protected
    { Protected-Deklarationen }

    procedure Paint; override;


  public
    { Public-Deklarationen }

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;


  published
    { Published-Deklarationen }
    //hiermit wird das im Obkektinspektor angezeigt

  
    property Meldung_Motorschutz: boolean read FMeldung_Motorschutz write FMeldung_Motorschutz;
    property Meldung_Motor_Ein : boolean read FMeldung_Motor_Ein write FMeldung_Motor_Ein;
    property Meldung_Stern_Ein : boolean read FMeldung_Stern_Ein write FMeldung_Stern_Ein;
    property Meldung_Dreieck_Ein : boolean read FMeldung_Dreieck_Ein write FMeldung_Dreieck_Ein;
    property Meldung_Schief_o : boolean read FMeldung_Schief_o write FMeldung_Schief_o;
    property Meldung_Schief_u : boolean read FMeldung_Schief_u write FMeldung_Schief_u;
    property Meldung_Drehzahl : boolean read FMeldung_Drehzahl write FMeldung_Drehzahl;

    //Methoden
    property dostart : TElevatorStart read FDOStart write FDOStart;

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('SPS', [TElevator]);
end;

constructor TElevator.Create(AOwner: TComponent);
begin
  inherited;
  FStart := true;

end;

destructor TElevator.Destroy;
begin
  // Hier deine Freigaben
  inherited;
end;

procedure TElevator.Paint;
begin
  inherited;
end;

procedure TElevator.dostart(var starten,motorschutz,stern_ein,
          dreieck_ein,motor_ein,schief_oben,schief_unten,drehzahl: boolean);
begin
  FStart := starten;
  FMeldung_Motorschutz := motorschutz;
  FMeldung_Motor_Ein := motor_ein;
  FMeldung_Stern_Ein := stern_ein;
  FMeldung_Dreieck_Ein := dreieck_ein;
  FMeldung_Schief_o:= schief_oben;
  FMeldung_Schief_u:= schief_unten;
  FMeldung_Drehzahl:= drehzahl;
end;
ganz unten bei Starten kommt : "Starten unterscheidet sich von vorheriger Deklaration" und
er meldet meine ganzen Variablen F.... als undeklariert

Ok, hier ist ein bisschen was durcheinander gekommen mit der Deklaration . Wenn es nicht notwendig ist, das die "dostart"-procedure von außen überschrieben wird, ist es nicht nötig hier mit procedure of object und property zu arbeiten.

Zu beginn reicht sicher diese Variante:

Delphi-Quellcode:
unit Elevator;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls;


type
  TElevator = class(TGraphicControl)
  private
    { Private-Deklarationen }

    //Eingänge nur lesen

    FAdr_Motorschutz: Integer;
.......
.......
 
   
    //Ausgänge lesen und schreiben
    FStart:Boolean;
........
........
    FDoStart :TElevatorStart;

  protected
    { Protected-Deklarationen }

    procedure Paint; override;


  public
    { Public-Deklarationen }

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    
    procedure DoStart(var starten, motorschutz, stern_ein, dreieck_ein, motor_ein, schief_oben, schief_unten, drehzahl: Boolean);

  published
    { Published-Deklarationen }
    //hiermit wird das im Obkektinspektor angezeigt

  
    property Meldung_Motorschutz: boolean read FMeldung_Motorschutz write FMeldung_Motorschutz;
    property Meldung_Motor_Ein : boolean read FMeldung_Motor_Ein write FMeldung_Motor_Ein;
    property Meldung_Stern_Ein : boolean read FMeldung_Stern_Ein write FMeldung_Stern_Ein;
    property Meldung_Dreieck_Ein : boolean read FMeldung_Dreieck_Ein write FMeldung_Dreieck_Ein;
    property Meldung_Schief_o : boolean read FMeldung_Schief_o write FMeldung_Schief_o;
    property Meldung_Schief_u : boolean read FMeldung_Schief_u write FMeldung_Schief_u;
    property Meldung_Drehzahl : boolean read FMeldung_Drehzahl write FMeldung_Drehzahl;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('SPS', [TElevator]);
end;

constructor TElevator.Create(AOwner: TComponent);
begin
  inherited;

  FStart := true;

end;

destructor TElevator.Destroy;
begin
  // Hier deine Freigaben
  inherited;
end;

procedure TElevator.Paint;
begin
  inherited;
end;

procedure TElevator.DoStart(var starten,motorschutz,stern_ein,
          dreieck_ein,motor_ein,schief_oben,schief_unten,drehzahl: boolean);
begin
  FStart := starten;
  FMeldung_Motorschutz := motorschutz;
  FMeldung_Motor_Ein := motor_ein;
  FMeldung_Stern_Ein := stern_ein;
  FMeldung_Dreieck_Ein := dreieck_ein;
  FMeldung_Schief_o:= schief_oben;
  FMeldung_Schief_u:= schief_unten;
  FMeldung_Drehzahl:= drehzahl;
end;

//änderungen sind ungetestet
Weiters solltest du sicher stellen, dass deine Member-Variablen initialisiert werden. Aktuell ist nicht gesichert was nach dem Create zB in "FMeldung_Motor_Ein" steht.
  Mit Zitat antworten Zitat