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/)
-   -   Edit.Text Initialisierung unterbinden (https://www.delphipraxis.net/185911-edit-text-initialisierung-unterbinden.html)

idefix2 17. Jul 2015 05:30

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.

baumina 17. Jul 2015 06:08

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;

idefix2 17. Jul 2015 06:48

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.

hathor 17. Jul 2015 14:42

AW: Edit.Text Initialisierung unterbinden
 
Was muss man ändern?
if ChangeText then Text := ''; ist leider nicht zielführend...

DeddyH 17. Jul 2015 14:50

AW: Edit.Text Initialisierung unterbinden
 
Würde es nicht genügen, csSetCaption aus dem ControlStyle zu entfernen?

Sir Rufo 17. Jul 2015 14:55

AW: Edit.Text Initialisierung unterbinden
 
Zitat:

Zitat von DeddyH (Beitrag 1309054)
Würde es nicht genügen, csSetCaption aus dem ControlStyle zu entfernen?

:thumb:

idefix2 17. Jul 2015 22:55

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;

DeddyH 17. Jul 2015 22:58

AW: Edit.Text Initialisierung unterbinden
 
Da genügt ein Blick in die Hilfe zu TControl.ControlStyle.
Delphi-Quellcode:
constructor TfdEdit.Create(AOwner: TComponent);
begin
  inherited;
  ControlStyle := ControlStyle - [csSetCaption];
end;
Das sollte es gewesen sein.

idefix2 17. Jul 2015 23:12

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 08:13 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