Avatar billede poull Nybegynder
03. februar 2001 - 22:48 Der er 9 kommentarer og
2 løsninger

Klasser i en component

Hej

jeg har laven en komponent (eller rettere er ved) der har nogle variabler der selvfølgeli g bliver håndteret med properties, men de variabler jeg har er en anden klasse med dens eget indhold. Når jeg installere den optræder variabler over i objectinspectoren som forventet, men når jeg klikker på plusset udfor siger den: \"Unable to expand\". Er der noget jeg har glemt at create.

Skriv lige hvis i behøver mere information eller forklaring.
Avatar billede pstric Nybegynder
03. februar 2001 - 23:07 #1
Hvor har du defineret den anden klasse, i implementationsdelen?
Avatar billede poull Nybegynder
04. februar 2001 - 10:06 #2
De er defineret overordnet i uniten, så de gælder i hele componenten. Så de er defineret under interface delen.
Avatar billede speedy Nybegynder
04. februar 2001 - 11:19 #3
Hej, poull & jeg arbejder sammen om dette, og vi ville lige vise toppen af pas-filen hvis det er til nogen hjælp.

--Start af kode--

type
  TChangeEvent = procedure(Sender: TObject; Reseted: Boolean) of object;

  TSide = class
    Vis: Boolean;
    VisEtiket: Boolean;
  private
    FValue: Extended;
    FFont: TFont;
    FPen: TPen;
    procedure SetFont(const Value: TFont);
    procedure SetPen(const Value: TPen);
    procedure SetValue(const Value: Extended);
  public
    constructor Create;
  published
    property Value: Extended read FValue write SetValue;
    property Pen: TPen read FPen write SetPen;
    property Skrifttype: TFont read FFont write SetFont;
  end;

  TVinkel = class
    VisEtiket: Boolean;
  private
    FValue: Extended;
    FFont: TFont;
    procedure SetFont(const Value: TFont);
    procedure SetValue(const Value: Extended);
  public
    constructor Create;
  published
    property Value: Extended read FValue write SetValue;
    property Skrifttype: TFont read FFont write SetFont;
  end;

  TAreal = class
    VisEtiket: Boolean;
  private
    FValue: Extended;
    FFont: TFont;
    procedure SetFont(const Value: TFont);
    procedure SetValue(const Value: Extended);
  public
    constructor Create;
  published
    property Value: Extended read FValue write SetValue;
    property Skrifttype: TFont read FFont write SetFont;
  end;

  TTrekantCom = class(TComponent)
  private
    FSidea: TSide;
    FSideb: TSide;
    FSidec: TSide;
    FVinkelA: TVinkel;
    FVinkelB: TVinkel;
    FVinkelC: TVinkel;
    FAreal: TAreal;
    FOnSideaChange: TChangeEvent;
    FOnVinkelAChange: TChangeEvent;
    FOnSidecChange: TChangeEvent;
    FOnArealChange: TChangeEvent;
    FOnVinkelBChange: TChangeEvent;
    FOnVinkelCChange: TChangeEvent;
    FOnSidebChange: TChangeEvent;
    function GetTrekantBillede: TBitmap;
    procedure SetAreal(const Value: TAreal);
    procedure SetSidea(const Value: TSide);
    procedure SetSideb(const Value: TSide);
    procedure SetSidec(const Value: TSide);
    procedure SetVinkelA(const Value: TVinkel);
    procedure SetVinkelB(const Value: TVinkel);
    procedure SetVinkelC(const Value: TVinkel);
  protected
    function Potens(Root, Exponent: Integer): Integer;
    function RoundFloat(Float: Extended; Digits: Byte): Extended;
    function DegToRad(Deg: Extended): Extended;
    function RadToDeg(Rad: Extended): Extended;
    function RotatePoint(Centrum, Punkt: TPoint; Grader: Extended): TPoint;
    procedure Fejl(Tekst: String);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Free;
    property TrekantBillede: TBitmap read GetTrekantBillede;
    procedure Beregn;
    procedure ResetTal;
    procedure ResetAlt;

  published
    property Sidea: TSide read FSidea write SetSidea;
    property Sideb: TSide read FSideb write SetSideb;
    property Sidec: TSide read FSidec write SetSidec;
    property VinkelA: TVinkel read FVinkelA write SetVinkelA;
    property VinkelB: TVinkel read FVinkelB write SetVinkelB;
    property VinkelC: TVinkel read FVinkelC write SetVinkelC;
    property Areal: TAreal read FAreal write SetAreal;
    property OnSideaChange: TChangeEvent read FOnSideaChange write FOnSideaChange;
    property OnSidebChange: TChangeEvent read FOnSidebChange write FOnSidebChange;
    property OnSidecChange: TChangeEvent read FOnSidecChange write FOnSidecChange;
    property OnVinkelAChange: TChangeEvent read FOnVinkelAChange write FOnVinkelAChange;
    property OnVinkelBChange: TChangeEvent read FOnVinkelBChange write FOnVinkelBChange;
    property OnVinkelCChange: TChangeEvent read FOnVinkelCChange write FOnVinkelCChange;
    property OnArealChange: TChangeEvent read FOnArealChange write FOnArealChange;
  end;


--slut på kode--

/SpEeDy & poull
Avatar billede martinlind Nybegynder
04. februar 2001 - 12:40 #4
Hej I to, problemet er at i ikke har nedarvet fra det rigtige, i skal nedarve fra min. TPersistent, da det er her fra delphi impl. designtime-streaming, og det er så kun published prop\'s der bliver vist og kun hvis de er read/write, hvis property\'en ikke er en kendt type skal i selv skrive en editor til den. men det kan i læse meget mere om i online hjælpen.

/Martin
Avatar billede speedy Nybegynder
04. februar 2001 - 14:22 #5
martinlind >>
Skal man virkelig til at lave sin egen editor når der ikke oprette et vist antal sider osv. dynamisk men at du fra start ved at der kun er tre. Det jeg ønskede mig var at man kunne udvide det ligesom en en font og derefter redigerer dens properties.
Avatar billede martinlind Nybegynder
04. februar 2001 - 15:00 #6
Det var også det jeg mente ( og forsøgte at skrive ), hvis din sub-class er nedarvet fra TPersistent vil der forekomme et plus som udvider objectinspect., det jeg skrev var at hvis du har en property type der ikke er standart så må du selv igang med en editor, men delphi kender jo alle sine egne type og klasser ( TFont osv. )

/Martin
Avatar billede poull Nybegynder
08. februar 2001 - 20:39 #7
Jeg kan ikke compilerer når jeg nedarver fra TPersistent, for så siger den fejl i denne

Procedure register;
begin
  RegisterComponents(\'Sampels\', [TrekantCom]);
end;

og fejlen er: \"incompatible types: TComponentclass and class reference\"
Avatar billede poull Nybegynder
07. marts 2001 - 09:01 #8
martinlind >>

Hvis du kan hjælpe mig af med den sidst fejl der opstår af det du sagde skla du nok få pointene
Avatar billede poull Nybegynder
12. marts 2001 - 11:52 #9
Nå men jeg lukker dette spg
Avatar billede poull Nybegynder
12. marts 2001 - 11:54 #10
jeg giver 15 til martinlind for han hjalp mig trods alt halvt på vej.
Avatar billede martinlind Nybegynder
12. marts 2001 - 12:03 #11
Poull >> 15 point er sku noget fedet.

fejl kode :

TComponentclass and class reference

TComponentClass = er def. a Klassen (TTrekantCom)

Class ref. = er Klasse var\'en (TrekantCom)

eks.

Procedure register;
begin
  RegisterComponents(\'Sampels\', [TTrekantCom]);
end;

Læs hjælpen og fejlen en extra gang, så er der mange ting der gi\'r sig selv.

Og så lige en ting mere Register proceduren er a uransaglige årsager Casesensitive hvilket betyder at du helst skal skrive Register med stort \"R\"
da du ellers løber ind i at nogle ver. af delphi ikke kan finde den med lille \"r\".
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester