2013-08-23 11 views
0

Моя форма содержит некоторые компоненты, именование следует простое соглашение ...Free Pascal использовать цикл для определения видимости компонента на основе статуса Дата компонента

date1, date2, date3, date4, date5 

check1, check2, check3, check4, check5 

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

Я пытаюсь сделать это со следующим кодом, и все компилируется, но я не могу настроить таргетинг на компоненты, по-видимому, потому, что он пытается изменить переменную, а не компонент. Неужели я об этом совершенно не так?

var 
    dateVar : variant; 
    checkVar : variant; 
    x : integer; 

// Set visibility of checkboxes and docs 
x := 0; 
dateVar := 'area.Date' + IntToStr(x); 
checkVar := 'area.Check' + IntToStr(x); 

for x:=1 to 5 do 
    begin 
    if dateVar > '00:00:00' then // Does FPC support the != or not equal to context? 
     checkVar.Visibility := False 
    else 
     checkVar.Visibility := True; 
    end; 

ответ

2

Вы можете перебирать компоненты через FindComponent. В примере ниже «Я», так как форма предоставляется как «Владелец».

Procedure SetChecks(AOwner:TComponent); 
var 
    x:Integer; 
begin 
for x:=1 to 5 do 
    TCheckBox(AOwner.FindComponent('check' + IntToStr(x))).Visible := 
    TDateEdit(AOwner.FindComponent('date' + IntToStr(x))).Date <>StrToDateTime('00:00:00');  
end; 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
    SetChecks(Self); 
end; 
+1

Хотя вы могли бы сделать это, было бы намного лучше в массиве –

+0

@DavidHeffernan лично я предпочитаю (Object) Список для таких случаев, как они, тем не менее, мне казалось, что-то слишком обширным, как ответ здесь , – bummi

+0

Список хороший. Это всего лишь массив с колокольчиками и свистами. По сути, это просто контейнер с последовательным индексированием, как и массив. Фактически, списки Delphi все неправильно названы. Список терминов следует использовать для связанного списка. –

 Смежные вопросы

  • Нет связанных вопросов^_^