Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Aufbau eigene Klasse mit Property und TStrings

  Alt 30. Dez 2010, 15:23
Danke erstmal,
Zitat von r2c2:
Zitat von Jens:
Desweiteren würde ich mal gerne wissen, ob ich über die Property nicht auch einen Record übergeben kann. Dies wäre den Daten die ich übergeben will näher.
Ja das geht und ist manchmal sogar sinnvoll. Meistens eben da, wo die Records Wertetypen darstellen. Tun sie das nicht, denkst du vermutlich noch zu prozedural.
So, ich habe mal die Klasse angepasst. Zumindest den Constructor und Destructor. In die Klasse kommen später noch einigen Methoden zum Parsen von Ereignissen.
Delphi-Quellcode:
unit mb100parser;

interface

  type
    ComPortProperties = record
      Baudrate, Parität, Flow, Start, Stop, Stopbit, Databit: string;
      CaseInsensitiv, Include : Boolean;
  end;

  type
    TMB100 = class
      Constructor create;
      Destructor destroy; override;
    private
      FComPortProperties : ComPortProperties;
    public
      property ComPort : ComPortProperties read FComPortProperties;
    end;

implementation

Constructor TMB100.create;
begin
  inherited;
  FComPortProperties.Baudrate := '19200';
  FComPortProperties.Parität := 'None';
  FComPortProperties.Flow := 'Hardware';
  FComPortProperties.Start := 'Ereignis';
  FComPortProperties.Stop := #$D#$A#$A;
  FComPortProperties.Databit := '8';
  FComPortProperties.Stopbit := '1';
  FComPortProperties.CaseInsensitiv := true;
  FComPortProperties.Include := true;
end;

Destructor TMB100.destroy;
begin
  inherited;
end;
Zur Zeit nutze ich die Klasse über das Datenmodul. Dieses Datenmodul will ich ja später in die Service-Anwendung integrieren. Hier mal der Aufruf im Datenmodul.

Delphi-Quellcode:
function TDataModuleServer.SetComPort(Hardware, Port : integer) : Boolean;
var
  FMB100 : TMB100;
begin
  try
    Result := false;
    case Hardware of
      0:
        begin
          FMB100 := TMB100.create;
          case Port of
            1: begin
              if ComPortAvailable('COM1') then
                begin
                  ComPort1.Port := 'COM1';
                  ComPort1.BaudRate := StrToBaudRate(FMB100.ComPort.Baudrate);
                  ComPort1.Parity.Bits := StrToParity(FMB100.ComPort.Parität);
                  ComPort1.FlowControl.FlowControl := StrToFlowControl(FMB100.ComPort.Flow);
                  ComPort1.StopBits := StrToStopBits(FMB100.ComPort.Stopbit);
                  ComPort1.DataBits := StrToDataBits(FMB100.ComPort.Databit);
                  ComDataPacket1.StartString := FMB100.ComPort.Start;
                  ComDataPacket1.StopString := FMB100.ComPort.Stop;
                  ComDataPacket1.CaseInsensitive := FMB100.ComPort.CaseInsensitiv;
                  ComDataPacket1.IncludeStrings := FMB100.ComPort.Include;
                  ComPort1.Open;
                  if ComPort1.Connected then
                    Result := true;
                end;
            end;
//.....
  finally
    FMB100.Free;
  end;
end;
Ist der Weg so richtig?

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat