AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form laden

Ein Thema von Igotcha · begonnen am 27. Jan 2005 · letzter Beitrag vom 30. Jan 2005
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

Form laden

  Alt 27. Jan 2005, 23:08
Hallo zusammen,

ich bschäftige mich seit einiger Zeit mit Lösungsmöglichkeiten für folgenden Anwendungsfall:

Ich möchte meine künftige Applikation so aufbauen, dass diese im Grunde nur ein "Container" für weitere Programmfunktionalitäten ist. In dem Programm wird ein Berechtigungssystem abgebildet, welcher User welchen Zugriff auf welche Funktionen hat. Zudem ist noch eine Reporting-Funktionalität enthalten, die sich aber auf die zugrunde liegende Datenbank bezieht.

Die gesamten angesprochenen Funktionalitäten möchte ich komplett auslagern. Dafür gibt es aus meiner Sicht 2 Gründe: a) Wartbarkeit der einzelnen "Module" und b) Erweiterbarkeit.

Man stelle sich den Grundsätzlichen Anwendungsaufbau so vor: Hauptformular mit einem Treeview links, der die durch das Berechtigungssystem freigeschalteten "Module" anzeigt und rechts einen freien Fensterbereich (bzw. ein Panel), in dem das jeweilige Modul angezeigt werden soll.

Anforderungen meinerseits ist: Das Hauptprogramm soll von der Art der zu ladenden Forms und deren individuellen Funktionalitäten keine Kenntnis haben müssen. Man wählt also im TV eine Funktion aus, daraufhin wird das Modul geladen, angezeigt und steht funktional zur Verfügung.

Was ich mir wünsche:
  • das Formular mit all seinen Funktionalitäten kann in der Delphi-IDE erstellt werden
  • mehr als einen Standardaufruf für diese Module darf es im Hauptprogramm nicht geben
  • das "Modul" sollte als eine Datei vorliegen
Ideal wäre eine "Schnittstelle" in der Form, dass ich vom Hauptprogramm aufrufe:
ShowModule('Modulname',iUserID) Ich habe bisher die Möglichkeiten von Formularen in DLLs und Packages gefunden. Nur leider wurde das Thema, was mich interessiert, überall nur kurz angerissen.

Habt ihr evtl. einen für meine Fragestellung passenden Lösungsansatz?

Gruß Igotcha
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: Form laden

  Alt 28. Jan 2005, 00:16
Hier in der DP gibts eine Menge dazu ...

Ich finde das Plugin-System von Sakura absolut Klasse.
Du musst es natütlich deinen Bedürfnissen anpassen, so das z.B. die Plugins automatisch registriert werden und für den Aufruf z.B. Actions bereitgestellt werden, die du dann dynamisch in dein Programm einbinden kannst ...
Hier im Forum suchenPlugIns in eigenen Anwendungen


  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Form laden

  Alt 28. Jan 2005, 00:39
Da habe ich schon drübergeschaut, hat mich aber nicht wirklich weitergebracht, da ich bisher keine Antwort gefunden habe, ob mein Vorhaben in der Form überhaupt möglich ist.

Du sprichst u.a. genau das an, worüber ich mir noch nicht im Klaren bin. Ich will ja gerade erreichen, dass mein "Programm-Container" eben gerade nichts über das zu ladende Modul wissen muss, da sämtliche Funktionalität in diesem enthalten ist.

Beispiel: Der Anwender wählt im Modulbaum z.B. "Adressverwaltung" aus. Dann soll das Modul "Adressverwaltung" in das Hauptprogramm geladen werden. In dem Modul "Adressverwaltung" ist sämtliche Funktionalität vorhanden, die zur Verwaltung von Adressen notwendig ist (Datenbankanbindung, Anzeige, Buttons mit Funtionen, etc.). Also ein "Modul" soll bei mir eine komplett eigenständige Komponente sein - das Hauptprogramm muss mit dieser nicht interagieren (also keine Rückgabewerte empfangen, o.ä.), sondern dient quasi nur als "parent".

Um es mal plakativ zu sagen, ich möchte praktisch eine EXE innerhalb einer EXE darstellen

Gruß Igotcha
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: Form laden

  Alt 28. Jan 2005, 01:07
Genau das kannst du damit machen.

Dein Programm muss doch aber eine dynamische Registrierung der Plugins dürchführen, um die richtigen Menüeinträge für die vorhandenen Plugins anzuzeigen und um die Funktion z.B. "ShowModule(GetPluginIdByName(MenuItem[nn].Caption),iUserID)" für das gewünschte Plugin starten zu können.

Du kannst doch beim Starten deines Programms das Plugin-Verzeichnis durchsuchen lassen. Für jedes "poteltielle" Plugin >RegisterPlugin< aufrufen und bei Erfolg die Menuitem-Eventhandler (oder besser Actions) dynamisch in dein Programm einbinden ...

Ich bin total Zufrieden mit Sakuras Plugin-System ...
(Wird auch brav in jeder About-Box erwähnt )

Das Einzige was sich meine Plugins mit dem Hautpprogramm "teilen" ist die AdoConnection, damit das Programm nicht bei jedem Plugin-Aufruf eine neue DB-Anmeldung machen muß.

Wichtig ist, das die gemeinsame Unit möglichst von Anfang an ein gutes Konzept hat, und nicht für jedes Plugin verändert werden muß ...


Schöne Grüße
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Form laden

  Alt 28. Jan 2005, 09:55
Zitat von jensw_2000:
Genau das kannst du damit machen.
Das ist schon mal gut

Zitat:
Dein Programm muss doch aber eine dynamische Registrierung der Plugins dürchführen, um die richtigen Menüeinträge für die vorhandenen Plugins anzuzeigen und um die Funktion z.B. "ShowModule(GetPluginIdByName(MenuItem[nn].Caption),iUserID)" für das gewünschte Plugin starten zu können.
Nee, da möchte ich ja einen anderen Weg gehen.

Sagen wir mal die Anwendung wird mit dem aktuellen Stand an Modulen ausgeliefert (z.B.10 Stück). Beim Anwender liegen alle 10 Module im Verzeichnis "Modules". Wenn der Anwender das Hauptprogramm startet, wird im Hauptprogramm sein "Menübaum" aufgebaut, der sich aus dem Berechtigungssystem in der Datenbank ergibt (das Verzeichnis "Modules" bzw. was darin ist, wird nicht beachtet, da sowieso alle Module darin vorhanden sind). Abhängig vom Menübaum kann der Anwender aber nur die Module laden, die für ihn freigeschaltet sind. Gibt es mal ein neues Modul, wird dieses a) in der Datenbank eingetragen und b) in das Anwender "Modulverzeichnis" kopiert - anschließend muß der Anwender in der DB noch für das Modul berechtigt werden.

Ist also ein andere Weg wie bei z.B. Photoshop, wo man Plugins in ein Verzeichnis kopiert und PS bei jedem Start erstmal schaut, welche Plugins in dem Verzeichnis eigentlich vorhanden sind.

Ich brauche an dieser speziellen Stelle nach meiner Ansicht, also weniger "Verwaltungskram".

EDIT:
Vielleicht suche ich auch gar kein "Plugin-System", sondern einfach nur eine Möglichkeit, Formulare mit in sich abgeschlossenen Funktionalitäten in meine Hauptanwendung zu laden. Evtl. ist das auch der ursprünglich angesprochene Grund, warum ich bisher zu meiner Fragestellung nie so recht fündig wurde.

Deshalb noch mal kurz meine Anforderungen:

Ich möchte mir in der IDE ein Formular bauen mit allem Drum und Dran (Toolbar, Datensensitive Komponenten, Visuelle Komponenten, etc.). Dieses als "irgenetwas abspeichern und in einer anderen Anwendung einfach nur anzeigen, um in dieser Hauptanwendung dann mit diesen "Plugin-Formular" zu arbeiten.
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Form laden

  Alt 29. Jan 2005, 13:14
Ich bin echt am verzeifeln und bekomme es nicht gebacken...

Deshalb habe ich mal ein Minimalprojekt abgehängt, welches aus der DLL mit der Form und der "Haupt-Applikation" mit dem Panel besteht, in welchem die DLL-Form angezeigt werden soll.

Evtl. kann mir ja jemand auf die Sprünge helfen.

Danke und Gruß
Igotcha
Angehängte Dateien
Dateityp: zip dllform_175.zip (1.011,8 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#7

Re: Form laden

  Alt 29. Jan 2005, 21:58
Dein Hauptpromlen war, das du die dllForm erstellst und die DLL sofort wieder entlädst.
Habe die mal eine funktionierende Version (ohne den unschönen Umweg über ShowModal) drangehängt ...

Schau es dir mal an ...


Jens
Angehängte Dateien
Dateityp: rar dllform_321.rar (1,34 MB, 31x aufgerufen)
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Form laden

  Alt 30. Jan 2005, 01:40
Vielen Dank!

Das ist zumindest eine technisch saubere Lösung. Aber genau so hatte auch einer meiner Versuche vom Ergebnis her ausgesehen. ich habe mal einen Screenshot beigefügt, wie das Ganze unter XP aussieht. Man beachte den rechten und unteren Fensterrand da, wo die Form eingebettet wurde. Die eingebette Form ist, obwohl "alclient" größer als das Client-Panel.

Wenn wir das noch richtig hinbekommen, habe ich zumindest einen Anfang

Viele Grüße
Igotcha
Miniaturansicht angehängter Grafiken
screen_644.jpg  
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Form laden

  Alt 30. Jan 2005, 13:29
Habe nochmal einen anderen Screenshot mit einer zusätzlichen Statusbar und einem Panel hinzugefügt. Hoffe, man sieht das Problem da besser.

Die in Panel1 eingebettete dllForm ist auf "alclient" gesetzt, das Panel als Parent.
Miniaturansicht angehängter Grafiken
screen_142.jpg  
  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 18:10 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