AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials [Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspector
Tutorial durchsuchen
Ansicht
Themen-Optionen

[Trickkiste Komponentenentwickl] Sauberes verbergen von Properties im Objectinspector

Ein Tutorial von Memnarch · begonnen am 12. Nov 2010 · letzter Beitrag vom 13. Nov 2010
Antwort Antwort
Benutzerbild von Memnarch
Memnarch
Registriert seit: 24. Sep 2010
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
 
Benutzerbild von Assarbad
Assarbad
 
#2
  Alt 12. Nov 2010, 23:53
Sehr sehr cool. Danke!
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

 
Delphi XE3 Enterprise
 
#3
  Alt 13. Nov 2010, 00:18
Merci, landet in meiner Snippletsammlung
Thomas Wassermann H₂♂
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch
 
#4
  Alt 13. Nov 2010, 17:13
Schön dass ich euch helfen konnte
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry

 
Delphi 2006 Professional
 
#5
  Alt 13. Nov 2010, 17:49
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)
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch
 
#6
  Alt 13. Nov 2010, 18:06
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^^.
  Mit Zitat antworten Zitat
Benutzerbild von vergessen
vergessen

 
Delphi 5 Professional
 
#7
  Alt 13. Nov 2010, 18:47
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!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry

 
Delphi 2006 Professional
 
#8
  Alt 13. Nov 2010, 18:54
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
Jens

Geändert von SirThornberry (13. Nov 2010 um 19:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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