Autor Beitrag
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Do 15.01.04 20:31 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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:
ausblenden 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
  //owner draw des menus auf true stellen
  if selected then
   //selektiert
    begin
      //hintergrund
      ACanvas.Brush.Color := clred;
      ACanvas.FillRect(ARect);
      //Text
      Acanvas.TextRect(ARect,ARect.Left+2,ARect.top+2,(Sender as TMenuItem).Caption);
    end
   else
    begin
      //hintergrund
      ACanvas.Brush.Color := clblue;
      ACanvas.FillRect(ARect);
      //Text
      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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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 ??
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)