![]() |
[Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspector
Tag allerseits,
Eines Kurz vorweg: Wie der Prefix schon sagt ist es eigentlich ein hilfreicher Kniff, weswegen dieses "Tutorial" nicht all zu lang werden sollte, außerdem setze ich Erfahrung im Bereich der Komponenntenentwicklung voraus(Wenn es sie gegeben hätte, hätte ich es eher in die Tips&Tricks Ecke gepackt ;) ). Folgende Problemstellung(ich nutze D2010): Ihr entwickelt eine Komponennte mit Designtime und Runtime Package. Eure Komponennte ist von einer anderen Komponennte abgeleitet, bei der einige ihrer Published Properties zwar für die IDE verfügbar, aber für den Anwender unsichtbar sein sollen. Bei mir ergab sich z.B. folgendes: Ich wollte eine neue TreeView Komponennte schreiben(wie TTreeView, nur mit einigen zusätzlichen Dingen, abgeleitet von TCustomTreeView). Dabei, war auch vorgesehen einen neuen Editor für den NodeTree zu erstellen(mit zusätzlichen Möglichkeiten). Problem war allerdings, dass die ITEMS Property bereits für die Designtime einen Editor zugewiesen bekommen hatte(kleiner Knopf an der rechten Seite des Propertyeintrags im OBInspector). Der Anwender sollte aber nur den neuen Editor nutzen und nicht auf den alten zugreifen können(wegen Inkompatibilität). Wie also sollte der Eintrag unsichtbar gemacht werde, aber gleichzeitig für die IDE vollständig zur verfügung stehen? Beim plazieren wird z.B. automatisch der NodeTree initialisiert und ausgelesen, was nicht gehen würde wenn man entweder ITEMS brachial aus PUBLISHED entfernen würde, oder ReadOnly setzt. Es muss ja auch noch reingeschrieben werden können. Lösung: Nach stundenlangem durchblättern von sogenannten "Lösungsansätzen" ergab sich eine, sehr einfache und saubere Lösung. Es wird nämlich NICHTS dafür extra in der Klasse selbst geändert, sondern bei der Registrierung der Komponennte für die IDE selbst. Wenn eure Komponnente z.B. so registriert wurde(DesigntimePackage):
Code:
Muss es folgendermasen abgeändert werden:
procedure Register;
begin RegisterComponents('MeineTools', [TMeinTreeView]) end
Code:
Diese Zeile, macht nichts weiter als die angegebene Property aus dem ObjectInspector zu nehmen, die Property selbst bleibt in Takt(und kann somit noch immer per Code angesteuert werden. Z.B. für Editoren etc.).
procedure Register;
begin RegisterComponents('MeineTools', [TMeinTreeView]) UnlistPublishedProperty(TMeinTreeView, 'Items'); end Dies wirkt sich nicht auf die Komponennte aus von der eure Komponennte abgeleitet wurde, wird jedoch eine weitere Komponennte von eurer abgeleitet, so betrifft es diese auch. Auch wenn vielleicht einige diese Lösung kennen sollten, war besagte Funktion auf diesem Board(laut Sufu) noch nicht erwähnt worden. Vielleicht kann so auch anderen geholfen werden. MFG Memnarch |
AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
Sehr sehr cool. Danke! :thumb:
|
AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
Merci, landet in meiner Snippletsammlung:)
|
AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
Schön dass ich euch helfen konnte :)
|
AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
Das wusste ich auch noch nicht. Aber wäre es in deinem speziellen Fall nicht sinnvoller einen erweiterten Propertyeditor zu schreiben welcher den aktuellen ersetzt (schließlich sollen die Items ja weiterhin bestimmt auch zur Designzeit gesetzt werden können)
|
AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
Items können auch nochimmer zur designzeit gesetzt werden, aber jetzt nur noch über meinen Editor ;).
Mein editor ist an das Rechtsklickmenü gebunden und nicht an das Items ding^^. |
AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
Zitat:
Nicht jeder kann so aus dem Stegreif einen (geschweige denn erweiterten) Propertyeditor schreiben. Man man man... [/OT] Hat mal jemand einen Tutorial-Link für einen (erweiterten) Propertyeditor? BitteDanke! |
AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
Bitte erstelle für die Frage ein neues Thema (am besten mit der Angabe was du unter einem "erweiterten" PropertyEditor verstehst)
[Edit]Du solltest jetzt eine persönliche Nachricht haben mit einem Link zur Antwort deiner Frage |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 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