Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TFrame ableiten (https://www.delphipraxis.net/35472-tframe-ableiten.html)

martin-sun 7. Dez 2004 18:21


TFrame ableiten
 
hallo leute,

ich habe folgendes problem:
um mein programm dynamisch erweitern zu können nutze ich frames in dll's.

um eine einheitliche schnittstelle zu gewährleisten, müssen all diese frames bestimmte
funktionen besitzen, die ich aus dem hauptprogramm heraus aufrufe. also habe ich eine eigene frameklasse daraus gemacht:

Delphi-Quellcode:
TPluginFrame = class(TFrame)
  public
    { Public-Deklarationen }
    function StartRenaming(MaxFile: Integer): Integer; virtual; abstract;
    function Rename(var FileName: String; ActFile: Integer): Integer; virtual; abstract;
    function RenamingFinished(): Integer; virtual; abstract;

    function SaveSettings(var Settings: String): Integer; virtual; abstract;
    function RestoreSettings(Settings: String): Integer; virtual; abstract;
  end;
diese deklaration ist in einer separaten unit untergebracht, die sowohl in das hauptprogramm, wie auch in jede dll eingebunden ist.
in den dll's ergibt sich nun folgendes bild:

Delphi-Quellcode:
type
  TFrameChangeSpelling = class(TPluginFrame)
    grpboxPlugin: TGroupBox;
    Label1: TLabel;
    lblExample: TLabel;
    radiogrpName: TRadioGroup;
    radiogrpExtension: TRadioGroup;
    procedure radiogrpNameClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    function StartRenaming(MaxFile: Integer): Integer; override;
    function Rename(var FileName: String; ActFile: Integer): Integer; override;
    function RenamingFinished(): Integer; override;

    function SaveSettings(var Settings: String): Integer; override;
    function RestoreSettings(Settings: String): Integer; override;
  end;
ich erstelle in der dll einen neuen frame und kann ihn auch in der entwurfsansicht super bearbeiten. anschließend ändere ich im quelltext des frames 'class(TFrame)' in 'class(TPluginFrame)' um. wenn ich das anschließend erstelle und kompliliere klappt alles super.
nun aber zum dem problem:
wenn ich mein dll-projekt neu öffne und anschließend versuche, den frame anzeigen zu lassen (entwurfsansicht) dann hagelt es fehlermeldungen von nicht vorhandenen TForm eigenschaften (logisch ist ja auch TFrame).
ich vermute delphi erkennt nicht mehr, dass das ganze von TFrame abgeleitet ist.

weiß einer wie ich das der ide klar mache oder woran es genau liegt?

martin

jbg 7. Dez 2004 22:33

Re: TFrame ableiten
 
Zitat:

weiß einer wie ich das der ide klar mache
Benutze dazu Interfaces. An denen hat Delphi nichts auszusetzen.

Delphi-Quellcode:
type
  IPluginFrame = interface
    ['{AAD5CBCC-6D1B-4BA8-A05E-C848C5FFA141}'] // Strg+Shift+G

    function StartRenaming(MaxFile: Integer): Integer;
    function Rename(var FileName: String; ActFile: Integer): Integer;
    function RenamingFinished(): Integer;

    function SaveSettings(var Settings: String): Integer;
    function RestoreSettings(Settings: String): Integer;
  end;
Delphi-Quellcode:
type
  TFrameChangeSpelling = class(TFrame, IPluginFrame)
    // ...
  end;

OLLI_T 7. Dez 2004 22:39

Re: TFrame ableiten
 
HY Martin!

Lange Rede kurzer Sinn ... lass es sein! Du wirst Schiffbruch erleiden. Frames sind Templates und nicht für Vererbung geeignet. Sind letztendlich TScrollingWincontrols, die von der IDE wie ein TForm angezeigt und bearbeitet werden können.

BTW.: Ich verstehe den Sinn und Zweck Deiner von TFrame abgeleiteten Basisklasse nicht. Es gibt kein einziges trauriges Feld, keine noch so winzige Property, keine Methoden, die auch tatsächlich implementiert sind. virtual; abstract; deklarierte Methode haben absolut nichts im Public Abschnitt zu suchen und sind in Deinem Konstrukt völlig fehl am Platze, da keine von eben diesen durch einen Call einer anderen Methoden aufgerufen wird.

Ach so, Frames aus DLL heraus geht nicht. Das spielt die VCL nicht mit. Warum fügst die Frames nicht einfach in Dein Prog ein wenn sich was ändert, compilierst neu und gut.

Gute N8

Der OLLI

martin-sun 8. Dez 2004 19:52

Re: TFrame ableiten
 
an jbg:

interfaces klingt gut. werde ich mal probieren.
vielen dank. :thumb:

an olli_t
frames in dll's sind überhaupt kein problem, wenn man weiß, worauf man dabei achten muss. bei mir funktioniert es jedenfalls einwandfrei.
und was heißt schiffbruch erleiden, meine dll's funktionieren ja wie gewünscht. problem ist halt bloß, das ich den frame im dll-projekt beim erneuten laden des projekts nicht in der entwurfsansicht sehen kann. ich muss erst mit einem anderen editor 'class(TPluginFrame)' in 'class(TFrame)' umbenennen um den frame in delphi wieder in der entwurfsansicht zu sehen. zum compilieren mach ich das unter delphi wieder rückgängig. funktioniert so, ist aber sehr lästig. :nerd:

martin


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