![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравствуйте!
Пара вопросов по RadioButton. 1. Есть ли автосвязанные батоны, когда добавив хоть 100 штук на форму - автоматически контролируется, что выбранным может быть только один батон? 2. Если нужно не только выбрать лишь один из вариантов, но и скрыть все неактуальные для данного варианта поля ввода - есть ли что-то более автоматизированное, чем радио батоны? (типа вкладок с ограничением выбора одной вкладки, или тп) 3. Как наиболее кратко написать аналогичное действие на радио батон для скрытия полей? Я пишу так, но утомляет кол-вом строк EditField1.Enabled := rb1.Checked; EditField2.Enabled := rb1.Checked; EditField3.Enabled := rb1.Checked; Можно ли это как-то в одну строку? типа [EditField1,EditField2,EditField3].Enabled := rb1.Checked; ? 4. Также что-то не могу понять как написать обращение boolean переменной? То есть если "a :=true", как "b" присвоить значение обратное "a", то есть false в одну строку? Последний раз редактировалось delphicoding, 21.07.2011 в 17:46. |
#2
|
|||
|
|||
![]() 1. Если RadioButton на одном и том же родителе то ты сможешь использовать только один.
2. Не выехал, но предполагаю что в стандартных средсвах нет. 3. Цыкл с использованием FindComponent 4. Код:
function ObrBool(B:Boolean):Boolean; begin if B then Result:=false else Result:=true; end; |
#3
|
|||
|
|||
![]() 1. Ок
2. ![]() 3. Не катит, тк объекты на форме с разным названием, просто в примере написал с разными цифрами. Нужно именно перечисление через запятую или типа того. Может массив создать? Но хотелось бы проще... 4. Ой как страшно. А в одно действие в Delphi никак что-ли?!?!?! |
#4
|
|||
|
|||
![]() 2. Заводишь массив, в котором описываешь варианты и соответсвующие связи. Потом у еомпонентов расставляешь св-во Tag. Ну а дальше при выборе варианта в соотв. со свойством Tag и вышеописанной таблицы просто скрываешь все ненужные компоненты (цикл по всем компонентам).
3. Если радиокнопка и соов. Edit имеют одинаковую схему названия, то соотв. можно на основе одного название сконструировать другой и потом findComponent. Еще есть TActionList. Может получится его задействовать. 4. Код:
B := Not B; |
#5
|
|||
|
|||
![]() 2. Ну это да, массив... думал может можно побыстрее как-то одним действим через запятую. Типа "SetAll (Field1,Filed2,Field3+[.Enable]) := False", жалко, что нет такой конструкции
![]() 3. FindComponent да, но названия разные, лучше назвать нормально, чем потом ковыряться пытаясь понять что обозначает название Tlabel100500. TActionList похоже не подходит, да и разницы видимо нет со списком/массивом в коде, а поскольку это компонент формы - код будет хуже читаться. 4. Круто, я знал, что такое должно быть! Спасибо. ![]() |
#6
|
|||
|
|||
![]() Кстати в продолжение темы со скрытием объектов, подскажите, пожалуйста, для ряда объектов, например TDBEdit, TJvDBSpinEdit, TJvDBComboBox, идр, не подходит строка вида:
TDBEdit1.Value=null; Как правильно очищать такие объекты от значений? |
#7
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#8
|
|||
|
|||
![]() Цитата:
2. Ну, например, можно изголяться так: Код:
const A : Array [1..2] Of Array [1..5] Of String = (('Edit1','Edit2','Edit3','Edit4','Edit5'), ('Edit1','edMyEdit','TheOtherEdit','','')); procedure TForm1.SetMyControls(ACaseNumber : Integer); var I : Integer; begin For I := 1 To 5 Do If A[ACaseNumber,I] <> '' Then (FindComponent(A[ACaseNumber,I]) As TEdit).Enable := True; end; Код:
procedure TForm1.SetMyControls(AValue : Boolean; ANames : Array Of String); var I : Integer; begin For I := Low(ANames) To High(ANames) Do (FindComponent(ANames[i]) As TEdit).Enabled := AValue; end; 3. Вот тебе пара названий: Код:
rbDoThis : TRadioButton; edDoThis : TEdit; rbDoThat : TRadioButton; edDoThat : TEdit; Соотв, можно написать что-то вроде этого: Код:
procedure TForm1.rbClick(Sender : Tobject); var AName : String; begin AName := (Sender As TRadioButton).Name; AName[1] := 'e'; AName[2] := 'd'; (FindComponent(AName) As TEdit).Enabled := (Sender As TRadioButton).Checked; end; И присвоить его всем кнопкам. Соотв. при смене состояния кнопка найдет соотв. компонент и сделает все что нужно. |
#9
|
||||
|
||||
![]() Цитата:
Зачот, парень! ![]() — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#10
|
||||
|
||||
![]() Цитата:
А можно 4. проще Код:
function ObrBool(B:Boolean):Boolean; begin Result:= not B; end; |