Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi in TFont.OnChange auf Owner zugreifen (https://www.delphipraxis.net/127789-tfont-onchange-auf-owner-zugreifen.html)

himitsu 19. Jan 2009 03:18


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:
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;
Klassenintern arbeite ich mit TFontEx und nach außen hin caste ich es zurück nach TFont
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:

alzaimar 19. Jan 2009 06:21

Re: in TFont.OnChange auf Owner zugreifen
 
Verwende doch einfach das Observer-Pattern.

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.

himitsu 19. Jan 2009 10:28

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:
// 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;
manchma macht man sich echt mehr Arbeit, als nötig :wall:


gelöst ... gab nur selbstgemachte Probleme :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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