Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TDCOMConnection (https://www.delphipraxis.net/29126-tdcomconnection.html)

day 4. Sep 2004 10:00


TDCOMConnection
 
Hallo

Ich habe eine DComConnection zu auf einen Server. Die DCOMConnection (den Clientseitigen Verbindungsaufbau allgemein) möchte ich in eine eingenen Klasse verpacken. Das Problem ist jetzt allerdings das die TDCOMConnection als Konstructor eine TComponent erwartet. Leider habe ich die in meiner Klasse nicht zu verfügung.
Was gibt da für möglichkeiten das ich die TDCOMConnection in meine eigene Klasse abbilden kann?
Oder muss ich es direkt auf meine Form packen? (würde mir nicht so gefallen)

mirage228 4. Sep 2004 10:03

Re: TDCOMConnection
 
Hi,

oft (eigentlich immer) klappt es, wenn Du im Konstrutktor einfach NIL übergibst.

mfG
mirage228

day 4. Sep 2004 10:31

Re: TDCOMConnection
 
ok danke werde ich mal ausprobieren. Aber wieso bieten sie nicht einfach einen konstruktor an, der keine argumente benötigt?

day 4. Sep 2004 12:04

Re: TDCOMConnection
 
Hallo

Ich folgende Klasse ist eine ableitung einer TDCOMConnection. Jetzt möchte ich gerne einen neuen konstruktor schreiben. Wie kann ich von meinem Konstruktor den der Vaterklasse aufrufen? (In java geht es mit super(..) )?

und meine zweite frage wäre wie kann ich methoden überlagern? würde gerne die Methode AfterConnection() überlagern und die gegebenen funktion erweitern.

Code:
type
  TConnection = class(TDCOMConnection)
  private
    mIPAdress      : String;
    mServerName    : String;

  public
    constructor create(IPAdress , ServerName : String);
    procedure AfterConnect( );
  end;

implementation

   constructor TConnection.create(IPAdress , ServerName : String);
   var temp : String;
   begin

     mIPAdress  := IPAdress;
     mServerName := ServerName;

     try
        //self.Create(nil);//????? geht nicht so habe es auch schon mit inherited probiert

       self.Connected   := False;
       self.LoginPrompt := False;

       self.ComputerName := mIPAdress;
       self.ServerName  := mServerName;
       self.Connected := True;

     except
       On E:Exception do
  ....

     end;
   end;

mirage228 4. Sep 2004 12:16

Re: TDCOMConnection
 
Hi,

Ich weiss nicht, wie du inherited verwendest hast, aber so sollte es gehen:

Delphi-Quellcode:
inherited Create(nil);
mfG
mirage228

Bernhard Geyer 4. Sep 2004 12:22

Re: TDCOMConnection
 
Zitat:

Zitat von day
ok danke werde ich mal ausprobieren. Aber wieso bieten sie nicht einfach einen konstruktor an, der keine argumente benötigt?

Der Designansatz der VCL ist der, nicht für jeden Sonderfall einen eigenen Konstruktor zu definieren (Wie es z.B. bei der MFC der Fall ist, wo es teilweise 10-20 verschiedene Konstruktoren gibt), sondern alle Einstellungen über Properties vorzunehmen. Auch ist mit diesen Konstruktor mit einem Parameter (Welcher den Owner-Element darstellt) ein bestimmtes Design-Pattern realisiert worden (Fachbegriff fällt mir nicht ein). D.h. (fast) alle Owner-Child-Beziehungen werden über dieses Muster realisiert (Konstruktor mit Owner, Components-Auflistung).

day 4. Sep 2004 12:22

Re: TDCOMConnection
 
ok jetzt geht es. ich hatte es immer mit self. .... probiert.

day 4. Sep 2004 12:40

Re: TDCOMConnection
 
hallo

er zeigt mir aber immer noch folgende warnung an:

Warning Connection.pas(29) Mehtod 'Create' hides virtual mehtod of base type TDCOMConnection

was bedeutet das genau. besitzt die Klasse TDCOMConnection noch virtuelle methoden die ich überlagern muss?

Bernhard Geyer 4. Sep 2004 12:46

Re: TDCOMConnection
 
Du must das Schlüsselwort override noch angeben:
Delphi-Quellcode:
  public
    constructor create(IPAdress , ServerName : String); override;
    procedure AfterConnect( )); override;
  end;

day 4. Sep 2004 14:49

Re: TDCOMConnection
 
Hallo ich habe die create methoden deklaration mit override deklariert aber jetzt bekomme ich folgende fehlermeldung:

Declaration of create differs from previous declaration.
Method AfterConnect not found in case class

kann es sein, dass die methoden der Vaterklasse (TDCOMConnection) nicht erweitert werden können?

Code:
 public
    constructor create(IPAdress , ServerName : String); override;
    function getClientDataSet(DataSetProvider : String) : TClientDataSet;
    procedure AfterConnect( ); override;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 Uhr.
Seite 1 von 2  1 2      

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