Toon posts:

[Delphi7] Mainmenu op een Coolbar?

Pagina: 1
Acties:
  • 207 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
In een Delphi-programma van mij wil ik menu's hebben die er net zo uitzien zoals de standaardmenu's in de Verkenner, Internet Explorer en Outlook Express. Voor zover ik weet kun je dit maken door een TCoolBar op je form te zetten en er daarna een TToolBar op te plaatsen met daarin een TMainMenu.

Bij mijn ToolBar heb ik dit ingesteld:
- Flat = true
- EdgeBorders = [] (alles false)
- AutoSize = true

De CoolBar heeft AutoSize ook op true staan. Ik heb een TMainMenu gevuld met wat voorbeelditems en heb dit menu ingesteld als Menu van de TToolBar. Helaas ziet er niet uit zoals ik dat wil. In de screenshots kun je zien dat de selectie van menu-items niet helemaal goed gaat, er is geen enkele manier om in de balk te kunnen zien welk menu er is geselecteerd:

Afbeeldingslocatie: http://dump.xxp.nu/menus.png

Weet iemand hoe ik dit probleem kan oplossen? Het is wel belangrijk dat het er ook nog goed uitzien wanneer er geen themes aanstaan (dus onder oudere Windows-versies). Ik heb zelf al gekeken naar Toolbar2000 en TBX, maar daar wordt mijn exefile wel erg groot van. Bovendien worden daarin de standaard-controls van Windows niet gebruikt, maar wordt alles zelf gedaan. Het lijkt mij dat het toch ook wel mogelijk moet zijn met een Coolbar en een Toolbar.

De projectbestanden en code van mijn voorbeeldprogramma zijn beschikbaar om zelf te bekijken.

[ Voor 2% gewijzigd door Verwijderd op 03-05-2004 09:43 . Reden: Probleem duidelijker aangegeven ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Is er niets mogelijk met een color property van de menu's? Ik snap trouwens niet waarom je het erg vindt, IMHO is de standaard Delphi manier duidelijk zat, maar wie ben ik? ;)

Ik denk dat het in het feit zit dat een standaard toolbar gebruik maakt van niet-Windows specifieke functies, en IE enz wel.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Het lukt je domweg niet om met zuiver klikken een menu te krijgen zoals je in de Delphi IDE hebt bv. Je kunt bv. het menu ook niet undocken waarsch, terwijl dit met een normaal menu wel kan.

Als ik me niet vergis was dit op te lossen door een normaal TMainMenu te gebruiken op je form, en deze run-time van het form af te halen, en toe te voegen aan je toolbar oid.

even experimenteren..

Verwijderd

Topicstarter
NMe84 schreef:
Ik snap trouwens niet waarom je het erg vindt, IMHO is de standaard Delphi manier duidelijk zat, maar wie ben ik? ;)

Ik denk dat het in het feit zit dat een standaard toolbar gebruik maakt van niet-Windows specifieke functies, en IE enz wel.
Dat is dus precies waar ik mij aan erger bij de Delphi-(c/t)oolbar. Het líjken standaard-componenten, dus wrappers om de Common Controls van Microsoft, maar uiteindelijk zijn het toch kleine dingen die nét even anders worden gedaan.
De Generaal schreef:
Het lukt je domweg niet om met zuiver klikken een menu te krijgen zoals je in de Delphi IDE hebt bv.
Grappig dat je juist met dit voorbeeld komt aanzetten, want een menu maken zoals dat in de Delphi IDE zit, lukt prima. Door middel van een CoolBar met daarop een ActionMainMenuBar en daarnaast nog een ActionManager en een ActionList kun je, met wat geklik, een hele nette menubalk maken zoals die ook in Delphi zelf zit. Ter verduidelijking weer een screenshot:

Afbeeldingslocatie: http://dump.xxp.nu/delphi.png
De Generaal schreef:
Als ik me niet vergis was dit op te lossen door een normaal TMainMenu te gebruiken op je form, en deze run-time van het form af te halen, en toe te voegen aan je toolbar oid.
Ik heb dit geprobeerd met de volgende code in de OnCreate van mijn Form:
code:
1
2
  Form1.Menu := nil;
  ToolBar1.Menu := MainMenu1;
Helaas werkte dat niet goed, het menu zag er nog steeds het zelfde uit.

[ Voor 20% gewijzigd door Verwijderd op 03-05-2004 09:46 . Reden: Resultaat van experiment toegevoegd ]


Verwijderd

Topicstarter
Voor de volledigheid: ik heb dezelfde vraag gesteld op het NLDelphi-forum. Misschien dat daar nog meer interessante antwoorden verschijnen.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-05 23:27

Tomatoman

Fulltime prutser

Vergeet niet het font van het menu aan te passen, bijvoorbeeld in de OnCreate handler van het form.
Delphi:
1
MijnMenu.Font := Screen.MenuFont;

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
tomatoman schreef op 03 mei 2004 @ 17:37:
Vergeet niet het font van het menu aan te passen, bijvoorbeeld in de OnCreate handler van het form.
Delphi:
1
MijnMenu.Font := Screen.MenuFont;
Bedankt voor de tip, ik had er zelf nog niet eens zo goed op gelet, maar het lettertype week inderdaad ook af van het lettertype van het menu in Internet Explorer. Wel even commentaar op je voorbeeld: MijnMenu.Font lijkt mij onzinning, omdat een Menu geen Font-property heeft. Wat wél werkt (font instellen bij de toolbar):
Delphi:
1
ToolBar1.Font := Screen.MenuFont;

Verwijderd

Topicstarter
Ik probeer het nu voor de laatste keer, het is ondertussen meer dan een maand geleden dat ik deze vraag heb gesteld, maar het is me nog niet gelukt om het menu net zo te krijgen als in Internet Explorer. Heeft iemand enig idee hoe ik dit voor elkaar kan krijgen (meer informatie in de startpost)?

Verwijderd

Zo doe ik het altijd (in C++Builder 6, maar dat is vast hetzelfde):

• TCoolBar toevoegen
• TToolBar erop
• Toolbar.Flat = true
• Toolbar.ShowCaptions = true
• TMainMenu op form (niet op toolbar)
• menu items toevoegen
• Voor elk van de top-level menu items een knop op de toolbar
• toolbar button koppelen aan top-level menuitems menu "MenuItem" property
• Elke toolbar knop Grouped = true

Op deze manier ziet het er in "Classic" look in ieder geval hetzelfde uit als IE6. Met manifest gaat het waarschijnlijk ook wel goed met XP themes, maar dat moet je maar even uitproberen.

Verwijderd

Topicstarter
Verwijderd schreef op 28 juni 2004 @ 19:46:
Zo doe ik het altijd (in C++Builder 6, maar dat is vast hetzelfde):

...

Op deze manier ziet het er in "Classic" look in ieder geval hetzelfde uit als IE6. Met manifest gaat het waarschijnlijk ook wel goed met XP themes, maar dat moet je maar even uitproberen.
In de 'Classic'-look, dus zonder themes, ziet dit er inderdaad goed uit. Maar zo gauw ik themes aanzet, ziet het er precies uit zoals de afbeeldingen van mijn eigen voorbeeld hierboven. Helaas wordt het er dus niet beter op...

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 22-05 23:32

alienfruit

the alien you never expected

Waarom mail je Steve niet even? Hij weet er vast wel een antwoord op, hij is nu niet online op MSN. Zal het zelf ook eens voor je vragen.
alienfruit says:
it works fine in the Classic theme
* says:
doh
* says:
yeah that's a problem
* says:
although it doesn't surprise me
* says:
unfortunately no, I'd have to look into it

[ Voor 49% gewijzigd door alienfruit op 29-06-2004 00:00 ]


Verwijderd

Topicstarter
alienfruit schreef op 28 juni 2004 @ 23:47:
Waarom mail je Steve niet even?
Steve? Ik geloof niet dat ik hem ken, maar als je denkt dat hij me hier mee kan helpen, wil ik het graag weten.
Pagina: 1