Delphi-PRAXiS
Seite 1 von 3  1 23      

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 .Lines in einer geerbten TRichEdit ändern (https://www.delphipraxis.net/71245-lines-einer-geerbten-trichedit-aendern.html)

Green 11. Jun 2006 20:28


.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:
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.
so die is jetzt auf den ersten blick ein bischen unnötig aber das wird natürlich geändert ;)
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

mkinzler 11. Jun 2006 20:49

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.

Green 11. Jun 2006 21:18

Re: .Lines in einer geerbten TRichEdit ändern
 
also ich hab jetzt folgende zwei Units:

RichEdit.pas
Delphi-Quellcode:
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.
ColoredStrings.pas
Delphi-Quellcode:
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.
als die COloredStrings sind erfolgreich Installiert aber T1RichEdit kompo erscheint einfach nicht im inspektor und ich find kein Fehler


mfG Green

p.s. bin der von delphi-forum.de ^^

mkinzler 11. Jun 2006 21:21

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.

Green 11. Jun 2006 21:25

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??

Green 11. Jun 2006 21:27

Re: .Lines in einer geerbten TRichEdit ändern
 
also hab mal mit folgendem Code probiert:
Delphi-Quellcode:
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.
Installiert, aber nix...

mkinzler 11. Jun 2006 21:30

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?

Green 11. Jun 2006 21:33

Re: .Lines in einer geerbten TRichEdit ändern
 
das das package installiert wurde, es stehen aber keine kompos die da installiert wurden

mkinzler 11. Jun 2006 21:41

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.

Green 11. Jun 2006 21:47

Re: .Lines in einer geerbten TRichEdit ändern
 
blöde frage aber wo kann ich ein package deinstallieren?

mkinzler 11. Jun 2006 21:49

Re: .Lines in einer geerbten TRichEdit ändern
 
Unter Komponenten->Packages-Installieren Package markieren und "Entfernen" auswählen.

Hast du die Unit umbenannt?

Green 11. Jun 2006 21:54

Re: .Lines in einer geerbten TRichEdit ändern
 
Unit hab ich nit umgenannt... soll ich?

package is deinstalliert...

mkinzler 11. Jun 2006 21:57

Re: .Lines in einer geerbten TRichEdit ändern
 
Zitat:

Unit hab ich nit umgenannt... soll ich?
den es gibt im Delphiverzeichnis schon eine datei dieses Namens.

Green 11. Jun 2006 22:12

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;

mkinzler 11. Jun 2006 22:16

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.

Green 12. Jun 2006 12:40

Re: .Lines in einer geerbten TRichEdit ändern
 
wie meinste das jetzt?? also statt TStrings TStringList als Lines nehmen oder was??

mkinzler 12. Jun 2006 12:55

Re: .Lines in einer geerbten TRichEdit ändern
 
Ja, dann mußt du nicht alle abstrkten Methoden selber implementieren.

Green 12. Jun 2006 16:25

Re: .Lines in einer geerbten TRichEdit ändern
 
was meinst du jetzt für abstrakte methoden, und wieso kann ich des mit TStrings nit machen??

mkinzler 12. Jun 2006 16:30

Re: .Lines in einer geerbten TRichEdit ändern
 
TStrings ist eine abstrakte Klasse, d.h. die Methoden sind nicht implementiert. Siehe auch bei Wikipedia. TStringList ist die entsprechende Klasse mit implementierten Methoden.

Green 12. Jun 2006 20:24

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:
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.
und hier der aufruf:
Delphi-Quellcode:
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.
aber wo zur hölle is der Fehler???????

mkinzler 12. Jun 2006 20:28

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.

Green 12. Jun 2006 20:39

Re: .Lines in einer geerbten TRichEdit ändern
 
kannst du mir erklären was ich dann machen Soll???

mkinzler 12. Jun 2006 20:45

Re: .Lines in einer geerbten TRichEdit ändern
 
Im Interface
Delphi-Quellcode:
constructor Create( AOWner: TComponent);
einfügen und im Implementation-Teil:

Delphi-Quellcode:
constructor TmyRichEdit.Create(AOWner: TComponent);
begin
  inherited Create( AOwner);
  FMyLines := TColoredStrings.Create;
end;

Green 12. Jun 2006 21:05

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.

mkinzler 12. Jun 2006 21:12

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)?

Green 12. Jun 2006 21:25

Re: .Lines in einer geerbten TRichEdit ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier mal die datas

mkinzler 12. Jun 2006 21:48

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.

Green 12. Jun 2006 21:58

Re: .Lines in einer geerbten TRichEdit ändern
 
in der pas datei in deinem Archiv finde ich keinen Unterschied zu meiner...

mkinzler 12. Jun 2006 22:00

Re: .Lines in einer geerbten TRichEdit ändern
 
Dann schau dir mal Zeile 53 an. Dort stand bei dir
Zitat:

Delphi-Quellcode:
FMyLines := TPRichEdit.Create;

was doppelt falsch war.

Green 12. Jun 2006 22:37

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??

mkinzler 12. Jun 2006 22:49

Re: .Lines in einer geerbten TRichEdit ändern
 
Zitat:

könnte es sein das meinem TColoredStrings schlicht der constructor fehlt??
Nein da du keine neue Member-Objekte eingefügt hast, ist der geerbte Konstruktor ausreichend. Also beim mir funktioniert die Kompoenente in dem Testprogramm problemlos.
Was geht und was nicht?

mkinzler 13. Jun 2006 06:49

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;

Green 13. Jun 2006 18:07

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...

Green 13. Jun 2006 18:16

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:
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;
warum geht des nit? ich krieg beim ausführen immer ne EAccesViolation...

mkinzler 13. Jun 2006 18:28

Re: .Lines in einer geerbten TRichEdit ändern
 
Bei mir nicht, habe aber auch das
Delphi-Quellcode:
override;
weggelassen.

Green 13. Jun 2006 19:47

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

mkinzler 13. Jun 2006 19:49

Re: .Lines in einer geerbten TRichEdit ändern
 
Weil man es IMO nicht benötigt.

Green 13. Jun 2006 20:03

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:
override
gehts nit

mkinzler 13. Jun 2006 20:05

Re: .Lines in einer geerbten TRichEdit ändern
 
Stell noch mal den Code der Unit ein.

Green 13. Jun 2006 20:06

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 00:58 Uhr.
Seite 1 von 3  1 23      

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