![]() |
Layout.AddAttributes Fehler oder Feature?
Hallo Zusammen!
Wir mal was neues... gegeben sei folgende Funktion:
Delphi-Quellcode:
Funktioniert das? Nein... Warum nicht? Weil der Font-Teil keine Klasse ist, sondern in einen Record kopiert wird.
Procedure DP(Var AFont : TFont;Var ALayout:TTextLayout);
begin ALayout.ClearAttributes; AFont.Size := 12; ALayout.AddAttribute(TTextRange.Create(10,20),TTextAttribute.Create(AFont,TAlphaColorRec.Black)); AFont.Size := 22; ALayout.AddAttribute(TTextRange.Create(40,60),TTextAttribute.Create(AFont,TAlphaColorRec.Black)); end; Somit werden beide Bereiche mit Font.Size = 22 gerändert. Noch besser finde ich jedoch:
Delphi-Quellcode:
Da der Layout.EndUpdate außerhalb des Procedure Scope ist hat ARC die TFonts gekillt und es gibt eine nette Exception!
Procedure DP(Var AFont : TFont;Var ALayout:TTextLayout);
Var LP : TFont; begin ALayout.ClearAttributes; AFont.Size := 12; LP := TFont.Create; LP.Assign(AFont); ALayout.AddAttribute(TTextRange.Create(10,20),TTextAttribute.Create(LP,TAlphaColorRec.Black)); AFont.Size := 22; LP := TFont.Create; LP.Assign(AFont); ALayout.AddAttribute(TTextRange.Create(40,60),TTextAttribute.Create(LP,TAlphaColorRec.Black)); end; Ich finde das ist ein Designfehler! Mavarik |
AW: Layout.AddAttributes Fehler oder Feature?
Solltest Du nicht bei deinem zweiten Code LP anstatt Font übergeben an TTextAttribute.Create?
|
AW: Layout.AddAttributes Fehler oder Feature?
Zitat:
|
AW: Layout.AddAttributes Fehler oder Feature?
Der Typ
Delphi-Quellcode:
arbeitet mit Referenzen auf die Fonts - es wird eben gerade nichts kopiert. Das erklärt das Verhalten Deines ersten Beispiels. Dieses Record ist nicht mehr als ein Container, der Attribute sammelt. Es mag bestimmt Fälle geben, in denen eine echte Kopie der Daten wünschenswert wäre, aber das Arbeiten mit Referenzen halte ich nicht für an den Haaren herbeigezogen oder für einen Designfehler.
TTextAttribute
Den zweiten Fall kann ich nicht nachvollzihen- hast Du mal ein komplettes Beispiel, das den Fehler demonstriert.
Delphi-Quellcode:
hält ja immerhin eine starke Referenz auf den Font, so dass ARC an dieser Stelle nicht zuschlagen dürfte.
TTextAttribute
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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