Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Die ultimative Split Form
zurück: Access Buch! weiter: Beispieldatenbank Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
20. Nov 2012, 00:17
Rufname:

Die ultimative Split Form - Die ultimative Split Form

Nach oben
       Version: (keine Angabe möglich)

Hallo zusammen,

hier habe ich ein neues Tool für Euch, mit dem man nun die seit Access 2007 eingeführte Splitform endgültig ad acta legen kann.

Die originale Splitform hat eine Reihe Nachteile:
  • sie funktioniert nur ab A2007
  • man kann sie nur als Hauptformular verwenden
  • es gibt nur eine Splitbar, entweder waagerecht oder senkrecht
  • man hat eigentlich das gleiche Formular auf beiden Seiten, ein Einzel- und ein Datasheet-Formular
  • es sind ein paar Bugs darin, die Access zum Absturz bringen können
  • man hat keinen richtigen Zugriff auf das Endlosformular, nur mit Tricks
  • die Splitterbar selbst kann im Design nicht angepaßt werden
Das heute vorgestellte Tool behebt nicht nur alle diese Probleme, sondern kann darüber hinaus auch noch eine Menge mehr:
  • theoretisch unbegrenzte Anzahl von Splitterbars, sowohl vertikal wie auch horizontal, begrenzt nur durch die maximal mögliche Anzahl Controls in einem Formular
  • auf beiden Seiten der Splitterbars können beliebige Controls eingefügt werden (Ausnahmen: Optionsgruppen und Registersteuerelement eignen sich nicht wirklich), also auch Unterformulare mit beliebigem Inhalt
  • mit STRG-Klick kann die Splitterbar automatisch an das Ende, den Anfang oder die Startposition verschoben werden (diverse Einstellungen möglich)
  • die Elemente rechts und links (oder oberhalb/unterhalb) der Splitterbar können auf mehrere verschiedene Weisen automatisch verschoben, vergrößert und verkleinert werden
  • jede Sektion (Kopf, Detailbereich, Fuß) kann unabhängige Splitterbars verwenden, ebenfalls vertikal und horizontal
  • die Splitterbar kann entweder ein Commandbutton, ein Rectangle oder ein Image Control sein, wie üblich entsprechend der Möglichkeiten dieser Controls beliebig einstellbar
  • die Bereiche, zwischen denen Controls verschoben werden können, können unabhängig von der Splitterbar eingestellt werden, es gibt jeweils ein MinPos/MaxPos-Paar für den Bereich vor der Splitterbar (Lower), für den Bereich auf der anderen Seite (Greater) und für die Splitterbar selbst. Somit kann bei entsprechenden Einstellungen die Splitterbar auch wie eine Scrollbar verwendet werden (die Splitterbar muß nicht über die gesamte Breite/Höhe des Formulars gehen)
  • einzelne Controls können aus der Bewegung/Veränderung ausgeschlossen werden, ebenso kann man auch das ResizeBehaviour für jedes Control einzeln einstellen
Die Optionsgruppe funktioniert natürlich auch, aber diese entwickelt bei Größenveränderung ein "Eigenleben", das nahezu unmöglich vorherzusehen ist und im Access Code selbst durchgeführt wird, daher wird in den meisten Fällen hier nicht viel Sinnvolles herauskommen.

Das Registerkartenelement ist ebenfalls verwendbar, allerdings kann die Größe der Tabs nicht auf 0 reduziert werden (im Gegensatz zu allen anderen Controls), daher ist diese nur bedingt einsetzbar. Wenn man darauf verzichtet, das Element vollständig ausblenden zu wollen, kann man auch damit arbeiten.

Linien werden in ihrer Größe nicht verändert (obwohl theoretisch möglich), weil Linien sonst einen anderen Winkel einnehmen und man sie meistens eher für senkrechte und waagerechte Linien einsetzt.

In der Demo sind zwei Formulare ("frmSimpleSplitter" und "frmSimpleSplitterGfx"), die zeigen, daß man mit einfachen Unterformularen drei verschiedene Ansichten einer Tabelle gleichzeitig darstellen kann. Da man die Splitterbars beliebig verschieben kann, kann man jede Ansicht auf Vollbild vergrößern (mit Verwendung des >=A2007 Anchoring kann man auch sicher noch einiges zusätzlich regulieren, darauf habe ich aber bewußt verzichtet, damit die Formulare in möglichst vielen Access-Versionen funktionieren).

Das Formular "frmSplitterExplorer" zeigt zwei Splitterbars im Detailbereich und eine im Header, dabei ist die waagerechte ein CommandButton und die senkrechte ein Rechteck. Im Header hat man hier die oben erwähnten Min/Max-Paare, die man hier beliebig einstellen kann, um mit den Ergebnissen zu spielen. Nicht alle Werte bringen sinnvolle Ergebnisse, aber das meiste funktioniert. Die eingestellten Werte werden mit farbigen Linien dargestellt, um den Effekt und die Werte besser verstehen zu können. Die Linien wurden mit der Option "CanBeMoved" von der Bewegung durch die Splitterbars ausgeschlossen. Außerdem kann man hier das ResizeBehaviour und das CtrlClickBehaviour mit zwei Comboboxen einstellen (hier nur für alle Controls, im Code kann man das ResizeBehaviour auch für jedes Control verändern).
Wie man hier sieht, sind sehr breite Frames ein Problem, da Access sinnvollerweise alles in Twips berechnet - nur Frames werden in Point angegeben. Das sollten eigentlich 20 Twips sein, aber nach Experimenten sind es 15, was eigentlich Pixel sind. Und um die Sache noch komplizierter zu machen, rechnet Access für die Positionierung eines Controls von der Mitte eines Frames aus... entsprechender Code ist in der Klasse "clsCCFormSplitterData" enthalten, aber deaktiviert, Ihr könnt ja damit mal herumspielen. Allgemein würde ich aber eher empfehlen, auf breite Frames zu verzichten.

Das Formular "frmSplitterMenu" zeigt eine andere Verwendung: Hier ist links eine Buttonleiste zu sehen und rechts ein Unterformular, die Buttonleiste kann mit der Splitterbar ausgeblendet werden, entweder manuell oder mit STRG-Klick. Da die MaxSplitterPos auf den linken Rand der Splitterbar eingestellt ist, kann das Menü auch nur genau so groß vergrößert werden. Ebenso gibt es Methoden wie "MoveToMin", mit der man die Splitterbar auch gleich im Form Load Event ausgeblendet anzeigen lassen können.

Die Anwendungsmöglichkeiten gehen weit über die paar Demos hinaus. So wäre es denkbar, verschiedene "Seiten" durchzuschieben, zum Beispiel für einen Wizard-Dialog. Oder man verwendet die Events, die die Klasse zur Verfügung stellt, um die Splitterbar beim Verschieben zu verändern, oder man verändert die Bereiche, in denen die Controls gescrollt werden können, während der Laufzeit, um irgendwelche Effekte zu erzeugen. Man könnte sich ein Formular in der Art von Visual Studio oder Outlook Express damit erstellen, ebenso sind Zieharmonika-Menüs damit machbar, wie man sie aus moderneren Microsoft-Anwendungen kennt. Da Header und Footer unabhängige Splitterbars verwenden können, kann man auch hier die Menüsteuerung auf eine ganz neue Ebene bringen, endlich geht einem der Platz für Buttons nicht mehr aus - man schiebt sich einfach eine weitere Leiste hinein...Smile

Die Möglichkeiten sind schier unbegrenzt und die Klassen bieten einige Methoden und Eigenschaften an, die ich nicht alle hier beschreiben kann, sind im Code dokumentiert.

Die Splitterbars in eigene Formulare einzubauen, ist denkbar einfach.
  1. Notwendig sind nur die beiden Klassen "clsCCFormSplitter" und "clsCCFormSplitterData". Die Klasse "clsCCFormSync" ist eine kleine Erweiterung der früher schon hier beschriebenen Klasse zur Synchronisation von Formularen und dient hier nur dazu, um zu zeigen, daß auch die Formularsynchronisation über drei (und beliebig viele mehr) Unterformulare kein Problem ist, auch dieser Vorteil der originalen Access Splitform kann also spielend nachgebaut werden.

  2. Wenn die beiden Klassen importiert wurden, baut man in sein Formular die Splitterbar ein, die man an beliebiger Stelle mit beliebiger Größe und beliebigem Aussehen erstellen kann. Wie gesagt, entweder CommandButton, Rectangle oder Image. Die Position der Splitterbar bestimmt, welche Controls vor der Splitterbar liegen und welche dahinter (das berechnet die Klasse selbständig). Alle Controls, die irgendwie die Splitterbar schneiden, werden ausgeklammert und nicht verschoben. Wenn man also z.B. wie in "frmSplitterExplorer" ein Kreuz aus zwei Splitterbars bildet, verschieben sich beide nicht gegenseitig. Wenn man aber wie in "frmSplitterChaos" zwei senkrechte Splitterbars nebeneinander stellt, kann die eine die andere aus dem Bildschirm schieben (was interessante Möglichkeiten bietet, wie etwa einen Wizard-Dialog). Die Controls müssen sich nicht überlappen, es genügt, wenn ein Control die gedachte vertikale bzw. horizontale Linie einer Splitterbar überschneidet, auch wenn diese nicht die ganze Breite/Höhe einnimmt. Alle anderen Controls werden entsprechend zugeordnet. Will man einzelne Controls ausschließen, obwohl sie sich nicht überschneiden, kann man sie mit "CanBeMoved" im Code selbst ausschließen.

  3. Der kleinste mögliche Code sieht so aus:
    Code:
    Private objSplitter As clsCCFormSplitter   ' hier kann man auch "WithEvents" verwenden, wenn man die Events der Klasse verwenden möchte

    Private Sub Form_Load()
        Set objSplitter = New clsCCFormSplitter
        objSplitter.Init picSplitter, enmSplitterType_Vertical, , enmSplitterControlResize_ShrinkOnly
    End Sub
Yep, das ist wirklich schon alles. Controls platzieren, Splitterbar hineinsetzen, dieser einen sinnvollen Namen verpassen (hier im Beispiel "picSplitter" für eine Image-Splitterbar), den Code einbauen, fertig.

Für jede weitere Splitterbar muß man eine weitere Objektvariable auf Modulebene definieren (und "WithEvents" hinzufügen, wenn man die Events der Klasse verwenden will) und den Init-Code für die weitere Objektvariable in Form_Load hinzufügen.

Die Formularsynchronisation ist u.a. hier beschrieben: "Split Form"/Formularsynchronisation mit Events

Viel Spaß beim Experimentieren mit einer neuen Ära von Formularen

Christian



CCSplitter.zip
 Beschreibung:
Unbegrenzte Splitterbars in Formularen, enthält auch die Formularsynchronisation

Download
 Dateiname:  CCSplitter.zip
 Dateigröße:  216.07 KB
 Heruntergeladen:  235 mal

Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
21. Nov 2012, 23:02
Rufname:


AW: Die ultimative Split Form - AW: Die ultimative Split Form

Nach oben
       Version: (keine Angabe möglich)

Hier noch die Datei in den Formaten A2000-2003.


CCSplitter2000_2003.zip
 Beschreibung:
CCSplitter V1.0 in den Formaten A2000-2003

Download
 Dateiname:  CCSplitter2000_2003.zip
 Dateigröße:  399.11 KB
 Heruntergeladen:  90 mal

MissPh!
Office-VBA-Programmiererin


Verfasst am:
22. Nov 2012, 00:28
Rufname:
Wohnort: NRW

AW: Die ultimative Split Form - AW: Die ultimative Split Form

Nach oben
       Version: (keine Angabe möglich)

@Christian:
Hast du das auch mal mit Access 2003 getestet?

Und kannst du evtl. auch ein paar Kommentare dazu geben, was du mit welchem Formular bezweckst und wie man mit dieser Beispiel-DB umgehen sollte?!

SplitForm = Geteiltes Formular - das gibt es erst seit Office 2007.
Warum und weshalb und vor allem WIE könnte man das in einer 2003er Version zum Laufen bringen?

_________________
Gruß MissPh!
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
22. Nov 2012, 08:11
Rufname:

AW: Die ultimative Split Form - AW: Die ultimative Split Form

Nach oben
       Version: (keine Angabe möglich)

Hallo MissPh,

nein, habe ich nur unter A2007 getestet und entwickelt.

Ich war der Meinung, den Zweck oben deutlich beschrieben zu haben: Den Ersatz der Splitform von A2007 und natürlich für User älterer Access-Versionen vor allem: Erstmalig die Möglichkeit, ebenfalls eine Splitform einzusetzen. Den Zweck der einzelnen Formulare habe ich oben auch beschrieben.

Die Beispielformulare sollen im Wesentlichen zeigen, was das Ergebnis ist: Ein Control, das man mit der Maus bewegen kann, wobei sich die Controls rechts und links davon (oder über und unter) passend bewegen, etwa so, wie man es aus den "großen" Anwendungen wie Visual Studio oder CorelDraw usw. kennt, wo man einzelne Bereiche hin und her schieben kann - das geht ja sogar mit Frames in einem Webbrowser.

Die Klasse verwendet keine Spezialitäten von A2007, es sind alles "ganz normale" Controls, die Splitter Bar ist, wie gesagt, entweder ein CommandButton, ein Image oder ein Rectangle, dessen Referenz man in der Init-Prozedur übergibt.

Das "lustige Verschieben von Controls" ist natürlich nicht der Hauptzweck, sondern vor allem die Möglichkeit, über Unterformular-Controls mehrere Ansichten der gleichen Tabelle gleichzeitig in einem Formular darstellen zu können oder wie im Menü-Beispiel auch einfach eine Menüleiste ein- und ausblenden zu können. Mit ein wenig Phantasie kann man daraus noch erheblich mehr machen.

Die Klasse sollte entsprechend genauso problemlos unter älteren Versionen funktionieren, die echte Splitform von A2007 wird hier nirgendwo verwendet.

Gruß

Christian
Nachtrag: Bitsqueezer am 22. Nov 2012 um 19:00 hat folgendes geschrieben:
Hallo MissPh,

habe es jetzt auch mal unter A2003 getestet, läuft ohne Probleme, sogar noch etwas schneller als in A2007.

Gruß

Christian
derArb
getting better


Verfasst am:
22. Nov 2012, 23:42
Rufname: derArb
Wohnort: Berlin

AW: Die ultimative Split Form - AW: Die ultimative Split Form

Nach oben
       Version: (keine Angabe möglich)

Hallo,
ich finde das sehr spannend...
Die bisherigen Splitforms machten für mich kaum Sinn.

_________________
MfG
derArb

Scio me nihil scire...Εν οίδα οτι ουδέν οίδα... Ich weiss, dass ich nichts weiss (Sokrates)
Ich bevorzuge Beiträge mit korrekter deutscher Grammatik.
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
23. Nov 2012, 08:18
Rufname:

AW: Die ultimative Split Form - AW: Die ultimative Split Form

Nach oben
       Version: (keine Angabe möglich)

Hallo derArb,

sehe ich auch so. Die Idee war ja nicht schlecht, aber die Umsetzung halbherzig. Wenn man wenigstens auf beide Seiten eine Formular-Referenz hätte und eine Splitform auch als Unterformular hätte einsetzen können, dann hätte man ähnliche Effekte auch mit der A2007 Splitform erstellen können.

Wenn ich Zeit habe, werde ich mal noch ein paar andere Demos aus der Splitter-Klasse zusammenbauen und hier hochladen.

Gruß

Christian
Huhuhuhn
Im Profil kannst Du frei den Rang ändern


Verfasst am:
24. Nov 2012, 17:19
Rufname:

AW: Die ultimative Split Form - AW: Die ultimative Split Form

Nach oben
       Version: (keine Angabe möglich)

Also in der 2k Version bekomme ich bei der gfx-Form und in der Menü-Form Fehler, dass er die bmp Dateien nicht findet
In der Chaos-Form kommt beim Laden ein ungültiger Prozeduraufruf bei "CanBeMoved". Genauso wie im Explorer.

Außerdem beendet sich der MSAccess Prozess nicht nach dem man deine Datenbank geöffnet hatte und nur die erste Form aufmacht ->taskmgr

Ansonsten ganz nett
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
24. Nov 2012, 18:07
Rufname:


AW: Die ultimative Split Form - AW: Die ultimative Split Form

Nach oben
       Version: (keine Angabe möglich)

Hallo,

Access findet manchmal eingebundene Grafiken in Pictures nicht, obwohl eigentlich eingebettet. Du kannst die Grafik aber mit den beigelegten Pictures einfach wieder neu einbetten.

Unter A2000 kann ich es leider nicht testen, aber mit Einzelschrittdebugger solltest Du die fehlerverursachende Stelle finden können. Möglicherweise ist hier etwas enthalten, was A2000 nicht kennt.

Das Formular verwendet eine Timer-Funktion, um die Mauszeigerveränderung rückgängig zu machen (weil es leider kein MouseOut gibt in Access). Im Zweifelsfall also einfach den Timer aus der Init-Funktion entfernen und die Änderung des Mauszeigers bei MouseOver.

Manchmal benötigt Access auch ein explizites "Set objSplitter = Nothing", wenn Du das im Unload-Event des Formulars hinzufügst, könnte es besser funktionieren.

Gruß

Christian
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Form basierten Filter in Tabelle ausgeben 1 der Jöns 600 02. Sep 2008, 22:21
maike kaluscha Form basierten Filter in Tabelle ausgeben
Keine neuen Beiträge Access Tabellen & Abfragen: Berechnetes Feld aus einem Form. in eine Tabelle speichern?? 1 Realhasko 402 21. Jul 2008, 16:40
rita2008 Berechnetes Feld aus einem Form. in eine Tabelle speichern??
Keine neuen Beiträge Access Formulare: Werte aus Operationen i. Form werden nicht in Tab. übern. 3 Birg 391 17. Apr 2007, 22:44
stpimi Werte aus Operationen i. Form werden nicht in Tab. übern.
Keine neuen Beiträge Access Formulare: Form durch in Tbl hinterlegte Zahlencodes absichern 5 NewFritz 398 16. Apr 2007, 21:43
NewFritz Form durch in Tbl hinterlegte Zahlencodes absichern
Keine neuen Beiträge Access Formulare: Zwei Formular Probleme (two form problems) 5 Gast123 702 05. Apr 2007, 16:17
Willi Wipp Zwei Formular Probleme (two form problems)
Keine neuen Beiträge Access Formulare: Wert aus einem Form in ein weiteres Form übergeben 6 maluk 706 24. März 2007, 01:08
valli Wert aus einem Form in ein weiteres Form übergeben
Keine neuen Beiträge Access Formulare: keine werte im form angezeigt 7 heino 503 16. Feb 2007, 19:53
heino keine werte im form angezeigt
Keine neuen Beiträge Access Formulare: Problem bei Sicherheitsabfrage und Form schliessen 3 samba 794 12. Dez 2006, 13:01
samba Problem bei Sicherheitsabfrage und Form schliessen
Keine neuen Beiträge Access Formulare: Zwischenspeichern in Form ohne zu 1. Datensatz zu springen 2 Gast 802 14. Aug 2006, 14:01
Gast Zwischenspeichern in Form ohne zu 1. Datensatz zu springen
Keine neuen Beiträge Access Formulare: Grafik in Form einbinden - darin scrollen und zentrieren 1 MR-GIGG 809 18. Okt 2005, 07:51
Frank_xyz Grafik in Form einbinden - darin scrollen und zentrieren
Keine neuen Beiträge Access Formulare: DS aus Form löschen 4 DieterB 607 14. Okt 2005, 15:40
DieterB DS aus Form löschen
Keine neuen Beiträge Access Formulare: Tabellen erzeugen und in Form einbinden 4 Alwin 709 08. Okt 2005, 17:24
Alwin Tabellen erzeugen und in Form einbinden
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Dreamweaver Forum