![]() |
Komponenten variabel halten (unterschiedliche Editionen)
Hallo zusammen,
es gibt ja mehrere Wege Komponenten auf die Form zu plazieren.
Ich möchte in einem Programm mit unterschiedlichen Berechtigungen arbeiten. Das heißt zum Beispiel bei der Komponente TMainMenu, das unterschiedliche Menüpunkte oder ganze Menü aus- oder eingeblendet werden müssen. Das Beispiel zu der Komponente TMainMenu soll nur ein Beispiel sein, ich kann mir das gleiche auch noch vorstellen für TListView, TListBox u.s.w.. Es ist nicht auf eine Komponente beschränkt. Welche der drei Möglichkeiten würdet Ihr nehmen, bezüglich Übersichtlichkeit, Wartung/Pflege und Erweiterbarkeit im Programm (im Sourcecode und/oder Designer)? Bitte auch Gründe nennen, warum Ihr die eine oder andere Möglichkeit nehmt. Ich persönlich tendiere zu der Variante, die Komponenten komplett zur Laufzeit zu erstellen. Ich gebe zu, das macht am Anfang mehr Tipparbeit. Aber wenn ich es schön strukturiere, dann sollte ich es nachher einfacher haben Teile für die einzelnen Berechtigungen zu erweitern. |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Was verstehst Du unter Berechtigungen? Sowas wie "registriert" und "nicht registriert" bei Shareware Programmen?
Also wenn Du es sehr modular machst, hast Du dann z.B. ein leeres TMainMenu und füllst dies zur Laufzeit mit den entsprechenden Actions/Einträgen, die der beim Start gegebenen Berechtigung entsprechenden, damit bist Du am flexibelsten. Eventuell reicht es Dir aber auch erstmal alle Einträge ins Menü z.B. einzutragen und diese dann "auszugrauen"/auszublenden, falls der Eintrag nicht verfügbar ist. Viele Grüße |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Zitat:
|
Re: Komponenten variabel halten (unterschiedliche Editionen)
Wenn Funktionalität komplett nur in einigen Editionen vorkommt, könntet Du diese in eine eigene BPL auslagern (diese prüft dann beim Initialisieren, ob eine korrekte Lizenz vorliegt, wie bei Delphi).
Was sich nicht so auslagern lässt würde ich erstmal komplett einbauen und dann je nach Rechten wieder sukszessive dynamisch deaktivieren/entfernen. (Habe mal gelesen, dass das Windows Startmenü das genauso macht; sprich erst alles drin und dann je nach Rechten Einträge wieder raus...) Viele Grüße |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Zitat:
Zitat:
|
Re: Komponenten variabel halten (unterschiedliche Editionen)
Hi,
also ich habe das mit der lizenz auch noch nicht gerafft, aber meine Meinung sollst du trotzdem haben. Ich bevorzuge bei eigenen Komponenten die Variante mit published Member. Dafür gibt es mehrere Gründe. Das es nachher mit dem OI schön einfach geht ist nur einer der Vorteile. Hier was mich veranlasst das so für die Designzeiteinstellungen zu machen: - einfache Bedienung über OI, - schneller Überblick über alle wesentlichen Einstellungen zur Komponente und kein suchen im Code (am Besten noch was übersehen), - published-Einstellungen über den OI hindern einen nicht Änderungen zur Laufzeit vorzunehmen, alles Public verhinder die Einsellung mittels OI, - alle Einstellungen werden sofort nach dem Create wirksam, Fehler bei der Platzierung im Code werden vermieden, - Einstellungen zu Komponenten bleiben auch nach längerer Zeit und größen Projekten übersichtlich und leicht auffindbar. Ups, meine Frau ruft zum Abendbrot. Ich muß gehorchen :mrgreen: Dann bis später Gruß oki |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Zitat:
Zitat:
Zitat:
|
Re: Komponenten variabel halten (unterschiedliche Editionen)
Hi,
Zitat:
Für andere Programmierer ist es imho übersichtlicher und die müssen nicht ständig fragen warum ich dies und jenes zur Laufzeit mache und anderes nicht. Der Umgang für andere Programmierer mit meinen Komponenten erscheint mir so auch leichter. Sie finden alle wichtigen Eigenschaften im OI und die sind dann so ziemlich selbsterklärend. Lange Beschreibungen was sie wann und wo initialisieren mussen fallen eifach flach. Zitat:
In der Laufzeitvarialte könnte der Fehler passieren, dass jemand erst Active auf True setzt, und danach erst eine relevante Eigenschaft belegt. Dann schlägt Active fehl weil zu diesem Zeitpunkt die dazugehörige Eigenschaft noch nicht korrekt belegt ist (als Beispiel mal ein Dateipfad ??). Zitat:
Denk in diesem Zusammenhang auch mal daran, dass eventuell andere Programmierer deinen Code verstehen oder deine Komponenten verwenden sollen. Ich denke, mit dem OI ist dann vieles leichter. Wie gesagt, dass ist alles nur meine bescheidene Meinung und kein Gesetz. Ich denke auch, dass es ein bewährtes Prinzip ist den OI zu verwenden. Ich kenne jedenfalls keinen Programmieren (von den Guten) die behauptet haben der OI ist blöd und sie coden soundso alle per Hand. Ne, sie benutzen den OI; schnell, einfach, übersichtlich, und sicher. Und nebenbei liefert er automatisch einen schnellen Überblick über die Eigenschaften einer Komponente und erschließt deren Funktion einfacher. Gruß oki |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Beispielvorschlag:
Delphi-Quellcode:
unit StdComps; // Standard-Komponenten
interface type TMyComp = class { ... } end; implementation { ... } end.
Delphi-Quellcode:
unit ExtComps; // erweiterte oder andere Komponenten
interface uses StdComps; type TMyComp = class(StdComps.TMyComp) { ... } end; implementation { ... } end.
Delphi-Quellcode:
{$Define StandardVersion}
{.$Define ExtendedVersion} program Demo; {$AppType Console} uses {$IfDef StandardVersion}StdComps{$EndIf} {$IfDef ExtendedVersion}ExtComps{$EndIf}; { ... } var MyComp: TMyComp; begin { ... } end. |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Ich programmiere im Moment noch alles komplett alleine. Ich wollte ja auch nicht sagen, dass der OI schlecht ist. Ich muss sagen, ich liebe den IO. So wie Du es beschrieben hast, kann man da alles schnell einfach und übersichtlich konfigurieren. Das steht für mich ausser Frage. Es geht mir hauptsächlich in dieser Diskussion darum, wege aufzuführen, wie ich Komponenten variabel halten kann.
Wenn ich unterschiedliche Versionen programmiert habe, konnte ich es bis jetzt immer mit Compilerschalter regeln. Nun möchte ich ein Programm schreiben, wo es einmal eine Personal Edition geben soll und einmal eine Professional Version geben soll. Da gibt es ja halt nun mal auch Komponenten, die mal angezeigt werden und nicht angezeigt werden müssen. Das kann ich ja nicht über Compilerschalter lösen oder ? Edit - roter Kasten : So wie es Panthrax geschrieben hat, so habe ich es mir vorgestellt. |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Und der Compiler meckert in ExtComps nicht, dass es die Klasse TMyComp schon gibt?
Ich dachte, dass mit den Compilerschaltern wäre klar. Was hält dich davon ab alles in der Komponente zu deklarieren.
Delphi-Quellcode:
type
TMyComp = class { ... } published {$IfDef StandardVersion} property StdProp1 ... property StdProp2 ... {$EndIf} {$IfDef ExtendedVersion} property ExtProp ... {$EndIf} end; Ich hatte deine Frage erst so verstanden, dass du fragst was wir davon halten, ob die Eigenschaften einer Komponente in den published oder public Teil sollten. Gruß oki |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Nein, es geht darum, wie ich bestehende Komponenten dementsprechend einsetze. Ich habe bis jetzt noch keine eigene Komponente entwickelt. Deshalb ist die Grundidee, so wie es Panthrax geschrieben hat.
|
Re: Komponenten variabel halten (unterschiedliche Editionen)
ok, dann habe ich das verstanden. Das man eine Klasse definieren kann, bei der die abgeleitete Klasse den gleichen Bezeichner hat wie sein Vorfahre ist mir aber neu. Ich dachte, da mault der Compiler.
Gruß oki |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Wieso sollte der Compiler maulen, das sind ja unterschiedliche Namespaces.
|
Re: Komponenten variabel halten (unterschiedliche Editionen)
Zitat:
Solange man die Klassen nicht registrieren muss sollte das dann funzen. Ich dachte immer, das würde so Probleme geben. Aber wenn Delphi das auf Grund des Namespace (andere Unit) durchgehen läßt solls mir recht sein. Gruß oki |
Re: Komponenten variabel halten (unterschiedliche Editionen)
Gibt es noch andere Möglichkeiten ? Oder gibt es noch etwas schlechtes oder auch gutes an den bereits vorgestellten Möglichkeiten ?
|
Re: Komponenten variabel halten (unterschiedliche Editionen)
Hallo, beschränken sich die verschiedenen Berechtigungen auf die Verwendung einer Komponente
oder auf den Zugriff auf verschiedene Funktionen der Komponente ? bsp. ListView, ListView.SubItems ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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