![]() |
.Lines in einer geerbten TRichEdit ändern
also ich hab folgendes problem:
ich will eine Komponente von TRichEdit ableiten welche zwar die funktion Lines.Add hat diese aber nicht normal ausführt (also override) sondern stadessen eine eigene. soweit bin ich bereits:
Delphi-Quellcode:
so die is jetzt auf den ersten blick ein bischen unnötig aber das wird natürlich geändert ;)
unit TestStrings;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, Dialogs; type TTestStrings = class(TStrings) private { Private-Deklarationen } protected { Protected-Deklarationen } public function Add(const S:string): integer; override; { Public-Deklarationen } published { Published-Deklarationen } end; implementation function TTestStrings.Add(const S:string): integer; override; begin showmessage(S); end; end. jedenfalls ist mein Problem jetzt wie ich meine Frischerzeugte Klasse jetzt in meine geerbte TRichEdit einfüge als ERSATZ für Lines es soll aber natürlich alle eigenschaften und AUSWIRKUNGEN haben wie ein normales Lines nur das es eben statt Add mein showmessage macht. kann mir das jemand erklären? mfG Green |
Re: .Lines in einer geerbten TRichEdit ändern
Hallo Green,
so Forum gewechselt? So überlädst du die Eigenschaft Lines:
Delphi-Quellcode:
unit MyRichEdit;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls; type TMyStringList = class( TStringlist) end; TMyRichEdit = class(TRichEdit) private { Private-Deklarationen } FMyLines: TMyStringList; protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property Lines: TMyStringList read FMyLines write FMyLines; end; procedure Register; implementation procedure Register; begin RegisterComponents('<Tabname>', [TMyRichEdit]); end; end. |
Re: .Lines in einer geerbten TRichEdit ändern
also ich hab jetzt folgende zwei Units:
RichEdit.pas
Delphi-Quellcode:
ColoredStrings.pas
unit RichEdit;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls; type TColoredStrings = class(TColoredStrings) end; T1RichEdit = class(TRichEdit) private { Private-Deklarationen } FMyLines: TColoredStrings; protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property Lines: TColoredStrings read FMyLines write FMyLines; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [T1RichEdit]); end; end.
Delphi-Quellcode:
als die COloredStrings sind erfolgreich Installiert aber T1RichEdit kompo erscheint einfach nicht im inspektor und ich find kein Fehler
unit ColoredStrings;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, Dialogs; type TColoredStrings = class(TStrings) private { Private-Deklarationen } protected { Protected-Deklarationen } public function AddLines(const S:string): integer; { Public-Deklarationen } published { Published-Deklarationen } end; implementation function TColoredStrings.AddLines(const S:string): integer; begin showmessage(S); end; end. mfG Green p.s. bin der von delphi-forum.de ^^ |
Re: .Lines in einer geerbten TRichEdit ändern
Findest du Die Komponente T1RichEdit unter Beispiele?
Füge doch den Inhalt der Unit ColoredStrings in die, des Richedits ein. |
Re: .Lines in einer geerbten TRichEdit ändern
also das problem is das ich T1RichEdit NICHT in der Kat. 'Beispiele' finde, aber was meinst du mit einfügen??
|
Re: .Lines in einer geerbten TRichEdit ändern
also hab mal mit folgendem Code probiert:
Delphi-Quellcode:
Installiert, aber nix...
unit RichEdit;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, Dialogs; type TColoredStrings = class(TStrings) private { Private-Deklarationen } protected { Protected-Deklarationen } public function AddLines(const S:string): integer; { Public-Deklarationen } published { Published-Deklarationen } end; T1RichEdit = class(TRichEdit) private { Private-Deklarationen } FMyLines: TColoredStrings; protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property Lines: TColoredStrings read FMyLines write FMyLines; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [T1RichEdit]); end; function TColoredStrings.AddLines(const S:string): integer; begin showmessage(S); end; end. |
Re: .Lines in einer geerbten TRichEdit ändern
So hatte ich gemeint, Der Namen der Unit ist vielleicht noch ungeschickt, aber eigentlich sollte es so gehen. Ein Fehler kommt nicht? Welche Meldung liefert sie IDE nach dem Installieren?
|
Re: .Lines in einer geerbten TRichEdit ändern
das das package installiert wurde, es stehen aber keine kompos die da installiert wurden
|
Re: .Lines in einer geerbten TRichEdit ändern
Komisch, ich habe die Methode AddLines in mein Beispiel hinzugefügt und das Package neu compiliert. In einer Demoanwendung kann man nun adie zusätzliche Methode auch verwenden.
Deinstalliere das Package mal und installiere es neu. |
Re: .Lines in einer geerbten TRichEdit ändern
blöde frage aber wo kann ich ein package deinstallieren?
|
Re: .Lines in einer geerbten TRichEdit ändern
Unter Komponenten->Packages-Installieren Package markieren und "Entfernen" auswählen.
Hast du die Unit umbenannt? |
Re: .Lines in einer geerbten TRichEdit ändern
Unit hab ich nit umgenannt... soll ich?
package is deinstalliert... |
Re: .Lines in einer geerbten TRichEdit ändern
Zitat:
|
Re: .Lines in einer geerbten TRichEdit ändern
ja genau das is mir eben aufgefallen...
umgenannt: geht, ^^ aber das geht jetzt wieder nit:
Delphi-Quellcode:
//deklaration (geht)
public function Add(const S:string): integer; override; //geht nit : unbekannte direktive 'override' function TColoredStrings.Add(const S:string): integer; override; begin showmessage(S); end; |
Re: .Lines in einer geerbten TRichEdit ändern
Da TStrings eine abstrakte Klasse ist, mußt du das override weglassen oder besser als Basisklasse TStringList nehmen.
|
Re: .Lines in einer geerbten TRichEdit ändern
wie meinste das jetzt?? also statt TStrings TStringList als Lines nehmen oder was??
|
Re: .Lines in einer geerbten TRichEdit ändern
Ja, dann mußt du nicht alle abstrkten Methoden selber implementieren.
|
Re: .Lines in einer geerbten TRichEdit ändern
was meinst du jetzt für abstrakte methoden, und wieso kann ich des mit TStrings nit machen??
|
Re: .Lines in einer geerbten TRichEdit ändern
TStrings ist eine abstrakte Klasse, d.h. die Methoden sind nicht implementiert. Siehe auch bei
![]() |
Re: .Lines in einer geerbten TRichEdit ändern
also ich hab folgenden code in einem Package installiert und es kam auch die meldung das die Kompo installiert wurde, aber immer wenn ich sie dann auf ein formular ziehe, kommt wenn ich die strg+leer taste drück 'programmierhilfe kann nicht aufgerufen werden das der quelltext fehler enthält, aber da is absolut kein fehler.. kannst du mir helfen?
hier die codes: das meine Kompo (kennste die :D )
Delphi-Quellcode:
und hier der aufruf:
unit Unit2;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, Dialogs; type TColoredStrings = class(TStringList) private { Private-Deklarationen } protected { Protected-Deklarationen } public function AddLines(const S:string): integer; { Public-Deklarationen } published { Published-Deklarationen } end; TQRichEdit = class(TRichEdit) private { Private-Deklarationen } FMyLines: TColoredStrings; protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } property Lines: TColoredStrings read FMyLines write FMyLines; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TQRichEdit]); end; function TColoredStrings.AddLines(const S:string): integer; begin showmessage(S); end; end.
Delphi-Quellcode:
aber wo zur hölle is der Fehler???????
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Unit2; type TForm1 = class(TForm) Button1: TButton; QRichEdit1: TQRichEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin showmessage('asd'); end; end. |
Re: .Lines in einer geerbten TRichEdit ändern
Warum nennst du die klasse TQ..., dieser Suffix ist für CLX-Komponenten reserviert, deshalb kommt es zu Kollisionen. Es fehlt auch noch der Konstruktor der Klasse.
|
Re: .Lines in einer geerbten TRichEdit ändern
kannst du mir erklären was ich dann machen Soll???
|
Re: .Lines in einer geerbten TRichEdit ändern
Im Interface
Delphi-Quellcode:
einfügen und im Implementation-Teil:
constructor Create( AOWner: TComponent);
Delphi-Quellcode:
constructor TmyRichEdit.Create(AOWner: TComponent);
begin inherited Create( AOwner); FMyLines := TColoredStrings.Create; end; |
Re: .Lines in einer geerbten TRichEdit ändern
aber mit folgender Unit gehts auch nicht:
Delphi-Quellcode:
unit Unit2;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, Dialogs; type TColoredStrings = class(TStringList) private { Private-Deklarationen } protected { Protected-Deklarationen } public function AddLines(const S:string): integer; { Public-Deklarationen } published { Published-Deklarationen } end; TPRichEdit = class(TRichEdit) private { Private-Deklarationen } FMyLines: TColoredStrings; protected { Protected-Deklarationen } public constructor Create( AOWner: TComponent); { Public-Deklarationen } published { Published-Deklarationen } property Lines: TColoredStrings read FMyLines write FMyLines; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TPRichEdit]); end; function TColoredStrings.AddLines(const S:string): integer; begin showmessage(S); end; constructor TPRichEdit.Create(AOWner: TComponent); begin inherited Create( AOwner); FMyLines := TColoredStrings.Create; end; end. |
Re: .Lines in einer geerbten TRichEdit ändern
Ich kann hier auf die schnelle keine Fehler finden, bis auf die Tatsache das Unit2 für die Quellcodedateieiner komponente nicht gut ist. Also du hast echt ein Händchen für Klassennamen und Dateinamen ;-)
Könntest du dein Projekt mal anhängen ( Komponente und Testprogramm)? |
Re: .Lines in einer geerbten TRichEdit ändern
Liste der Anhänge anzeigen (Anzahl: 1)
hier mal die datas
|
Re: .Lines in einer geerbten TRichEdit ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Es war noch ein Fehler im Konstruktor und noch die falsche Unit in der Uses. Jetzt gehts.
|
Re: .Lines in einer geerbten TRichEdit ändern
in der pas datei in deinem Archiv finde ich keinen Unterschied zu meiner...
|
Re: .Lines in einer geerbten TRichEdit ändern
Dann schau dir mal Zeile 53 an. Dort stand bei dir
Zitat:
|
Re: .Lines in einer geerbten TRichEdit ändern
aber mit der die du mir geschickt hast gehts au nit...
€: könnte es sein das meinem TColoredStrings schlicht der constructor fehlt?? |
Re: .Lines in einer geerbten TRichEdit ändern
Zitat:
Was geht und was nicht? |
Re: .Lines in einer geerbten TRichEdit ändern
Mir ist noch aufgefallen, daß ich den Destructor vergessen habe. Denn alle Objekte, die man manuell erzeugt, sollte man auch manuell freigeben.
Delphi-Quellcode:
destructor TPRichEdit.Destroy;
begin FMyLines.Destroy; inherited Destroy; end; |
Re: .Lines in einer geerbten TRichEdit ändern
also ich hab jetzt mal deine Kompo installiert, aber obwohl ich sie installiert hab will er immer die unit in uses implentieren, ausserdem kann er sie in den Uses nit finden...
|
Re: .Lines in einer geerbten TRichEdit ändern
ääähm das problem hab ich jetzt soweit geköst, also es funktioniert alles, aber wenn ich jetzt die function Add überschreiben will geht des irgendwie nit:
Delphi-Quellcode:
warum geht des nit? ich krieg beim ausführen immer ne EAccesViolation...
type {...}
public //function AddLines(const S:string): integer; function Add(const S:string): integer; override; {...} implementation {...} function TColoredStrings.Add(const S:string): integer; begin showmessage(S); end; |
Re: .Lines in einer geerbten TRichEdit ändern
Bei mir nicht, habe aber auch das
Delphi-Quellcode:
weggelassen.
override;
|
Re: .Lines in einer geerbten TRichEdit ändern
warum weglassen? dann wirds doch gar nit überschrieben... bei mir gehts aber auch ohne override nit... genau der ngleiche fehler
|
Re: .Lines in einer geerbten TRichEdit ändern
Weil man es IMO nicht benötigt.
|
Re: .Lines in einer geerbten TRichEdit ändern
was meinst du mit nicht benötigt?? warum gibts das Schlüsselwort dann??
aber auch ohne
Delphi-Quellcode:
gehts nit
override
|
Re: .Lines in einer geerbten TRichEdit ändern
Stell noch mal den Code der Unit ein.
|
Re: .Lines in einer geerbten TRichEdit ändern
Delphi-Quellcode:
unit PRichEdit;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, Dialogs; type TColoredStrings = class(TStringList) private { Private-Deklarationen } protected { Protected-Deklarationen } public function AddLines(const S:string): integer; function Add(const S:string): integer; { Public-Deklarationen } published { Published-Deklarationen } end; TPRichEdit = class(TRichEdit) private { Private-Deklarationen } FMyLines: TColoredStrings; protected { Protected-Deklarationen } public constructor Create( AOWner: TComponent); destructor Destroy; { Public-Deklarationen } published { Published-Deklarationen } property Lines: TColoredStrings read FMyLines write FMyLines; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TPRichEdit]); end; function TColoredStrings.AddLines(const S:string): integer; begin showmessage(S); end; function TColoredStrings.Add(const S:string): integer; begin showmessage(S); end; constructor TPRichEdit.Create(AOWner: TComponent); begin inherited Create( AOwner); FMyLines := TColoredStrings.Create; end; destructor TPRichEdit.Destroy; begin FMyLines.Destroy; inherited Destroy; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 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