Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie kann ich einen Aufzählungstyp einer Komponente zuweisen? (https://www.delphipraxis.net/145321-wie-kann-ich-einen-aufzaehlungstyp-einer-komponente-zuweisen.html)

Aurus 29. Dez 2009 18:25


Wie kann ich einen Aufzählungstyp einer Komponente zuweisen?
 
Hallo Leute

Ich habe ein Komponente für die RS232-Schnittstelle.

Nurn muss ich der Komponente während der Laufzeit die Baudrate zuweisen.
Leider geht es nicht so wie ich es gemacht habe. Der Type "TBaudrate" ist genau so im Source der Komponete definiert.

Was mache ich falsch?


Mit freudlichen Grüssen

Aurus




Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
  // Übertragungsparameter
  TBaudrate  = (br_000050,br_000110,br_000150,br_000300,br_000600,br_001200,
                 br_002400,br_004800,br_009600,br_014400,br_019200,br_038400,
                 br_056000,br_057600,br_115200,br_128000,br_230400,br_256000,
                 br_460800,br_921600);
var
  aaa :TBaudrate;
begin

  aaa :=br_000050;
  K6NSerial1.Baudrate := aaa;

end;

end.
[edit=Matze][delphi]-Tags eingefügt. Zukünftig bitte selbst daran denken. MfG, Matze[/edit]

Matze 29. Dez 2009 18:29

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Hallo Aurus,

was heißt denn "geht nicht"?

Wenn "K6NSerial1.Baudrate" vom Typ TBaudrate ist, müsste es gehen. Allerdings hast du in deinem Beispiel TBaudrate nur lokal definiert. Du musst es dort definieren, wo die Sichtbarkeit gewährleistet ist, beispielsweise in der zu "K6NBaudrate" zugehörigen Klasse.

Grüße, Matze

mjustin 29. Dez 2009 18:33

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Zitat:

Zitat von Aurus
Nurn muss ich der Komponente während der Laufzeit die Baudrate zuweisen.
Leider geht es nicht so wie ich es gemacht habe. Der Type "TBaudrate" ist genau so im Source der Komponete definiert.

Man muss den Typ nicht neu definieren, sondern braucht einfach nur die Unit einbinden, in der der Typ TBaudrate definiert ist.

Viele Grüße,
Michael

himitsu 29. Dez 2009 18:35

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Nein, er muß die Definition nutzen, mit welcher auch K6NSerial1.Baudrate deklariert wurde.

Ansonsten sind es unterschiedliche Typen und demnach nicht zuweisungskompatibel.

Zitat:

Der Type "TBaudrate" ist genau so im Source der Komponete definiert.
"genauso" ist nicht "identisch" und Delphi besteht auf identische Deklarationen.

PS: Nur weil mein Clon genauso aussieht wie ich, sind wir nicht die Selben.

Aurus 29. Dez 2009 18:48

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Hallo Leute

Das verstehe ich jetzt alles nicht ganz.

Ich bekomme die Fehlermeldung.

[Fehler] Unit1.pas(41): Inkompatible Typen: 'K6NSerial.TBaudrate' und 'Unit1.TBaudrate'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

himitsu 29. Dez 2009 18:52

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Zitat:

Zitat von Aurus
[Fehler] Unit1.pas(41): Inkompatible Typen: 'K6NSerial.TBaudrate' und 'Unit1.TBaudrate'

Zitat:

Zitat von himitsu
Nein, er muß die Definition nutzen, mit welcher auch K6NSerial1.Baudrate deklariert wurde.

Ansonsten sind es unterschiedliche Typen und demnach nicht zuweisungskompatibel.

Zitat:

Der Type "TBaudrate" ist genau so im Source der Komponete definiert.
"genauso" ist nicht "identisch" und Delphi besteht auf identische Deklarationen.

PS: Nur weil mein Clon genauso aussieht wie ich, sind wir nicht die Selben.


Matze 29. Dez 2009 18:54

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Du nutzt auch 2 verschiedenen TBaudrate. Wie gesagt darfst du das nur einmal definieren.

Deine Klasse könnte so aussehen:

Delphi-Quellcode:
unit K6NSerial;

interface

type TK6NSerial = class

  public type TBaudrate = (
    br_000050, br_000110, br_000150, br_000300, br_000600, br_001200,
    br_002400, br_004800, br_009600, br_014400, br_019200, br_038400,
    br_056000, br_057600, br_115200, br_128000, br_230400, br_256000,
    br_460800, br_921600
  );

  public
    Baudrate: TBaudrate;
end;

implementation

// ...

end.
Nun hast du TBaudrate in der Klasse definiert. Ich finde das sinnvoll, da es funktional zur Klasse gehört.
Von außen musst du nun exakt diese Definition verwenden.

Das kann so aussehen:

Delphi-Quellcode:
uses K6NSerial;

procedure TForm1.Button1Click(Sender: TObject);
var
  M6NSerial1: TK6NSerial;
  MyBR: TK6NSerial.TBaudrate;
begin
  M6NSerial1 := TK6NSerial.Create;
  // ...
  MyBR := br_000110;
  M6NSerial1.Baudrate := MyBR;
  // ...
end;
Dann hast du TBaudrate ein einziges mal definiert und verwendet exakt diese Definition überall.

Grüße, Matze

Aurus 29. Dez 2009 20:45

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Das übersteigt meine Programmierkentnisse.

Sehe ich das Richti,g dass ich die Komponente ändern muss?

Oder muss ich einen Unit "unit K6NSerial" anlegen die gleich heisst wie die Komponente (TK6NSerial)?

olee 29. Dez 2009 20:52

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Also,

Erstmal schmeißt du diese Kopie von TBaudrate aus deinem Code raus, da du genau diese KOPIE nicht verwenden darfst.

Denn wie schon gesagt wurde ist das zwar eine Kopie und für jeden normalen menschen ein und das selbe wie das Original,
aber für Delphi sind diese kopie und das Original 2 verschiedene Sachen, da es die beiden nicht wirklich vergleicht, ob die nun denn gleich sind.

Also wie gesagt schmeiß diese Kopie raus und verwende das Original - also das, wo du es rauskopiert hast.

MFG

Aurus 29. Dez 2009 21:34

Re: Wie kann ich einen Aufzählungstyp einer Komponente zuwei
 
Das ist die Lösung

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyBr :TBaudrate;
begin

  MyBr :=br_000050;
  K6NSerial1.Baudrate := MyBr;

end;
So einfach war die Sache. Komisch dass mir das nicht vorher eingefallen ist.

Danke für eure Hilfe

Gruss

Aurus

[edit=Matze]Und wieder die [delphi]-Tags vergessen ... MfG, Matze[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz