Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизКак назначить PopupMenu динамически. Найти похожие ветки
← →
Kolan © (2007-11-21 08:51) [0]Зоздаю менб таким образом:
function TCardDataView.CreateGroupPopupMenu(AOwner: TComponent): TPopupMenu;
var
MenuItem: TMenuItem;
begin
Result := TPopupMenu.Create(AOwner);
MenuItem := TMenuItem.Create(Result);
MenuItem.OnClick := MenuDelClick;
MenuItem.Caption := "Oaaeeou";
Result.Items.Add(MenuItem);
end;
И назначаю его TreeViewfunction TCardDataView.CreateGroup(Owner: TWinControl;
Group: TGroup; AColor: TColor): TStructureTreeView;
var
I: Integer;
TempItem: TTreeNode;
begin
Result := nil;
if Assigned(Group) then
begin
Result := TStructureTreeView.Create(Owner);
Result.Parent := Owner;
Result.PopupMenu := FGroupTreeViewPopupMenu;
При правом клике на TreeView получаю AV, по адресу нашел что вGetClientOrigin
. \
Может я не так его создал, или не все свойства задал?
Как правильно?
← →
ЮЮ © (2007-11-21 09:00) [1]> Может я не так его создал, или не все свойства задал?
А может он к этоиу моменту вообще не создан? Чему равен FGroupTreeViewPopupMenu, если поставить точку останова на выделенной строке?
← →
Kolan © (2007-11-21 09:11) [2]> А может он к этоиу моменту вообще не создан?
Создан, я его в конструкторе создаю.
constructor TCardDataView.Create(ScrollBox: TScrollBox);
begin
{…}
FGroupTreeViewPopupMenu := CreateGroupPopupMenu(FScrollBox);
end;
Указатель не нил к моменту присвоения(Result.PopupMenu := FGroupTreeViewPopupMenu;
).
← →
{RASkov} (2007-11-21 09:20) [3]А это - FGroupTreeViewPopupMenu, точно "рабочее", т.е. "по другому" вызывается без проблем?
Ошибка явно в другом месте, не здесь...
GetClientOrigin - твое? т.е. переопределил? Что там?
А может ошибка в этой "затеи":
http://delphimaster.net/view/2-1195566507/
← →
Kolan © (2007-11-21 09:31) [4]> GetClientOrigin — твое? т.е. переопределил? Что там?
Не не моё.
> А может ошибка в этой «затеи»:
Нет, проект тот же, но место это другое с тем сабжем не связаное.
> А это — FGroupTreeViewPopupMenu, точно «рабочее», т.е. «по
> другому» вызывается без проблем?
А как проверить? Вызывается с проблеммами — проблемма и есть сабж ветки.
← →
{RASkov} (2007-11-21 09:34) [5]> [4] Kolan © (21.11.07 09:31)
> А как проверить?
Например что-нибудь так:
procedure TForm.ButtonClick();
begin
Button.PopupMenu:=FGroupTreeViewPopupMenu;
FGroupTreeViewPopupMenu.Popup(X, Y);
end;
← →
{RASkov} (2007-11-21 09:43) [6]> [4] Kolan © (21.11.07 09:31)
> проблемма и есть сабж ветки
:)
> Как назначить PopupMenu динамически
Ответ тогда простой:var pm: TPopupMenu;....
begin
pm:=TPopupMenu.Create();
....
TreeView.PopupMenu:=pm;
← →
{RASkov} (2007-11-21 09:46) [7]Не на ту кнопу нажал)
В [6] я хотел сказать, что в сабже, т.е. по ветке, мало инфы или она не достоверная, т.е. сбивающая с толку....)
Сорри...
← →
Kolan © (2007-11-21 09:48) [8]> Например что-нибудь так:
Совсем так не получилось, повесил на обработчик нажатия одного из Edit"ов.procedure TCardDataView.DiagnosisKeyPress(Sender: TObject; var Key: Char);
begin
Key := AnsiUpperCase(Key)[1];
{…}
FGroupTreeViewPopupMenu.Popup(100, 200);
end;
То же АВ, по тому же адресу.
← →
Kolan © (2007-11-21 09:50) [9]Так тоже самое.
procedure TCardDataView.DiagnosisKeyPress(Sender: TObject; var Key: Char);
begin
Key := AnsiUpperCase(Key)[1];
{…}
if Sender is TEdit then
(Sender as TEdit).PopupMenu := FGroupTreeViewPopupMenu;
FGroupTreeViewPopupMenu.Popup(100, 200);
end;<.CODE>
> , мало инфы или она не достоверная,
Единственное что не сказал, это меню назначается множеству TreeView.
← →
{RASkov} (2007-11-21 09:57) [10]> [8, 9] Kolan
получается, что у тебя битая ссылка в FGroupTreeViewPopupMenu....
> Единственное что не сказал, это меню назначается множеству
> TreeView.
Это как? Я так понял, что FGroupTreeViewPopupMenu - это поле конкретного класса...
т.е. у каждого ТриВью свой FGroupTreeViewPopupMenu..... Или не так?
Если не так, то зачем тогда его каждый раз создавать
> constructor TCardDataView.Create(ScrollBox: TScrollBox);
> begin
> {…}
> FGroupTreeViewPopupMenu := CreateGroupPopupMenu(FScrollBox);
> end;
> function TCardDataView.CreateGroupPopupMenu(AOwner: TComponent)
> : TPopupMenu;
> var
> MenuItem: TMenuItem;
> begin
> Result := TPopupMenu.Create(AOwner);
???
← →
Kolan © (2007-11-21 10:12) [11]> т.е. у каждого ТриВью свой FGroupTreeViewPopupMenu…
> Или не так?
Нет один на всех.
Есть класс TCardDataView у него в конструкторе создается меню.
Он же создает много TreeView и всем им назначает одно и тоже меню — FGroupTreeViewPopupMenu.
> Если не так, то зачем тогда его каждый раз создавать
Создается меню 1 раз…
Наврал чуток 8 и 9
Так работает:if Sender is TMaskEdit then
begin
(Sender as TMaskEdit).PopupMenu := CreateGroupPopupMenu(Sender as TMaskEdit);
(Sender as TMaskEdit).PopupMenu.Popup(100, 200);
end;
Так нет :if Sender is TMaskEdit then
begin
(Sender as TMaskEdit).PopupMenu := FGroupTreeViewPopupMenu;
FGroupTreeViewPopupMenu.Popup(100, 200);
end;
Блин может каждому дереву по меню создать и не мучится?
← →
{RASkov} (2007-11-21 10:18) [12]> [11] Kolan © (21.11.07 10:12)
> Блин может каждому дереву по меню создать и не мучится?
Ну тут с ходу сложно посоветовать....
Может ты и по правильному пути идешь.... нужно лишь один байт в программе сделать not байт и делов :)
Если попап у всех одинаковый, то зачем всем создавать одинаковый попап? ресурсоемко получается....
Проверь весь код заного.... где-то у тебя ошибка:) 17 - строка? )
← →
Kolan © (2007-11-21 10:21) [13]Сделал свой для каждого. Рабоатает. Не сильно ресурсоёмко имхо… Оставил так. Благодарю за обсуждение.
← →
{RASkov} (2007-11-21 10:28) [14]> [13] Kolan © (21.11.07 10:21)
> Сделал свой для каждого. Рабоатает.
:(
:)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 3.1 c