![]() |
Brauche Hilfe bei Komponentenentwicklung allgemein
Hallo.
Ich bin jetzt einmal in die Komponentenentwicklung eingestiegen, und Delphi dankt es mir mit AVs und regelmäßigen Abstürzen. Das erste, das ich wissen muss, ist: Wie integriere ich eine protected Komponente in meine eigene Komponente? Z.B. ein Image, auf dessen Canvas ich zeichnen will? Die Deklaration habe ich so gemacht:
Delphi-Quellcode:
Das zweite ist: Wie integriere ich eine published Property (bsp: SynEdit), die nicht selbst erzeugt wird, sondern per Linkage mit TRobotPainter verknüpft wird? So in etwa, wie der Highlighter bei TCustomSynEdit?
//...
interface uses Classes, StdCtrls, Windows, SysUtils; //Sind nicht alle aufgeführt, aber im richtigen //Programm habe ich alle benötigten aufgeführt. type TRobotPainter = class(TWinControl) protected Image: TImage; //... end; implementation constructor TRobot.Create(AOwner: TComponent); begin Image:=TImage.create(Self); Image.Parent:=self; image.rect(0,0,100,100); end; //... end. Schonmal danke im Voraus. |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Kannst nicht deine Komponente von Timage ableiten?
|
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
:gruebel: Wäre eine Notlösung, aber ich würde gerne allgemein wissen, wie das geht.
|
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
besser wärs vllt wenn du deine komponente von TGraphicControl ableistest und dann dessen
procedure Paint; "überschreibst" dann kannst gleich auf dessen Canvas malern. |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Delphi-Quellcode:
Wozu die Image Komponente?
//...
interface uses Classes, StdCtrls, Windows, SysUtils; //Sind nicht alle aufgeführt, aber im richtigen //Programm habe ich alle benötigten aufgeführt. type TRobotPainter = class(TWinControl) protected Image: TImage; //... end; implementation constructor TRobot.Create(AOwner: TComponent); begin Image:=TImage.create(Self);// das ist richtig Image.Parent:=self; //das solltest du nicht hier machen. >> Fehler: bla... kein übergeordnetes fenster ..bla (*Besser im SetParent(AWincontrol:Twincontrol);Override;*) image.rect(0,0,100,100);// das solltest du auch in Setbounds(....);Override; machen end; //... end. |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Es heißt natürlich nicht Image.rect, sondern image.canvas.rect(0,0,100,100);
Und das steht auch nicht in Create, sondern in Repaint. Das mit SetParent versuche ich mal, wenn ich es verstanden habe. Übrigens: Falls es übersehen wurde: Ich hatte noch eine Frage bezüglich untergeordneten Elementen als Property. |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Zur zweiten Frage: Ich glaube, du kannst einfach eine Property davon machen, und dann immer if FSynEdit <> nil then FSynedit.clear; oder so - probier's mal ;)
|
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
also wenn ich den Constructor so ansehen vermisse ich da das inherited!! Das solltest du schleunigst einbauen ansonsten kannst du das ableiten auch gleich ganz lassen wenn du den ursprungsconstructor nicht aufrufst. (bei Destroy etc. gilt gleiches)
|
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Das inherited steht ganz am Anfang, ich hab den Code hier aus dem Kopf getippt, also er ist nicht ganz der richtige.
@jfheins: Die Idee hatte ich auch schon, aber alles was ich kriege ist eine AV. Muss ich da noch einen Konstruktor aufrufen? |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Delphi-Quellcode:
constructor TFoobar.Create(AOwner: TComponent);
begin inherited Create(AOwner); ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz