AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Komponenten variabel halten (unterschiedliche Editionen)
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten variabel halten (unterschiedliche Editionen)

Ein Thema von RWarnecke · begonnen am 7. Apr 2009 · letzter Beitrag vom 9. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 16:30
Hallo zusammen,

es gibt ja mehrere Wege Komponenten auf die Form zu plazieren.
  • Komponenten komplett zur Laufzeit erzeugen
  • Komponenten visuell auf die Form legen und die Konfiguration im OI festelegen
  • Komponenten in der Grundstruktur ohne jegliche Konfiguration im OI auf die Form legen und die Konfiguration zur Laufzeit festelegen.

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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 16:44
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 16:50
Zitat von mirage228:
Was verstehst Du unter Berechtigungen? Sowas wie "registriert" und "nicht registriert" bei Shareware Programmen?
Nein, so meinte ich es nicht. Ich habe da an Userberechtigungen gedacht, wie Admin der alles kann und User der nur lesen kann. Sowas meine ich mit Berechtigungen. Oder Personal Edition, Professional Edition, Enterprise Edition.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 17:34
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 18:03
Zitat von mirage228:
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).
Ok, die Funktionen kann ich auslagern, aber wie mache ich das mit den Komponenten ? Muss ich dann die Komponenten zur Laufzeit erzeugen ? Hast Du dazu Informationsmaterial, wo ich das Vorgehen nachlesen kann ?

Zitat von mirage228:
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...)
Dieses sukzessive dynamische deaktivieren/entfernen, wollte ich eigentlich nicht machen, weil ich doch dann wieder an der Übersichtlichkeit verliere.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 18:07
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

Dann bis später

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 18:49
Zitat von oki:
- alle Einstellungen werden sofort nach dem Create wirksam,...
Da kann ich nicht so ganz zustimmen. Das die Komponenten nach dem Create wirksam werden, kann ich so regeln, dass ich alle Komponenten erzeuge in FormCreate.
Zitat von oki:
Fehler bei der Platzierung im Code werden vermieden,
Was meinst Du damit genau ?
Zitat von oki:
- Einstellungen zu Komponenten bleiben auch nach längerer Zeit und größen Projekten übersichtlich und leicht auffindbar.
Da gebe ich Dir recht, aber bei einem gut strukturierten Sourcecode, sollte auch das kein Problem sein.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 19:15
Hi,
Zitat:
oki hat folgendes geschrieben:
- alle Einstellungen werden sofort nach dem Create wirksam,...
Da kann ich nicht so ganz zustimmen. Das die Komponenten nach dem Create wirksam werden, kann ich so regeln, dass ich alle Komponenten erzeuge in FormCreate.
Das meinte ich so, dass es dann immer so ist. Man muss sich halt im FormCreate nicht mer drum kümmern. Spart einfach Source und wird imho übersichtlicher. Ich code im OnCreate dann immer nur das, was wirklich zur Laufzeit gesetzt werden muss. Nicht mehr und nicht weniger. So weis ich, dass alles was im OnCreate steht wirklich absolutes Laufzeitzeugs ist. Aber grundsätzlich ist es egal, da geb ich dir recht. War auch nur mein Argument, ich habs halt so lieber.
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:
oki hat folgendes geschrieben:
Fehler bei der Platzierung im Code werden vermieden,
Was meinst Du damit genau ?
Halt wie oben beschrieben. Dadurch dass öffentliche Eigenschaften automatisch beim creieren gesetzt werden kann nichts vergessen werden oder zum falschen Zeitpunkt initialisiert werden. Kann ich grad schlecht beschreiben. Vielleicht folgendes Beispiel. Es gibt eine Eigenschaft Active und weitere Eigenschaften, die für die Ausführung von Active notwendig sind. Alles einmal im OI eingestellt und Achtive auf True, und alles läuft.
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:
oki hat folgendes geschrieben:
- Einstellungen zu Komponenten bleiben auch nach längerer Zeit und größen Projekten übersichtlich und leicht auffindbar.
Da gebe ich Dir recht, aber bei einem gut strukturierten Sourcecode, sollte auch das kein Problem sein.
Natürlich bemühen wir uns alle ordentlich strukturierten Code zu schreiben. Aber ehrlich, gelingt uns das immer? Leider habe ich oft Projekte oder Themen auf dem Tisch die realisiert werden müssen, teilweise unter Zeitdruck, die eben nicht im Vorfeld komplett designt sind. Da ergeben sich oft Änderungen mitten im Projekt die vieles an Struktur zu nichte machen. Dann alles komplett neu zu schreiben reicht oft die Zeit nicht. Es kommt immer wieder der Verweis auf das nächste Release. "Da räumen wir dann mal richtig auf!" Denkste!
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
42
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#9

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 19:32
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.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#10

Re: Komponenten variabel halten (unterschiedliche Editionen)

  Alt 7. Apr 2009, 19:38
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:28 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