AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nicht visuelle Komponente instanzieren

Ein Thema von Dawn87 · begonnen am 29. Mai 2007 · letzter Beitrag vom 29. Mai 2007
Antwort Antwort
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 14:01
Hallo,

ich benutze eine nicht-visuelle Komponente names CPortLib um die serielle Schnittstelle anzusprechen. Diese Komponente zieht man auf ein Formular und kann diese dann mit Name.Methode() ansteuern.

Nun schreibe ich eine Klasse die einige Methoden aus meinem Programm sinnvoll kapseln soll und dabei möchte ich auch die angesprochene Komponente verwendet.

Meine Frage:
Wie kann ich diese Komponente ansprechen, ohne dass ich Sie dafür auf ein Formular ziehen und in der Klasse umständlich ansprechen muss (frmMain.ComPort.* z.B).

In Visual Basic ging das mit dem Schlüsselwort "new" in einer Deklarationsanweisung.

Ich habe die Suchfunktion genutzt, aber leider nichts für mich verwendbares gefunden. Mir fehlten glaub ich einfach die richtigen Suchbegriffe . Vielen Dank.

Grüße,
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 14:06
Hi, nur Halb-Pseudocode:

Delphi-Quellcode:
MyComponent: TCOMPort;

MyComponent := TCOMPort.Create;
try
  MyComponent.Bla();
  // ...

finally
  FreeAndNil(MyComponent);
end;
Freigeben und Initialisieren geht natürlich auch im finalization bzw. initialization.
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#3

Re: Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 14:07
in die uses Klausel mit aufnehmen

uses ... , NameDerUnit; Variable für den Pointer auf das Objekt anlegen (global oder lokal in function oder prozedur
Delphi-Quellcode:

var MyComport : TComport; // oder im private bzw public Teil Deines Objektes (dann ohne var)
Objekt instanzieren und dann die Methoden und Variablen des Objekts nutzen
Delphi-Quellcode:
MyComport := TComport.Create; // evtl. mit Parametern wie z.Bsp. AOwner : TComponent
MyComport.Methode();

Freigeben wenn nicht mehr benötigt

MyComport.Free; Hoffe ich konnte helfen.

CU
Chris
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 14:13
Hallo,

vielen Dank an euch Beide! Es funktioniert.

Noch eine Frage:
Wenn ich dieses Objekt erzeugen will, wenn jemand meine Klasse erzeugt, muss der Code in einen Constructor oder?

Wenn ich nun einen eigenen Constructor anlege, erwartet mich dann mehr Verantwortung als wenn ich den Constructor nutze den Delphi standardmäßig anlegt (TSonstwas.Create()). Ich habe in der Delphi-Hilfe etwas von Heap-Speicher-reservierung und co. gelesen?

Grüße
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#5

Re: Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 14:18
Richtig, Du musst einen constructor anlegen.

Dort den Comport instanzieren

Im destructor wieder freigeben.

Denk an override hinter der Deklaration und an inherited im constructor und im destructor.

Bsp.:

Delphi-Quellcode:
//TMyobject Deklaration
private
  ....
  MyComport : TComport;
public
  ....
  constructor Create; (Aowner:TComponent); override;
  destructor Destroy; override;


...
constructor TMyObject.Create(AOwner:TComponent);
begin
  inherited Create(AOwner); //ursprüngliche Instanzierung aufrufen
  MyComport := TComport.Create;
end;

destructor TMyObject.Destroy;
begin
  MyComport.Free;
  inherited; //ursprüngliches Destroy aufrufen
end;
//Edit : Hab noch mal drüber nachgedacht, ist natürlich gar nicht zwingend erforderlich, kannst Du aber so machen.
//Edit : Es geht genauso ohne constructor /destructor, Du musst nur sicherstellen, das du instanzierst, bevor der erste Zugriff auf
//Edit : das Objekt erfolgt.
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 14:41
Hallo,

vielen Dank.

Ich erhalte leider folgenden Fehler:
"Eine statische Methode kann nicht überschrieben werden".

Kann den Quellcode leider nicht hier einfügen, weil ich mit Cygwin im Internet bin :-/.


Grüße
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#7

Re: Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 14:51
OK, dann ist constructor oder destructor static deklariert, somit ist überschreiben nicht möglich.


Auf welcher Klasse basiert Deine neue Klasse ?
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 15:04
Hallo,

einfach auf TObject (die "Basisklasse"). Habe mir die ein oder andere Website zum Thema OOP durchgelesen und TObject gewählt, weil alle anderen Klassen (angeblich) darauf basieren.

Grüße
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Nicht visuelle Komponente instanzieren

  Alt 29. Mai 2007, 15:05
Zitat von Dawn87:
Ich erhalte leider folgenden Fehler:
"Eine statische Methode kann nicht überschrieben werden".
Hast du deine Komponente auch von TComponent o.ä. abgeleitet?

//Edit: Wo bleibt der rote Kasten, wenn man ihn braucht?

Zum Thema: Komponenten solltest du von TComponent ableiten, so dir keine bessere Basisklasse findest. Sonst funktioniert das ganze visuelle Design im Formdesigner nicht.

HTH,
Uli.
Uli Gerhardt
  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 06:16 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