Форумы-->Форум для внеигровых тем-->
Автор | Помнит кто-нибудь ещё 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;
В экшенах помимо процедуры указывается название и активность элемента, поэтому, отдельно изменять название кнопки и активность/неактивность может не потребоваться. |
К списку тем
|