Hallo Zusammen!
Wir mal was neues...
gegeben sei folgende Funktion:
Delphi-Quellcode:
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;
Funktioniert das? Nein... Warum nicht? Weil der Font-Teil keine Klasse ist, sondern in einen Record kopiert wird.
Somit werden beide Bereiche mit Font.Size = 22 gerändert.
Noch besser finde ich jedoch:
Delphi-Quellcode:
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;
Da der Layout.EndUpdate außerhalb des Procedure Scope ist hat ARC die TFonts gekillt und es gibt eine nette
Exception!
Ich finde das ist ein Designfehler!
Mavarik