![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MainMenu в любой позиции формы [D7, WinXP]
Igor_thief © (2006-07-18 13:09:00)Как зделать так, чтобы главное меню было расположено не в самом верху формы, а в любой позиции формы?
Была идея бросить на форму тулбар и установить значение свойства меню равным нужному нам меню меню, но тул бар в качестве основных пунктов меню создает кнопки, что не есть хорошо для меня.
Igor_thief (2006-07-18 16:51:00) [61]Да,
procedure TForm1.ToolBar1CustomDrawButton(Sender: TToolBar;
Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rct: TRect;
begin
TToolBar(Sender).Canvas.Brush.Color := RGB(Random(255),Random(255),Random(255));
Rct := Button.ClientRect;
Rct.TopLeft := TToolBar(Sender).ScreenToClient(Button.ClientToScreen(Rct.TopLeft));
Rct.BottomRight := TToolBar(Sender).ScreenToClient(Button.ClientToScreen(Rct.BottomRight));
TToolBar(Sender).Canvas.FillRect(Rct);
end;
Выделенные жирным строки являются лишними. Достаточно сделать так:
begin
TToolBar(Sender).Canvas.Brush.Color := RGB(Random(255),Random(255),Random(255));
TToolBar(Sender).Canvas.FillRect(Button.BoundsRect);
end;
Loginov Dmitry (2006-07-18 16:50:00) [62]> Это обычный ToolBar.
На ControlBar'e
Loginov Dmitry (2006-07-18 16:50:00) [63]> Я бы положил на свой тулбар speedbutton, flat = true. При
> соответствующей height она будет смотреться как менюшка.
> А по нажатию показывать popupmenu в нужной позиции.
Зачем мудрить, не пойму. ToolBar поддерживает вывод пунктов меню. Плавающее меню видели? Это обычный ToolBar.
Igor_thief (2006-07-18 16:47:00) [64]>>Впрочем, как понял, тебе нужны "рюшечки".
>>Игры продолжаются.
Правильно понял!
procedure TForm1.ToolBar1CustomDrawButton(Sender: TToolBar;
Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rct: TRect;
begin
TToolBar(Sender).Canvas.Brush.Color := RGB(Random(255),Random(255),Random(255));
Rct := Button.ClientRect;
Rct.TopLeft := TToolBar(Sender).ScreenToClient(Button.ClientToScreen(Rct.TopLeft));
Rct.BottomRight := TToolBar(Sender).ScreenToClient(Button.ClientToScreen(Rct.BottomRight));
TToolBar(Sender).Canvas.FillRect(Rct);
end;
Код работает! Я тоже что-то подобное делал. Вся проблема заключается в том, что надо сменить вид главного пункта меню (тот из которого выпадает меню), во время выпада меню и чтобы вид оставался таким же до сворачивания или перехода на другой "главный" пункт меню. Смотрим скриншот: http://www.igor-thief.pisem.net/1.jpg
Второе: когда происходит переход с одного главного пункта меню на другой, то автоматически выделяется первый подчененный пункт, несмотря даже на то, что он дисаблед! Ну это же не подход, согласитесь? Разве меню должно так работать?
Jeer (2006-07-18 16:36:00) [65]Igor_thief (18.07.06 16:17) [7]
Очень часто правильно спроектированный интерфейс подсказывает особенности нужной функциональность.
Впрочем, как понял, тебе нужны "рюшечки".
Игры продолжаются.
Cardinal (2006-07-18 16:26:00) [66]Я бы положил на свой тулбар speedbutton, flat = true. При соответствующей height она будет смотреться как менюшка. А по нажатию показывать popupmenu в нужной позиции.
Loginov Dmitry (2006-07-18 16:23:00) [67]Может это:
procedure TForm1.ToolBar1CustomDrawButton(Sender: TToolBar;
Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rct: TRect;
begin
TToolBar(Sender).Canvas.Brush.Color := RGB(Random(255),Random(255),Random(255));
Rct := Button.ClientRect;
Rct.TopLeft := TToolBar(Sender).ScreenToClient(Button.ClientToScreen(Rct.TopLeft));
Rct.BottomRight := TToolBar(Sender).ScreenToClient(Button.ClientToScreen(Rct.BottomRight));
TToolBar(Sender).Canvas.FillRect(Rct);
end;
Igor_thief (2006-07-18 16:19:00) [68]
> Может быть положить на панель метку, при наведении курсора
> соответствующим образом менять ее вид, а по клику вызывать
> всплывающее меню в позиции под меткой? Сердито, зато дешево.
>
Была похожая идея, но при помощи меток и попапменю практически нериально сделать идентичный функционал с MainMenu. Дело в том, что когда попаменю уже показано, то все остальные события не обрабатываются (например наезд мышкой на другой лабел). Таймер даже не предлогать!
Igor_thief (2006-07-18 16:17:00) [69]
> Можно заняться, например, основной функциональностью - вероятно,
> это гораздо полезнее, чем "рюшечки"
Расмешил! Неужели ты думаешь, что я сначала отрабатываю интерфейс, а потом работаю над функциональностью? Мог бы просто промолчать, вместо того чтобы говорить глупости! ;)
Вся функциональность уже готова. Осталось только оформить интерфейс как надо. А надо чтобы главное меню было не там где всегда, а другом, конкретном месте. Дело в том, что интерфейс делается со скинами! Вот из-за этого и надо поизвращаться с меню. Уж больно неохота делать новый компонет.
Я попробывал юзать Toolbar2000. Классно спавляется с поставленной задачей, но отсутсвует даже банальный OnPaint!
Лапыч (2006-07-18 16:12:00) [70]Может быть положить на панель метку, при наведении курсора соответствующим образом менять ее вид, а по клику вызывать всплывающее меню в позиции под меткой? Сердито, зато дешево.
Loginov Dmitry (2006-07-18 16:05:00) [71]> То, что меню будет "плоским", одноуровневым?
С чего бы это?
Jeer (2006-07-18 16:05:00) [72]Можно заняться, например, основной функциональностью - вероятно, это гораздо полезнее, чем "рюшечки"
Igor_thief (2006-07-18 15:34:00) [73]
> А что в этом плохого?
А то, что я не могу придать этому всему нужный вид. К канве тулбара я то могу достучаться, но вот как перерисовать те кнопки, которые тулбар создает автоматом я не знаю. Вот что в этом плохого!
Может вы знаете?
Чапаев (2006-07-18 15:34:00) [74]
> А что в этом плохого?
То, что меню будет "плоским", одноуровневым?
Loginov Dmitry (2006-07-18 15:04:00) [75]> тул бар в качестве основных пунктов меню создает кнопки,
> что не есть хорошо для меня
А что в этом плохого?