![]() |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
und versuchs mal so wie ich dir bereits geraten habe deinen roboter zu "malen" in dem du die procedure Paint überschreibst, und nicht erst extra son olles TImage benützt
|
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
@barf00s:
1. Beitrag: Ich habe das inherited schon, ich meine, ob ich für die Property Synedit noch einen Konstruktor aufrufen muss. 2. Beitrag: Weil ich vor allem die Möglichkeiten einer WinControl brauche (Maus- und Tastaturereignisse). Die Procedures selber zu schreiben ist mehr Arbeit, als ein TImage einzubauen. |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Nein - aber vorher prüfen obs <> nil ist auf jeden Fall ...
|
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
wenn du uns nicht deinen wirklichen Source postest sondern nur den ungefähren wird es schwer mit helfen. Wie du mitbekommen hast wurde ja das mit dem inherited geschrieben was ja aber im richtigen Source drin zu sein scheint. Und wenn du dich jetzt in unsere lage versetzt kannst du vielleicht auch verstehen das einem da etwas die lust zum helfen vergeht wenn jemand etwas anderes postest als womit er eigentlichen einen Fehler hat.
Desweiteren kann es ja gut möglich sein das du den eigentlichen Fehler gar nicht mit postest weil es ein tippfehler etc. ist und dann wird dieser fehler auch nicht gefunden. |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Ein anderes Beispiel: Ich habe eine Komponente: (Ist wie gesagt nur ein Beispiel, das aber gut zeigt, was ich will.)
Delphi-Quellcode:
//...
type TCompo1 = class(TComponent) protected FTimer: TTimer; public constructor Create(AOwner: TComponent); destructor Destroy; published property Timer: TTimer read Timer write Timer; end; //... constructor TCompo1.Create(AOwner: TComponent); begin inherited Create(AOwner); //So, was jetzt? Wie kann ich auf Timer zugreifen, ohne eine AV zu verursachen? //Etwa FTimer:=TTimer.Create(AOwner)? Oder FTimer:=TTimer.Create(Self)? Oder gar nichts? end; destructor TCompo1.Destroy; begin inherited Destroy; FTimer:=nil; //Ist das richtig so? end; end. |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Nach VCL-Standard sollte das etwa so aussehen:
Delphi-Quellcode:
TFoo = class(TComponent)
protected FTimer: TTimer; procedure SetTimer(AValue: TTimer); public constructor Create(AOwner: TComponent); destructor Destroy; override; property Timer: TTimer read FTimer write SetTimer; end; [...] implementation constructor ... begin inherited; FTimer := TTimer.Create(Self); // Hier musst du dich selbst um die Freigabe kümmern // FTimer := TTimer.Create(AOwner); // Hier kümmert sich das Formular/... darum end; destructor ... begin FTimer.Free; // bei Create(Self) inherited; end; procedure SetTimer(AValue: TTimer); begin FTimer.Assign(AValue); end; |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
Juhuu!!! Endlich hat jemand verstanden, was ich wissen wollte!!!
Du kommst in die Credits. (Ich werde wohl dort der ganzen DP danken, aber manchen Leuten wohl ganz besonders.) |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
So, hier eine einfache Kompo mit einem Timerfeld:
Soll heißen, ser wird nicht erstellt, sondern der User kann einen zuweisen, er kanns aber auch lassen ;) Sinn macht das z.B. mit einem Memo, wo du z.B. reinschreibst, was gerade gemacht wird ;)
Delphi-Quellcode:
P.S. Nein, der rote Kasten war tot, und ja, ich habe eine Zeit gebraucht, bis ich auf "Antworten" geklickt habe ...
unit Unit2;
interface uses Classes, ExtCtrls; type TCompo1 = class(TComponent) protected FTimer: TTimer; public constructor Create (AOwner: TComponent); override; destructor Destroy; override; function GetInterval: Integer; published property Timer: TTimer read FTimer write FTimer; end; procedure Register; implementation { TCompo1 } procedure Register; begin RegisterComponents('Eigene Komponenten', [TCompo1]); end; constructor TCompo1.Create (AOwner: TComponent); begin inherited; end; destructor TCompo1.Destroy; begin inherited; end; function TCompo1.GetInterval: Integer; begin if Timer <> nil then Result := Timer.Interval else Result := -1; end; end. |
Re: Brauche Hilfe bei Komponentenentwicklung allgemein
?
Sowas in der Art habe ich auch gemacht, und alles was ich bekommen habe war eine *TROMMELWIRBEL* AV!!! Ich werde bald mal etwas Source posten, dann sehen wir weiter. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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