AGB  ·  Datenschutz  ·  Impressum  







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

Frames und Vererbung

Ein Thema von Jens Schumann · begonnen am 14. Dez 2005 · letzter Beitrag vom 20. Jun 2006
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#1

Frames und Vererbung

  Alt 14. Dez 2005, 14:16
Hallo,
ich habe heute mit D7 Pro ein neues Projekt angefangen. Die Oberfläche möchte ich mit Frames realisieren. Weil ich die Konstruktorsignatur erweitern möchte habe ich einen zusätzlich Konstruktor eingefügt. TFrameBase ist der Vorfahre aller Frames.
Delphi-Quellcode:
unit tpm_base_frame;

interface

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

type
  TFrameBaseClass = class of TFrameBase;

  TFrameBase = class(TFrame)
  private
    { Private-Deklarationen }
    FActionIndex : Integer;
    FSystemDataprovider : TSystemDataprovider;
  protected
    property ActionIndex : Integer read FActionIndex;
    property SystemDataprovider : TSystemDataprovider read FSystemDataprovider;
  public
    { Public-Deklarationen }
    constructor CreateNew(AOwner: TComponent; ActionIndex : Integer; SystemDataprovider : TSystemDataprovider); virtual;
  end;

implementation

{$R *.dfm}

{ TFrameBase }

constructor TFrameBase.CreateNew(AOwner: TComponent; ActionIndex: Integer; SystemDataprovider: TSystemDataprovider);
begin
  inherited Create(AOwner);
  FActionIndex:=ActionIndex;
  FSystemDataprovider:=SystemDataprovider;
end;

end.
Jetzt habe einen Nachfahren erzeugt
Delphi-Quellcode:
unit tpm_stammdaten_frame;

interface

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

type
  TFrameStammdaten = class(TFrameBase)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

end.
Bis jetzt habe Delphi noch nicht neu gestartet! Alles läuft einwandfrei.
Nach dem ich Delphi geschlossen habe (ohne irgendwelche Fehlermeldungen) und anschließend wieder geöffnet habe erhalten ich beim Laden (also beim Start von Delphi) des Frames TFrameStammdaten folgende Fehlermeldung:

Fehler beim Lesen von FrameStammdaten.TabOrder:
Eigenschaft TabOrder existiert micht. Fehler ignorieren
und fortfahren usw.

Wenn ich den Fehler ignoriere siehtder Frame TFrameStammdaten aus wie ein Formualr und im OI erscheinen auch fast alle Eigenschaften und Ereignisse eines TForm.

Ich bin völlig ratlos. Woran kann das liegen?
Ich habe schon auf den Borlandseiten gesucht und im CodeCentral ein Beispiel gefunden. Dort machen die es aber genauso wie ich.

[EDIT]Ich habe mal ein minimales Beispiel angehängt [/EDIT]
Angehängte Dateien
Dateityp: zip beispiel_117.zip (2,4 KB, 14x aufgerufen)
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#2

Re: Frames und Vererbung

  Alt 14. Dez 2005, 14:46
das passiert, wenn die Eigenschaft "Name" des Frames nicht mit dem Typbezeichner in der Deklaration übereinstimmt (Typbezeichner muß 'T'+Name sein).

Falls dies der Fall ist: Typdeklaration gleich 'T' + <jetziger_Name_des_Frame> setzen ('TFrame1' o.ä.), anschließend Frame in 'FrameStammdaten' bzw. 'FrameBase' umbenennen, der Typbezeichner wird dabei automatisch angepasst.

Nachtrag: du könntest einfach auch die *.DFM - Datei bearbeiten und dort die Name-Eigenschaft ändern.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Frames und Vererbung

  Alt 14. Dez 2005, 15:13
Zitat von tomsel:
das passiert, wenn die Eigenschaft "Name" des Frames nicht mit dem Typbezeichner in der Deklaration übereinstimmt (Typbezeichner muß 'T'+Name sein).

Falls dies der Fall ist: Typdeklaration gleich 'T' + <jetziger_Name_des_Frame> setzen ('TFrame1' o.ä.), anschließend Frame in 'FrameStammdaten' bzw. 'FrameBase' umbenennen, der Typbezeichner wird dabei automatisch angepasst.

Nachtrag: du könntest einfach auch die *.DFM - Datei bearbeiten und dort die Name-Eigenschaft ändern.
Vielen Dank, da komme ich aber nicht ganz mit. Die Eigenschaft Name von TFrameStammdaten war und ist FrameStammdaten.
Bei TFrameBase ist es analog.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#4

Re: Frames und Vererbung

  Alt 14. Dez 2005, 17:51
o.k., dann gibt es für diesen Fehler wohl mindestens noch eine zweite mögliche Ursache. Die kenn' ich aber leider nicht.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Frames und Vererbung

  Alt 14. Dez 2005, 17:59
Moin,

ja diesen Fehler hatte ich auch mal.

Deklariere einfach in deiner neuen Oberklasse folgendes, dann hast du keine Probleme mehr...

Delphi-Quellcode:
  :
  TFrameBase = class(TFrame)
  private
    _OldCreateOrder:boolean;
    _PixelsPerInch:integer;
    _TextHeight:integer;
  published
    property OldCreateOrder:boolean read _OldCreateOrder write _OldCreateOrder;
    property PixelsPerInch:integer read _PixelsPerInch write _PixelsPerInch;
    property TextHeight:integer read _TextHeight write _TextHeight;
  :
MfG
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Frames und Vererbung

  Alt 14. Dez 2005, 20:01
Hallo omata,
vielen Dank. Damit ist der Fehler beim Öffnen des Projektes
Zitat:
Fehler beim Lesen von FrameStammdaten.TabOrder:
Eigenschaft TabOrder existiert micht. Fehler ignorieren
und fortfahren usw.
leider nicht verschwunden.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Frames und Vererbung

  Alt 14. Dez 2005, 21:24
Hallo Jens,

dein Fehler hörte sich an, wie meiner. Das scheint aber doch anders zu sein.
Ich habe mir mal dein Beispiel angesehen.

Und da geht es auch ohne irgendwelchen Zusatzcode.

Also ich habe folgendes gemacht...

1. Projekt geöffnet.
2. Die beiden Fehlermeldungen mit Ignorieren bestätigt
3. Unit3 geöffnet
4. Unit3 aus der linken oberen Ecke ziehen (irgendwo anders hin)
4. Unit1 auch verschieben (minimal, damit Speichern möglich wird)
5. Projekt speichern, Fehlermeldung mit ja bestätigen

fertig.


MfG
Thorsten
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Frames und Vererbung

  Alt 15. Dez 2005, 00:55
Zitat von omata:
2. Die beiden Fehlermeldungen mit Ignorieren bestätigt
Und dann beten ? Ich glaube nicht, daß Jens so was will.

Aber egal. Es geht mir hierdrum :

Zitat von Jens Schumann:
ich habe heute mit D7 Pro ein neues Projekt angefangen. Die Oberfläche möchte ich mit Frames realisieren.
Unter Oberfläche ist wohl die Benutzeroberfläche gemeint ? Und die soll einheitlich und vererbbar sein ? Falls ja : So was schiebt man ins Repository, läßt Delphi die nötigen Deklarationen automatisch machen, agiert von da aus und dann kommen keine Fehlermeldungen. Mit Frames hat das dann eben nichts mehr zu tun. Wozu sollen die überhaupt gut sein ?
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Frames und Vererbung

  Alt 15. Dez 2005, 01:07
Es geht hier nicht um beten. Delphi hat sich irgendwie verschluckt, das bedeutet ich versuche nur einen sinnvollen Weg vorzugeben, mit dem man den Code wieder zum Laufen bekommt.
Dazu gehört eben auch mal das Delphi da erst wieder manipulieren darf, wenn der User einen sinnvollen Weg vorgegeben hat. Und dazu gehört dann auch mal, dass man etwas ignoriert, weil man weiss was man tut.
Mir geht es hier um Problemlösungen, deshalb die nachvollziebaren Schritte, wie das Projekt zu retten ist (auch wenn es nur ein leeres Dummy-Projekt ist)

Hansa, wenn du keinen Sinn in Frames siehst, dann tust du mir leid. Frames sind einfach nur genial. Sie erhöhen die Übersichtlichkeit von Programmen ungemein. So kann man komplizierte Oberflächen aus kleinen Einzelunits zusammenbauen. Die Einzelunit sind dabei kleiner und dadurch erhöht sich die Programmübersichtlichkeit.

Und was ist so schlimm an vererbaren Oberflächenelementen?
Stell dir doch mal vor, die Funktionalität in deiner Oberfläche besteht aus vielen immer wieder ähnlichen Funktionen. Dann ist die Vererbung doch sehr interessant, um nicht immer das Rad neu zuerfinden. Also, wenn man etwas weiterdenkt kommen einem schon sinnvolle Ideen für Frames und Vererbung. Man kann damit natürlich auch viel Unsinn machen, aber das gilt wohl für viele Dinge. Man kann natürlich auch auf Frames verzichten und sich das Leben selber schwer machen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Frames und Vererbung

  Alt 15. Dez 2005, 01:38
Omata : Wiederholung. 8) hierum geht es mir :

Zitat von Hansa:
Aber egal. Es geht mir hierdrum :

Zitat von Jens Schumann:
ich habe heute mit D7 Pro ein neues Projekt angefangen. Die Oberfläche möchte ich mit Frames realisieren.
Unter Oberfläche ist wohl die Benutzeroberfläche gemeint ?
Geht es um was komplett anderes, dann schlagt euch eben die Frames um die Ohren, aber ohne mich. Ich brauche sie jedenfalls nicht und wollte eine Alternative aufzeigen. Zumindest für die Benutzeroberfläche : geht es also um folgendes : immer gleiche Tastenbedeutungen und Mausereignisse. Dimensionen, Farben, Schriftgrößen, Koordinaten usw. der Forms und der Controls darauf festlegen (auch daß überhaupt die richtigen da sind). Diese notfalls anpassen oder neu hinzunehmen und sie vererben oder eben nicht. Ist das die Frage, dann geht das wie beschrieben. Und zwar ohne Fehlermeldungen, weil auch die DFMs und andere Dateien davon betroffen sind und Delphi das schon richtig macht. Das bedeutet auch die Vorgabe INHERITED, die dann so einfach nicht mehr vergessen werden kann.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:54 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