AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Neue Klasse von Komponente ableiten --> wie?

Neue Klasse von Komponente ableiten --> wie?

Ein Thema von Tubos · begonnen am 31. Jul 2004 · letzter Beitrag vom 1. Aug 2004
Antwort Antwort
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#1

Neue Klasse von Komponente ableiten --> wie?

  Alt 31. Jul 2004, 22:24
Hallo;

Ich will von dem Indy-UDP-Client eine neue Klasse ableiten, die ein paar Änderungen hat (z.B. ist die Methode send thread-sicher).

Habe zum Testen mal einfach eine neue Klasse ohne Änderung erstellt:
Delphi-Quellcode:
type TUDPClientThreadsafe = class(TIdUDPClient)
 private
 public
end;
und dann bei TForm1 den Eintrag für den UDP-Client von
client: TIdUDPClient auf
client: TUDPClientThreadsafe; umgeändert.

Jetzt fragt Delphi beim Kompilieren:
"Feld Form1.client muss vom Typ TIdUDPClient sein, ist aber als TUDPClientThreadsafe deklariert. Soll die Deklaration korrigiert werden?"

Wie schaffe ich es also, eine Klasse von einer Komponente abzuleiten?
Bei TForm1 geht es doch auch!
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Neue Klasse von Komponente ableiten --> wie?

  Alt 31. Jul 2004, 22:33
Hm. Da muss noch irgendwo was in deinem Code sein, was nicht stimmt. Denn das
Delphi-Quellcode:
type
  TMyButton = class(TButton)
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  MyButton: TMyButton;
begin

end;
kompiliert ohne Warnungen oder Hinweise.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#3

Re: Neue Klasse von Komponente ableiten --> wie?

  Alt 31. Jul 2004, 23:10
naja, so geht das aber nicht.

du hast richtig von einer komponente abgeleitet, du hast aber einfach den Typ der auf der Form vorhandenen Komponente im Quelltext verändert.

Delphi speichert die auf der Form enthaltenen Angaben nicht nur im Form1 = class(TForm)-Teil (indem jeder Button, jedes Label, ... hier auftaucht), sondern auch in der zur Form gehörigen DFM-Datei.

Wenn Du ein Objekt von einer Komponente ableiten möchtest, dann mußt Du es im Programmteil erzeugen. Also:

Delphi-Quellcode:
type
  TMyButton = class(TButton)
  // ...
  end;

  TForm1 = class(TForm);
  // alle von Delphi eingefügten Komponenten die man auch auf
  // der Form sieht, also Burttons, Labels, ...
  private
    FMyButton: TMyButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    ....
  end;

...

procedure TForm1.FormCreate(Sender);
begin
  FMyButton := TMyButton.Create;
  FMyButton.Left := 12;
  FMyButton.....
  ...
end;
In FormDestroy (oder FormClose) mußt Du dann noch deine von der Komponente abgeleitete Instanz freigeben.
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#4

Re: Neue Klasse von Komponente ableiten --> wie?

  Alt 1. Aug 2004, 00:21
Habe genau dasselbe wie mit dem UDP-Client mit einem einfachen Button ausprobiert.

Ich habe zuerst die Komponente raufgesetzt, dann eine Ableitung erstellt und dann von TButton auf MyButton umgeändert.
Dann kam diese Meldung.

Zitat:
Wenn Du ein Objekt von einer Komponente ableiten möchtest, dann mußt Du es im Programmteil erzeugen.
Kann ich das Objekt / eine Komponente nicht so ableiten, dass ich die Komponente ganz normal verwenden kann?
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Neue Klasse von Komponente ableiten --> wie?

  Alt 1. Aug 2004, 08:22
dann musst du die Komponente erst in ein Package packen und in diesem die Komponente registrieren. Dann kannst du die Komponente auch auf dein Form setzen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Neue Klasse von Komponente ableiten --> wie?

  Alt 1. Aug 2004, 09:47
Hi,

etwas mehr Handarbeit kann ja sehr lehrreich sein, der geplante Weg ist jedoch einfach
Menü Komponente|Neue Komponente.

Empfehlenswert ist es aber, eine neue Komponente solange per Code zu handeln, bis sie recht gut funktioniert. Dann erst als Komponente installieren. Man muß bedenken, das installierte Komponenten im Prozess der IDE mitlaufen, und damit bei Fehlern Delphi mit in die Tiefe reißen.

Grüsse
Woki
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Neue Klasse von Komponente ableiten --> wie?

  Alt 1. Aug 2004, 10:36
Zitat von Tubos:
Ich will von dem Indy-UDP-Client eine neue Klasse ableiten, die ein paar Änderungen hat (z.B. ist die Methode send thread-sicher).
Als erstes mußt du dir darüber klar werden, wie diese "Änderungen" den Zugriff erlauben sollen. Soll das ganze im Objekt-Inspektor sichtbar sein, so muß ein package her. Auch eine Register-Prozedur. Und entsprechende Methoden für deine neuen Properties. Man braucht eine, um den vorhandenen Wert zu lesen und eine, um einen neuen Wert zu setzen.

Normalerweise müssen auch noch ein Constructor und Destructor her. Der Identifier "inherited" darf nicht vergessen werden, um die vorhandenen Methoden der Vorfahr-Komponente zu benutzen.

Hört sich kompliziert an und ist es auch. Eventuell reicht aber die Objektablage aus, um zum Ziel zu kommen. Du kannst damit eine Komponente automatisch ableiten. Seltsamerweise benutzt die außer mir kaum jemand. Anscheinend wurde meist nicht bemerkt, daß man dort auch "inherited" als Option hat. Und das könnte das sein, was du suchst. Dann läuft zumindest das mit dem Button u.Ä. automatisch ab. Also die unverzichtbaren Methoden werden für dich angelegt.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:47 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