Autor Beitrag
DrumCode
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 01.08.07 07:34 
Hallo zusammen,

bin noch neu bei Delphi und frage mich, was es mit den Komponenten auf sich hat, die eigentlich nicht wirklich GUI Elemente sind, aber dennoch auf der GUI Oberfläche (im Designer!!!) auftauchen.
Ich probiere grade etwas mit der Komponente DirectMysql herum.

Auf die Oberflaeche ziehen -> markieren ->Settings einstellen ->verwenden

-> klappt gut.

Frage: wie stell ich denn so eine Klasse selbst her, die sich so handhaben lässt?



Danke & Gruß
DrumCode
Erichgue
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 86

Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
BeitragVerfasst: Mi 01.08.07 07:56 
user profile iconDrumCode hat folgendes geschrieben:
Hallo zusammen,

bin noch neu bei Delphi und frage mich, was es mit den Komponenten auf sich hat, die eigentlich nicht wirklich GUI Elemente sind, aber dennoch auf der GUI Oberfläche (im Designer!!!) auftauchen.
Ich probiere grade etwas mit der Komponente DirectMysql herum.

Auf die Oberflaeche ziehen -> markieren ->Settings einstellen ->verwenden

-> klappt gut.

Frage: wie stell ich denn so eine Klasse selbst her, die sich so handhaben lässt?

Danke & Gruß
DrumCode


Hallo,
Alle Klassen die direkt von TComponent abgeleitet sind, sind solche Komponenten.
Man nennt diese auch "nicht visuelle Komponenten"
Schau doch mal in der Hilfe zu TComponent nach. Das stehen einige nützliche Sachen drin.
Auch wie es gemacht wird.

Simples Beispiel:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  TMeineKomponente = Class(TComponent)
  Private
  Protected 
  Public
  Published
  end;




Erich

Moderiert von user profile iconKlabautermann: Delphi-Tags hinzugefügt.
DrumCode Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 01.08.07 08:21 
Ahh ja ich seh schon :-)

Super !! Danke ... aber ich habe noch eine Frage:
Kann ich solche TComponent geerbten Klassenobjekte auch per code während der Laufzeit erzeugen? Was ist denn sinnigerweise der Owner eines solchen Objekts? Der Konstruktor erwartet sowas ja.



Grüße
Erichgue
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 86

Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
BeitragVerfasst: Mi 01.08.07 08:32 
user profile iconDrumCode hat folgendes geschrieben:
Ahh ja ich seh schon :-)

Super !! Danke ... aber ich habe noch eine Frage:


Gerne 8)

user profile iconDrumCode hat folgendes geschrieben:
Kann ich solche TComponent geerbten Klassenobjekte auch per code während der Laufzeit erzeugen?


Ja.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  TForm1 = Class(TForm)
  .
  .
  .
  Private
    fMeineKomponente : TMeineKomponente;
  Public
  end;


Constructor TForm1.OnCreate(AOwner : TComponent);
begin
  Inherited;
  fMeineKomponente := TMeineKomponente.Create(self);
end;


user profile iconDrumCode hat folgendes geschrieben:

Was ist denn sinnigerweise der Owner eines solchen Objekts? Der Konstruktor erwartet sowas ja.


Der Parameter Owner bestimmt, wer für das freigeben der Komponente zuständig ist.
verwendest du:
fMeineKomponente := TMeineKomponente.Create(self);
kümmert sich das Formular um das freigeben der Komponente.

verwendest du
fMeineKomponente := TMeineKomponente.Create(Nil);

Mußt du das Teil selber freigeben, sonst schaufelst du den Speicher voll

FreeAndNil(fMeineKomponente);

Gruß

Erich
DrumCode Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 22.08.07 07:14 
Hallo :-)

ich poste mal hier in meinen alten Thread weils dazupasst:

Folgendes Szenario:

Ich erschaffe eine Klassen die z.B. von TStringGrid erbt. (Hintergrund: ich möchte die DeleteRow() Methode verwenden, die ja protected ist).

Nach der Ableitung gehen aber die ganzen Komponent-Eigentschaften verloren (hab ich das richtig verstanden?) Auch nicht der Sinn der Sache.
Versteht ihr mein Problem?

Wie macht ihr das?


Gruß
DrumCode
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: Mi 22.08.07 08:56 
Du musst die Eigentschaften, die in deiner Klasse wieder als Puplic dastehen sollen nochmals so deklarierein.
Es reicht allerdings einfach nur zu schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
public
[...]
property Caption; // muss in Basisklasse definiert sein. Und dort mindestens als protected
property MyWonderfullProperty;  // muss in Basisklasse definiert sein. Und dort mindestens als protected
[...]
DrumCode Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 22.08.07 11:37 
Danke klappt super :-)

Noch eine Frage zu diesem Bereich:

Nachdem ich nach LANGEM rumsuchen drauf gekommen bin in die Design Ansicht zu wechseln, bevor ich einen Vorfahren für eine neue Komponente finden kann, gibts ein neues Problem:

Ist es nicht möglich ALLE Komponenten als Vorfahren für eigene zu verwenden?
Kann der Ersteller dies einschraenken?

Beispiel: indy packages

TidSNMP
TidFTP
TidHTTP
TDirectMysql


Danke!