Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponentenentwicklung Problem mit AutoSize (https://www.delphipraxis.net/134572-komponentenentwicklung-problem-mit-autosize.html)

Optiplex 25. Mai 2009 08:06


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.

BAMatze 25. Mai 2009 08:47

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:
procedure AutoSizeChange(var MSG: TMessage);message AutoSizeChanged; // Hier reinschieben, wie du darauf reagieren willst
in deinem Setter schreibst dir dann deine PostMessage:
Delphi-Quellcode:
PostMessage(Form1.Handle, AutoSizeChanged, 0, 0);
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 Threat dazu, vieleicht findest hier noch ein paar mehr Anregungen. Denke das könnte dir helfen.

MfG
BAMatze

PS.: Ansonsten könntest auch mit Events arbeiten.

DeddyH 25. Mai 2009 08:54

Re: Komponentenentwicklung Problem mit AutoSize
 
Dann kann man den entsprechenden Code doch auch gleich im Setter hinterlegen :zwinker:

BAMatze 25. Mai 2009 08:57

Re: Komponentenentwicklung Problem mit AutoSize
 
Zitat:

Zitat von DeddyH
Dann kann man den entsprechenden Code doch auch gleich im Setter hinterlegen :zwinker:

:wall: da hast natürlich Recht

jaenicke 25. Mai 2009 10:12

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.

Optiplex 25. Mai 2009 11:50

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

jaenicke 25. Mai 2009 11:53

Re: Komponentenentwicklung Problem mit AutoSize
 
Zitat:

Zitat von Optiplex
Eine neue Eigenschaft mit Set und Get ist schnell programmiert, aber dann habe ich zwei Eigenschaften die dann das gleiche leisten sollen

Nein, eine gleichnamige, die die ursprüngliche anspricht...
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:

Optiplex 25. Mai 2009 14:26

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

jaenicke 25. Mai 2009 14:29

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.
http://www.delphi-library.de/viewtopic.php?p=539975
(Nebenbei hat es auch deutlich weniger Fehler usw.)

Die Syntax ist einfach:
Delphi-Quellcode:
procedure AdjustSize; override;
(so aus dem Kopf schnell mal geschrieben :P)

Optiplex 26. Mai 2009 08:00

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 19:14 Uhr.
Seite 1 von 2  1 2      

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