Об игре
Новости
Войти
Регистрация
Рейтинг
Форум
3:46
942
 online
Требуется авторизация
Вы не авторизованы
   Форумы-->Форум для внеигровых тем-->

АвторПомнит кто-нибудь ещё Delphi?
Никогда с ним не работала, тут внезапно потребовалось написать небольшую программу, но не знаю на сколько формы гибки.
Задача примерна такая: есть ~5 кнопок. На них привязаны процедуры 1-5 соответственно. При нажатии, допустим, на 1 кнопку, 4-5 становятся неактивными, на 1-3 меняются надписи, и меняются процедуры, привязанные к ним. Теперь на 1 привязана 17 процедура, на 2 кнопку - 6 и т.д. И вот так процедуры будут присваиваться на кнопки, будут меняться надписи активность/неактивность и т.д. Можно ли это как-то реализовать именно таким образом? (процедурный тип может?..)
Как я понял, суть вопроса - можно ли в рантайме в делфи менять назначать события для объектов?
Можно. Писал как-то прогу, где во время выполнения создавались новые объекты (до бесконечности почти), и им присваивались события. Но не помню уже (сколько раз себе говорил - сохраняй все исходники, ан нет)

Хотя, в конкретной ситуации проще менять лейблы и кнопки местами, юзер все равно не заметит разницы. Но если требуется именно так, то мб тут оно, не проверял:
http://delphiworld.narod.ru/base/rtti_assign_event.html
Можно ли это как-то реализовать именно таким образом? (процедурный тип может?..) Можно, смотри свойства кнопок в оболочке дельфи.
Никогда с ним не работала - ты ж мужик, вроде?
Скинешь нормальное условие задачи, сделаю.
вариант 1)
Можно сделать все это в одном обработчике событий.


вариант 2)
Предположим, есть процедуры:

procedure TForm1.Button1Click(Sender: TObject);
begin
// процедура 1
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
// процедура 2
end;

Тогда:
- Изменить процедуру для кнопки Button1:
Button1.OnClick := Button2Click;
- сделать кнопку неактивной:
Button1.Enabled := false;
- поменять название кнопки:
Button1.Caption := 'Название 2';


вариант 3)
Можно не создавать события для кнопок, а воспользоваться компонентом ActionList, создать нужное количество экшенов и присваивать их кнопкам:
Button1.Action := Action1;
В экшенах помимо процедуры указывается название и активность элемента, поэтому, отдельно изменять название кнопки и активность/неактивность может не потребоваться.
К списку тем
2007-2025, онлайн игры HeroesWM