![]() |
procedure wird nicht aufgerufen
Delphi-Quellcode:
bei obige beispiel wird die procedure SetTab korrekt aufgerufen
TAb = class(TPersistent)
private m_owndraw: Boolean; public constructor Create; published property DrawOwn: Boolean read m_owndraw write m_owndraw; end; TTest = class(TPageControl) private m_tab: Boolean; procedure SetTab( ab: Boolean ); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property DrawOwn: Boolean read m_tab write SetTab; end;
Delphi-Quellcode:
hier wird die procedure SetTab gar nicht aufgerufen, warum tut es nicht??? was mache ich falsch
TAb = class(TPersistent)
private m_owndraw: Boolean; public constructor Create; published property DrawOwn: Boolean read m_owndraw write m_owndraw; end; TTest = class(TPageControl) private m_tab: TAb; procedure SetTab( ab: TAb ); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property DrawOwn: TAb read m_tab write SetTab; end; |
AW: procedure wird nicht aufgerufen
weißt du denn bei der zweiten Klasse überhaupt jemals ein TAb zu?
Der Unterschied ist das beim ersten Quelltext dein mTab ein einfacher Datentyp ist. Beim zweiten Quelltext ist es hingegen eine Klasse bei der dann auch eine Instanz erzeugt werden muss etc. |
AW: procedure wird nicht aufgerufen
ja, eine instanz hab ich erzeugt, sonst wuerde man die Subeigentschaft DrawOwn nicht angezeigt.
|
AW: procedure wird nicht aufgerufen
imho muss keine Instanz erzeugt werden, es wird ja lediglich die Referenz in ab gespeichert.
Somit müsste SetTab auch dann durchlaufen werden, wenn man DrawOwn nur nil zuweist. Ich befürchte aber, dass der Teufel da im Detail steckt. Wäre schön, wenn wir den ganzen Quellcode zu diesen Klassen bekommen könnten ach ja, und natürlich den Code, wo diese Klasse benutzt wird. |
AW: procedure wird nicht aufgerufen
Zitat:
![]() Daher sollte der Code so aussehen:
Delphi-Quellcode:
So erkennt man leichter was zusammengehört (weil "DrawOwn" konsistent verwendet wird).
private
FDrawOwn : Boolean; procedure SetDrawOwn(const Value:Boolean); public property DrawOwn: Boolean read FDrawOwn write SetDrawOwn; Wenn auf das Property DrawOwn niegends schreibend zugegriffen wird, dann optimiert der Kompiler die Procedure SetDrawOwn einfach weg. Man erkennt es daran, dass die blauen Punkte nach dem Kompilieren fehlen. |
AW: procedure wird nicht aufgerufen
so hier den ganzen komponente quellcode
ist nur so ne beispiel, deshalb kein besondere sagenhafte Name vergeben.
Delphi-Quellcode:
unit PageControl1;
interface uses SysUtils, Classes, Controls, ComCtrls; type TAb = class(TPersistent) private m_owndraw: Boolean; public constructor Create; published property DrawOwn: Boolean read m_owndraw write m_owndraw; end; TTest = class(TPageControl) private m_tab: TAb; procedure SetTab( ab: TAb ); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property DrawOwn: TAb read m_tab write SetTab; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TTest]); end; { TAb } constructor TAb.Create; begin Self.m_owndraw := True; end; { TTest } constructor TTest.Create(AOwner: TComponent); begin inherited; Self.m_tab := TAb.Create; end; destructor TTest.Destroy; begin Self.m_tab.Free; inherited; end; procedure TTest.SetTab(ab: TAb); begin Self.m_tab := ab; Self.OwnerDraw := ab.DrawOwn; end; end. Zitat:
ich weiss nicht was F bei klassevariable bei delphi bedeutet, kann mir jemand bitte aufklaeren wofuer das steht? |
AW: procedure wird nicht aufgerufen
"F" steht wohl für das englische Wort field, zu deutsch Feld. Als Felder, Eigenschaften oder Attribute bezeichnet man in der OOP private Variablen einer Klasse.
|
AW: procedure wird nicht aufgerufen
was ist falsch an meinem code, das SetTab nicht aufgerufen wird
|
AW: procedure wird nicht aufgerufen
Dein bisher gezeigter Code enthält keinerlei Aufrufe von TTest.SetTab, daher ist die Antwort einfach: Weils nicht aufgerufen wird ;) Innerhalb von TTest greifst du direkt auf m_tab zu ohne den Setter zu benutzen und von außen wird es im gezeigten Code auch nirgends angesprochen. Warum also sollte TTest.SetTab überhaupt aufgerufen werden?
|
AW: procedure wird nicht aufgerufen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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