vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Forms/Controls   |   VB-Versionen: VB5, VB615.06.03
Resizing der Form mit automatischer Größenanpassung II

Nun haben Sie unseren Workshop ausprobiert und sind wie viele Andere darauf gestoßen, dass diese 4 Klassen nicht mit dem SSTab-Control zusammenarbeiten wollen, da dieses Control doch ein gewisses Eigenleben beweist, was seine darauf gesetzten Controls betrifft. Aus diesem Grund haben wir den Code entsprechend erweitert und angepasst, so dass das autom. Resizing der Form nun auch mit dem SSTab-Control funktioniert.

Autor:  Wolfgang ChristBewertung:     [ Jetzt bewerten ]Views:  22.387 

Nun haben Sie unseren Workshop ausprobiert und sind wie viele Andere darauf gestoßen, dass diese 4 Klassen nicht mit dem SSTab-Control zusammenarbeiten wollen, da dieses Control doch ein gewisses Eigenleben beweist, was seine darauf gesetzten Controls betrifft. Aus diesem Grund haben wir den Code entsprechend erweitert und angepasst, so dass das autom. Resizing der Form nun auch mit dem SSTab-Control funktioniert.

Bezüglich des Resize-Problems und dem SSTab-Control gab es viele Fragen im Forum, so dass wir uns zusammengesetzt haben und Ihnen nun eine Erweiterung präsentieren können, mit der dieses Problem keines mehr ist und Sie nicht mehr auf das beliebte SSTab-Control verzichten müssen, wenn Sie unsere 4 Klassen einsetzen möchten.

Zuerst benötigen wir ein wenig Hintergrundwissen bezüglich des SSTab-Controls.

Was macht das SSTab es mit seinen Controls ?
Nun es zaubert sie nicht weg (selbst dafür hätten wir eine Lösung parat gehabt - unsere Moni ), nein, wechseln Sie das Tab Element des SSTab-Controls, werden alle Controls die zur Design-Zeit nicht auf diesem Tab abgelegt wurden um genau 75000 Twips nach links verschoben und die Controls, die sichtbar werden sollen, werden um genau 75000 Twips nach rechts verschoben.

OK, was macht die Klasse mit den Controls ?

1. Abschnitt Initialisierung der Klasse

Die Klasse merkt sich die Urprungskoordinaten aller Controls auf der Form.

-> Wir müssen also als Erstes von allen Controls die gewünschten Koordinaten erhalten, ob sie nun verschoben sind oder nicht.
Der einfachste Weg ist, alle Controls, die einen negativen Left-Wert haben um genau 75000 Twips nach rechts zu verschieben, die Positionen merken und danach die Änderungen rückgängig machen. Wie können wir die betroffenen Controls am besten merken ? - Genau: in einer Collection.

Wir fügen also in die Klasse clsResize im Abschnitt Initialize vor die Schleife folgenden Code ein:

Public Sub Initialize()
  Dim mCol_SSTAB As Collection 
  Set mCol_SSTAB = New Collection
  ...

Innerhalb der Schleife direkt nach der On Error Anweisung fügen wir noch folgenden Code ein:

  ...
  ' vom SSTab verborgene Controls merken und in den 
  ' sichtbaren Bereich verschieben
  If oControl.Left < 0 Then
    mCol_SSTAB.Add oControl ' merken
    oControl.Left = oControl.Left + 75000 ' verschieben
  End If
  ...

Zu guter Letzt müssen wir die ursprünglichen Koordinaten wiederherstellen. Dazu fügen wir nach der Schleife noch folgende Zeilen ein:

  ...
  ' Alle vorher verschobenen Controls wieder zurückverschieben
  For Each oControl In mCol_SSTAB
    oControl.Left = oControl.Left - 75000
  Next 
  ...

Was machen nun diese zusätzlichen Zeilen Code genau?
Nun, wenn ein Control einen negativen Left-Wert hat, dann gehen wir davon aus das dieses Control von einem SSTab-Control außerhalb des sichtbaren Bereiches verschoben wurde. Wir verändern die Left-Eigenschaft und merken uns in einer Collection welches Control wir verändert haben. Dann greifen wir die gewünschten Informationen ab und stellen bei allen Controls, an denen wir die Left-Eigenschaft verändert haben, den ursprünglichen Zustand wieder her.

2. Abschnitt DoResize

Auch hier verfahren wir wieder ähnlich. Als erstes prüfen wir bei jedem Control, ob es nach links verschoben ist, wenn ja nehmen wir es in eine Collection auf. Nun verändern wir Größe und Position aller Controls. Danach verschieben wir alle betroffenen Controls um 75000 Twips nach links.

Wir fügen also in die Klasse clsResize im Abschnitt DoResize folgenden Code ein:

Public Sub DoResize()
  Dim mCol_SSTAB As Collection 
  Set mCol_SSTAB = New Collection
  ...

In die Schleife fügen wir als erstes die folgenden Zeilen ein:

  ...
  If oControl.Left < 0 Then
    mCol_SSTAB.Add oControl
  End If
  ...

Nach der Schleife fügen wir dann wiederum die folgenden Zeilen ein:

  ...
  For Each oControl In mCol_SSTAB
    oControl.Left = oControl.Left - 75000
  Next
  ...

Wie genau funktioniert nun das Ganze ?
Wiederum gehen wir davon aus, dass, wenn ein Control eine negative Left-Eigenschaft hat, dieses Control als Eltern ein SSTab-Control besitzt, und momentan nicht sichtbar ist. Wir brauchen uns nun nur noch diese Controls zu merken, denn durch unseren Trick in der Funktion Initialize haben alle Controls nach dem Resize neue Koordinaten und Größen im sichtbaren Bereich. Deshalb müssen wir alle Controls, die vorher nicht sichtbar waren, wieder nach links aus dem sichtbarem Bereich herausverschieben. Dazu haben wir uns nur noch gemerkt, welche Controls das genau sind und diese verschieben wir dann um 75000 Twips nach links.

3. Abschnitt DoResize_First

Hier brauchen Sie nur in vollkommener Analogie zum 2. Abschnitt zu verfahren.

Fertig: Unsere 4 Klassen beherrschen nun auch das SSTab-Control und das alles ohne Hexerei

Wir wünschen Ihnen viel Spaß mit diesen Klassen. Sollten Sie Fragen zu diesem Workshop haben, so können Sie diese gerne in unser Diskussionsforum stellen.

Dieser Workshop wurde bereits 22.387 mal aufgerufen.

Über diesen Workshop im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Workshop, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel