![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Popup Menu [Delphi]
Vox © (2002-10-09 18:48:00)Народ, есть вопросик. Я делаю динамическое меню. Пишу:
procedure TForm1.tcMainMouseDown(Sender: PControl;
var Mouse: TMouseEventData);
var Menu : PMenu;
P : TPoint;
begin
Menu := NewMenu(tcMain.TC_Pages[0], 900, ["Закрыть", "Открыть"], nil);
P := MakePoint(Mouse.X, Mouse.Y);
ShowMsg("X: "+Int2Str(P.X)+"; Y: "+Int2Str(P.Y),0);
P := tcMain.Client2Screen(P);
Menu.Popup(P.X, P.Y);
Menu.Free;
end;
tcMain - это TabControl
Почему так все работает, но если убрать ShowMsg(), то вылетает Access Violation. В чем дело?
Gandalf (2002-10-14 21:27:00) [1]>У Gandalf"а под ХР может и не вылетает. Но и меню появляться >вроде бы не должно. Хотя... пути ХР неисповедимы :)
Оно появляется и сразу исчезает, но факт появления заметен, правда у меня WindowFX стоит может и по этому...
Vladimir Kladov (2002-10-14 12:06:00) [2]
> Menu.Popup(P.X, P.Y);
> Menu.Free;
> end;
А почему вы решили, что кто-то будет дожидаться, пока меню на экране не отщелкнется? Следом сразу же выполняется код, который пытается меню убить.
У Gandalf"а под ХР может и не вылетает. Но и меню появляться вроде бы не должно. Хотя... пути ХР неисповедимы :)
blackalex (2002-10-10 10:36:00) [3]Попробуй по другому.
procedure TForm1.tcMainMouseDown(Sender: PControl;
var Mouse: TMouseEventData);
var
Point : TPoint;
Menu PMenu;
begin
if Mouse.Button = mbRight then begin
Menu := NewMenu(tcMain.TC_Pages[0], 900, ["Закрыть", "Открыть"], nil);
GetCursorPos(Point);
Menu.PopUp (Point.X, Point.Y);
Menu.Free;
end;
end;
Gandalf (2002-10-09 22:24:00) [4]Не вылетает, ни так, ни так. KOLnMCK 1.51, D5, WinXP
Vox (2002-10-09 19:16:00) [5]
Menu := NewMenu(tcMain.TC_Pages[0], 900, ["Закрыть", "Открыть"], nil);
Извините, здесь конечно же
Menu := NewMenu(tcMain, 900, ["Закрыть", "Открыть"], nil);
Но дела это не меняет. Все тоже самое