![]() |
Eigene Komponente: Problem mit Property Lines: TStrings...
Hallo!
In meinem anderen Beitrag suche ich nach einem Label, das mehr als 255 Zeichen aufnehmen kann ( ![]()
Delphi-Quellcode:
Wenn ich die Komponente auf einem Form platziere kann ich im Objektinspektor den Eigenschaftseditor für Lines aufrufen und einen Text eingeben. Der Text (beliebig lang) wird auch in das Label "gemalt".
unit MyLabelUnit;
interface uses Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, Graphics; type TMyLabel = class(TLabel) private FLines : TStrings; protected procedure setLines(newLines: TStrings); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property Lines : TStrings read FLines write setLines; end; procedure Register; implementation procedure Register; begin RegisterComponents('Eigene', [TMyLabel]); end; constructor TMyLabel.Create(AOwner: TComponent); begin FLines := TStringList.Create; inherited Create(AOwner); end; destructor TMyLabel.Destroy; begin FLines.Free; inherited; end; procedure TMyLabel.setLines(newLines: TStrings); begin FLines := newLines; self.caption := FLines.GetText; end; Wenn ich den Eigenschaftseditor von Lines nochmal aufrufen oder das Projekt compilieren will, bekomme ich allerdings folgede Fehlermeldung und Delphi stürzt total ab (muss beendet werden): Zitat:
Besten Dank Ares |
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Im Konstruktor würde ich inherited zuerst aufrufen.
Die Set-Methode sollte ungefähr so aussehen:
Delphi-Quellcode:
Gruß, teebee
procedure TMyLabel.setLines(newLines: TStrings);
begin if Assigned(newLines) then FLines.Assign(newLines) else FLines.Clear; //... alles weitere end; |
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Zitat:
Danke, ich habe beides geändert. Leider hat es keine Besserung gebracht... |
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Bei mir funktioniert es so. Hast Du die Komponente auch neu installiert?
|
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Zitat:
Klar :-) Ich habe auch schon ein eigenes Package erstellt und das installiert. Das selbe Ergebnis... Wenn ich ein neues Projekt erstelle, die Komponente auf dem Form platziere, einen Texte eingebe und dann compiliere erhalte ich die Meldung: [Fehler] RLINK32: Error opening file "D:\Projekte\test\Unit1.dfm" Noch ne Idee, was ich falsch machen könnte? Besten Dank Ares |
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Nur mal so zur Erklärung :
Delphi-Quellcode:
Hier wird "FLines" (welches ein Pointer ist) ein neuer Wert zugewiesen, und zeigt nun nicht mehr auf die ursprüngliche Liste, sondern auf "NewLines". Die ursprüngliche Liste ist nur noch Datenmüll im Speicher.
FLines := newLines;
Mit
Delphi-Quellcode:
werden die Daten aus "NewLines" in "FLines" kopiert, der Pointer zeigt weiterhin auf die richtige Liste.
FLines.Assign(newLines)
( Zumindest wenn ich alles richtig verstanden habe :) ) PS : Schmeiss die Komponente vom Form und neu drauf, das sollte helfen, wenn nicht lösch mal die .DCU von der Komponente, damit er die neu kompiliert. |
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Zitat:
Delphi-Quellcode:
So, und noch zu einem anderen Ding was ich so sehe: Verschiebe das Anlegen der FLines nach dem inherited Create Aufruf.
FLines.Assign(NewLines);
|
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Zitat:
Delphi-Quellcode:
Man könnte höchstens darüber diskutieren, ob man durch das Abfangen von Nil den 'unsachgemäßen' Gebrauch der Komponente verschleiert, aber das ist Geschmackssache.
procedure TStrings.Assign(Source: TPersistent);
begin if Source is TStrings then begin BeginUpdate; try Clear; AddStrings(TStrings(Source)); finally EndUpdate; end; Exit; end; inherited Assign(Source); end; Gruß, teebee |
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Wieso soll ein TLabel nicht mehr als 255 Zeichen aufnehmen koennen?
Ich habe gerade nochmal nachgeprueft das mehr Zeichen gehen. Auch Zeilenumbruch ist kein Problem. Nur der Standard IDE-Editor fuer Strings kann keine Zeilenumbrueche. das kann man aber aendern. |
Re: Eigene Komponente: Problem mit Property Lines: TStrings.
Zitat:
Wie kann ich denn den IDE-Editor für die Strings ändern bzw. austauschen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 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