Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String als default bei propertys ??? (https://www.delphipraxis.net/74482-string-als-default-bei-propertys.html)

EDatabaseError 3. Aug 2006 20:35


String als default bei propertys ???
 
Delphi-Quellcode:
    property ComPort: String read VComPort write SetComPort default DefaultComPort;
    property Parity: String read VParity write SetParity default DefaultParity;
    property Databits: Integer read VDatabits write SetDatabits default DefaultDatabits;
    property Stopbits: Integer read VStopbits write SetStopbits default DefaultStopbits;
Bei den ersten 2 mekert der Compiler das es Ordinale, Pointer oder SmallSet sein müssen.
Wie kann ich dann den default bei strings definieren???

Mfg
Tobi

Hansa 3. Aug 2006 20:52

Re: String als default bei propertys ???
 
strings :

'0' 'x' 'dijfjfsöafjdsklfdskaös'

:P

mkinzler 3. Aug 2006 20:53

Re: String als default bei propertys ???
 
Zitat:

Wie kann ich dann den default bei strings definieren???
So garnicht. Du könntest aber in der OnCreate den Default-Wert in der privaten Variable setzten.

JasonDX 3. Aug 2006 20:55

Re: String als default bei propertys ???
 
Zitat:

Zitat von EDatabaseError
Wie kann ich dann den default bei strings definieren???

*OH öffnet*
Tada...
Zitat:

The default and nodefault directives are supported only for ordinal types and for set types
und ein string ist nunmal kein ordinaler Typ ;)
Zu Deutsch: Im Konstruktor händisch zuweisen, anders dürfts ned gehn.

@Hansa: :thumb: :roll: :wall:

greetz
Mike

EDatabaseError 3. Aug 2006 20:56

Re: String als default bei propertys ???
 
:wiejetzt:

Nommal meine Frage: Wie kann ich einen Default im Stringformat erstellen? Sodass in der Kompo im OI bei Comport standatirisiert Com1 drinsteht.

Zitat:

Zitat von mkinzler
Zitat:

Wie kann ich dann den default bei strings definieren???
So garnicht. Du könntest aber in der OnCreate den Default-Wert in der privaten Variable setzten.

ein beispiel wäre net

Zitat:

Zitat von JasonDX
Zitat:

Zitat von EDatabaseError
Wie kann ich dann den default bei strings definieren???

*OH öffnet*
Tada...
Zitat:

The default and nodefault directives are supported only for ordinal types and for set types
und ein string ist nunmal kein ordinaler Typ ;)
Zu Deutsch: Im Konstruktor händisch zuweisen, anders dürfts ned gehn.

@Hansa: :thumb: :roll: :wall:

greetz
Mike

muss ja noch ne andere möglichkeit geben

Dax 3. Aug 2006 20:57

Re: String als default bei propertys ???
 
Ich glaube, du gehst den falschen Weg ;) Wieso willst für diese Eigenschaften denn String-Properties? Sind doch eigentlich Integer. Im OI wird sowieso alles als string dargestellt.
Solltest du aber unbedingt strings haben wollen, musst du die Werte im Konstruktor zuweisen.

@Hansa: nimm dir bitte mal fkerber's Avatar zu Herzen.

mkinzler 3. Aug 2006 20:57

Re: String als default bei propertys ???
 
Für strings gibt es nunmal keine defaults.

EDatabaseError 3. Aug 2006 20:58

Re: String als default bei propertys ???
 
Zitat:

Zitat von Dax
Ich glaube, du gehst den falschen Weg ;) Wieso willst für diese Eigenschaften denn String-Properties? Sind doch eigentlich Integer. Im OI wird sowieso alles als string dargestellt.
Solltest du aber unbedingt strings haben wollen, musst du die Werte im Konstruktor zuweisen.

@Hansa: nimm dir bitte mal fkerber's Avatar zu Herzen.

wie willst du Com1 in nen Integer packen ;-)
Wie geht das mit dem Constructor???

//EDIT Bei Labels steht ja in der Caption standarisiert auch Label1 drin ;-)

CK_CK 3. Aug 2006 21:00

Re: String als default bei propertys ???
 
Deine Komponente hat doch bestimmt eine OnCreate-Prozedur, oder?

Und da schreibst du einfach rein:
Delphi-Quellcode:
Port:= 'Com1';
Eine andere Möglichkeit wäre eine Variable dieses Typs (statt String):
Delphi-Quellcode:
type
  TPort = (Com1,Com2,Com3);

Dax 3. Aug 2006 21:01

Re: String als default bei propertys ???
 
Delphi-Quellcode:
type
  MyComponent = class(TComponent)
  private
    fPort: string;
  public
    property Port: ... ;
    constructor Create; override;
  end;

implementation

constructor MyComponent.Create;
begin
  inherited Create;
  fPort := 'com1';
end;
@CK_CK: OnCreate ist ein Event von TForm und noch paar andren Klassen, wenn ich mich nich irre... Meinst du AfterConstruction?

mkinzler 3. Aug 2006 21:01

Re: String als default bei propertys ???
 
Zitat:

Wie geht das mit dem Constructor???
Delphi-Quellcode:
if VCommPort = '' then VComport := 'Defaultwert';

EDatabaseError 3. Aug 2006 21:01

Re: String als default bei propertys ???
 
Zitat:

Zitat von CK_CK
Deine Komponente hat doch bestimmt eine OnCreate-Prozedur, oder?

Und da schreibst du einfach rein:
Delphi-Quellcode:
Port:= 'Com1';
Eine andere Möglichkeit wäre eine Variable dieses Typs (statt String):
Delphi-Quellcode:
type
  TPort = (Com1,Com2,Com3);

:oops: Das ist meine erste Componente... nein ich hab kein oncreate
es sollten schon strings sein

CK_CK 3. Aug 2006 21:02

Re: String als default bei propertys ???
 
Zitat:

Zitat von Dax
@CK_CK: OnCreate ist ein Event von TForm und noch paar andren Klassen, wenn ich mich nich irre... Meinst du AfterConstruction?

Nein, ich meinte die überschriebene Create-Prozedur, hab' mich falsch ausgedrückt... (dein Code ist genau, was ich meinte...)

@EDatabaseError: Füge einfach Dax's Code ein (das mit dem Constructor und Create...)

SirThornberry 3. Aug 2006 21:09

Re: String als default bei propertys ???
 
die "Default" directive bestimmt nicht welchen Wert das Propertie nach dem erstellen hat.
Das "Default" dient dazu das Properties nicht in der DFM gespeichert werden wenn Sie eben diesen Wert haben.

Wenn du willst das nach dem erstellen, die komponente bestimmte Wert hat, musst du den Constructor überschreiben und darin die Werte setzen. Und wie das geht solltest du in jedem ordentlichen oop-Tutorial lernen. Es hier zu posten bringt nix weil dir eben diese Grundlagen fehlen und somit nur weitere Fragen auftauchen würden welche mit einem ordentlichen Tutorial in 5 Minuten geklärt werden.
Und so ein Tutorial gibts auf: http://www.dsdt.info/tutorials/crashkurs/?page=8

EDatabaseError 3. Aug 2006 21:10

Re: String als default bei propertys ???
 
Delphi-Quellcode:
unit EDEComPort;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Dialogs;

const
  DefaultComPort = 'Com1';
  DefaultDataBits = 8;
  DefaultStopBits = 1;
  DefaultParity = 'none';

type
  TEDEComPort = class(TComponent)
  private
    { Private-Deklarationen }
    VComPort: String;
    VParity: String;
    VDataBits: Integer;
    VStopBits: Integer;

    procedure SetComPort(Value: String);
    procedure SetParity(Value: String);
    procedure SetDatabits(Value: Integer);
    procedure SetStopbits(Value: Integer);
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create; override;   //<- Dekleration "Create" unterscheidet sich von vorheriger Dekleration

    function Open : Boolean;
    function Close : Boolean;
    procedure TX(Data: String);
    function RX : String;

    property ComPort: String read VComPort write SetComPort;
    property Parity: String read VParity write SetParity;
    property Databits: Integer read VDatabits write SetDatabits default DefaultDatabits;
    property Stopbits: Integer read VStopbits write SetStopbits default DefaultStopbits;
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Tobias Hocke Software', [TEDEComPort]);
end;

constructor TEDEComPort.Create;
begin
  inherited Create;                     //<- Nicht genügend wirkliche Parameter
  ComPort := DefaultComPort;
end;
Schaut euch mal den Code an :cry:

mkinzler 3. Aug 2006 21:12

Re: String als default bei propertys ???
 
Zitat:

constructor Create( AOwner: TComponent); override;
Properties gehören in den published Abschnitt

SirThornberry 3. Aug 2006 21:15

Re: String als default bei propertys ???
 
@EDataBaseError: Wenn du eine Methode überschreibst musst diese die gleichen Parameter haben wie die originale. Ansonsten wäre ja unklar wie die überschriebene Methode aufgerufen wird wenn jemand die Methode der Basisklasse aufruft.

EDatabaseError 3. Aug 2006 21:16

Re: String als default bei propertys ???
 
danke :thumb:

Hansa 4. Aug 2006 00:10

Re: String als default bei propertys ???
 
Bevor ich hier noch zerrissen werde : wenn string so nicht geht, dann orientiere Dich doch an AsyncPro. Die benutzen einen Aufzählungstyp (Com1,Com2...Com16...) Nacht.

SirThornberry 4. Aug 2006 07:39

Re: String als default bei propertys ???
 
String geht indirekt auch. Mann muss dort nur den Umweg über stored gehen. Also eine Funktion schreiben die zurück gibt ob default oder nicht.

EDatabaseError 4. Aug 2006 08:43

Re: String als default bei propertys ???
 
Ich kann (will) eben keinen Typ wie Com1,Com2 haben da:
Es mich selbst stört wenn ich die Konfiguration in einer Datei oder so speichern will ;-) Da kann man schlecht ganze Typen drinne aufheben. Deshalb ist 'Com1' dafür besser geeignet ;-)

Bitte schauts euch die Komponente auch mal an :angel:
http://www.delphipraxis.net/internal...ct.php?t=89211


Mfg
Tobi

jbg 4. Aug 2006 11:44

Re: String als default bei propertys ???
 
Zitat:

Zitat von EDatabaseError
Es mich selbst stört wenn ich die Konfiguration in einer Datei oder so speichern will ;-)

Dann typecaste den Typ doch in einen Integer und schreibe den in die Konfigurationsdatei.

Übrigens, das default bei Properties bedeutet nicht, dass die Eigenschaft automatisch diesen Wert bekommt. Es bedeutet, dass das Streaming-System dieses Property nicht in die DFM Datei schreibt, wenn der Wert der Eigenschaft dem default-Wert entspricht.

EDatabaseError 4. Aug 2006 11:47

Re: String als default bei propertys ???
 
Zitat:

Zitat von jbg
Zitat:

Zitat von EDatabaseError
Es mich selbst stört wenn ich die Konfiguration in einer Datei oder so speichern will ;-)

Dann typecaste den Typ doch in einen Integer und schreibe den in die Konfigurationsdatei.

Übrigens, das default bei Properties bedeutet nicht, dass die Eigenschaft automatisch diesen Wert bekommt. Es bedeutet, dass das Streaming-System dieses Property nicht in die DFM Datei schreibt, wenn der Wert der Eigenschaft dem default-Wert entspricht.

:? jo. Ist ansichtssache ;-)

Das hab ich auch festgestellt ;-) Mach ich jetzt im constructor create.

Mfg
Tobi


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.

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