![]() |
Excel-Addin und Tranzparenz bei CommandBarButtons
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bastel seit einiger Zeit an einem Excel-Addin. Funktioniert eigntlich als ganz gut. Bis auf die Kleinigkeit, dass ich es noch geschafft habe die CommandBarButtons transparent darzustellen (siehe Bild). Weiss jemand wie das geht? Hier der Source mit dem die Buttons erzeugt werden.
Delphi-Quellcode:
function TExcelAddin.CreateCommandBarButton(const aCommandBar: CommandBar;
const CommandBarButtonCaption, CommandBarButtonToolTip, CommandBarButtonTag: String; CommandBarSytle: TOleEnum; ImageIndex : Integer): CommandBarButton; var iCnt : Integer; ControlsCount : Integer; ControlTag : String; CBarControl : CommandBarControl; ButtonFace : TBitmap; begin Result:=Nil; CBarControl:=Nil; ControlsCount:=aCommandBar.Controls.Count; // Gibt es schon einen Button mit dem gleichen Tag? For iCnt:=1 to ControlsCount do begin ControlTag:=aCommandBar.Controls.Item[iCnt].Tag; If AnsiUpperCase(ControlTag)= AnsiUpperCase(CommandBarButtonTag) then begin CBarControl:=aCommandBar.Controls.Item[iCnt]; Result:=CBarControl as CommandBarButton; Exit; end; end; // For iCnt:=1 to ControlsCount do CBarControl:=aCommandBar.Controls.Add(msoControlButton,EmptyParam,EmptyParam,EmptyParam,False); Result:=CBarControl as CommandBarButton; Result.Set_Style(CommandBarSytle); // = msoButtonIcon Result.Set_Caption(CommandBarButtonCaption); Result.Set_TooltipText(CommandBarButtonToolTip); Result.Set_Tag(CommandBarButtonTag); Result.Set_FaceId(0); {Da das Addin auch unter Excel2000 laufen soll muss das Bild über die Zwischenablage auf/in den Button kopiert werden. ExcelXP hat dafür eine Picture-Eigenschaft} ButtonFace:=TBitmap.Create; Try DM.ImageList.GetBitmap(ImageIndex,ButtonFace); clipboard.Assign(ButtonFace) ; Result.PasteFace; Finally ButtonFace.Free; end; end; |
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Hallo Jens,
ist PasteFace() eine von dir geschriebene Methode? Irgendwo müssen die Anweisungen cbb.Set_Picture() und cbb.Set_Mask() stehen, denke ich. Grüße vom marabu |
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Das
Zitat:
|
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Zitat:
die Methode PasteFace ist nicht von mir sondern eine Methode de CommandBarButton-Interface. Das IPictureDisp Interface wird aber erst ab Office2003 unterstüzt. Mein Addin muss aber ab Office2000 laufen. In Office200 gibt es IPictureDisp noch nicht. Zitat:
Du wirst es nicht glauben aber in der Hilfe zu Office2000 (VBAOFF9.chm) steht ein Beispiel für PasteFace. |
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Hallo,
es scheint doch recht aufwendig zu sein einen transparenten Button darzustellen. Im Zwischennetz bin ich auf folgende Seite gestolpert. ![]() Unter SourceCode ist ein Beispiel in C. Dummerweise sind meine C Kenntnisse eher eingeschränkt. In der Headerdatei steht folgendes:
Code:
Bis auf CBitmap& bitmap und CPalette* pPal komm ich damit klar.
class CCOMAddinUtil
{ private: CCOMAddinUtil(void); ~CCOMAddinUtil(void); static HANDLE _DDBToDIB( CBitmap& bitmap, DWORD dwCompression, CPalette* pPal ); public: static void CopyTransBitmap(HBITMAP hSrcBmp); }; Weiss jeamand was das bedeutet. |
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Hallo Jens.
Nach Delphi übersetzt steht da in etwa folgendes:
Delphi-Quellcode:
Wenn CPalette allerdings eine Klasse ist, heißt die Deklaration von DDBToDIB so:
type
PPalette = ^CPalette; CComAddinUtil = class private constructor Create; // in C++ hat der Konstruktor den Namen der Klasse destructor Destroy; // in C++ hat der Konstruktor den Namen der Klasse und ein ~ vornedran function DDBToDIB(var bitmap: CBitmap; dwCompression: DWORD; pPal: PPalette) : THandle; public procedure CopyTransBitmap(hSrcBmp: HBITMAP); end;
Delphi-Quellcode:
function DDBToDIB(var bitmap: CBitmap; dwCompression: DWORD; pPal: CPalette) : THandle;
|
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Zitat:
nicht. Bei CBitmap handelt es sich um eine CashedBitmap. Ich hoffe eine normale Bitmap tut es auch. Bedeutet CBitmap& bitmap so viel wie var Bitmap : TBitmap ? |
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Hallo Jens,
ich gehe davon aus, dass CBitmap das C++ Äquivalent zu Delphi TBitmap ist. Übrigens basiert der C++ Code auf einem VB Beispiel aus der MSKB (288771): ![]() marabu |
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Zitat:
Danke. Das VB-Beispiel habe ich auch schon gefunden. Leider kann ich VB noch weniger. |
Re: Excel-Addin und Tranzparenz bei CommandBarButtons
Hallo Jens,
mit Graphik habe ich es nicht so, aber das ganze Geheimnis der transparenten Bildchen für einen MSO9 CommandBarButton ist die Registrierung zweier spezieller Clipboard-Formate: In KB288771 steht geschrieben: ' Get the cf for button face and mask. cfBtnFace = RegisterClipboardFormat("Toolbar Button Face") cfBtnMask = RegisterClipboardFormat("Toolbar Button Mask") Dieser Trick stellt sicher, dass der Inhalt des Clipboard nicht beschädigt wird. Die Herstellung der monochromen Maske kannst du ruhig mit Delphi machen - kein C++ und auch kein VB ist nötig. Das hier könnte dir dabei helfen: ![]() marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz