|
Selbst ein UserControl, das zur Laufzeit unsichtbar bleiben soll
(Eigenschaft InvisibleAtRuntime),
macht einen besseren Eindruck, wenn es zur Designzeit ein
unverwechselbares Aussehen hat. Das Visual Basic-eigene
Timer-Steuerelement zeigt beispielsweise einen plastischen Rahmen
und sein Symbol an. Auch lässt sich die Größe des Timers nicht
ändern - er behält immer die Größe seines Symbols bei.
Das Erscheinungsbild zur Designzeit könnten Sie selbst im
Paint-Ereignis des UserControls mehr oder weniger aufwändig zeichnen
lassen. Sie könnten auch einen Rahmen mit Linien-Elementen basteln
und der Picture-Eigenschaft des UserControls ein Bild zuweisen.
Dieses Bild könnte natürlich auch die Rahmengestaltung bereits
selbst enthalten.
Irgendwie eleganter sieht es jedoch aus, wenn sich das
Erscheinungsbild ein wenig der Umgebungsfarbe des Containers
anpasst. Durch die Fläche des Timers scheint beispielsweise die
Hintergrundfarbe des Containers durch. Mit einem einfachen Trick
können Sie Ihren zur Laufzeit unsichtbar bleibenden UserControls
ein ähnlich elegantes Aussehen verleihen.
Platzieren Sie eine Schaltfläche (CommandButton) in die linke
obere Ecke des UserControls in der Größe von 32 x 32
Pixels - das ist eine übliche Standardgröße für solche Controls.
Damit Sie die Größenangaben nicht umständlich berechnen müssen,
setzen Sie dazu einfach die ScaleMode-Eigenschaft
des UserControls auf vbPixels (= 3). Setzen Sie die Style-Eigenschaft
des CommandButtons auf 1 (= grafisch) und löschen Sie
den Inhalt seiner Caption-Eigenschaft. Fügen Sie dann ein Symbol
oder ein kleines Bitmap-Bild in die Picture-Eigenschaft ein. Soll
eine Farbe des Bitmap-Bildes transparent durchscheinen, setzen Sie
die Eigenschaft UseMaskColor
auf True und die Eigenschaft MaskColor
auf die entsprechende Farbe. Damit hätten Sie die Optik Ihres
UserControls bereits erledigt. Da das UserControl zur Laufzeit
unsichtbar bleibt, wird seine Oberfläche dann gar nicht geladen. Da
der sozusagen überflüssige CommandButton ebenfalls nicht geladen
wird, brauchen Sie sich keine Sorgen wegen eines eventuellen
Ressourcenverbrauchs zu machen.
Für das automatische Zurückschnappen zur Designzeit auf eine
fixe Größe sorgen Sie im Resize-Ereignis des UserControls. Dieses
Ereignis wird zur Laufzeit auch nicht ausgelöst. Da die Maßeinheit
für die Size-Methode
des UserControls immer Twips ist, unabhängig vom ScaleMode des
Containers, sollten Sie die Standard-Werte 32 x 32
Pixels auf saubere Weise in Twips skalieren:
Private Sub UserControl_Resize()
Static sInProc As Boolean
If sInProc Then
Exit Sub
Else
sInProc = True
End If
UserControl.Size 32 * Screen.TwipsPerPixelX, _
32 * Screen.TwipsPerPixelY
sInProc = False
End Sub
Zwar ist das nicht sonderlich störend, dass durch den Aufruf der
Size-Methode im Resize-Ereignis dieses noch einmal aufgerufen wird.
Aber Sie können das mit Hilfe der Sperrvariablen sInProc
unterbinden ( "Aller
guten Dinge ist eins"). |