Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / System / Multimedia / MDI

Zeichenoperationen auf MDI-Hintergrund

Einleitung

Problem

Normalerweise kann der Hintergrund eines MDI-Formulars nicht gestaltet werden - ohne echten Container sind keine Zeichenoperationen möglich. Im Web findet man höchstens sehr umständliche und aufwändige Lösungen, die SubClassing benutzen.

Idee

Die hier gezeigte Methode kommt mit purem VB-Code aus, und ist trotzdem sehr schnell und flexibel. Sie nutzt dazu die Picture-Eigenschaft des MDI-Formulars, welche bei jedem Resize auf den Inhalt einer unsichtbaren PictureBox gesetzt wird. Da diese PictureBox vorher an die Größe des MDI-Formulars angepaßt wird, entsteht der Eindruck einer vollständigen Hintergrundgrafik.

Beispiel

MDI-Formular und PictureBox

Öffnen Sie ein neues VB-Projekt, fügen Sie eine MDIForm hinzu und wählen Sie in den Projekt-Eigenschaften als Startobjekt gerade dieses MDI-Formular aus.

Fügen Sie eine PictureBox hinzu - sie wird automatisch im MDI-Formular ganz oben angeordnet. Setzen Sie folgende Eigenschaften:

EigenschaftWertBemerkung
(Name)picBackground 
Appearance0Flat
AutoRedrawTrue 
BorderStyle0None
ScaleMode3Pixel
VisibleFalse 

Code / Quelltext

Benutzen Sie folgenden Code im Resize-Ereignis des MDI-Formulars:

Private Sub MDIForm_Resize()
  Dim x As Long
  Dim y As Long
  Dim r As Long

  'PictureBox vorbereiten:
  With picBackground
    'Bild-Größe anpassen:
    .Move 0, 0, ScaleWidth, ScaleHeight

    'Roten Farbverlauf zeichnen:
    For y = 0 To .ScaleHeight - 1
      r = 255 - 255 * y / .ScaleHeight
      picBackground.Line (0, y)-(ScaleWidth, y), RGB(r, r, 255)
    Next y

    'Einen zentrierten Kreis zeichnen:
    x = .ScaleWidth \ 2 - 1
    y = .ScaleHeight \ 2 - 1
    If y < x Then r = y Else r = x
    picBackground.Circle (x, y), r
  End With

  'Hintergrund aktualisieren:
  Set Picture = picBackground.Image
End Sub

Damit die PictureBox schon beim ersten Anzeigen dir richtige Größe hat, fügen Sie den entsprechenden Code in das Activate-Ereignis ein:

Private Sub MDIForm_Activate()
  MDIForm_Resize
End Sub

Alternativ können Sie auch die ScrollBars-Eigenschaft des MDI-Formulars auf False setzen.

© Jost Schwider, 10.01.2002-10.01.2002 - http://vb-tec.de/mdibg.htm