Entwickler-Ecke
Windows API - Menü färben bzw. ein Bitmap setzen
LonghornUser - Do 15.01.04 20:31
Titel: Menü färben bzw. ein Bitmap setzen
Hallo,
Ich möchte ein Mainmenü machen, wo die Kopfzeile (wo &Datei, &Bearbeiten, etc. steht) blau ist oder, was noch besser wäre ein blaues Bitmap annehmen kann. Genauso müsste das für das aufgeklappte menü gehen.
Geht sowas ? Wenn ja wie ? Gibt es dafür Komponenten oder geht das delphi-intern ?
Keldorn - Fr 16.01.04 09:39
Hallo
du könntest die Einträge im ondrawitem eines Menuitems selber zeichnen.
Komponente gibts sicher auch, gugg bei torry vorbei.
Mfg Frank
LonghornUser - Fr 16.01.04 21:18
Danke erstma. Gibts irgendwo ein Toturial zum Ownerdraw-ereignis ?
Komponenten habe ich schon geguckt, aber funzt alles net so wie ichs brauche.
Keldorn - Fr 16.01.04 21:37
Tut brauchst du keines. Such einfach nach den drawitem (Listbox, Combobox) oder zur not auch Drawcell-ereignissen im Forum. Läuft alles mehr oder weniger nach dem gleichen Muster ab. Measureitem wäre noch was fürs festlegen der Höhe, wenn das gewünscht ist.
Ein simples Beipiel wäre:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.test21DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin if selected then begin ACanvas.Brush.Color := clred; ACanvas.FillRect(ARect); Acanvas.TextRect(ARect,ARect.Left+2,ARect.top+2,(Sender as TMenuItem).Caption); end else begin ACanvas.Brush.Color := clblue; ACanvas.FillRect(ARect); Acanvas.TextRect(ARect,ARect.Left+2,ARect.top+2,(Sender as TMenuItem).Caption); end; end; |
Einfach allen/deinen gewünschten Items dieses Ereignis zuordnen, oder du tust das per code zur laufzeit
statt dem Hintergrund kannst du auch ein Bildmalen und den Text transparent drüberlegen (brush:=bsclear);
Allerdings habe ich es immer vermieden, im menu rumzupinseln. Erstens sieht es meist nicht schick aus, wenn die Systemvorgaben ignoriert werden und zweitens mußt du dich dann auch ums Zeichnen der Unterstriche, der Shortcuts und der images kümmern. und wenn du da an alles denken willst, hast du was vor.
Mfg Frank
LonghornUser - So 18.01.04 19:58
Danke vielmals. Das habe ich gesucht. Ich wusste immer nicht, wie man in diesem event sieht, wenn etwas selektiert ist.
Aber da stellt sich noch ne Frage: Kann ich den Schatten und den Rahmen des Menüs irgendwie wegbekommen bzw. überzeichnen ? Ich möchte statt dem rahmen und dem schatten einfach ein 1-pixel breites rechteck. Ist sowas möglich ? Wenn ja, wie ??
Delete - So 18.01.04 21:18
| LonghornUser hat folgendes geschrieben: |
| Aber da stellt sich noch ne Frage: Kann ich den Schatten und den Rahmen des Menüs irgendwie wegbekommen bzw. überzeichnen ? Ich möchte statt dem rahmen und dem schatten einfach ein 1-pixel breites rechteck. Ist sowas möglich ? Wenn ja, wie ?? |
Der Schatten ist OS-abhängig, IMHO erst ab ME (?), 2000 und XP. Und der Rahmen gehört, glaube ich, zum Non-Client-Bereich. An den kommst du so nicht ran. Dazu musst du direkt in die Nachrichtenbearbeitung des Menüs eingreifen.
Notfalls schau doch mal in die XPMenu-Komponente. Da wird das ja auch alles gemacht.
Keldorn - So 18.01.04 22:05
| MathiasSimmack hat folgendes geschrieben: |
... zum Non-Client-Bereich. An den kommst du so nicht ran. Dazu musst du direkt in die Nachrichtenbearbeitung des Menüs eingreifen.
|
na da hätsch auch ne Frage ;)
welche Nachricht wäre denn das prinzipiell?
Mfg Frank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!