![]() |
Selektives csAcceptControls möglich?
Ich glaube, ich stehe mal wieder auf der Leitung aber irgendwie finde ich keine Lösung für mein Problem:
Ich habe einen TPanel-Nachfolger (TMyPanel) das soll nur ein paar Componenten als Child akzeptieren (TLabel, TCheckBox und ein paar kleinere grafische Komponenten von mir). Es sollte nicht möglich sein andere Komponenten über den Designer hinzuzufügen und auch wenn man programmatisch TMemo.Parent := MyPanel zu setzen versucht sollte eine Exception mit entsprechendem Hinweis ausgegeben werden...?! |
AW: Selektives csAcceptControls möglich?
Einen Teilerfolg gibt es zumindestens, in der Form der CM_CONTROLLISTCHANGING Message
Delphi-Quellcode:
Damit kann kein TShape mehr hinzugefügt werden, er landet vorerst in der Form (oder hat keinen Parent). Das Problem hier ist, das ich bisher keine Möglichkeit gefunden habe die unerwünschte Componente sauber freizugeben (ein Message.ControlListItem^.Control.Free führt in späterer Folge zu einer Exception)
procedure TMyPanel.CMControlListChanging(var Message: TCMControlListChanging);
begin if Message.ControlListItem^.Control.ClassName = 'TShape' then begin Message.ControlListItem^.Parent := NIL; iFrm := GetParentForm(Self); Message.ControlListItem^.Control.Parent := iFrm; end; end; |
AW: Selektives csAcceptControls möglich?
Die endgültige Version verhindert nun auch das erzeugen der Komponente und sieht wie folgt aus:
Delphi-Quellcode:
procedure TMyPanel.CMControlListChanging(var Message: TCMControlListChanging);
begin if Message.ControlListItem^.Control.ClassName = 'TShape' then begin Message.ControlListItem^.Parent := NIL; raise EInvalidOperation.Create(SInvalidChild); end; end; |
AW: Selektives csAcceptControls möglich?
Ich würde aber nicht über den Klassennamen gehen, sonst werden abgeleitete Klassen doch wieder akzeptiert.
Delphi-Quellcode:
//if Message.ControlListItem^.Control.ClassName = 'TShape' then
if Message.ControlListItem^.Control is TShape then |
AW: Selektives csAcceptControls möglich?
Ich würde allerdings in der If-Abfrage die Komponenten abfragen, welche erlaubt werden und im Else-Teil alles andere ablehnen, da (siehe Post #1) das Panel ja nur bestimmte Komponenten akzeptieren soll.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 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