![]() |
Komponentenentwicklung Problem mit AutoSize
Hallo DP’ler ,
Ich habe mal wieder ein Problem mit einer Komponente Die Komponente soll die Eigenschaft AutoSize besitzen, was Sie auch als gerbte Eigenschaft schon hat, also nichts leichter als das dachte ich und setze die Eigenschaft auf published. Property AutoSize default true; Im überschrieben Paint reagierte ich mit einer Abfrage darauf. So und nun zu meinem Problem, wie bekommt meine Komponente mit, dass der Wert von AutoSize sich geändert hat, wenn ich Autosize auf false stelle passiert nämlich nichts. Gibt es vielleicht eine Message auf die man reagieren kann, sowie es beim Caption die Message CM_TEXTCHANGED gibt, oder wie bekommt meine Komponente sonst mit, dass sich der Wert geändert hat und Sie sich neu zeichnen muss. |
Re: Komponentenentwicklung Problem mit AutoSize
Du müsstest eigentlich in der Lage sein, dir dort selber mit WM_User eine Nachricht zu erzeugen. Also als const AutoSizeChanged = WM_User+1 (glaube so wird das deklariert) und dann als Message-Funtkion:
Delphi-Quellcode:
in deinem Setter schreibst dir dann deine PostMessage:
procedure AutoSizeChange(var MSG: TMessage);message AutoSizeChanged; // Hier reinschieben, wie du darauf reagieren willst
Delphi-Quellcode:
Dann solltest erstmal zumindest mitbekommen, dass etwas passiert in deiner Variable AutoSize. Ist erstmal nur aus dem Kopf hier her geschrieben und eine Idee, so hab ich mal Fenster sich schließen lassen, hier mal der
PostMessage(Form1.Handle, AutoSizeChanged, 0, 0);
![]() MfG BAMatze PS.: Ansonsten könntest auch mit Events arbeiten. |
Re: Komponentenentwicklung Problem mit AutoSize
Dann kann man den entsprechenden Code doch auch gleich im Setter hinterlegen :zwinker:
|
Re: Komponentenentwicklung Problem mit AutoSize
Zitat:
|
Re: Komponentenentwicklung Problem mit AutoSize
Den Setter muss man natürlich auch erst einmal schreiben und daher die Eigenschaft selbst mit Getter und Setter neu hinschreiben. In Getter und Setter kann man dann darauf reagieren und mit inherited AutoSize ggf. auf die geerbte Eigenschaft zugreifen.
|
Re: Komponentenentwicklung Problem mit AutoSize
Hallo zusammen,
Eine neue Variable ist eigentlich nicht die Lösung, da ja die Eigenschaft schon existiert und ich nur mitbekommen muss wann sie sich ändert, um darauf zu reagieren. Eine neue Eigenschaft mit Set und Get ist schnell programmiert, aber dann habe ich zwei Eigenschaften die dann das gleiche leisten sollen, und das möchte ich nicht. Es müsste meiner Meinung nach eine Message CM_xxxxxxxxx ausgelöst werden, nur die kann ich niegends finden. Dieter |
Re: Komponentenentwicklung Problem mit AutoSize
Zitat:
Du kannst ja wie gesagt mit "inherited AutoSize" auf die der Oberklasse zugreifen. // EDIT: Stimmt, das geht auch einfacher, ein Blick in den mitgelieferten Quelltext sagt mir: Du kannst einfach AdjustSize überschreiben, das wird aufgerufen, wenn die Eigenschaft verändert wird. Eigentlich hätte ich das wissen müssen, ich habe nicht dran gedacht... :oops: |
Re: Komponentenentwicklung Problem mit AutoSize
Danke für deine Antwort Jaenicke,
kannst du mir die komplette Syntax von AdjustSize geben damit ich diese überschreiben kann, ich habe nähmlich nur Delphi 2005 :oops: und da sind keine Quelltexte dabei. Gruss Dieter |
Re: Komponentenentwicklung Problem mit AutoSize
Dann rate ich dir Turbo Delphi herunterzuladen, das ist kostenlos und enthält (weil es eine Professional Version ist) auch die Quelltexte.
![]() (Nebenbei hat es auch deutlich weniger Fehler usw.) Die Syntax ist einfach:
Delphi-Quellcode:
(so aus dem Kopf schnell mal geschrieben :P)
procedure AdjustSize; override;
|
Re: Komponentenentwicklung Problem mit AutoSize
Hallo Jaenicke,
vielen dank. Das war genau das was ich gesucht habe, funktioniert jetzt prima. Kannst du mir sagen ob die Eigenschaft Align auch in die procedure AdjustSize geht. Danke auch für den Link zu Turbo Delphi, werde ich mir noch genauer ansehen, allerdings habe ich schon gehört, dass man dort keine Komponenten erstellen kann. Gruß Dieter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 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 by Thomas Breitkreuz