![]() |
Edit.Text Initialisierung unterbinden
Hallo,
ich bin dabei, mir einige Komponenten abzuleiten und mit zusätzlichen Eigenschaften zu versehen. Ein Detail, das mich immer schon irritiert hat, ist die völlig sinnlose automatische Initialisierung der Text-Property von Komponenten mit ihrem Namen - die man praktisch immer manuell löschen muss (mir fällt nichts ein, wo das Sinn machen könnte). Ich habe jetzt im Quellcode von TEdit die ganze Genealogie hinauf bis zu TControl gesucht, wo diese Zuweisung passiert, und ich finde es nicht. Ganz offensichtlich passiert es nicht im Create, denn die Zuweisung Text:='' im Oncreate meiner Komponente (nach dem Inherited) bleibt wirkungslos, obwohl der Code durchlaufen wird, wenn ich eine neue Komponente auf meine Form setze (Kontrollausgabe wird angezeigt) - nach dem Einfügen der Komponente in die Form steht im Textfeld trotzdem der Komponentenname. |
AW: Edit.Text Initialisierung unterbinden
Ich hab mal kurz in die Delphi Quellcodes geschaut, denke das hier wird das sein das du gesucht hast:
Delphi-Quellcode:
procedure TControl.SetName(const Value: TComponentName);
var ChangeText: Boolean; begin ChangeText := (csSetCaption in ControlStyle) and not (csLoading in ComponentState) and (Name = Text) and ((Owner = nil) or not (Owner is TControl) or not (csLoading in TControl(Owner).ComponentState)); inherited SetName(Value); if ChangeText then Text := Value; end; |
AW: Edit.Text Initialisierung unterbinden
Danke, das war es.
Jetzt, wo du mich mit der Nase darauf gestossen hast, frage ich mich, warum ich es nicht selbst gefunden habe. |
AW: Edit.Text Initialisierung unterbinden
Was muss man ändern?
if ChangeText then Text := ''; ist leider nicht zielführend... |
AW: Edit.Text Initialisierung unterbinden
Würde es nicht genügen, csSetCaption aus dem ControlStyle zu entfernen?
|
AW: Edit.Text Initialisierung unterbinden
Zitat:
|
AW: Edit.Text Initialisierung unterbinden
Hmm, an die Möglichkeit habe ich gar nicht gedacht, das wäre wahrscheinlich sogar die bessere Lösung - auf Grund der Bezeichnung kann man ja hoffen, dass das keine unerwünschten Nebeneffekte mit sich bringt (ich habe ein tief sitzendes Mißtrauen dagegen, Dinge zu ändern, bei denen ich nicht ganz sicher bin, dass es keine Kollateralschäden gibt, aber in dem Fall ist das Mißtrauen höchtwahrscheinlich nicht gerechtfertigt).
Ich habe die Routine überschrieben:
Delphi-Quellcode:
procedure TfdEdit.SetName(const Value: TComponentName);
var oldtext: string; begin oldtext:=text; inherited; text:=oldtext; end; |
AW: Edit.Text Initialisierung unterbinden
Da genügt ein Blick in die Hilfe zu
![]()
Delphi-Quellcode:
Das sollte es gewesen sein.
constructor TfdEdit.Create(AOwner: TComponent);
begin inherited; ControlStyle := ControlStyle - [csSetCaption]; end; |
AW: Edit.Text Initialisierung unterbinden
Jep. Hab das inzwischen auch so geändert. Und dann gleich wieder die IDE mit dem Task Manager abgewürgt, weil ich vergessen habe, dass die das ohne Neustart nicht mag.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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