Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspector (https://www.delphipraxis.net/155916-%5Btrickkiste-komponentenentwickl%5D-sauberes-verbergen-von-properties-im-objectinspector.html)

Memnarch 12. Nov 2010 22:20

[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:
procedure Register;
begin
  RegisterComponents('MeineTools', [TMeinTreeView])
end
Muss es folgendermasen abgeändert werden:

Code:
procedure Register;
begin
  RegisterComponents('MeineTools', [TMeinTreeView])
  UnlistPublishedProperty(TMeinTreeView, 'Items');
end
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.).
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

Assarbad 12. Nov 2010 22:53

AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
 
Sehr sehr cool. Danke! :thumb:

Bummi 12. Nov 2010 23:18

AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
 
Merci, landet in meiner Snippletsammlung:)

Memnarch 13. Nov 2010 16:13

AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
 
Schön dass ich euch helfen konnte :)

SirThornberry 13. Nov 2010 16:49

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)

Memnarch 13. Nov 2010 17:06

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^^.

vergessen 13. Nov 2010 17:47

AW: [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspe
 
Zitat:

Zitat von SirThornberry (Beitrag 1061290)
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)

[OT]
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!

SirThornberry 13. Nov 2010 17:54

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 09:05 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