Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выпадающее меню. [D6, Win2k, WinXP]


kingdom ©   (2005-08-01 22:10:00) 

У меня на форме лежит PopupMenu1 и есть кнопка ToolButton у которой Стиль = tbsDropDown и DropdownMenu = PopupMenu1. У кнопки справа появился треугольник по нажатию которого выпадает меню, а вот при нажатии на самой кнопки, происходить событие Click. Как сделать так, что бы по нажатию и кнопки и треугольника выпадало только меню? Можно конечно использовать в событии Click PopupMenu1.Popup(x,y); Но может это можно сделать в настройках кнопки, что бы не изобретать велосипед, но я этого не нашел.


kingdom   (2005-08-02 10:19:00) [1]

>Ученик
Спасибо, все заработаль. Просто удалил кнопку и сделал все заново.

>Мх
да хочется только стандартными компонентами обойтись

Всем спасибо


Mx   (2005-08-02 02:01:00) [2]


> kingdom   (02.08.05 01:02) [8]

Да елы палы, а что должно происходить-то? Если "Стиль = tbsDropDown и DropdownMenu = PopupMenu1", то сбоку есть "треугольник" для меню по которому оно и появляется. Если стиль сделать tbsButton, то будет появляться только меню, но "треугольника" не будет. Все остальное глюки беспонтового компонента, который даже по-сравнению с уже устаревшим Toolbar97 смотрится фигово.


kingdom   (2005-08-02 01:02:00) [3]

>Ученик
Да нет, все включено, а все равно ничего не происходит :(


Ученик   (2005-08-01 23:54:00) [4]

>kingdom   (01.08.05 23:37) [4]
Может отключили TToolButton.DropdownMenu или TPopupMenu.AutoPopup ?


Eraser   (2005-08-01 23:45:00) [5]

Ещё:
function TJvCustomSpeedButton.GetDropDownMenuPos: TPoint;
begin
 if Assigned(FDropDownMenu) then
 begin
   if MenuPosition = dmpBottom then
   begin
     case FDropDownMenu.Alignment of
       paLeft:
         Result := Point(-1, Height);
       paRight:
         Result := Point(Width + 1, Height);
     else {paCenter}
       Result := Point(Width div 2, Height);
     end;
   end
   else { dmpRight }
   begin
     case FDropDownMenu.Alignment of
       paLeft:
         Result := Point(Width, -1);
       paRight:
         Result := Point(-1, -1);
     else {paCenter}
       Result := Point(Width div 2, Height);
     end;
   end;
 end
 else
   Result := Point(0, 0);
end;


+++

function TJvCustomSpeedButton.CheckBtnMenuDropDown: Boolean;
begin
 Result := CheckMenuDropDown(PointToSmallPoint(GetDropDownMenuPos), True);
end;


Eraser   (2005-08-01 23:42:00) [6]

kingdom   (01.08.05 23:37) [4]

Возможно поможет следующий код:
function TJvCustomSpeedButton.CheckMenuDropDown(const Pos: TSmallPoint;
 Manual: Boolean): Boolean;
{$IFDEF VCL}
var
 Form: TCustomForm;
{$ENDIF VCL}  
begin
 Result := False;
 if csDesigning in ComponentState then
   Exit;
 if Assigned(FDropDownMenu) and (DropDownMenu.AutoPopup or Manual) then
 begin
   {$IFDEF VCL}
   Form := GetParentForm(Self);
   if Form <> nil then
     Form.SendCancelMode(nil);
   {$ENDIF VCL}
   DropDownMenu.PopupComponent := Self;
   with ClientToScreen(SmallPointToPoint(Pos)) do
     DropDownMenu.Popup(X, Y);
   Result := True;
 end;
end;


kingdom   (2005-08-01 23:37:00) [7]

>Ученик
ToolButton1.CheckMenuDropDown
Ничего не происходит при выполнении этого кода, меню не появляется

А как точно отловит координаты угла X,Y (PopupMenu1.Popup(x,y);), что бы этот угол находился под кнопкой?


Ученик   (2005-08-01 23:18:00) [8]

>kingdom   (01.08.05 22:10)  

Еще вариант

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
 ToolButton1.CheckMenuDropDown
end;


Mx   (2005-08-01 23:04:00) [9]


> kingdom   (01.08.05 22:10)  

Убери стиль tbsDropdown, а если уж так нужен треугольник, то можно и вручную отрисовать.


Eraser   (2005-08-01 22:47:00) [10]

kingdom   (01.08.05 22:10)

В настройках кнопки вроде нету, так что делай PopupMenu1.Popup(x,y);


Наверх

Титульная страница Поиск, карта сайта Написать письмо