Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

компонент на дельфи

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> компонент на дельфи
Имя
Сообщение << Старые топики   Новые топики >>
компонент на дельфи - 2009-12-15 14:46:21.040000   
ximera

Сообщений: 39
Оценки: 0
Присоединился: 2005-01-10 23:16:36
Доброго времени суток, господа однофорумчане.
Есть задача: написать компонент, который реализует выпадающее меню. В зависимости от того какой пункт выбран, играет загруженная мелодия.
Это дело реализовано так:
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.

Народ, подскажите как реализовать "В зависимости от того какой пункт выбран, играет загруженная мелодия". Пока играет одна и та же на все события.
Post #: 1
RE: компонент на дельфи - 2009-12-15 15:26:59.920000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
В Pch поместить путь к нужному файлу? )
Вообще нужно писать свой обработчик эвента выбора пункта меню и в этот обработчик уже и будет приходить номер выбранного пункта.

Есть мнение, что ты что-то не то переопределяешь :). Где у тебя идёт добавление своих пунктов меню?
Post #: 2
RE: компонент на дельфи - 2009-12-15 16:07:24.316666   
ximera

Сообщений: 39
Оценки: 0
Присоединился: 2005-01-10 23:16:36
пока для тестового воспроизведения пользуюсь PlaySound()….
А на какое событие вешать свой обработчик, какое событие предка переопределять? Я не нашел такого же события как например у TButton событие Click.
Свои пункты меню не добавляются, вообще думал проверять индекс элемента: если четный - играем мелодию 1, если не четный - мелодию номер два. Т.к. в ТЗ этот момент смутно описан
Post #: 3
RE: компонент на дельфи - 2009-12-15 16:37:53.756666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ну вот и уточняй тз. Вообще-то индекс и надо проверять =).

А событие - что-то типа ItemSelected.
Post #: 4
RE: компонент на дельфи - 2009-12-15 17:20:36.553333   
ximera

Сообщений: 39
Оценки: 0
Присоединился: 2005-01-10 23:16:36
уточнил, сказали как хочешь-так и делай)
события ItemSelected - чего то такого не откопал(
Post #: 5
RE: компонент на дельфи - 2009-12-15 19:38:30.793333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
А какие ты вообще знаешь события? RTFM пробовал?
Post #: 6
RE: компонент на дельфи - 2009-12-16 14:34:05.530000   
ximera

Сообщений: 39
Оценки: 0
Присоединился: 2005-01-10 23:16:36
пробовал, иначе суда бы не писал.
Господа, давайте не будем оценивать мой уровень знаний, чего я делал или не делал. Если у кого то есть идея как это реализовать или кусок кода, буду очень благодарен
Post #: 7
RE: компонент на дельфи - 2009-12-16 15:25:04.140000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Я тз тоже не понял.

Тебе нужно свой компонент написать с нуля? Или стандартного хватит? Зачем метод popup переопределять? Ведь он отвечает за отображение меню, а не за обработку действия пользователя.
Какая должна быть зависимость между номером выбранного элемента и играемым звуком? Ведь юзер может добавить 100500 пунктов - и твоему компоненту как-то придётся на это реагировать.

Знания твои придётся оценить на примере хэллоу-ворда, поскольку сложность вопроса не очень высока (на уровне 1-го курса универа) и ты никаким образом не намекнул на то, что ты знаешь. Просто сложно что-то советовать… Давай так, ты сможешь по нажатию левой кнопки мыши на формочке вывести попап-менюшку с 4-мя пунктами и при выборе пункта вызвать мессаджбокс, в котором будет сказано, какой ты пункт меню выбрал?

А вообще, как я понял задание, тебе нужно:
Написать свой компонент наподобие выпадающего меню, элементами которого будут являться тоже некоторые, разработанные тобой компоненты (назовём их TMusicMenuItem). Так вот, твоя задача - задача: расширить стандартный компонент с меню таким образом, чтобы в него в качестве пунктов можно было кидать эти самые TMusicMenuItem. А уже у самого TMusicMenuItem должно быть 3 свойства (или как там в дэлфи): TextValue (к примеру - отображаемый текст), Action (действие по клику), BGSound (путь к звуковому файлу, который нужно играть).

Советую www.rsdn.ru
Post #: 8
RE: компонент на дельфи - 2009-12-16 16:39:14.940000   
ximera

Сообщений: 39
Оценки: 0
Присоединился: 2005-01-10 23:16:36

quote:

ORIGINAL: _SaZ_

Я тз тоже не понял.

Тебе нужно свой компонент написать с нуля? Или стандартного хватит? Зачем метод popup переопределять? Ведь он отвечает за отображение меню, а не за обработку действия пользователя.
Какая должна быть зависимость между номером выбранного элемента и играемым звуком? Ведь юзер может добавить 100500 пунктов - и твоему компоненту как-то придётся на это реагировать.


ТЗ не мне дали, помогаю подруге, ТЗ ей это дали в институте. В моем понимании это можно реализовать так: если пункт меню четный-играет мелодия раз, если пункт меню нечетный-играет мелодия два.

quote:


Знания твои придётся оценить на примере хэллоу-ворда, поскольку сложность вопроса не очень высока (на уровне 1-го курса универа) и ты никаким образом не намекнул на то, что ты знаешь. Просто сложно что-то советовать… Давай так, ты сможешь по нажатию левой кнопки мыши на формочке вывести попап-менюшку с 4-мя пунктами и при выборе пункта вызвать мессаджбокс, в котором будет сказано, какой ты пункт меню выбрал?

насчет моих знаний - я закончил институт несколько лет назад с дипломом программиста, но в связи с тем что писал когда то на Си, а не на дельфи и сейчас все время пишу только на 1С, ООП я порядком забыл, точнее старался забыть чтобы на мировоздание языка 1С пересесть… Да, можно покритиковать сейчас 1С, сказать что это полная фигня и пр. - но какая есть работа в нашем городе, на той и работаю
quote:


А вообще, как я понял задание, тебе нужно:
Написать свой компонент наподобие выпадающего меню, элементами которого будут являться тоже некоторые, разработанные тобой компоненты (назовём их TMusicMenuItem). Так вот, твоя задача - задача: расширить стандартный компонент с меню таким образом, чтобы в него в качестве пунктов можно было кидать эти самые TMusicMenuItem. А уже у самого TMusicMenuItem должно быть 3 свойства (или как там в дэлфи): TextValue (к примеру - отображаемый текст), Action (действие по клику), BGSound (путь к звуковому файлу, который нужно играть).

ТЗ такое. Выпадающее меню - при выборе нечетного пункта играет мелодия раз, при выборе четного - мелодия два. То, что Вы привели, избыточно, хотя тоже верно.
Моя ошибка в том, что я отталкивался от класса TPopupMenu, пытаясь в нем как то на метод click выйти, которого нету. А надо было идти через TMenTMenu… чую истина где то рядом
quote:


Советую www.rsdn.ru

а за рдсн спасибо, толковый сайт, почитаю
Post #: 9
RE: компонент на дельфи - 2009-12-16 17:51:05.843333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Всё намного проще: достаточно найти доки по TPopupMenu в дэлфи. И переопределить метод OnClick (или какой там вызывается при выборе пункта меню): вызвать PlaySound с нужными аргументами и вызвать метод родителя. Собственно всё. Именно поэтому я придумал такое задание для хэлоуворда, чтобы можно было "через точечку" или в визуальном редакторе просмотреть список доступных событий.

P.S. если задание девушке не IT-шной специальности - то может там совсем не стоит создавать новый компонент? Т.е. твой изначальный путь был верен :), просто ты не разобрался с событиями в дэлфи.
В общем я вижу так (на пальцах): формочка, попап-менюшка с некоторым количеством контента, и свой обработчик OnClick ;), или WM_LBUTTONDOWN (ну или по синонимам).

P.P.S. совершенно ничего против 1С не имею (и против твоих знаний). Особенно против 8-й :), глядишь, к 9-й версии вообще станет достаточно мощным, профессиональным инструментом (для программистов).

А с рсдн-а я бы советовал это (чтобы долго не искать):
1. http://rsdn.ru/summary/3165.xml
2. http://rsdn.ru/article/Delphi/makecomponents.xml

Я сам на дэлфи только пару раз писал, да и то юниты, напичканные API вызовами. С GUI работать не приходилось.
Post #: 10
RE: компонент на дельфи - 2009-12-18 18:07:00.446666   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: _SaZ_

Я тз тоже не понял.

Тебе нужно свой компонент написать с нуля? Или стандартного хватит? Зачем метод popup переопределять? Ведь он отвечает за отображение меню, а не за обработку действия пользователя.
Какая должна быть зависимость между номером выбранного элемента и играемым звуком? Ведь юзер может добавить 100500 пунктов - и твоему компоненту как-то придётся на это реагировать.

Знания твои придётся оценить на примере хэллоу-ворда, поскольку сложность вопроса не очень высока (на уровне 1-го курса универа) и ты никаким образом не намекнул на то, что ты знаешь. Просто сложно что-то советовать… Давай так, ты сможешь по нажатию левой кнопки мыши на формочке вывести попап-менюшку с 4-мя пунктами и при выборе пункта вызвать мессаджбокс, в котором будет сказано, какой ты пункт меню выбрал?

А вообще, как я понял задание, тебе нужно:
Написать свой компонент наподобие выпадающего меню, элементами которого будут являться тоже некоторые, разработанные тобой компоненты (назовём их TMusicMenuItem). Так вот, твоя задача - задача: расширить стандартный компонент с меню таким образом, чтобы в него в качестве пунктов можно было кидать эти самые TMusicMenuItem. А уже у самого TMusicMenuItem должно быть 3 свойства (или как там в дэлфи): TextValue (к примеру - отображаемый текст), Action (действие по клику), BGSound (путь к звуковому файлу, который нужно играть).

Советую www.rsdn.ru

Вот совершенно правильно.
Нужно унаследовать TMenuItem и немного переписать конструктор для TPopupMenu.
Хотя писать компонент - нерационально. Можно хелперами воспользоваться…

И то, при условии, что нужно переопределять функционал компонента, а не просто написать банальный обработчик событий
Post #: 11
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> компонент на дельфи







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.