AGB  ·  Datenschutz  ·  Impressum  







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

Klasse manuell ändern

Ein Thema von gargano · begonnen am 2. Mai 2012 · letzter Beitrag vom 4. Mai 2012
Antwort Antwort
gargano

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

Klasse manuell ändern

  Alt 2. Mai 2012, 15:27
Hallo Leute,

hier ein Effekt, der mich ziemlich nervt.

Ich habe 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 die Annahme bestätigt, daß die VCL die falsche Klasse ewischt.

Ich habe ziemlich lang im Netz gegoogelt, aber keine Lösung gefunden. Außer das man es in die Objektablage schieben soll.
Das wiederum bringt 2 Probleme.
1. ich kann das Objekt in der Objektablage nicht sehen, obwohl in BorlandStudioRepository.xml enthalten ist.
2. ich kann es nicht ändern, da beim Speichern wieder TForm enthalten ist

Hat jemand eine Idee, wie es nicht mehr dazu kommt daß TForm erscheint anstatt TDatamodule ?

Gruß
Gargano
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Klasse manuell ändern

  Alt 2. Mai 2012, 15:30
Du must den Typ auch im Formular (Dfm-Datei) entsprechend ändern.
Markus Kinzler
  Mit Zitat antworten Zitat
gargano

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

AW: Klasse manuell ändern

  Alt 2. Mai 2012, 15:40
Hallo mkinzler,

hier mal das komplette Dilemma
die dfm ist vom Typ TGemIIIDeviceDataModule
Es geht um abstrakte KLassen

Delphi-Quellcode:

//-------- Die Basis Klasse

unit BaseUnit;

interface

uses SysUtils, Classes;

type
  TBaseClassClass=Class of TBaseClass;
  TBaseClass = class (TDataModule)
  protected
 
  end;



implementation

end.

// Die eigentliche Unit------------
unit GemIIIDeviceUnit;

interface

uses
  SysUtils, Classes,BaseUnit;

type
// hier geändert von TDataModule in TBaseClass
  TGemIIIDeviceDataModule = class(TBaseClass)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  GemIIIDeviceDataModule: TGemIIIDeviceDataModule;

implementation

{$R *.dfm}

end.

// DFM, nach speichern und neu laden ist Clientheight usw eingetragen --------------------

object GemIIIDeviceDataModule: TGemIIIDeviceDataModule
  Left = 0
  Top = 0
  ClientHeight = 206
  ClientWidth = 312
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = True
  PixelsPerInch = 96
  TextHeight = 13
end
Gruß
Gargano
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Klasse manuell ändern

  Alt 2. Mai 2012, 16:08
DFM-Datei (falsch):
Delphi-Quellcode:
object GemIIIDeviceDataModule: TGemIIIDeviceDataModule
  Left = 0
  Top = 0
Richtig wäre aber (man beachte inherited statt object):
Delphi-Quellcode:
inherited GemIIIDeviceDataModule: TGemIIIDeviceDataModule
  Left = 0
  Top = 0
Was ausserdem noch seltsam ist, sind die markierten Properties die in einem Datenmodul nix verloren haben:
Delphi-Quellcode:
object GemIIIDeviceDataModule: TGemIIIDeviceDataModule
  Left = 0
  Top = 0
  ClientHeight = 206 // <===
  ClientWidth = 312 // <===
  Color = clBtnFace // <===
  Font.Charset = DEFAULT_CHARSET // <===
  Font.Color = clWindowText // <===
  Font.Height = -11 // <===
  Font.Name = 'Tahoma// <===
  Font.Style = [] // <===
  OldCreateOrder = True
  PixelsPerInch = 96 // <===
  TextHeight = 13 // <===
end
Andreas
  Mit Zitat antworten Zitat
gargano

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

AW: Klasse manuell ändern

  Alt 2. Mai 2012, 16:36
Hallo smia,

danke für die Antwort,

inherited in dfm funktioniert nicht, da delphi dann meckert daß kein Vorfahr für TBaseclass vorhanden ist
Ich habe in dfm auf Anzeige auf Text geschaltet, dann inherited eingetragen und beim Rückschalten auf Formular kommt dann die Fehlermeldung

Die andern Properties macht ja delphi selber rein, das ist da das Dilemma.

Gruß
Gargano
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: Klasse manuell ändern

  Alt 2. Mai 2012, 16:50
Die andern Properties macht ja delphi selber rein, das ist da das Dilemma.
Naja du hast nachträglich den Klassennamen geändert, aber eben nur im Pas-File und nicht im der DFM.
Das mag die Delphi IDE überhaupt nicht.

Geh' mal zurück zur Unit BaseUnit.
Dessen DFM müsste ungefähr so aussehen:
Delphi-Quellcode:
object DataModule1: TBaseClass
  OldCreateOrder = False
  Left = 256
  Top = 177
  Height = 603
  Width = 829
Anstelle DataModule1 steht bei dir der Name, den du dem Datenmodul gegeben hast.
Ganz wichtig:
Delphi-Quellcode:
var
   DataModule1: TBaseClass;
implementation

uses ...;

{$R *.DFM}   // DAS darf auf keinen Fall fehlen!!
Ausserdem: Prüfe, ob du in deinem Projekt an einer anderen Stelle schon mal den Namen TBaseClass verwendet hast.
Andreas
  Mit Zitat antworten Zitat
gargano

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

AW: Klasse manuell ändern

  Alt 4. Mai 2012, 09:53
Danke shmia, jetzt geht es.
Das Problem war, daß die BaseClass ohne dfm war.
Dann kann man natürlich auch nichts ableiten.

Gruß
Gargano
  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 10:56 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