![]() |
Farben des TMainMenu ändern???
Hi,
ich hab ein Formular mit einem TMainMenu. Von diesem kann ich keinerlei Fraben ändern? Brauch ich ne andere Kompo oder muß ich nur irgendwie "tricksen"? Danke, winx |
Re: Farben des TMainMenu ändern???
Dieser Typ hat keine Coloreigenschaft
aber das Mainmenü von Jedi sollte es haben. Probier das mal aus |
Re: Farben des TMainMenu ändern???
Man kann auch ein Standard Menü nachträglich aufpeppen.
Mit der API-Funktion SetMenuInfo kann man ein Brush-Handle für den Hintergrund zuweisen.
Delphi-Quellcode:
procedure TForm1.TestX1Click(Sender: TObject);
var mi: TMenuInfo; begin if not Assigned(FBrush) then FBrush := TBrush.Create; FBrush.Color := clRed; // Rot! FBrush.Style := bsSolid; mi.cbSize := sizeof(mi); mi.fMask := MIM_BACKGROUND; mi.hbrBack := FBrush.Handle; SetMenuInfo(Test1.Handle {MenuItem-Handle}, mi); end; |
Re: Farben des TMainMenu ändern???
Hach, meine alte Routine. Ich habe die nochmal später umgebaut, damit diese nicht immer ein ganzen TBrush "verbraucht".
Delphi-Quellcode:
Vor allem lief diese Version "stabiler", da das Menu zwischenzeitlich auch mal die Farbe verloren hatte mit einem TBrush. Ich glaube da hat das GDI Handle-sparen von der VCL zugeschlagen gehabt. Mit dem diesem Code tritt der Fehler nicht mehr auf und es läuft stabil. Vllt. mal in die CodeLibrary eintragen?
Procedure TfrmXXX.SetMainMenuBGColor;
Var lMenuInfo: TMenuInfo; lMenuColor: TColor; Begin // if ( Win32Platform = VER_PLATFORM_WIN32_NT ) and // ( $100*Win32MajorVersion + Win32MinorVersion >= $501 ) then // lMenuColor := clMenuBar // erst ab XP (und D7) verfügbar // else // lMenuColor := clMenu; lMenuColor := clRed {gewünschte Farbe}; DeleteObject(fMenuBrushHandle); fMenuBrushHandle := CreateSolidBrush(ColorToRGB(lMenuColor)); FillChar(lMenuInfo, SizeOf(lMenuInfo), 0); lMenuInfo.cbSize := SizeOf(lMenuInfo); lMenuInfo.hbrBack := fMenuBrushHandle; lMenuInfo.fMask := MIM_BACKGROUND; SetMenuInfo(mnu_MainMenu.Handle, lMenuInfo); End; |
Re: Farben des TMainMenu ändern???
Hi,
danke!!! Wollte den "stabileren" Code doch gleich mal testen: Aber bei mir ändert sich absolut nix, Farbe bleibt grau. fMenuBrushHandle : wo muß ich das deklarieren und muß ich sonst noch was machen??? Das Jedi MainMenü hat es übrigens auch nicht :-( Gruß, winx |
Re: Farben des TMainMenu ändern???
Hallo,
probiers mal damit! Habe es aus dem obigen zusammengebastelt. Es mach ein Gradient-Menue. MfG Mark
Delphi-Quellcode:
procedure gradient(SColor,EColor:TColor;bitmap1:TBitmap);
procedure Drehen90Grad(Bitmap:TBitmap); var Form1: TForm1; implementation var hand:THandle; bitmap1:Tbitmap; {$R *.dfm} procedure gradient(SColor,EColor:TColor; bitmap1:TBitmap); var a,b,sr,sg,sb,er,eg,eb:integer; dr,db,dg:double; Row : ^TRGBQuad; begin bitmap1.PixelFormat:=pf32bit; sr:=SColor and $000000ff; sg:=SColor and $0000ff00; sg := sg shr 8; sb:=SColor and $00ff0000; sb := sb shr 16; er:=EColor and $000000ff; eg:=EColor and $0000ff00; eg := eg shr 8; eb:=EColor and $00ff0000; eb := eb shr 16; dr:=(sr-er)/bitmap1.Height; dg:=(sg-eg)/bitmap1.Height; db:=(sb-eb)/bitmap1.Height; for a := Bitmap1.Height-1 downto 0 do begin row := Bitmap1.Scanline[a]; for b := 0 to Bitmap1.Width-1 do begin row^.rgbred:=trunc(sr-dr*a); row^.rgbblue:=trunc(sb-db*a); row^.rgbgreen:=trunc(sg-dg*a); inc(row); end; end; end; type TMyhelp = array[0..0] of TRGBQuad; procedure Drehen90Grad(Bitmap:TBitmap); var P : PRGBQuad; //^THelpRGB; x,y,b,h : Integer; RowOut : ^TMyhelp; help : TBitmap; BEGIN Bitmap.PixelFormat := pf32bit; help := TBitmap.Create; help.PixelFormat := pf32bit; b := bitmap.Height; h := bitmap.Width; help.Width := b; help.height := h; for y := 0 to (h-1) do begin rowOut := help.ScanLine[y]; P := Bitmap.scanline[bitmap.height-1]; inc(p,y); for x := 0 to (b-1) do begin rowout[x] := p^; inc(p,h); end; end; bitmap.Assign(help); help.Free; end; procedure TForm1.FormCreate(Sender: TObject); var mi:TMenuInfo; begin if Assigned(Bitmap1) then Bitmap1.Free; Bitmap1:=TBitmap.Create; Bitmap1.Width:=21; Bitmap1.Height:=Form1.Width; gradient(ColortoRGB(clBtnHighlight),ColortoRGB(clBtnFace),bitmap1); Drehen90Grad(Bitmap1); DeleteObject(hand); hand:=createPatternbrush(bitmap1.Handle); Fillchar(mi,Sizeof(mi),0); mi.cbSize:=sizeof(mi); mi.fMask:=MIM_BACKGROUND; mi.hbrBack:=hand; SetMenuInfo(MainMenu1.Handle,mi); end; procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); var mi:TMenuInfo; begin if Assigned(Bitmap1) then Bitmap1.Free; Bitmap1:=TBitmap.Create; Bitmap1.Width:=21; Bitmap1.Height:=NewWidth; gradient(ColortoRGB(clBtnHighlight),ColortoRGB(clBtnFace),bitmap1); Drehen90Grad(Bitmap1); DeleteObject(hand); hand:=createPatternbrush(bitmap1.Handle); Fillchar(mi,Sizeof(mi),0); mi.cbSize:=sizeof(mi); mi.fMask:=MIM_BACKGROUND; mi.hbrBack:=hand; SetMenuInfo(MainMenu1.Handle,mi); end; end. |
Re: Farben des TMainMenu ändern???
zu den Jedi-menu gehört auch ein Painter
habs allerdings nie getestet |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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