Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2007, 22:30   #1
Dimitriys
 
Регистрация: 26.11.2006
Сообщений: 6
По умолчанию Как автоматически создать процедуры для множества подменю компонента TMainMenu

В общем столкнулся с такой проблемой. Делаю тест, в нём есть меню, сделано с помощью объекта TMainMenu. Там есть 5 пунктов, в которых существует по 20 подпунктов (названия тестов), мне надо как-то сделать так, чтобы не открывать каждую процедуру (не создавать по одной), а сделать это как-нибудь в цикле (как-нибудь программно), т.к. там будут выполняться практически одни и те же действия. Спасибо всем кто постарается помочь.
Dimitriys вне форума Ответить с цитированием
Старый 28.04.2007, 01:53   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Выделяешь все пункты меню с помощью Ctrl и в инспекторе объектов кликаешь по onClick. Таким образом ты создашь один, общий обработчик для всех пунктов меню. Пишем код:

Код:
procedure TForm1.N2Click(Sender: TObject);
begin
if (sender as TMenuItem).MenuIndex = 0
then Application.MessageBox('Получилось!', 'Упс...', mb_OK);
end;
В общем думаю идея понятна...
Баламут вне форума Ответить с цитированием
Старый 28.04.2007, 02:13   #3
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

Я бы предложил чуть поконкретней:
Каждому меню проставить свой Tag, дальше как посоветовал Баламут создать единый обработчик и в нем написать:
procedure TForm1.N2Click(Sender: TObject);
begin
case (Sender as TMenuItem).Tag of
0: <пишешь что надо>
end;
end;
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Старый 28.04.2007, 04:42   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

А по мне так использовать Tag излишне. MenuIndex и так однозначно идентифицирует пункт меню. А потому конструкция типа

case (sender as TMenuItem).MenuIndex of
0: ...
1: ...
end;

вполне имеет право на существование.
Баламут вне форума Ответить с цитированием
Старый 28.04.2007, 12:13   #5
Dimitriys
 
Регистрация: 26.11.2006
Сообщений: 6
По умолчанию

Есть проблемка. В общем у меня в меню есть пункты с названиями 1201, 2105, 1111 и т.д. В них есть 20 пунктов с названиями тестов. Мне надо, чтобы выполнилось действие не тогда, когда я нажимаю на 1201, 2105 и т.д., а чтобы оно выполнилось, когда я нажму на название теста. У меня не получилось сделать так =\ Можете, помогите.
Dimitriys вне форума Ответить с цитированием
Старый 28.04.2007, 12:19   #6
Dimitriys
 
Регистрация: 26.11.2006
Сообщений: 6
По умолчанию

Всё я сделал, спасибо всем за помощь =)
У меня есть только ещё один вопрос, как сделать защиту для текстового файла? У меня там находятся вопросы, ответы, номер правильного ответа и т.д. Как можно защитить?
Dimitriys вне форума Ответить с цитированием
Старый 28.04.2007, 14:16   #7
Killer_djon
Форумчанин
 
Регистрация: 26.04.2007
Сообщений: 143
По умолчанию Как можно защищать

А защищать можно несколькими способам, я к примеру предпочитаю шифрование, так называемое криптография... берешь тектовый файл, считываешь его побайтно, и начиная с первого байта шифруешь т.е. производишь какую либо операцию :

var b: byte;
key : string;
...
key:='test';
...
read(fn, xb) // считывание файла побайтно
//запускаешь цикл до последнего байта и в теле цикла пишешь
...
xb:= xb XOR ord(key[i]); // сама операция шифровани

Ну конечно это самый простой метод, но дети наврядли догадаются (если они конечно не программеры со стажем)...
Свободу клавиатурным самураям...
Killer_djon вне форума Ответить с цитированием
Старый 28.04.2007, 18:19   #8
Dimitriys
 
Регистрация: 26.11.2006
Сообщений: 6
По умолчанию

Мне как раз-таки и нужен простой метод, но шифрование я думаю не подойдёт, т.к. необходимо будет изменять данные.. Надо рассчитывать на то, что это (изменять данные) будет делать не очень хорошо знающий компьютер человек (учитель).
Dimitriys вне форума Ответить с цитированием
Старый 02.05.2007, 01:08   #9
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Ну так сделай интерфейс для изменения текстов, доступ в который предоставляется по паролю. А защитить чем-то иным, кроме шифрования действительно проблематично.
Баламут вне форума Ответить с цитированием
Старый 13.01.2011, 18:02   #10
Berszet
Новичок
Джуниор
 
Регистрация: 21.11.2010
Сообщений: 2
По умолчанию

У меня аналогичное задание почти. Раз ты сделал, то наверное можешь помочь.
У меня вопрос как ты сделал так, чтобы при нажатии на пункт меню отображался нужный вопрос вариантами из текстового файла?
Berszet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно изменить цвет полосы меню компонента TMainmenu на форме? SkAndrew Общие вопросы Delphi 6 11.08.2008 17:35
Поиск динамически созданного компонента GAGARIN-NEW Общие вопросы Delphi 2 30.01.2008 17:21
Поиск динамически созданного компонента GAGARIN-NEW Компоненты Delphi 2 16.12.2007 17:07
динамически создать подключение через ADO А. Долматов БД в Delphi 8 16.10.2007 20:08
TMainMenu и его подменю Albenous Компоненты Delphi 3 06.02.2007 07:03