Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.16;
Скачать: CL | DM;

Вниз

Как назначить 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;


И назначаю его TreeView

function 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
 {&#133}
 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];
 {&#133}
 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];
 {&#133}
 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&#133
> Или не так?

Нет один на всех.

Есть класс TCardDataView у него в конструкторе создается меню.
Он же создает много TreeView и всем им назначает одно и тоже меню &#151; FGroupTreeViewPopupMenu.


> Если не так, то зачем тогда его каждый раз создавать

Создается меню 1 раз&#133

Наврал чуток 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]

Сделал свой для каждого. Рабоатает. Не сильно ресурсоёмко имхо&#133 Оставил так. Благодарю за обсуждение.


 
{RASkov}   (2007-11-21 10:28) [14]

> [13] Kolan ©   (21.11.07 10:21)
> Сделал свой для каждого. Рабоатает.

:(
:)



Страницы: 1 вся ветка

Текущий архив: 2007.12.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
15-1194926298
MBo
2007-11-13 06:58
2007.12.16
Охранять надо интеллектуальную собственность...


1-1190813080
Иван_А
2007-09-26 17:24
2007.12.16
Изменить цвет строки ListView


15-1195137044
Reindeer Moss Eater
2007-11-15 17:30
2007.12.16
Приколы реализации ADO в D7


4-1180778610
gray_falcon
2007-06-02 14:03
2007.12.16
не могу запустить сервис


2-1195500252
GREENGENERAL
2007-11-19 22:24
2007.12.16
Компонент по типу StringGrid, но чтобы пользователь мог изменять