AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung iOS Layout.AddAttributes Fehler oder Feature?
Thema durchsuchen
Ansicht
Themen-Optionen

Layout.AddAttributes Fehler oder Feature?

Ein Thema von Mavarik · begonnen am 27. Nov 2013 · letzter Beitrag vom 28. Nov 2013
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#1

Layout.AddAttributes Fehler oder Feature?

  Alt 27. Nov 2013, 19:37
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

Geändert von Mavarik (28. Nov 2013 um 07:24 Uhr)
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Layout.AddAttributes Fehler oder Feature?

  Alt 27. Nov 2013, 20:03
Solltest Du nicht bei deinem zweiten Code LP anstatt Font übergeben an TTextAttribute.Create?
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Layout.AddAttributes Fehler oder Feature?

  Alt 28. Nov 2013, 07:25
Solltest Du nicht bei deinem zweiten Code LP anstatt Font übergeben an TTextAttribute.Create?
Geändert... Hatte ich falsch rein kopiert... Aber es sieht danach aus, dass es nicht "nur" daran liegt.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Layout.AddAttributes Fehler oder Feature?

  Alt 28. Nov 2013, 08:40
Der Typ TTextAttribute 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.

Den zweiten Fall kann ich nicht nachvollzihen- hast Du mal ein komplettes Beispiel, das den Fehler demonstriert. TTextAttribute hält ja immerhin eine starke Referenz auf den Font, so dass ARC an dieser Stelle nicht zuschlagen dürfte.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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