AGB  ·  Datenschutz  ·  Impressum  







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

Spezieller TFrame

Ein Thema von hzzm · begonnen am 19. Mär 2019 · letzter Beitrag vom 22. Mär 2019
Antwort Antwort
Seite 1 von 2  1 2      
Rollo62

Registriert seit: 15. Mär 2007
4.171 Beiträge
 
Delphi 12 Athens
 
#1

AW: Spezieller TFrame

  Alt 20. Mär 2019, 07:44
Als Gedankenanstoß:

Du könntest auch ein Interface dazunehmen, und so dein TFrame zwingen entsprechende Felder und Routinen anzulegen.

TMyCoolFrame = class(TFrame, IMyCoolFrame) Das funktioniert dann auch im Designer wie gewohnt,
aber ich denke du möchtest von der Basisklasse ableiten eben um dir das Anlegen in jedem Frame zu sparen.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Spezieller TFrame

  Alt 20. Mär 2019, 08:15
Nur wenn man auf Zugriffsverletzungen und ähnliches steht.

Nie Interface- und TObject-basierte Referenzierung mischen
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#3

AW: Spezieller TFrame

  Alt 20. Mär 2019, 08:19
Nur wenn man auf Zugriffsverletzungen und ähnliches steht.

Nie Interface- und TObject-basierte Referenzierung mischen
So ein Unsinn ... in diesem Fall ist das genauso gefährlich als wenn ich die TFrame-Instanz direkt übergebe.

Das Problem, auf welches du dich beziehst ist dort, wo die Referenzzählung die Instanz aus dem Speicher kicken kann, da sollte man nur noch per Interface auf die Instanz zugreifen.
  Mit Zitat antworten Zitat
hzzm

Registriert seit: 8. Apr 2016
103 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: Spezieller TFrame

  Alt 20. Mär 2019, 08:27
Nur wenn man auf Zugriffsverletzungen und ähnliches steht.

Nie Interface- und TObject-basierte Referenzierung mischen
Soweit ich das verstanden habe, kriegst Du das Problem nur, wenn Du von TInterfacedObject erbst. Sonst findet keine Referenzgezaehlte Destruktion statt.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.171 Beiträge
 
Delphi 12 Athens
 
#5

AW: Spezieller TFrame

  Alt 22. Mär 2019, 06:41
Nur wenn man auf Zugriffsverletzungen und ähnliches steht.

Nie Interface- und TObject-basierte Referenzierung mischen
Das mache ich auch nicht, und habe keinerlei Probleme damit.
Der Zugriff ist dann natürlich ausschliesslich über Interfaces.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: Spezieller TFrame

  Alt 20. Mär 2019, 08:16
Was geht ist folgendes:

Wir erstellen uns manuell eine Ableitung von TFrame :
Delphi-Quellcode:
unit CustomFrameApp.Frames.MyBaseFrame;

interface

uses
  Vcl.ExtCtrls,
  Vcl.Forms;

type
  TMyBaseFrame = class(TFrame)
  private
    FIcon: TImage;
  published
    property Icon: TImage read FIcon write FIcon;
  end;

implementation

end.
Dann erstellen wir uns ein neues TFrame wie gehabt und verändern den Source leicht:
Delphi-Quellcode:
unit CustomFrameApp.Frames.MyFrame;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.Dialogs,
  // die Unit mit dem Vorgänger-Frame
  CustomFrameApp.Frames.MyBaseFrame;

// Umbiegen der Klasse TFrame auf die gewünschte Klasse
type
  TFrame = CustomFrameApp.Frames.MyBaseFrame.TMyBaseFrame;

type
  TMyFrame = class(TFrame)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

end.
  Mit Zitat antworten Zitat
hzzm

Registriert seit: 8. Apr 2016
103 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: Spezieller TFrame

  Alt 20. Mär 2019, 08:25
Delphi-Quellcode:
// Umbiegen der Klasse TFrame auf die gewünschte Klasse
type
  TFrame = CustomFrameApp.Frames.MyBaseFrame.TMyBaseFrame;
Interessant, und der FormDesigner bei F12 frisst das Teil dann trotzdem wie gewohnt?
Muss ich mal testen. Mein Loesungsweg war dann doch ne Ecke umstaendlicher...
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#8

AW: Spezieller TFrame

  Alt 20. Mär 2019, 08:29
Das Problem ist, dass die IDE nach dem Namen der Vorgänger-Klasse schaut, wenn der Vorgänger keine DFM Datei hat.

Wenn dann der Name der Vorgänger-Klasse <> TFrame dann wird das Dingen wie ein TForm behandelt. Das ist das ganze Geheimnis.

Auf das gleiche Problem trifft man übrigens auch bei TDataModule (aber wahrscheinlich seltener, weil man da nicht so viel ableitet).

Geändert von Schokohase (20. Mär 2019 um 08:34 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.171 Beiträge
 
Delphi 12 Athens
 
#9

AW: Spezieller TFrame

  Alt 22. Mär 2019, 06:45
Delphi-Quellcode:
// Umbiegen der Klasse TFrame auf die gewünschte Klasse
type
  TFrame = CustomFrameApp.Frames.MyBaseFrame.TMyBaseFrame;
Hallo Schokohase,

ja, das ist eine super Lösung.
Ich benutze das "Umbiegen" in ähnlicher Form an einigen Stellen.

Ich frage mich wie das "Umbiegen" als Fachbegriff heisst, weil ich nenne das für mich manchmal Unit-Forwarding.

Hat diese Methode vielleicht einen klaren Namen ?
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
714 Beiträge
 
Delphi 12 Athens
 
#10

AW: Spezieller TFrame

  Alt 22. Mär 2019, 12:27
Delphi-Quellcode:
// Umbiegen der Klasse TFrame auf die gewünschte Klasse
type
  TFrame = CustomFrameApp.Frames.MyBaseFrame.TMyBaseFrame;
Hallo Schokohase,

ja, das ist eine super Lösung.
Ich benutze das "Umbiegen" in ähnlicher Form an einigen Stellen.

Ich frage mich wie das "Umbiegen" als Fachbegriff heisst, weil ich nenne das für mich manchmal Unit-Forwarding.

Hat diese Methode vielleicht einen klaren Namen ?
Interposer class
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:44 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