![]() |
in TFont.OnChange auf Owner zugreifen
Moin ihr Schlafwandler. :hi:
OK, TFont hat zwar keinen Owner, aber ich hab in einer Klasse mehrere TFonts (diese werden auch in der Klasse erstellt und freigegeben) und bei Änderungen an diesen Fonts müßte in der Klasse ein ereignis ausgelöst werden (eine Funktion ausgeführt). Aktuell ha ich es erstmal über Erweiterung gemacht, aber vielleicht geht es ja auch irgendwie direkt mit TFont?
Delphi-Quellcode:
Klassenintern arbeite ich mit TFontEx und nach außen hin caste ich es zurück nach TFont
Type TFontEx = Class(TFont)
Private FOwner: TObject; FTag: Integer; Public Property Owner: TObject Read FOwner Write FOwner; Property Tag: Integer Read FTag Write FTag Default 0; End; und bei TFont.OnChange wird dann auf den Owner zugegriffen. So, wie gesagt ... gibt es da vielleicht eine bessere Methode, oder kann ich das beruhigt weiter so verwenden? (funktionieren tut es zumindestens so schonmal) 'ne schöne Nacht noch himi :angel: |
Re: in TFont.OnChange auf Owner zugreifen
Verwende doch einfach das
![]() Die Verwendung des Observer-Musters hat ggü Deiner Idee den Vorteil, das sie flexibler ist, da nicht nur 'Owner' benachrichtigt werden können. Wenn Du allerdings garantiert nur einen 'Owner' hast, würde ich im 'Owner' ein FontChange-Ereignis einrichten und das direkt mit dem OnChange-Ereignis des TFonts verbinden. |
Re: in TFont.OnChange auf Owner zugreifen
Soein OnChange-Ereignis hab ich ja im Owner ... und es ibt auch nur einen Owner, aber dafür mehrere Fonts, welche auf den Owner, über die selbe Routine zugreifen ... was allerdings kein Problem darstellt, da ich ja an den Font rankomm (siehe Sender).
*schuppen von augen fällt* bin ich blöd ... ganz vergessen, daß die Objectrefferenz ja mit in der Ereignisprozedur (bzw. sozusagen im Zeiger darauf) gespeichert wird :wall:
Delphi-Quellcode:
manchma macht man sich echt mehr Arbeit, als nötig :wall:
// vorher
Procedure TCircuitDesigner.OnFontChange(Sender: TObject); Begin With TCircuitDesigner(TFontEx(Sender).Owner) do Begin DoLibraryChange; DoCircuitChange; End; End; // jetzt Procedure TCircuitDesigner.OnFontChange(Sender: TObject); Begin DoLibraryChange; DoCircuitChange; End; gelöst ... gab nur selbstgemachte Probleme :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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