Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DataModule mit Kontruktor für eigene Klasse? (https://www.delphipraxis.net/141981-datamodule-mit-kontruktor-fuer-eigene-klasse.html)

Borschti 20. Okt 2009 09:00


DataModule mit Kontruktor für eigene Klasse?
 
Guten Morgen :)

ich habe ein kleines Problem was mir ja eigentlich echt ein wenig peinlich ist, naja habe schon lange nichts mehr mit Delphi gemacht und mit Kontruktoren eigentlich noch nie was in Delphi, hoffe ihr könnt/wollt mir bei meinem kleinen Problem helfen.

Also wie gesagt habe ich ein DataModul(keine Unit weil dort später die Komponenten für Outlook/Excel Zugriff platziert werden sollen), dort möchte ich jetzt einen Konstruktor für meine Klasse schreiben nur ich steh total auf dem Schlauch :( hab mir ein paar Hilfen von Delphitreff und Delphipraxis angeschaut aber irgendwie komm ich damit auf keinen grünen Zweig.

Delphi-Quellcode:
unit DmOutlookPro;

interface

uses
  SysUtils, Classes;

type
  TOutlookPro = class(TDataModule)
  private
    { Private-Deklarationen }
    var ordnerPfad : String;
        kontakt : TStringList;
  public
    { Public-Deklarationen }
    constructor TOutlookPro.Create(cOrdnerPfad : String);
  end;

var
  OutlookPro: TOutlookPro;

implementation

constructor TOutlookPro.Create(cOrdnerPfad : String);
begin
  inherited Create;

  ordnerPfad = cOrdnerPfad;
end;

{$R *.dfm}

end.
Delphi-Quellcode:
unit UnOutlookImport;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TOutlookPro;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Outlook : TOutlookPro;
begin
  Outlook = TOutLookPro.Create('test');
end;

end.
Das habe ich zZ, mir wird aber der Fehler ausgegeben:"F1026 Datei nicht gefunden: 'TOutlookPro.dcu'".
Ich hab nach der .dcu Datei gesucht konnte sie aber nicht im Installationsordner von CodeGear finden.

Außerdem wird das .Create in der Zeile
Delphi-Quellcode:
  Outlook = TOutLookPro.Create('test');
nicht von der Codehilfe erkannt, liegt das vllt zusammen?

Muss ich auf irgendwas besonderes achten wenn ich in einem Datamodul eine Klasse erstellen will oder habe ich gerade nur eine Denkblokade? oO ich weiß einfach nicht weiter, mag vllt auch daran liegen das ich, wie gesagt, in Delphi noch nie was mit Kontruktoren gemacht habe.

Ich bedanke mich schonmal für alle Antworten :)

lg Alex

schlecki 20. Okt 2009 09:05

Re: DataModule mit Kontruktor für eigene Klasse?
 
Zitat:

Zitat von Borschti
Delphi-Quellcode:
{...}
  TOutlookPro = class(TDataModule)
  private
    { Private-Deklarationen }
    {var} ordnerPfad : String;
    kontakt : TStringList;
  public
    { Public-Deklarationen }
    constructor {TOutlookPro.}Create(cOrdnerPfad : String);
  end;
{...}
Delphi-Quellcode:
{...}
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, {TOutlookPro}dmOutlookPro;
{...}

Ich hab jetzt einfach mal die Fehler "auskommentiert".

sirius 20. Okt 2009 09:12

Re: DataModule mit Kontruktor für eigene Klasse?
 
Und ist TDataModule nicht vom TComponent und will im Constructor ein Owner haben?

schlecki 20. Okt 2009 09:33

Re: DataModule mit Kontruktor für eigene Klasse?
 
Zitat:

Zitat von sirius
Und ist TDataModule nicht vom TComponent und will im Constructor ein Owner haben?

richtig, das hat mein Brain-Compiler glatt übersehen :D

außerdem sollte man den Constructor dann noch als reintroduce; virtual; kennzeichnen. Also etwa so:

Delphi-Quellcode:
  constructor Create(aOwner: TComponent; cOrdnerPfad: string); reintroduce; virtual;
Was aber dadurch nicht mehr korrekt funktioniert, ist die automatische Erzeugung von Delphi (in der DPR), weil hier der neue Konstruktor unbekannt ist und immer der alte verwendet wird!

Borschti 20. Okt 2009 09:39

Re: DataModule mit Kontruktor für eigene Klasse?
 
Erstmal danke für eure schnelle Hilfe :)

Eine kurze Eläuterung was es mit
Delphi-Quellcode:
constructor Create(aOwner: TComponent; cOrdnerPfad: string); reintroduce; virtual;
auf sich hat wäre sehr nett. Also aOwner: TComponent, reintroduce und virtual.
Was muss ich jetzt im Aufruf des Konstruktors angeben?

lg Alex

mkinzler 20. Okt 2009 09:50

Re: DataModule mit Kontruktor für eigene Klasse?
 
Die beiden Parameter

sirius 20. Okt 2009 09:53

Re: DataModule mit Kontruktor für eigene Klasse?
 
Ich würde den Constructor besser belassen und cOrdnerPfad als Property anfügen (schlecki hat schon erklärt warum es hier dringend nötig ist)

Borschti 20. Okt 2009 10:21

Re: DataModule mit Kontruktor für eigene Klasse?
 
Ok dann werde ich das mal als Proberty versuchen, scheint um einiges unkomplizierter zu sein, danke für die Hilfe.

lg Alex

Hansa 20. Okt 2009 11:02

Re: DataModule mit Kontruktor für eigene Klasse?
 
Wenn ich das richtig sehe, dann soll lediglich ein pfad besetzt werden. Wieso wird hierzu nicht einfach das datamodulecreate verwendet ?

stahli 20. Okt 2009 11:45

Re: DataModule mit Kontruktor für eigene Klasse?
 
Hallo Alex,

ich verstehe das Anliegen noch nicht...

Du willst einige Daten in einer Komponente verwalten?

Das TDataModule ist im Grunde ein unsichtbares Formular, das in der IDE nicht sichtbare Komponenten darstellt und bestimmte Ereignisbehandlungen anbietet.
In der IDE wirst Du Deine Ableitung nicht benutzen können (ich wüsste jedenfalls nicht wie).
Und zur Laufzeit würde Dir wohl auch eine einfache Komponente reichen.

Delphi-Quellcode:
  TDCustom = class(TComponent)
  private
    FEnabled: Boolean;
    FFileName: String;
  protected
    procedure SetEnabled(const Value: Boolean); virtual;
    ...
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Enabled: Boolean read FEnabled write SetEnabled;
    property FileName: String read GetFileName write GetFileName;
  end;
Die kannst Du dann registrieren und z.B. zur Entwicklungszeit in ein DataModul setzen oder auch dynamisch erzeugen...

Oder habe ich etwas falsch verstanden?

Stahli


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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