AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unterkategorien bei Komponenten

Ein Thema von s.h.a.r.k · begonnen am 25. Nov 2005 · letzter Beitrag vom 25. Nov 2005
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 07:08
Guten Morgen.

Und zwar habe ich mir ein paar Tutorials zum Theme Komponenten erstellen runtergeladen, durchgelesen und größtenteils verstanden. Nun stellt sich für mich aber die Frage, wie ich "Unterkategorien", wie zum Beispiel bei Font der Fall ist, erstelle. Leider habe ich dafür kein Bild, aber ich denke die Sachlage sollte bekannt sein.

Nun gut, ich habe es jedenfalls schon eine zweite Klasse erstellt und dort ebenso wie bei einer neuen Komponente Variablen eingetragen, sodass sie eigentlich im Objecktinspektor zu sehen sein sollten - aber das tun sie leider nicht und ich versteh nicht ganz wieso...

Ich hoffe ihr versteht mein Problem und könnt mir weiterhelfen! Ich wäre euch da sehr verbunden!!!

mfg shark
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 07:40
eigenschaften für den objectinspector müssen im objekt als published deklariert sein
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 07:57
das ist ja verständlich, nur will die Eigentschaften halt das so haben:

Code:
- Name: String;
- Tag: Integer;
+ Test
   - s1: String;
   - s2: Char;
   - s3: Integer;
- xyz: String;
Wie erstelle ich nun die Unterkategorie Test?!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 08:31
Geht das nicht automatisch, wenn du deklarierst:
Delphi-Quellcode:
class TAnything = class
        private
          FInt1, FInt2: integer;
          FStr: string;
        published
          property Int1: integer read FInt1 write FInt1;
          property Int2: integer read FInt2 write FInt2;
          property Str: string read FStr write FStr;
      end;
     
      FMyControl = class(<anyancestor>)
        private
          FTest: TAnything;
          procedure SetTest(Value: TAnything);
        published
          property Test: TAnything read FTest write SetTest;
      end;
Dazu noch zwei Dinge: Im SetTest musst du entweder statt Zuweisung mit := Assign benutzen, oder daran denken, die alte Instanz von FTest freizugeben, sonst hast du einen Haufen Speicherleichen.

Und UNBEDINGT im Konstruktor FTest erzeugen. Denn sonst hagelt es im Objektinspektor AccessViolations.

Schreib mal ob es so funktioniert hat.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 08:54
Diese Unterkategorien funktionieren nur mit eingebetten Objekten. Font ist zum Beispiel ein TFont Und immer schon an published denken.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 09:08
Zitat von tigerman33:
Dazu noch zwei Dinge: Im SetTest musst du entweder statt Zuweisung mit := Assign benutzen, oder daran denken, die alte Instanz von FTest freizugeben, sonst hast du einen Haufen Speicherleichen.

Und UNBEDINGT im Konstruktor FTest erzeugen. Denn sonst hagelt es im Objektinspektor AccessViolations.

Schreib mal ob es so funktioniert hat.
Also das klappt soweit ganz gut, nur versteh ich nicht ganz wie das mit Assign geht?! Als Parameter will er von mir einen TPersistent haben... Könntest du mit eventuell ein Beispiel posten?! danke
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 09:17
Oh ja sorry. Dazu müsste natürlich deine "Unterkategorie"-Klasse von TPersistent abgeleitet sein. Wenn du das nicht willst, vergiss einfach alles was ich zu Assign gesagt habe, und denk nur dran, die alte Instanz freizugeben.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 09:18
Vielleicht so
Delphi-Quellcode:
TAnything = class(TPersistent)
        private
          FInt1, FInt2: integer;
          FStr: string;
        public
          procedure Assign(Source: TPersistent); override;
        published
          property Int1: integer read FInt1 write FInt1;
          property Int2: integer read FInt2 write FInt2;
          property Str: string read FStr write FStr;
      end;

procedure TAnything.Assign(Source: TPersistent);
begin
  if Source is TAnything then
  begin
      TAnything(Source).Int1 := Int1;
      TAnything(Source).Int2 := Int2;
      TAnything(Source).Str := Str;
    Exit;
  end;
  inherited Assign(Source);
end;
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#9

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 11:15
Hey!
Mein Kollege hat grad ein Delphi 5 Kochbuch (oder wie das heißt) aufgetrieben und da stand die Lösnug meines Problems exakt drin:

Delphi-Quellcode:
type
  class TAnything = class
    private
      FInt1, FInt2: integer;
      FStr: string;
    published
      property Int1: integer read FInt1 write FInt1;
      property Int2: integer read FInt2 write FInt2;
      property Str: string read FStr write FStr;
  end;
     
  TMyControl = class(TComponent)
    private
      FTest: TAnything;
    public
      constructor Create(AOwner: TComponent); override;
      destructor Destroy;
    published
      property Test: TAnything read FTest write FTest;
  end;

...
implementation
...

constructor TMyControl.Create(AOwner: TComponent); override;
begin
  inherited Create(AOwner);
  FTest := TAnything.Create;
end;

destructor TMyControl.Destroy;
begin
  FTest.Free;
  inherited Destroy;
end;
Also so hat es bei mir funktioniert. Ich hoffe ich, dass ich keinen Schreibfehler drin hab, da ich auf diesem Rechner hier leider kein Delphi hab. Somit sind alle Angaben ohne Gewehr
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Unterkategorien bei Komponenten

  Alt 25. Nov 2005, 11:18
Jetzt ist aber genau das passiert, wovor ich dich gewarnt habe

Wenn du jetzt zur Laufzeit die Zuweisung MyControl.Test := XYZ machst, wird die im Konstruktor erstellte Instanz von FTest nicht freigegeben. Der Speicher geht dir verloren! (Das sind die berühmten "Speicherlecks" von denen du vielleicht schon gelesen hast).

Die beste Methode ist immer noch die o.a. mit Assign.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.
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