AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi [Gelöst]Eigene Komponenten ruft über Designer kein Create auf
Thema durchsuchen
Ansicht
Themen-Optionen

[Gelöst]Eigene Komponenten ruft über Designer kein Create auf

Ein Thema von ColeZero · begonnen am 2. Aug 2010 · letzter Beitrag vom 2. Aug 2010
Antwort Antwort
ColeZero

Registriert seit: 6. Sep 2007
18 Beiträge
 
#1

[Gelöst]Eigene Komponenten ruft über Designer kein Create auf

  Alt 2. Aug 2010, 15:34
Hallo zusammen ,

ich habe eine eigene Komponente entwickelt, oder besser gesagt, bin dabei.
Ich habe die letzten Wochen damit verbracht, ein Klassenmodell zu entwickeln, mit Inhalt zu füllen und nun in eine schöne Komponente zu verpacken.
Meine Komponente funktioniert soweit bestens, wenn ich sie "manuell" benutze.

Beispiel:
Meine Komponente:
Delphi-Quellcode:
unit Component1;

interface

uses
  SysUtils, Classes;

type
  TMyCompo = class(TComponent)
  private
    { Private declarations }
    procedure DoSomethingImportant;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create;
    destructor Destroy;override;
  public
    procedure DoFoobar;
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TComponent1]);
end;

{ TMyCompo }

constructor TMyCompo.Create;
begin
  inherited;
  DoSomethingImportant;
end;

destructor TMyCompo.Destroy;
begin
  inherited;
end;

procedure TMyCompo.DoSomethingImportant;
begin
  Foobar;
end;

end.
Mit "Manuell" meine ich folgendes:
Ich deklariere mir eine Variable vom Typ TMyCompo:
Delphi-Quellcode:
var
  myCompo: TMyCompo;
Und benutze sie dann:

Delphi-Quellcode:
 myCompo := TMyCompo.Create;
 myCompo.DoFoobar;
Am Ende dann ein

Delphi-Quellcode:
if Assigned(myCompo) then
 myCompo.free;

Das funktioniert wunderbar.
Wenn ich die Komponente nun aber über den Designer auf meine Form ziehe und
mein Programm ausführe, also so:


Delphi-Quellcode:
  TForm1 = class(TForm)
    MyCompo1: TMyCompo;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
und diese dann benutzen will:

Delphi-Quellcode:
procedure Button1CLick(Sender : TObject);
begin
 MyCompo1.DoFoobar;
end;
gibt es einen crash, weil ich feststellte, dass das Create der KOmponente nicht ausgeführt worden ist.
Weil die Prozedure, in dem Fall:

DoSomethingImportant

nicht ausgeführt wurde. Und es ist wichtig, dass DoSomethingImportant ausgeführt wird, damit DoFoobar funktioniert.

Kann ich also davon ausgehen, dass das Create nicht aufgerufen wurde?
Bzw. was kann ich tun, dass das Create meiner Komponente trotz Designer richtig ausgeführt wird?

Viele Grüßen bei weiteren Fragen bitte melden

Geändert von ColeZero ( 2. Aug 2010 um 16:47 Uhr) Grund: [Gelöst]
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

AW: Eigene Komponenten ruft über Designer kein Create auf

  Alt 2. Aug 2010, 15:55
Der Grund das dein Constructor nicht aufgerufen ist recht einfach:
Du leitest von TComponent (oder einem Nachfahren) ab so wie es sich auch gehört für Komponenten die man später im Designer platzieren will. So weit hast du richtig gehandelt.
Jetzt aber zu deinem Fehler. Delphi kann keine Gedanken lesen und weiß entsprechend nicht welche Parameter bei welchem Konstructor notwendig sind.
Baut sich zum Beispiel jemand ein Create das wie folgt aussieht:
constructor Create(MeinTollerTyp: TSuperTyp); so weiß Delphi natürlich nicht was es dort übergeben soll. Entsprechend werden alle Komponenten mit dem Constructor von TComponent erstellt. Damit ein eigener Konstructor also aufgerufen wird musst du den von TComponent überschreiben:
falsch:
constructor Create; richtig:
constructor Create(AOwner: TComponent); override; gleiches gilt übrigens auf den destructor.
Am besten du schaust dir mal ein Tutorial zur Vererbung etc. an
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
ColeZero

Registriert seit: 6. Sep 2007
18 Beiträge
 
#3

AW: Eigene Komponenten ruft über Designer kein Create auf

  Alt 2. Aug 2010, 16:46
Ahh, klingt logisch klar

Danke, SirThornberry. Hat Prima geklappt.

Viele Grüße und Danke
  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 12:55 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