Lotus Notes / Domino Sonstiges > Tipps und Tricks

Klasse zum Ansichten einheitliches Aussehen zu verpassen

(1/3) > >>

Fedaykin:
Hallo zusammen

Habe mir eine Klasse gebaut, die mit Hilfe der Standardansicht dabei helfen kann das Aussehen der übrigen Ansichten anzupassen. Wer es brauchen kann viel Spass damit (wenn gute Verbesserungen hast Post den doch hier),  ;D wer nur schlechte Kritik für meine Arbeit hat kann Sie ja einfach verbessern oder ignorieren.  :P Hier der Code:

Klasse:
Class ViewRedesigner
   'Diese Klasse dient zum übernehmen von Farben,
   'Schriften und Aktionen von einer anderen Ansicht.
   Private mDB As NotesDatabase
   
   Sub New(db As NotesDatabase)
      Set mDB=db
   End Sub
   
   'Durchläuft alle Ansichten und sammelt Informationen wie die Standardansicht,
   'die Ansichtsnamen und die Aliases um dann RedesignView mit den Infos zu füttern.
   Sub RedesignViewsFromDefault()
      Dim strMasterView As String
      Dim vwTemp As NotesView
      Dim strViewNames() As String
      Dim strViewAliases() As String
      Dim i As Long
      
      Forall objView In mdb.Views
         Set vwTemp=objView
         If vwTemp.IsDefaultView Then
            strMasterView=vwTemp.Name
         Else
            Redim Preserve strViewNames(i) As String
            Redim Preserve strViewAliases(i) As String
            strViewNames(i)=vwTemp.Name
            If Isarray(vwTemp.Aliases) Then
                                    strViewAliases(i)=Join(vwTemp.Aliases,";")
                                End If
            i=i+1
         End If
      End Forall
      For i=Lbound(strViewNames) To Ubound(strViewNames)
         RedesignView strMasterView,strViewNames(i),strViewAliases(i)
      Next
   End Sub
   
   'Erstellt neue Ansicht basierend auf der Ansicht die bei MasterView
   'mitgegeben wird, aber mit der Selektions Formel von der Ansicht
   'die mit ViewName mitgegeben wird. Bei dieser neuen Ansicht
   'werden dann die Spalten gelöscht und die von der Ansicht ViewName
   'hinzugefügt. Danach werden noch die Formatierungen der ersten Spalte
   'von MasterView in diese neue Ansicht übernommen.
   Sub RedesignView(MasterView As String, ViewName As String, ViewAliases As String)
      Dim vwMaster As NotesView   
      Dim vwRedesign As NotesView
      Dim vwTemp As NotesView   
      Dim vcTemp As NotesViewColumn
      Dim vcMaster As NotesViewColumn
      Dim vcNew As NotesViewColumn
      
      Dim i As Long   
      
      Set vwRedesign=mdb.GetView(ViewName)
      Set vwMaster=mdb.GetView(MasterView)
      
      If Not vwRedesign Is Nothing And Not vwMaster Is Nothing Then
         Set vcMaster=vwMaster.Columns(1)
         Set vwTemp=mdb.CreateView(ViewName & " redesigned",vwRedesign.SelectionFormula ,vwMaster  ,False)
         If Not ViewAliases="" Then
            vwTemp.Aliases=Split(ViewAliases,";")
         End If
         If Not vwTemp Is Nothing Then
            For i=vwTemp.ColumnCount To 1 Step -1
               vwTemp.RemoveColumn(i)
            Next
         End If
         
         i=1
         Forall objColumn In vwRedesign.Columns
            Set vcTemp=objColumn
            Set vcNew=vwTemp.CopyColumn(vcTemp,i)
            vcNew.HeaderFontColor=vcMaster.HeaderFontColor
            vcNew.HeaderFontFace=vcMaster.HeaderFontFace
            vcNew.HeaderFontPointSize=vcMaster.HeaderFontPointSize
            vcNew.HeaderFontStyle=vcMaster.HeaderFontStyle
            vcNew.FontColor=vcMaster.FontColor
            vcNew.FontFace=vcMaster.FontFace
            vcNew.FontPointSize=vcMaster.FontPointSize
            vcNew.FontStyle=vcMaster.FontStyle
            i=i+1
         End Forall
      End If
   End Sub
End Class

Aufruf:
Sub Initialize
   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim objRedesigner As ViewRedesigner
   
   Set session=New NotesSession
   Set db=session.CurrentDatabase
   
   Set objRedesigner=New ViewRedesigner(db)
   objRedesigner.RedesignViewsFromDefault
End Sub

Gruss
Remo

Glombi:
Schöne Sache, aber ich bekomme bei

strViewAliases(i)=Join(vwTemp.Aliases,";")

einen "Type mismatch".

Alle Ansichten haben einen Alias (das sollte aber nicht Voraussetzung sein).

Andreas

Fedaykin:
Hallo Andreas

Da hast Du recht. Verdammt vermiss ich einen Ort wo mein ganzer Code Zentral ist.  ::) Die Zeile hab ich in einem anderen durch so was ersetzt.

            If Isarray(vwTemp.Aliases) Then
               strViewAliases(i)=Join(vwTemp.Aliases,";")
            End If

Gruss
Remo

Glombi:
Ok, das geht. Ich habe mir erlaubt, es in Deinem Code oben direkt auszuwechseln.

Danke für das Script!

Andreas

Fedaykin:
Hallo Andreas

Gern geschehen, freut mich wenn jemand mein Code gefällt. Ist sicher noch weit weg von perfekt :). Aber wer weiss vielleicht finden sich ja noch einige die Verbesserungen einbringen.

Gruss
Remo

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln