5

Ich überlege mir verschiedene Benutzeroberflächenlayouts für mein nächstes Projekt und ich frage mich, ob es entweder integrierte oder 3rd-Party-Frameworks gibt, die mir erlauben, Tabbed Document Interface zu erstellen?Tabbed Dokumentschnittstelle in Delphi

Um zu verdeutlichen, was ich will ist nicht eine Art von Docking-Mechanismus oder entweder eine MDI-Schnittstelle, sondern vor allem ein Framework, das mir ein Hauptformular und ein oder mehrere sekundäre Formulare, die als Registerkarten im Hauptformular angezeigt werden können .

Obwohl ich sagte, ich möchte keine Art von Docking-Mechanismus, machte ich eine kleine Testanwendung, die es tatsächlich verwendet. Das Ergebnis, das ich bekommen habe, ist sehr nahe an dem, was ich möchte. Zuerst vermisse ich einige Funktionen wie die Schließen-Schaltfläche auf jeder Registerkarte. Zweitens müsste ich ein eigenes Framework erstellen, um alle Aufgaben zu automatisieren, z. B. das Erstellen und Löschen der Registerkarten, das Zuordnen jedes neuen Formulars zu seinem Register, das Freigeben des Formulars, wenn das zugehörige Register geschlossen ist, und so weiter. Ich sage nicht, dass ich es nicht kann, aber ich würde gerne wissen, ob es fertige Frameworks gibt, die bereits alle diese Funktionen haben. Obwohl ich eine Open-Source-Lösung bevorzugen würde, ist auch eine kommerzielle Lösung willkommen.

+0

Das Problem der Registerkarten-Schnittstellen geht weit über das Hinzufügen von Registerkarten hinaus. Das ist der einfache Teil. Es gibt komplexere, zum Beispiel das Hinzufügen von Menüs/Symbolleisten/Ribbons auf sinnvolle Weise. –

+0

In meinem Fall wird nur das Hauptformular die Menüleiste enthalten und es wird keine Zusammenführung mit Menüs aus anderen Formularen geben, da dort keine Menüs vorhanden sind. Bei Symbolleisten ist das anders. Es ist normal, zusätzliche Symbolleisten in jedem Formular zu haben, und da diese Formulare innerhalb des Hauptformulars "integriert" und mit dessen Registerkarte verbunden sind, sind diese sekundären Symbolleisten "zu Hause" mit Funktionen, die nur mit den Formularen verknüpft sind in. – LightBulb

Antwort

6

Ich glaube nicht, dass es irgendein Rahmen für die Oberfläche mit Registerkarten, aber für gut aussehende Registerkarte/Seite Kontrollen mit Schließen-Button auf jeder Registerkarte, überprüfen Sie bitte die folgenden Schritte aus:

  1. rkSmartTabs, simuliert es Google-Browser Chrome Tabbed UI. und es ist Open Source.
  2. TAdvOfficePager, MS Office-Stil.

Ich hoffe, es hilft.

+1

rkSmartTabs ist eine wirklich gut aussehende Komponente, und der Code ist sehr klar! –

+0

danke für beide zu empfehlen, sie sehen gut aus, aber ich muss die Funktionalität überprüfen, die ich bekomme. Ich werde einen weiteren Kommentar posten, wenn ich es tue. – LightBulb

+0

rkSmartTabs sieht gut aus und scheint wie und guter Ausgangspunkt. Es hat einige Design-Mal Probleme in D2010, Eigenschaftsnamen sind inkonsistent und ich hatte einige Probleme, es in der IDE zu installieren, da der Autor keine Informationen über Anforderungen zur Verfügung gestellt hat, aber ich kann mit all dem für jetzt leben. Ich habe TAdvOfficePager noch nicht getestet. – LightBulb

0

Ich empfehle TvjPageList, die Teil der JVCL Suite von Komponenten ist. Es ist Open Source und scheint Ihren Anforderungen zu entsprechen.

+0

Ich sehe keine Registerkarten in dieser Komponente. Es sieht für mich so aus, als ob es sich ähnlich wie TNotebook verhält. – LightBulb

+0

@LightBulb: Wenn es einem TNoteBook ähnlich ist, bedeutet es nur, dass Sie Ihre Frames/Formulare im Client-Bereich des Hauptformulars unterhalb des TNotebook-Look-a-like platzieren. Es bedeutet auch, dass Sie nicht die Erstellung/Zerstörung der TTabControls verwalten müssen, auf die Sie sonst Ihre Frames/Formulare setzen würden, da dies für ein TPageControl erforderlich ist. –

6

Komponenten von Drittanbietern sind hier nicht obligatorisch.

Sie Standard-Delphi verwenden können kontrolliert zu erhalten, was Sie wollen:

  • Setzen Sie ein TPageControl auf dem Formular (ab Win32 Reiter);
  • Legen Sie die Align-Eigenschaft auf alClient fest;
  • Klicken Sie mit der rechten Maustaste auf das Steuerelement und wählen Sie "Neue Seite", um eine neue Seite hinzuzufügen.

Dann schreiben Sie nicht Ihre "Registerkarten" -Schnittstelle auf Formularen, sondern auf Frames.

Sie können Seiten auch nach Code erstellen und den Rahmen auf jeder Seite anzeigen.

+0

Haben Sie Erfahrung mit Frames aus DLLs? Meine Anwendung ist modular, wobei sich jedes Modul in einer anderen DLL befindet. Korrigiere mich, wenn ich falsch liege, aber ich denke, Frames können nur von BPLs funktionieren. – LightBulb

+0

@LightBulb: Eine BPL ist eine DLL und der bevorzugte Weg, um monolithische Anwendungen aufzuteilen. –

+1

Sie brauchen keine Frames, um mit dem Rest von A.Bouchez 'Suggestion zu bleiben. Verwenden Sie die wincontrol, die Sie mögen, als generisches Elternelement in Ihrer DLL und setzen Sie es mit setParent auf das TPageControl. –

1

Ich empfehle eine Symbolleiste (TToolBar oder ähnliche) und Frames (TFrame) zu verwenden, um Tabbed Interface nachzuahmen, Grund ?! gut Delphi geht Cross-Plattform (kein Geheimnis in diesem) sie werden Port meisten, wenn nicht alle der Standard-VCL ausgeliefert mit Delphi, also Warum nicht nutzen Sie dies als ein Vorteil?

Erstellen Sie den Frame (dynamisch), wenn der Benutzer auf eine Schaltfläche in der Symbolleiste klickt und die vorherige (falls vorhanden) zerstört, so dass die Speicherauslastung minimal bleibt, die Startzeit der Anwendung wird sehr gut sein Andererseits, wenn Sie (cx) TPageControl, TAdvPager, etc. gewählt haben, könnten Sie in einer Situation erwischt werden, in der ein Formular (das Hauptverdächtige) so viele VCLs hat, dass es viel UNNEMESSARY Speicher benötigt es wird langsam sein.

Die Verwendung von Frames hat viele Vorteile. Wenn irgendwo in Ihrer Anwendung ein "Tab" angezeigt werden soll, können Sie einfach den benötigten Frame dynamisch erstellen und ohne zusätzliche Arbeit verwenden.

Wie auch immer, das ist meine zwei Cent, hoffe das hilft.

+0

Ich brauche eine dynamische Benutzeroberfläche, was bedeutet, dass ich Formulare/Frames für Benutzeraktionen erstellen und löschen werde. Tabbed UI scheint ein gutes Layout zu sein. Die Verwendung von TToolBar ist eine Möglichkeit, dies zu tun, aber die Verwendung eines einfachen TTabSets und das Andocken neu erstellter Formulare/Frames innerhalb des Clientbereichs des Hauptformulars klingt für mich einfach genug, da ich das gesamte Framework erstellen kann. Punkt war, wenn ich etwas finden könnte, das bereits existiert. – LightBulb

+0

@LightBulb ohhh, OK, mir sind keine Komponenten bekannt, die Ihren Anforderungen entsprechen. Ich schlage jedoch vor, das Projekt so weit wie möglich von Drittanbieterkomponenten fernzuhalten, vor allem wenn Sie der Teamleiter sind Firmeninhaber, wenn das Projekt wächst, wirst du verstehen, was ich meine. – ComputerSaysNo

+0

Ich verstehe sehr gut, was Sie sagen. Ich bin Teamleiter in meinem Unternehmen und muss entscheiden, welchen Ansatz wir für die nächste Version unserer Software verwenden. Ich würde mich sehr gerne an integrierte Lösungen halten oder Open-Source-Komponenten verwenden, die aktiv entwickelt werden. Die Verwendung von Komponenten von Drittanbietern ist nicht so schlimm, wenn Sie genau wissen, was Sie brauchen und wie Sie sie richtig einsetzen. Normalerweise mache ich meine eigenen Komponenten oder Frameworks, aber die Möglichkeit, etwas zu verwenden, das bereits existiert, bedeutet Ressourcen zu sparen. – LightBulb

0

Ich benutze JVCL JvDocking, und seine Tabbed Docking-System, um MDI-ähnliche Anwendungen zu machen.

Sie können Ihre Fenster auch schweben oder kacheln, zusätzlich dazu, dass Sie sie in Registerkarten haben.