![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Цитата:
|
|
#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
|
||||
|
||||
|
Цитата:
Зачот, парень! ![]() |
|
#10
|
||||
|
||||
|
Цитата:
А можно 4. проще Код:
function ObrBool(B:Boolean):Boolean; begin Result:= not B; end; |