Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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;


И назначаю его 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 3.1 c
15-1195090718
Riply
2007-11-15 04:38
2007.12.16
Разделы на CD/DVD - диске.


15-1195316595
guav
2007-11-17 19:23
2007.12.16
Быстрая сортировка :-)


2-1195451927
АндрейК
2007-11-19 08:58
2007.12.16
Заменить клик левой кнопки мыши на Ctrl+клик левой кнопки


15-1195120254
WFS
2007-11-15 12:50
2007.12.16
Как переименовать Unit?


11-1181489135
=BuckLr=
2007-06-10 19:25
2007.12.16
Про DeleteLines





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский