AGB  ·  Datenschutz  ·  Impressum  







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

procedure wird nicht aufgerufen

Ein Thema von JnZn558 · begonnen am 5. Sep 2010 · letzter Beitrag vom 6. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#1

procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 07:20
Delphi-Quellcode:
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;
bei obige beispiel wird die procedure SetTab korrekt aufgerufen

Delphi-Quellcode:
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;
hier wird die procedure SetTab gar nicht aufgerufen, warum tut es nicht??? was mache ich falsch
Peace on the world
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 07:42
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's

Geändert von SirThornberry ( 5. Sep 2010 um 07:44 Uhr)
  Mit Zitat antworten Zitat
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#3

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 09:09
ja, eine instanz hab ich erzeugt, sonst wuerde man die Subeigentschaft DrawOwn nicht angezeigt.
Peace on the world
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 09:18
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 12:14
was mache ich falsch?
Du hältst dich nicht an die Namenskonventionen von Borland und verwirrst dadurch die Mitleser und auch dich selbst.
Daher sollte der Code so aussehen:
Delphi-Quellcode:
private
  FDrawOwn : Boolean;
  procedure SetDrawOwn(const Value:Boolean);
public
 property DrawOwn: Boolean read FDrawOwn write SetDrawOwn;
So erkennt man leichter was zusammengehört (weil "DrawOwn" konsistent verwendet wird).

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.
  Mit Zitat antworten Zitat
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#6

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 15:58
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.
was mache ich falsch?
Du hältst dich nicht an die Namenskonventionen von Borland und verwirrst dadurch die Mitleser und auch dich selbst.
Daher sollte der Code so aussehen:
Delphi-Quellcode:
private
  FDrawOwn : Boolean;
  procedure SetDrawOwn(const Value:Boolean);
public
 property DrawOwn: Boolean read FDrawOwn write SetDrawOwn;
So erkennt man leichter was zusammengehört (weil "DrawOwn" konsistent verwendet wird).

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.
ich komme von C++ da ist gewoehnlich membervariable mit einem m voranzustellen.

ich weiss nicht was F bei klassevariable bei delphi bedeutet, kann mir jemand bitte aufklaeren wofuer das steht?
Peace on the world
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 16:05
"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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#8

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 16:59
was ist falsch an meinem code, das SetTab nicht aufgerufen wird
Peace on the world
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#9

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 19:00
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?
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#10

AW: procedure wird nicht aufgerufen

  Alt 5. Sep 2010, 20:19
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?
irgendwie kappiere ich deine antwort nicht, ich hab doch ein setter funktion "SetTab", das hast du doch auch erwaehnt, und von aussen, is vorgesehen, wenn die eigentschaft "TTest.DrawOwn" gesetzt is, sollte SetTab dadurch aufgerufen, aber es tut nicht wie geplant
Peace on the world
  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 15:19 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