ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 19.03.2001

Diese Seite wurde zuletzt aktualisiert am 19.03.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für VB, VBA und OfficeVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Icons für CommandButton-Symbole

Zurück...

(-hg) mailto:hg_adiicontobmp@aboutvb.de

Symbole lassen sich in CommandButtons der CommandBars in Microsoft Office-Anwendungen, in der VB-Entwicklungsumgebung (VB-IDE) und in einigen anderen Anwendungen, die sich nach dem Microsoft-Vorbild richten, nur über die CommandButton-Methode CopyFace aus der Zwischenablage einfügen. Wenn Sie dabei eines der "eingebauten" Symbole kopieren, bereitet die Transparenz keine Schwierigkeit - die transparente Farbe erscheint immer in der vom Anwender in den Systemeinstellungen eingestellten Farbe der 3D-Oberfläche (das ist meistens, aber nicht immer und unbedingt, irgend ein Grauton). Sie können auch ein Symbol im Icon-Format aus der Zwischenablage übernehmen, wobei die Transparenz des Icon gewährt bleibt. Das Problem ist dabei nur, wie Sie in VBA oder VB per Code ein Icon in die Zwischenablage verfrachten könnten. Mit VBA- oder VB-Bordmitteln lässt sich dies nämlich nicht bewerkstelligen.

Ein kleiner Umweg löst das Problem. Sie können das Icon der Picture-Eigenschaft eines VB-Forms zuweisen, wobei die Hintergrundfarbe des Forms der aktuell eingestellten Oberflächenfarbe entspricht. Ist die Eigenschaft AutoRedraw des Forms auf True gesetzt, gibt Ihnen die Image-Eigenschaft des Forms das aus Icon und Hintergrundfarbe kombinierte Bild als Bitmap zurück. Diese Bitmap können Sie nun in die Zwischenablage einfügen.

Wir haben diese Hilfskonstruktion für Sie als kleine ActiveX-DLL implementiert, die Sie in VBA, in einem COM-AddIn (in VBA oder VB geschrieben) oder einem VB-IDE-AddIn verwenden können. Die Klasse IconToBmp ist als globales Objekt angelegt, so dass Sie die Konvertier-Methode ConvertIconToBmp aufrufen können, ohne erst explizit eine Instanz der Klasse anzulegen.

Im ersten Parameter übergeben Sie dieser Methode das zu konvertierende Icon. Da die Klasse intern ein Form anlegt, über das wie oben beschrieben das Icon umgewandelt wird, können Sie im zweiten Parameter KeepLoaded optional angeben, ob das Form nach der Konvertierung sofort wieder entladen werden soll, oder ob es geladen bleiben soll. Wenn Sie mehrere Icons nacheinander konvertieren wollen, braucht dann das Form nicht jedes Mal neu geladen zu werden. Sie können es dann über die Methode UnloadForm abschließend entladen, oder sie lassen es einfach erhalten, bis das globale Klassen-Objekt beim Beenden Ihrer Anwendung terminiert und dabei das Form, falls noch geladen, automatisch entlädt.

Die Größe des Icons bzw. der resultierenden Bitmap legen Sie im optionalen Parameter IconSize fest. Voreingestellt ist der Wert isSmall aus der Enumeration IconSizeConstants für 16x16-Icons bzw. -Bitmaps. Geben Sie isLarge an, wird eine 32x32 Pixel große Bitmap zurückgegeben. Wenn Sie eine 16x16-Bitmap erhalten wollen, darf das Icon auch nur das 16x16-Format enthalten - anderenfalls würde das 32x32-Symbol übernommen und abgeschnitten, jedoch nicht angepasst.

Im weiteren optionalen Parameter CopyToClipboard geben Sie an, ob die Bitmap gleich in die Zwischenablage übernommen werden soll. Denn auch dieses ist zumindest in VBA-Code nicht so einfach möglich, und kann daher hier gleich erledigt werden.

Im ebenfalls optionalen Parameter BackColor können Sie schließlich noch eine andere Hintergrundfarbe festlegen, falls Sie die Konvertierung für andere Zwecke einsetzen wollen.

In der Methode ConvertIconToBmp wird zunächst geprüft, ob ein gültiger Wert für IconSize übergeben wurde. Dann wird das Hilfs-Form geladen, falls es noch nicht geladen war. In dessen Methode ConvertIcon wird nun, wie oben beschrieben, das Icon in eine Bitmap umgewandelt. Ist CopyToClipboard gesetzt, wird die umgewandelte Bitmap in die Zwischenablage übernommen. Zum Schluss wird das Form wieder entladen, falls der Parameter KeepLoaded nicht gesetzt ist.

Der Code der Klasse IconToBmp:

Private mForm As frmIcon

Public Enum IconSizeConstants
  isSmall
  isLarge
End Enum

Public Function ConvertIconToBmp(Icon As StdPicture, _
 Optional ByVal KeepLoaded As Boolean, _
 Optional ByVal IconSize As IconSizeConstants, _
 Optional ByVal CopyToClipboard As Boolean, _
 Optional ByVal BackColor As OLE_COLOR = vb3DFace) _
 As StdPicture

  Dim nPicture As StdPicture
  
  Select Case IconSize
    Case isSmall, isLarge
    Case Else
      Err.Raise 380
  End Select
  If mForm Is Nothing Then
    Set mForm = New frmIcon
    Load mForm
  End If
  Set nPicture = mForm.ConvertIcon(Icon, BackColor, IconSize)
  If CopyToClipboard Then
    With Clipboard
      .Clear
      .SetData nPicture, vbCFBitmap
    End With
  End If
  Set ConvertIconToBmp = nPicture
  If Not KeepLoaded Then
    Unload mForm
    Set mForm = Nothing
  End If
End Function

Public Sub UnloadForm()
  Class_Terminate
End Sub

Private Sub Class_Terminate()
  If Not (mForm Is Nothing) Then
    Unload mForm
    Set mForm = Nothing
  End If
End Sub

Der Code des Hilfs-Forms zur Konvertierung:

Public Function ConvertIcon(Icon As StdPicture, _
 ByVal BackColor As OLE_COLOR, ByVal IconSize As IconSizeConstants) _
 As StdPicture

  With Me
    Select Case IconSize
      Case isSmall
        .Move 0, 0, 16 * Screen.TwipsPerPixelX, _
         16 * Screen.TwipsPerPixelY
      Case isLarge
        .Move 0, 0, 32 * Screen.TwipsPerPixelX, _
         32 * Screen.TwipsPerPixelY
    End Select
    .BackColor = BackColor
    Set .Picture = Icon
    Set ConvertIcon = .Image
    Set .Picture = Nothing
  End With
End Function

ActiveX-DLL-Projekt avbIconToBmp und Beispiel-Projekt (icontobmp.zip - ca. 6,5 KB)

ActiveX-DLL-Setup avbIconToBmp (ohne VB6-Runtime!) (icontobmps.zip - ca. 242 KB)

VB6-Runtime SP4 (VBRun60sp4.exe - ca. 1 MB)



AddIn-Übersicht


Zum Seitenanfang

Copyright © 1999 - 2023 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...