Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Klasse manuell ändern (https://www.delphipraxis.net/168052-klasse-manuell-aendern.html)

gargano 2. Mai 2012 15:27

Klasse manuell ändern
 
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

mkinzler 2. Mai 2012 15:30

AW: Klasse manuell ändern
 
Du must den Typ auch im Formular (Dfm-Datei) entsprechend ändern.

gargano 2. Mai 2012 15:40

AW: Klasse manuell ändern
 
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

shmia 2. Mai 2012 16:08

AW: Klasse manuell ändern
 
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

gargano 2. Mai 2012 16:36

AW: Klasse manuell ändern
 
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

shmia 2. Mai 2012 16:50

AW: Klasse manuell ändern
 
Zitat:

Zitat von gargano (Beitrag 1164592)
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.

gargano 4. Mai 2012 09:53

AW: Klasse manuell ändern
 
Danke shmia, jetzt geht es.
Das Problem war, daß die BaseClass ohne dfm war.
Dann kann man natürlich auch nichts ableiten.

Gruß
Gargano


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