Einzelnen Beitrag anzeigen

gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 10:41
Hallo Zusammen,

jetzt habe ich mal versucht das ganze in Code umzuwandeln
Ich habe die Unit Main (Hauptprogramm), BaseUnit (abstrakte Klasse) und Unit1 (DeviceModule1).

Main :
Delphi-Quellcode:
unit Main;

interface

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

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

var
  Form1: TForm1;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
        MyDevice:=TBaseClass(FindClass('TDeviceModule1'));
        TBaseClass(MyDevice).Create(Self);
end;

end.

BaseUnit:

unit BaseUnit;

interface

uses SysUtils, Classes;

type
  TBaseClass = class (TDataModule)
  protected
    procedure DoSomethingImportant; virtual; abstract;
    procedure DoSomethingMoreImportant; virtual; abstract;
    procedure DoSomethingEvenMoreImportant; virtual; abstract;
  end;

implementation

end.

Unit1:

unit Unit1;

interface

uses
  SysUtils, Classes,Forms,BaseUnit;

type
  TDeviceModule1 = class(TBaseClass)
  procedure ShowMsg (Msg:String);
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DeviceModule1: TDeviceModule1;

implementation

{$R *.dfm}

procedure TDeviceModule1.DataModuleCreate(Sender: TObject);
begin
     ShowMsg('Create');
end;

procedure TDeviceModule1.ShowMsg (Msg:String);
begin
  Application.MessageBox(PChar(Msg),'Module1');
end;

initialization
RegisterClasses([TDeviceModule1]);

end.
Beim Aufruf von Button1Click im Main hat
MyDevice dann diesen Wert in der Liste der überwachten Ausdrücke :
([csSubComponent..csTransient,(außerhalb der zulässigen Bereichs) 5..(außerhalb der zulässigen Bereichs) 7])

Beim Aufruf von TBaseClass(MyDevice).Create(Self) im Main kommt es zu einer Exception.
Warum ?

Gruß
Gargano
  Mit Zitat antworten Zitat