Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMainMenu и добавление пунктов 
:(
    Опции темы
Illusion Dolphin
Дата 4.6.2005, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Суть проблемы:
есть TMainMenu, в нём один подпункт (File1). При нажатии на него нужно, к примеру, добавить в это меню энное количество итемов (количество заранее не известно) и сделать чтобы это меню отобразилось, как будто все эти пункты были уже там. Если я добавляю итемы в File1OnClick то при нажатии на него ничего не происходит... как это реализовать? То же самое для popupmenu организовывается в OnPopup, а тут такого нет :/


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Akella
Дата 4.6.2005, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



в uses добавь menus

Код

function NewMenu(Owner: TComponent; const AName: string;
Items: array of TMenuItem): TMainMenu;

function NewPopupMenu(Owner: TComponent; const AName: string;
Alignment: TPopupAlignment; AutoPopup: Boolean; Items: array of
TMenuitem): TPopupMenu;

function NewSubMenu(const ACaption: string; hCtx: Word; const AName:
string; Items: array of TMenuItem): TMenuItem;

function NewItem(const ACaption: string; AShortCut: TShortCut;
AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: Word;
const AName: string): TMenuItem;

function NewLine: TMenuItem;



и еще
Код

Новый элемент верхнего уровня: 
procedure tform1.addmainitem(s: string);
var
  newitem: Tmenuitem;
begin
  newitem := tmenuitem.create(Mainmenu1);
  newitem.caption := s;
  {если вы хотите определить событие onclick
  newitem.onclick:=Dynamenuclick; }
  {добавляем это к верхнему уровню меню}
  mainmenu1.items.insert(mainmenu1.items.count, newitem);
  removemenu1.enabled := true;
  addmenuitem1.enabled := true;
end;

Создание подменю: 
procedure tform1.addsubitem(s: string; to : integer);
var
  newitem, toitem: Tmenuitem;
begin
  {to = верхний уровень меню для нового пункта}
  toitem := mainmenu1.items[to ];
  newitem := tmenuitem.create(toitem);
  newitem.caption := s;
  {если вы хотите определить событие onclick
  newitem.onclick:=Dynamenuclick; }
  toitem.onclick := nil;
  toitem.insert(toitem.count, newitem);
  removemenuitem1.enabled := true;
end;


и еще
Код

добавление иконок

var

Bmp1 : TPicture;

...

Bmp1 := TPicture.Create;
Bmp1.LoadFromFile('c:\where\b1.BMP');
SetMenuItemBitmaps(MenuItemTest.Handle,
  0,
  MF_BYPOSITION,
  Bmp1.Bitmap.Handle,
  Bmp1.Bitmap.Handle);
...



PM MAIL   Вверх
<Spawn>
Дата 4.6.2005, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Illusion Dolphin Что значит ни чего не происходит? Надо было бы код привести smile У меня такой код вполне работат:

Код

procedure TForm1.asdfadsf1Click(Sender: TObject);
var
  NewMenu: TMenuItem;
begin
  NewMenu := TMenuItem.Create(Self);
  NewMenu.Caption := 'NewMenu';
  TMenuItem(Sender).Add(NewMenu);
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Illusion Dolphin
Дата 4.6.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



dsergey:
спасибо, создавать динамически итемы я умею smile
дело видно не в этом, я сделал уже, вот демка сути поблемы и того, как я это обошёл:
<Spawn> :
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure xxx1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MainMenu1: TMainMenu;
  xxx1 : TmenuItem;
  RadioGroup1: TRadioGroup;

implementation

{$R *.dfm}

procedure TForm1.xxx1Click(Sender: TObject);
var
  NewMenu: TMenuItem;
  i : integer;
begin
  randomize;
  if RadioGroup1.ItemIndex=1 then
  begin
   //если меню полностью очищать, то ничего не происходит :/
   xxx1.Clear;
  end else
  begin
   //остаётся один итем (невидимый, но видно это что-то меняет)
   for i:=1 to xxx1.Count-2 do
   xxx1.Delete(1);
  end;
  for i:=1 to 10 do
  begin
   NewMenu := TMenuItem.Create(xxx1);
   NewMenu.Caption := 'NewMenu' + inttostr(random(1000));;
   xxx1.Add(NewMenu);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  nilitem : tmenuitem;
begin
 MainMenu1:= TMainMenu.Create(self);
 xxx1 := TmenuItem.Create(MainMenu1);
 xxx1.OnClick:=xxx1Click;
 xxx1.Caption:='xxx';
 MainMenu1.Items.Add(xxx1);

 //c этим "пустым" итемом всё работает, без него - сами видите
 nilitem := TmenuItem.Create(MainMenu1);
 nilitem.Caption:='-';
 nilitem.Visible:=false;
 xxx1.Add(nilitem);

  RadioGroup1:= TRadioGroup.Create(self);
  RadioGroup1.Parent:=self;
  RadioGroup1.Top:=10;
  RadioGroup1.Left:=10;
  RadioGroup1.Width:=200;
  RadioGroup1.Height:=200;
  RadioGroup1.Items.Add('Работает');
  RadioGroup1.Items.Add('НЕ работает');
  RadioGroup1.ItemIndex:=0;
end;

end.




--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.