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 Ableitung von TCustomSynEdit -> private Methoden weg (https://www.delphipraxis.net/52551-ableitung-von-tcustomsynedit-private-methoden-weg.html)

Delphi-Freak 30. Aug 2005 20:33


Ableitung von TCustomSynEdit -> private Methoden weg
 
Hi!

Ich ärgere mich da schon eine Zeit lang grün und blau, weil ich eine Komponente von TCustomSynEdit ableiten will. Dabei will ich dann eine private Methode aufrufen, aber er sagt, dass er die nicht kennt :roll: . Zusätzlich sagt er noch, wenn ich den Destructor überschreiben will, dass er den in der Basisklasse nicht findet, obwohl er dort definiert ist.

Bin fast schon verzweifelt und über jede Hilfe dankbar!

Christian Seehase 30. Aug 2005 20:58

Re: Ableitung von TCustomSynEdit -> private Methoden weg
 
Moin Gerhard,

zum Thema private-Methoden aufrufen solltest Du Dir mal in der Hilfe unter dem Stichwort Sichtbarkeit/Visiblity nachschauen.
Ein Auszug:

Zitat:

A private member is invisible outside of the unit or program where its class is declared.
Was den Destructor angeht:

Delphi-Quellcode:
type
  TMySynEdit = class(TCustomSynEdit)
  public
    destructor Destroy; override;
  end;
klappt bei mir problemlos :gruebel:

Delphi-Freak 30. Aug 2005 21:14

Re: Ableitung von TCustomSynEdit -> private Methoden weg
 
Zitat:

A private member is invisible outside of the unit or program where its class is declared.
Gilt das also auch bei Ableitungen? Immerhin ist es ja innerhalb des Programms (wie da^^ steht)

Delphi-Quellcode:
type
  TMySynEdit = class(TCustomSynEdit)
  public
    destructor Destroy; override;
  end;
Genau das funktioniert bei mir eben nicht; da sagt er, dass er diese Methode in der Basisklasse nicht findet :gruebel:

Christian Seehase 30. Aug 2005 21:54

Re: Ableitung von TCustomSynEdit -> private Methoden weg
 
Moin Gerhard,

Program meint hier aber wohl eher die Projektdatei, die ja nicht direkt als Unit anzusehen ist.

Für das Beispiel habe ich mir ein SynEditMemo auf das Formular gezogen gehabt, damit alle erforderlichen Units unter uses eingetragen werden.

Flocke 30. Aug 2005 22:11

Re: Ableitung von TCustomSynEdit -> private Methoden weg
 
Zitat:

Zitat von Delphi-Freak
Zitat:

A private member is invisible outside of the unit or program where its class is declared.
Gilt das also auch bei Ableitungen? Immerhin ist es ja innerhalb des Programms (wie da^^ steht)

private = sichtbar innerhalb der Unit
protected = sichtbar innerhalb von Member-Funktionen der Klasse und abgeleiteten Klassen
public = überall sichtbar

Mit program meinen die, dass du überhaupt keine Unit deklariert hast sondern alles direkt in der dpr-Datei machst. (war doppelt, wurde abgezogen)

Über private-Members habe ich mich schon oft geärgert, besonders wenn die ohne viel Gedanken deklariert wurden (also eigentlich protected sein sollten).

Da ich SynEdit nicht installiert habe kann ich dazu aber nichts sagen. Ebenso wenig wie zu deinem Problem mit dem Destruktor.

Delphi-Freak 31. Aug 2005 09:33

Re: Ableitung von TCustomSynEdit -> private Methoden weg
 
Das mit dem Destructor kann man ja mal sein lassen, ob da override steht oder nicht, soll mich nicht stören. Nur mich hats irgendwie gewundert, weil ich den Verdacht gehegt habe, dass er eine falsche Kompo nimmt; deshalb habe ich es erwähnt.

Nochmal zu der Ableitung: Ist also die einzige Möglichkeit, die abgeleitete Kompo in der Unit SynEdit zu definieren, oder gibts vielleicht noch andere Möglichkeiten. Ich möchte nämlich die SynEdit Source-Dateien möglichst unberührt lassen.

Flocke 31. Aug 2005 09:42

Re: Ableitung von TCustomSynEdit -> private Methoden weg
 
Zitat:

Zitat von Delphi-Freak
Das mit dem Destructor kann man ja mal sein lassen, ob da override steht oder nicht, soll mich nicht stören.

Nun ja, egal ist das nicht. Wenn du .Free oder FreeAndNil aufrufst, dann wird der virtuelle Destruktor von TObject aufgerufen, und das ist nicht deiner, wenn du ihn nicht mit override deklariert hast (oder das override irgendwo in der Kette fehlt).

Zitat:

Zitat von Delphi-Freak
Nochmal zu der Ableitung: Ist also die einzige Möglichkeit, die abgeleitete Kompo in der Unit SynEdit zu definieren, oder gibts vielleicht noch andere Möglichkeiten. Ich möchte nämlich die SynEdit Source-Dateien möglichst unberührt lassen.

An die private-Deklarationen kommst du definitiv nicht dran. Du solltest dir den Code ansehen und dir überlegen, ob es einen Grund hat, dass die Funktion private und nicht protected ist (Nebeneffekte). Ansonsten ist die einfachste Lösung, die Deklaration in den SynEdit-Sources vom private- in den protected-Bereich zu verschieben (ist nur eine Zeile Änderung).

Delphi-Freak 31. Aug 2005 10:15

Re: Ableitung von TCustomSynEdit -> private Methoden weg
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bin mir schon darüber klar, dass es durchaus sinnvoll ist, dass ich auf private Deklarationen nicht zugreifen kann. Andererseits habe ich mir eine Funktion aus dem SynEdit-Source rauskopiert und möchte sie etwas abändern (PaintTextLines), um die Glyphs für Tabs und Leerzeichen selber einfärben möchte. Dann muss ich wohl meine Kompo in die SynEdit-Unit hineingeben...

Aber euch sage ich herzlichen Dank für eure Hilfen!!! :thumb:


Edit: Und ein Beweisfoto noch von mir (vom ersten Beitrag) im Anhang :mrgreen:


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