![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выпадающее меню. [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);