Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.06.2013, 17:54
Oreon Oreon вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 36
Репутация: 10
По умолчанию Выровнять пункт главного меню по правому краю

Ровняю в TForm.FormCreate командой
Код:
ModifyMenu(MainMenu1.Handle, N42.MenuIndex, MF_BYPOSITION or MF_POPUP or MF_HELP,
N42.Handle, pchar(N42.Caption));
Пункт становится справа, его обработчик работает. И все бы хорошо, но если у любого пункта главного меню поменять свойство Caption - мой пункт снова становится слева. Если его снова той же командой кинуть вправо - занимает несколько секунд и пользователю визуально видно прыгающий пункт меню.
Как побороть?
Ответить с цитированием
  #2  
Старый 22.06.2013, 21:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А как вы надпись на пункте меняете, часом не
Код:
N42.Caption:= 'бла-бла';
я это делаю так

Код:
MainMenu1.OwnerDraw:= true;

 ModifyMenu(MainMenu1.Handle, N1.MenuIndex, MF_BYCOMMAND,  0, PChar('бла-бла'));

MainMenu1.OwnerDraw:= false;


З.Ы.
А может лучше отказаться от использования MainMenu - сделать его на основе CoolBar'а через ToolBar с кнопками, у тулбара есть свойство "MainMenu". Таким макаром можно собрать типа менюшку убрав её предварительно из свойств формы. А в самый правый край ей влепить еще один тулбар с одной кнопкой — "пунктом меню". Я бы так сделал. Остается только позиционировать крайний тулбар в OnResize при смене ширины формы, и всё.
Ответить с цитированием
  #3  
Старый 23.06.2013, 13:39
Oreon Oreon вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 36
Репутация: 10
По умолчанию

Спасибо за ответ, попробовал ваш вариант - не работает, если меняю "MF_BYCOMMAND" на "MF_BYPOSITION" то работает, но точно так же как "N42.Caption:=", тоесть - передергивает в лево

Последний раз редактировалось Oreon, 23.06.2013 в 13:43.
Ответить с цитированием
  #4  
Старый 23.06.2013, 17:10
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Oreon
...попробовал ваш вариант - не работает...
А такой тоже не работает?
Ответить с цитированием
  #5  
Старый 23.06.2013, 17:47
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

В SDK есть флаг MF_RIGHTJUSTIFY или как-то так. Здравствуй, Windows 3.x.
Ответить с цитированием
  #6  
Старый 23.06.2013, 17:58
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да, есть, но пользовать его надо в связке

Код:
... MF_BYPOSITION or MF_RIGHTJUSTIFY, ...
Ответить с цитированием
  #7  
Старый 23.06.2013, 22:03
Oreon Oreon вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 36
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
А такой тоже не работает?
Да, такой не работает еще жоще - сваливается даже при нажатии на меню, не говоря даже о кнопках. (запускаю на семерке, делфи 2010)
Ответить с цитированием
  #8  
Старый 23.06.2013, 22:52
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Странно, на W7D7 нормально работает, тогда советую всё же смотреть в сторону эмулятора меню, будет проще.
Ответить с цитированием
  #9  
Старый 23.06.2013, 23:08
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

VCL внутри себя пересоздает меню при некоторых условиях, -- уже запамятовал, каких... То ли при автоматическом переназначении горячих клавиш, то ли еще когда. Советую покурить справку по этому поводу.

Другой совет -- попробовать поотключать для меню и его пунктов свойства, которые могут вызвать его пересоздание. Какие конкретно свойства -- либо выяснять опытным путем, либо копаться в исходниках VCL.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:30.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025