AGB  ·  Datenschutz  ·  Impressum  







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

Datamodule wird zu Formular

Ein Thema von OlafSt · begonnen am 7. Okt 2015 · letzter Beitrag vom 8. Okt 2015
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#1

AW: Datamodule wird zu Formular

  Alt 7. Okt 2015, 13:12
zum Pauschal: Es ist quasi fast unvorhersehbar, ob es funktioniert, also besser nicht benutzen.


Man kann versuchen, ob es funktioniert (wird zumindestens besser, solange das Package mit dem Vorfahren in Delphi installiert/geladen ist), wenn man den Vorfahren registriert
oder man verzichtet eben besser auf eine visuelle Vererbung von Nicht-TForms, von welchen Delphi den Vorfahren nicht direkt kennt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Okt 2015 um 13:21 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Datamodule wird zu Formular

  Alt 8. Okt 2015, 06:54
zum Pauschal: Es ist quasi fast unvorhersehbar, ob es funktioniert, also besser nicht benutzen.
Mag sein, aber bei mir ist 'quasi fast unvorhersehbar' mit 'noch nie' gleichzusetzen, wobei sich dieses 'noch nie' auf einen Zeitraum von 16 Jahren bezieht.

Wurde schon nach der DFM gefragt? Poste doch mal eine abgeleitete DFM... Die ersten 10 Zeilen sollten reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Datamodule wird zu Formular

  Alt 8. Okt 2015, 08:30
Das Verhalten ist reproduzierbar:
Delphi-Quellcode:
unit dm1;

interface

uses
  System.SysUtils, System.Classes;

type
  TDataModule1 = class(TDataModule)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DataModule1: TDataModule1;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

end.
Delphi-Quellcode:
unit dm2;

interface

uses
  System.SysUtils, System.Classes;

type
  TDataModule2 = class(TDataModule)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DataModule2: TDataModule2;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

end.
Bis hier ist die Welt noch in Ordnung ...

Jetzt den Fehler einbauen:
Delphi-Quellcode:
unit dm2;

interface

uses
  System.SysUtils, System.Classes, dm1; // <- da

type
  TDataModule2 = class(TDataModule1) // <- da
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DataModule2: TDataModule2;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

end.
Speichern, Alles schliessen, Projekt wieder öffnen ... DataModule2 öffnen => eine Form!
  • Wie kann man das heilen?
    1. Öffnen der dm2.dfm
      Code:
      object DataModule2: TDataModule2
        OldCreateOrder = False
        Height = 150
        Width = 215
      end
    2. abändern zu
      Code:
      inherited DataModule2: TDataModule2
        OldCreateOrder = False
      end
      und speichern
    3. Jetzt das Projekt neu laden und alles ist wieder schick ...
  • Wie sollte man das richtig machen?

    Zum Ableiten von TForm /TFrame /TDataModule geht man über
    1. Datei - Neu - Weitere...
    2. Delphi-Projekte - Vererbbare Elemente - DataModule1
    3. OK klicken
    Das war es schon.
PS Dieses manuelle Ableiten funktioniert (halbwegs) nur bei Formularen, denn es wird automatisch angenommen, dass es sich um ein Formular handelt. Empfohlen ist diese Vorgehensweise aber nicht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Okt 2015 um 08:43 Uhr)
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Datamodule wird zu Formular

  Alt 8. Okt 2015, 09:22
Ich habe mal den Heilungsprozeß von Sir Rufo durchgeführt. Tatsächlich steht bei den Problem-Datamodules in den DFM-Files "object", während bei den "gesunden" DFMs ein "inherited" steht. Allerdings sind alle Datamodules "per Hand" abgeleitet, von daher muß da noch was anderes im Busch sein - aber wie schon erwähnt wurde, dürfte das in der IDE und ein Fix in sehr weiter Ferne liegen

Da findige Leute meinen Thread in der EE aufgespürt haben (hatte vergessen, das ich ihn da eröffnet hatte), werde ich den Thread hierhin verweisen lassen.

Was lernen wir daraus ? Da will man mal was anderes ausprobieren und den empfohlenen Weg gehen und wird dann so dafür belohnt Ich gelobe feierlich, von Datamodules gleich wieder die Finger zu lassen, so wie ich es all die Jahre zuvor auch getan habe
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.650 Beiträge
 
Delphi 12 Athens
 
#5

AW: Datamodule wird zu Formular

  Alt 8. Okt 2015, 09:34
Allerdings sind alle Datamodules "per Hand" abgeleitet, von daher muß da noch was anderes im Busch sein - aber wie schon erwähnt wurde, dürfte das in der IDE und ein Fix in sehr weiter Ferne liegen
Liegt definitiv nicht an der IDE, sondern immer am User!

Das Ableiten "per Hand", also das einfach Ändern der Parent-Klasse in der PAS-Datei funktioniert immer dann, wenn die Klasse (Datamodule, Frame oder Form) bereits von einem TForm-, TFrame bzw. TDataModule-Abkömmling abgeleitet ist. Dann steht in der DFM nämlich schon inherited drin. Nur wenn man class(TForm) in class(TBaseForm) oder class(TDataModule) in class(TBaseDM) ändert, muss man die DFM anpassen und aus dem object ein inherited machen.

Man muss sich halt nur klar machen, daß einfache Klassenvererbung per Deklaration und Formvererbung, die dann ja auch bei Frames und Datenmodulen verwendet wird, eben nicht dasselbe sind.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Datamodule wird zu Formular

  Alt 8. Okt 2015, 09:31
PS Dieses manuelle Ableiten funktioniert (halbwegs) nur bei Formularen, denn es wird automatisch angenommen, dass es sich um ein Formular handelt. Empfohlen ist diese Vorgehensweise aber nicht.
Kann ich absolut bestätigen, würde sogar weiter gehen und sagen, das tut man einfach nicht, weil's Probleme gibt. Darum habe ich auch in #2 schon nach der DFM gefragt. Ich nutze die Datenmodul-Vererbung intensiv schon seit mehreren Jahren, weil ich Apps habe, die sowohl mit embedded Datenbank als auch mit externem DB-Server arbeiten. Da ist die DM-Vererbung eine prima Sache und hat mir auch noch niemals Probleme bereitet.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  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 03:51 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