AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farben des TMainMenu ändern???

Ein Thema von winx · begonnen am 20. Mai 2008 · letzter Beitrag vom 23. Mai 2008
Antwort Antwort
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#1

Farben des TMainMenu ändern???

  Alt 20. Mai 2008, 15:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Farben des TMainMenu ändern???

  Alt 20. Mai 2008, 16:50
Dieser Typ hat keine Coloreigenschaft
aber das Mainmenü von Jedi sollte es haben.
Probier das mal aus
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Farben des TMainMenu ändern???

  Alt 20. Mai 2008, 18:22
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;
Andreas
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Farben des TMainMenu ändern???

  Alt 20. Mai 2008, 18:51
Hach, meine alte Routine. Ich habe die nochmal später umgebaut, damit diese nicht immer ein ganzen TBrush "verbraucht".

Delphi-Quellcode:
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;
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?
  Mit Zitat antworten Zitat
winx

Registriert seit: 14. Jun 2005
265 Beiträge
 
#5

Re: Farben des TMainMenu ändern???

  Alt 21. Mai 2008, 06:53
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
  Mit Zitat antworten Zitat
marky522

Registriert seit: 30. Okt 2006
29 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Farben des TMainMenu ändern???

  Alt 21. Mai 2008, 16:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Farben des TMainMenu ändern???

  Alt 23. Mai 2008, 09:22
zu den Jedi-menu gehört auch ein Painter
habs allerdings nie getestet
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz