Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0295: Verwendung von MDI-Formularen

 von 

Beschreibung 

Dieser Tip demonstriert ein paar grundlegende Eigenschaft und Methoden im Umgang mit MDI-Fenstern

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

SendMessageA (SendMessage)

Download:

Download des Beispielprojektes [6,92 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'--------------- Anfang Projektdatei MDI.vbp  ---------------
' Die Komponente 'Microsoft Common Dialog Control 6.0 (SP3) (COMDLG32.OCX)' wird benötigt.

'-------- Anfang Formular "frmMDI" alias frmMDI.frm  --------
' Steuerelement: Textfeld "txtText"
Option Explicit

Private Sub Form_Resize()
  txtText.Move 50, 50, Me.Width - 200, Me.Height - 500
End Sub
'--------- Ende Formular "frmMDI" alias frmMDI.frm  ---------
'----- Anfang Formular "MDIHaupt1" alias MDIHaupt1.frm  -----
' Steuerelement: Standarddialog-Steuerelement "DLG1"
' Steuerelement: Menü "mnudatei"
' Steuerelement: Menü "mnuload" auf mnudatei
' Steuerelement: Menü "mnusave" auf mnudatei
' Steuerelement: Menü "mnuline1" auf mnudatei
' Steuerelement: Menü "mnuEnde" auf mnudatei
' Steuerelement: Menü "mnuBearbeiten"
' Steuerelement: Menü "mnuBack" auf mnuBearbeiten
' Steuerelement: Menü "mnuline2" auf mnuBearbeiten
' Steuerelement: Menü "mnucopy" auf mnuBearbeiten
' Steuerelement: Menü "mnucut" auf mnuBearbeiten
' Steuerelement: Menü "mnupaste" auf mnuBearbeiten
' Steuerelement: Menü "mnuwindows"
' Steuerelement: Menü "mnu1" auf mnuwindows
' Steuerelement: Menü "mnu2" auf mnuwindows
' Steuerelement: Menü "mnu3" auf mnuwindows

Option Explicit

Private Declare Function SendMessage Lib "user32" Alias _
        "SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
        As Long, ByVal wParam As Long, lParam As Any) _
        As Long

Const WM_COPY = &H301
Const WM_UNDO = &H304
Const WM_CUT = &H300
Const WM_PASTE = &H302

Private Sub mnu1_Click()
  MDIHaupt1.Arrange vbCascade
End Sub

Private Sub mnu2_Click()
  MDIHaupt1.Arrange vbTileHorizontal
End Sub

Private Sub mnu3_Click()
  MDIHaupt1.Arrange vbTileVertical
End Sub

Private Sub mnuBack_Click()
  Call SendMessage(Me.ActiveForm.txtText.hwnd, WM_UNDO, 0&, 1)
End Sub

Private Sub mnucopy_Click()
  Call SendMessage(Me.ActiveForm.txtText.hwnd, WM_COPY, 0&, 0)
End Sub

Private Sub mnucut_Click()
  Call SendMessage(Me.ActiveForm.txtText.hwnd, WM_CUT, 0&, 1)
End Sub

Private Sub mnuEnde_Click()
  Unload Me
End Sub

Private Sub mnuload_Click()
  Dim temp As String
  On Error Goto error_load
  
    With DLG1
      .Filter = "Textdateien (*.txt)|*.txt" & _
        "|Alle Dateien (*.*)|*.*"
      .CancelError = True
      .ShowOpen
      
      Set frmMDI = New frmMDI
        Open .filename For Input As #1
          Do Until EOF(1)
            Line Input #1, temp
            frmMDI.txtText.Text = _
            frmMDI.txtText.Text & temp & vbCrLf
          Loop
        Close #1
        frmMDI.Caption = .filename
      frmMDI.Show
    End With

error_load:
End Sub

Private Sub mnupaste_Click()
 Call SendMessage(Me.ActiveForm.txtText.hwnd, WM_PASTE, 0&, 1)
End Sub

Private Sub mnusave_Click()
  On Error Goto error_save
  With DLG1
    .Filter = "Textdatei (*.txt)|*.txt"
    .CancelError = True
    .ShowSave
    
    Open .filename For Output As #1
      Print #1, Me.ActiveForm.txtText.Text
    Close #1
  End With
  
error_save:
End Sub
'------ Ende Formular "MDIHaupt1" alias MDIHaupt1.frm  ------
'---------------- Ende Projektdatei MDI.vbp  ----------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Gobo am 11.06.2003 um 23:59

Sehr schönes Sample zu einem guten Tipp.

Wer allerdings nicht das Beispiel-Zip runterlädt und nur den Anweisungen im Text folgt, sollte folgende zwei Zusätze beachten:

1.) Die Eigenschaft "MDIChild" der Form "frmMDI" sollte auf "True" gesetzt werden, sonst öffnet sich bloss ein ganz normales Fenster ausserhalb der MDI, keines darin.
2.) Das Menü "mnuwindows" sollte die Eigenschaft "WindowList" angehakt bekommen, damit unter den drei Punkten für Überlappend, Nebeneinander und Untereinander auch eine Liste aller vorhandenen Fenster im MDI erzeugt wird.

Aber ein grosses Dankeschön für diesen Tipp, er hat mich in meinem Projekt enorm weitergebracht! :)