Autor Beitrag
CodexX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

WinXP
Delphi XE
BeitragVerfasst: Do 19.03.09 20:21 
Ich würde gerne in einem normalen TMainMenu ganz rechts eine Schaltfläche platzieren.
Es könnte z.B. ein normaler Button sein, den ich vom Aussehen anpassen kann. Zur Not würde es sogar reichen, wenn ich ein normales MainMenu-Item ganz rechts plazieren könnte, also mit Leerraum zu den anderen Items, die normal links angeordnet sind (Optimal wäre hier dann, wenn ich den irgendwie leicht hervorheben könnte - durch einen Rahmen o.ä.).

Hat wer eine Idee?
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 03.05.09 14:43 
Hallo CodexX,

also ich wüsste im Moment jetzt nur die Möglichkeit, es durch ein dazwischengeschobenes (nicht anclickbares) Item zu machen, was genau die Anzahl an Leerzeichen hat, so dass Dein Item dann ganz rechts ist.
Aber ich meine, dass ich genau das Thema schon mal irgendwo gelesen habe.
Ich hoffe also, dass noch andere, bessere Vorschläge kommen.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 03.05.09 16:23 
user profile iconCodexX hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde gerne in einem normalen TMainMenu ganz rechts eine Schaltfläche platzieren.

Menüs haben Menüeinträge. Toolbars haben Schaltflächen. Um was geht es jetzt?
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 03.05.09 17:02 
Gucke Dir mal das Thema 31676 an.
Dort steht es doch genau!
(Wusste ich doch, dass es irgendwann schon mal behandelt wurde...)
Oder hier einfach mal der für Dich relevante Teil:

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:
23:
24:
{MainMenu rechts anzeigen - Original-Source von Mario Müller}  
{Value gibt an, ab welchem Menu-Item rechts}  
{angezeigt werden soll, 0 ist ab dem ersten}  
procedure TEnhancedCtrl.MenuRight(const Value: Byte);  
var  
  m: TMenuItemInfo;  
  h: hMenu;  
  s: String;  
begin  
 with Owner as TForm do  
 begin  
  h := GetMenu(Handle);  
  m.cbSize := SizeOf(m);  
  m.cch := SizeOf(s);  
  m.dwTypeData := PChar(@s[1]);  
  m.fMask := MIIM_TYPE;  

 
  GetMenuItemInfo(h,Value,true,m);  
  m.ftype := m.ftype or MFT_RIGHTJUSTIFY;  
  SetMenuItemInfo(h,Value,true,m);  
  Refresh;  
 end;  
end;
CodexX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

WinXP
Delphi XE
BeitragVerfasst: Mo 04.05.09 18:05 
@ffgorcky
Danke für Deine PN. Aus irgendwelchen Gründen habe ich keine Benachrichtigung bei Euren Postings bekommen...

Zur "MenuRight"-Funktion:
Scheint in die richtige Richtung zu gehen, aber funktioniert irgendwie nicht so wirklich...

Ich habe zum Testen eine neue Form mit einem MainMenu und drei Items und jeweils einem SubItem erstellt. Dann einen Button platziert und ihm die Funktion wie folgt zugewiesen:
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:
23:
24:
procedure TForm1.FormCreate(Sender: TObject);
  procedure MenuRight(const Value: Byte);
  var
    m: TMenuItemInfo;
    h: hMenu;
    s: String;
  begin
   with Form1 do
   begin
    h := GetMenu(Handle);
    m.cbSize := SizeOf(m);
    m.cch := SizeOf(s);
    m.dwTypeData := PChar(@s[1]);
    m.fMask := MIIM_TYPE;

    GetMenuItemInfo(h,Value,true,m);
    m.ftype := m.ftype or MFT_RIGHTJUSTIFY;
    SetMenuItemInfo(h,Value,true,m);
    Refresh;
   end;
  end;
begin
  MenuRight(1);
end;

Nach einem Klick auf den Button scheint erstmal nichts zu passieren. Schiebt man jedoch das Fenster aus dem Bildschirmanzeigebereich heraus und wieder herein, sieht man dass der mittlere Menüeintrag verschwunden ist. Die anderen beiden funktionieren normal. Die nicht aktualisierte Anzeige ist durch das Refresh wohl nicht getan und auch ein Repaint brachte nichts.

Bei einem erneuten Klick auf den Button (und wieder Fenster durch Verschieben aktualisieren) befindet sich der dritte Menüeintrag ganz rechts. Der zweite fehlt nachwievor.

Wenn jetzt also der mittlere Menüeintrag (also die übergebene 1) nicht verschwindet und das ganze auch richtig aktualisiert wird, dann wärs top.

Edit: Getestet mit Vista


user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Menüs haben Menüeinträge. Toolbars haben Schaltflächen. Um was geht es jetzt?

Es geht um ein TMainMenu. Ob da jetzt ein einzelner Menüeintrag ganz rechts angeordnet wird oder ob es irgendwie möglich ist einen Button auf das Menü ganz rechts zu positionieren, ist mir egal. Hauptsache, da ist ein klickbarer Text.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 04.05.09 18:40 
So funktioniert es problemlos:
www.swissdelphicente.../showcode.php?id=359
CodexX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 118

WinXP
Delphi XE
BeitragVerfasst: Mo 04.05.09 18:56 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
So funktioniert es problemlos:
www.swissdelphicente.../showcode.php?id=359

Perfekt, danke! :)