AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Polymorphie mit eigenen Frames: TabOrder nicht gefunden
Thema durchsuchen
Ansicht
Themen-Optionen

Polymorphie mit eigenen Frames: TabOrder nicht gefunden

Ein Thema von Neg · begonnen am 18. Jan 2004 · letzter Beitrag vom 22. Jan 2004
 
Neg

Registriert seit: 16. Jan 2004
Ort: Berlin
63 Beiträge
 
Delphi 5 Professional
 
#1

Polymorphie mit eigenen Frames: TabOrder nicht gefunden

  Alt 18. Jan 2004, 19:14
Moin moin... Bin neu hier und hab auch gleich eine Frage.

Achtung, wird etwas länger, aber der größte Teil des Quellcodes zeigt nur den Kontext des Problems und kann schnell überflogen werden.

Also, in meinem Programm erstelle ich dynamisch zur Laufzeit Seiten für ein PageControl. Diese Seiten sehen folgendermaßen aus:
Delphi-Quellcode:
type
  TFileSheet = Class(TTabSheet)
    private
    FileName: String;
    Modified: Boolean;
    Mode: TGenerationMode;
    ID: integer;
    AddRule: TAdditionalRules;
    ContentFrame: TSheetFrame;
  end;
Der ContentFrame wird von verschiedenen Klassen, die von TSheetFrame abgeleitet wurden, instanziiert, z.B. so:
Delphi-Quellcode:
case Mode of
SimpleMode:
  begin
  SheetFrame:=TFrameSimpleMode.Create(FileSheet[c]);
  InitSheetFrame(SheetFrame as TFrameSimpleMode);
  end;
AdvancedMode:
  begin
  SheetFrame:=TFrameAdvMode.Create(FileSheet[c]);
  InitSheetFrame(SheetFrame as TFrameAdvMode);
  end;
// usw...
else SheetFrame:=NIL;
end; {of case}

FileSheet[c].ContentFrame:=SheetFrame;
SheetFrame.Parent:=FileSheet[c];
Ein TSheetFrame ist übrigens lediglich eine Interface-Klasse folgender Gestalt:
Delphi-Quellcode:
type
  TSheetFrame = Class(TFrame)
  public
      procedure RefreshLanguage; virtual; abstract;
  end;
Die Polymorphie ist eigentlich nur dafür gut, damit ich später, wenn man zur Laufzeit die Sprache umstellt, folgendes schreiben kann:
Delphi-Quellcode:
for i:=0 to PageControlMode.PageCount-1 do
    begin
    FileSheet[i].ContentFrame.RefreshLanguage;
    end;
So, jetzt das eigentlich Problem:
Damit die Polymorphie funktioniert, muss ich ja meine Frames von TSheetFrame statt von TFrame ableiten. Also habe ich einfach überall in dem automatisch generierten Code die Klassen-Deklaration entsprechend umgeändert.
Vorher:
Delphi-Quellcode:
type
  TFrameSimpleMode = class(TFrame)
    ComboBoxTemp: TComboBox;
    LabelTemplate: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure RefreshLanguage; override;
  end;
Nachher:
Delphi-Quellcode:
type
  TFrameSimpleMode = class(TSheetFrame)
    ComboBoxTemp: TComboBox;
    LabelTemplate: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure RefreshLanguage; override;
  end;
Alles funktioniert wie es soll.
Aber: Nachdem ich das Projekt geschlossen hatte, konnte ich mir nach dem Öffnen nicht mehr die Frames (den Code oder das Form) anschauen, ohne die angehängte Fehlermeldung präsentiert zu bekommen. Danach lässt sich das Programm nicht mehr compilieren! Wenn ich mir aber nach dem Öffnen kein Frame anschaue, dann lässt sich das Programm aber normal compilieren und starten.

Offensichtlich kommt Delphi irgendwie nicht damit klar, dass ich an den "von ihm" kreierten Frames rumgefuscht habe. Ich würde jetzt aber gerne wissen, was genau das Problem ist. Wie würde man das richtig machen (mit Polymorphie). Ich habe das Problem inzwischen ohne Polymorphie -mit case und typecasts- gelöst. Ich möchte aber gerne wissen, warum es nicht so ging wie ich es versuchte.

PS: Der erste, der eine gute Antwort abliefert, kriegt ein virtuelles Bier spendiert.
Angehängte Grafiken
Dateityp: gif error.gif (4,7 KB, 19x aufgerufen)
  Mit Zitat antworten Zitat
 


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 13: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 by Thomas Breitkreuz