AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Mehrere Klassen von einer Klasse ableiten

Ein Thema von gargano · begonnen am 27. Apr 2012 · letzter Beitrag vom 30. Apr 2012
Antwort Antwort
Seite 2 von 3     12 3   
gargano

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

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 13:03
Hallo Bummi,

danke für die Antwort, leider kann ich Dein Beispiel nicht auf mein Problem abbilden.

Könntest Du bitte
TBaseClassClass=Class of TBaseClass;
in meinem Beispiel einfügen, damit ich damit klarkomme
Danke im Vorraus.

Gruß
Gargano
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#12

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 15:31
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:=TBaseClassClass(FindClass('TDeviceModule1')).Create(Self);
end;

end.

BaseUnit:

unit BaseUnit;

interface

uses SysUtils, Classes;

type
  TBaseClassClass=Class Of TBaseClass;
  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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
gargano

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

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 16:20
Hallo Bummi,

super, das haut erstmal hin.

Eins ist noch sehr merkwürdig und führt zum Nichtfunktionieren:
TDeviceModule1 ist ja class(TBaseClass) abgeleitet von TDataModule.
In Design Tab wird auch ein TDataModule gezeigt.
Nur wenn ich das Projekt schließe und wieder öffne ist jetzt im Design Tab ein TForm abgebildet ?

Was kann das sein ?

Gruß
Gargano
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.504 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 16:23
Mach mal die DFM auf und schau was in der ersten Zeile drinsteht.

DFM mit einem Texteditor öffnen (die darf natürlich nicht im Binär-Format gespeichert sein ... Rechtsklick im Formeditor und Text-DFM auswählen, falls falsches Format)
oder im Form-Editor Alt+F12 drücken
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
gargano

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

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 16:57
Hallo Bummi,

das steht da drin

Delphi-Quellcode:
object DeviceModule1: TDeviceModule1
  Left = 0
  Top = 0
  ClientHeight = 116
  ClientWidth = 207
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = DataModuleCreate
  PixelsPerInch = 96
  TextHeight = 13
end
Gruß
Gargano

Geändert von mkinzler (28. Apr 2012 um 17:06 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.504 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 17:13
Gut, das sieht OK aus.

Delphi-Quellcode:
interface

....

type
  TBaseClass = class(...
    ...
  end;

...

procedure Register;

implementation

procedure Register;
begin
  RegisterClass(TBaseClass);
end;

...
Und nun diese Unit in ein Package rein, welches du im Delphi registrierst.
(irgend wo her muß Delphi, bzw. der Formdesigner, diese Klasse auch kennen)


Ach ja, FindClass geht über eine Liste, welche mit RegisterClass befüllt wurde.
Ist die Klasse dort nicht drinn, dann kann sie nicht gefunden werden, weder von dir (FindClass), noch von dem VCL-Form-Editor.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyDevice := FindClass('TDeviceModule1') as TBaseClass;
  if not Assigned(MyDevice) then
    raise Exception.Create('TDeviceModule1 wurde nicht gefunden');
  TBaseClass(MyDevice).Create(Self);
end;
Genauso wie TBaseClass für den Form-Editor registriert sein muß, muß auch TDeviceModule1 dort registriert sein, wenn du es über FindClass finden/erstellen willst.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyClass: TBaseClassClass;
  MyDevice: TBaseClass;
begin
  MyClass := TDeviceModule1;
  MyDevice := MyClass.Create(Self);
  MyDevice.DoSomethingImportant;
  MyDevice.Free;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list

Geändert von himitsu (28. Apr 2012 um 17:21 Uhr)
  Mit Zitat antworten Zitat
gargano

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

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 17:42
Hallo Himitsu,

wie kann es aber sein daß in einem Nachfahren von TDatamodule Eigenschaften wie Clientwidth und Font enthalten sind ?
(TDeviceModule2 ist eine Klasse von TBaseClass, die wiederum eine Klasse von TDatamodule ist)

Gruß
Gargano
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.504 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 17:54
Meinst du im OI oder im Quellcode (Codeverfollständigung) ?


Im OI ... wenn die VCL die falsche Klasse erwischt, bzw. es als TForm läd, obwohl es was Anderes ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
gargano

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

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 18:10
Ich meine im OI.
Was dann dazu führt, daß bei der Ausführung ein Fehler auftritt.

Wie kann ich denn das hinbringen daß es richtig ist ?

Ich bin so vorgegangen :
Ein TDatamodule erzeugt aus Datei/Neu/Weitere ->Delphi-Projekte/Delphi-Dateien/Datenmodule.

Dies erzeugt dann ein Datenmodule von TDatamodule.
Darin habe ich diese Zeile im Interface geändert
Delphi-Quellcode:
TDeviceModule1 = class(TDataModule)
in
TDeviceModule1 = class(TBaseClass)
im OI ist auch dann TDataModule vorhanden.
Soweit so gut.

Wenn ich jetzt das Projekt schließe und wieder öffne erscheint dann unter TDeviceModule1 im OI ein TForm, was ja nicht richtig ist.
Was wiederum Deine Annahme bestätigt, daß die VCL die falsche Klasse ewischt.

Evtl. ist es auch der falsche Ansatz einfach die Klasse im Code zu ändern.

Wie kann ich das richtig machen ?

Gruß
Gargano
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#20

AW: Mehrere Klassen von einer Klasse ableiten

  Alt 28. Apr 2012, 18:23
Ich habe leider gerade keine Zugriff auf ein Delphi, vielleicht hilft Dir das weiter

http://www.delphi-forum.de/topic_Abl...e_90388,0.html
http://www.delphipraxis.net/48470-da...le-kommen.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf