pupsik писал(а):А кто его знает. Писал на глаз.
Функция проста по логике и мала по тексту.
Значит, городить огород ради некой "правильности" - глупо. По моему личному мнению.
Модератор: Модераторы
pupsik писал(а):А кто его знает. Писал на глаз.
sign писал(а):Не понимаю, чего боятся некоторых конструкций языка?
Я вот так всегда пишу, удобно и всё ясно:
- Код: Выделить всё
function TSheet.IconFocus: TIBase;
var i: Integer;
begin
for i := 0 to FSBox.ControlCount-1 do
if (FSBox.Controls[i] is TIBase) and (TIBase(FSBox.Controls[i]).Status=csFocus)
then Exit(TIBase(FSBox.Controls[i]));
Result := nil;
end;

pupsik писал(а):А кто его знает. Писал на глаз.
- Код: Выделить всё
function TSheet.IconFocus: TIBase;
var
i: Integer;
a_a : boolean;
begin
Result := nil;
i := 0;
a_a := False;
repeat
if FSBox.Controls[i] is TIBase) and (TIBase(FSBox.Controls[i]).Status=csFocus then
a_a := True;
inc(i);
until a_a or i := FSBox.ControlCount-1;
if not a_a then
Result := nil
else
Result := TIBase(FSBox.Controls[i]);
end;
 := 0;
Result := nil;
while ( i < FSBox.ControlCount ) and ( Result = nil ) do begin
    if (FSBox.Controls[i] is TIBase) and (TIBase(FSBox.Controls[i]).Status=csFocus)
    then Result := TIBase(FSBox.Controls[i]);
    inc(i);
end;i:= 0;
Result := nil;
while (i < FSBox.ControlCount) and (FSBox.Controls[i] is TIBase) and (TIBase(FSBox.Controls[i]).Status=csFocus) do
    inc(i);
if i < FSBox.ControlCount then
  Result := TIBase(FSBox.Controls[i]);
dedm0zaj писал(а):недавно использовал гото как выход из системы циклов. это было реально удобно.
Дож писал(а):(2) поменяв простой for-range цикл на repeat-until
 Я код не для правки или обзора давал.... С другой стороны, мне кажется что то лишним: FSBox.Controls[i] is TIBase and TIBase(FSBox.Controls[i]).Status=csFocus.
  Я код не для правки или обзора давал.... С другой стороны, мне кажется что то лишним: FSBox.Controls[i] is TIBase and TIBase(FSBox.Controls[i]).Status=csFocus.  
Mirage писал(а):Дож писал(а):(2) поменяв простой for-range цикл на repeat-until
Вы на полном серьёзе утверждаете, что цикл for, по факту состоящий из присваивания и собственно цикла, проще, нежели просто цикл?
  for i := 0 to FSBox.ControlCount-1 do
    DoSomething;
  i := 0;
  repeat
    DoSomething;
    inc(i);
  until a_a or i := FSBox.ControlCount-1;

Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1