-
Доброго времени суток, господа однофорумчане. Есть задача: написать компонент, который реализует выпадающее меню. В зависимости от того какой пункт выбран, играет загруженная мелодия. Это дело реализовано так: [code] unit MyPopupMenu;
interface
uses WinTypes, WinProcs, Messages, SysUtils, Windows, Variants, Dialogs, Classes, Controls, Forms, Graphics, Stdctrls, Menus, mmsystem;
type {Мы создаем класс TMyPopupMenu, он является предком TPopupMenu, следовательно наследует все методы и события} TMyPopupMenu = class(TPopupMenu) private {переопределяем метод Popup, теперь у пользователя будет вызываться наш метод :-)} procedure Popup(X, Y: Integer); override; protected
public
published
end; {Cлужебная процедура для Delphi. Она регистрирует компонент в палитре компонентов.} procedure Register;
implementation {Регистрируем наш новый компонент на вкладке Standard} procedure Register; begin RegisterComponents('Standard', [TMyPopupMenu]); end;
procedure TMyPopupMenu.Popup(X, Y: Integer); var PCh: PChar; begin {Выполним метод Popup класса предка} inherited Popup(X, Y); {а теперь дописываем то, что нам нужно} {PlaySound - воспроизводит любые волновые звуки} {Pch - определяет воспроизводимый звук} {второй аргумент отвечает за источник звука, он используется если звук берется из какого-либо ресурса. Здесь 0, т.к. мы этим не пользуемся} {Последний параметр является множеством, которое определяет как будет воспроизводиться звук (режим воспроизведения). SND_ASYNC - звук воспроизводится асинхронно и функция возвращается сразу же после начала воспроизведения} PlaySound(Pch,0,SND_ASYNC) end; end. [/code]
Народ, подскажите как реализовать "В зависимости от того какой пункт выбран, играет загруженная мелодия". Пока играет одна и та же на все события.
-
как реализовать "В зависимости от того
в Popup пока еще нет этого самого "того", в зависимости от которого надо чем-то там дудеть. Рановато там использовать плэйсаунд.
-
хорошо, какой будет Ваш вариант?
-
по моему ясно, что вариант будет не в методе попап.
-
а на какой метод тогда повесить? я вчера горы форумов и документации перерыл, ничего не нашел... к сожалению тут нету метода как у того же класса TButton Click(((
-
тут нету. зато есть не тут. TMenuItem
-
т.е. мне переопределить класс TItem, сделав класс TMyItem? А как его тогда к TPopupMenu прикрутить? Или тоже заново переопределить все свойства которые были определены как TItem на TMyItem?
-
вообще перед тем как проектировать новый пользовательский класс логично было бы изучить иерархию предков на предмет от кого наследоваться и как там в них менюитемы прикручены к меню
-
type
TNewMenuItem = class(TMenuItem)
procedure Click;override;
end;
implementation
procedure TNewMenuItem.Click;
begin
inherited;
PlaySound
end;
procedure TForm1.FormCreate(Sender: TObject);
var Item: TNewMenuItem;
begin
Item := TNewMenuItem.Create(nil);
Item.Caption := 'Test';
PopupMenu1.Items.Add(Item);
end;
end.
-
можно какой нибудь грубый пример кода привести, как это в целом выглядеть должно?
-
c таким способом окончательно пропадает смысл в этом и так уже достаточно бессмысленном компоненте. тогда уж проще написать универсальный обработчик OnAnyThisPopupMenuItemsClick
так хоть останется возможность дизайнить меню в редакторе
-
> DimaBr
это дописывается в существующий компонент или это новый компонент? если новый, то как связать TPopepItem с TNewMenuItem?
-
TMenu = class(TComponent) .... published property Items: TMenuItem read FItems; ....
ps у тебя исходники что ли украли?
-
Давайте сначала. Вам нужен компонент, который вы будете использовать всюду или же использование ограничено одним приложением ?
-
Мне нужен компонент который будет использоваться только в одном приложении, это как бы часть лабораторной работы в институте
-
Разместите описание перед описание формы
TMenuItem = class(Menus.TMenuItem)
procedure Click;override;
end;
TMainForm = class(TForm)
-
Сделал как Вы писали, выдается ошибка "Unsatisfied forward or external declaration: 'TMenuItem.Click'"
-
ну так реализацию-то TMenuItem.Click тоже надо как бы в исходник внести
-
procedure TMenuItem.Click;
begin
inherited;
PlaySound
end;
|