Первая серия была тут - http://18delphi.blogspot.com/2013/05/blog-post_6566.html
Я конечно уважаю "Остап Ибрагимыча".
И я могу найти - МИЛЛИОН доводов - почему, код приведённый ниже - написан так, а не иначе. НО! Очень сложно будет убедить меня, что он "не пахнет".
P.S. До придумки Apple в xCode - ShowContextMenuForView, BecomeFirstResponder и CanBecomeFirstResponder - этому коду конечно далеко. Apple - "умнее" - он исходные коды не даёт. А то бы - я наверное многое бы там почерпнул....
P.P.S. А для докинга там есть продолжение. ActiveControl - не всегда в итоге устанавливается. Ибо CanFocus не всегда true.
P.P.P.S Опять спросили "ЗАЧЕМ я всё это пишу". Да ни зачем собственно. Просто чтобы привлечь внимание к вещам, которые меня волнуют. Заставить задуматься. А не потому, что я верю в то, что "кто-то исправит" или "кто-то прислушается". Просто есть хороший повод показать - как я бы делал бы и как я бы не делал бы.
Я конечно уважаю "Остап Ибрагимыча".
И я могу найти - МИЛЛИОН доводов - почему, код приведённый ниже - написан так, а не иначе. НО! Очень сложно будет убедить меня, что он "не пахнет".
Чудесный ужас №2:
.... property ActiveControl: TWinControl read FActiveControl write SetActiveControl stored IsForm; ... procedure TCustomForm.Loaded; var Control: TWinControl; begin inherited Loaded; if ActiveControl <> nil then begin Control := ActiveControl; FActiveControl := nil; if Control.CanFocus then SetActiveControl(Control); end; end;
и ХЕ:
procedure TCustomForm.Loaded; var Control: TWinControl; begin inherited Loaded; if (ActiveControl <> nil) and ((Parent = nil) or not (csDesigning in ComponentState)) then begin Control := ActiveControl; FActiveControl := nil; if Control.CanFocus then SetActiveControl(Control); end;
– называется - "чота мы залатали"... Но глаз - даже не
резануло.. :-( Жалко, что у людей не сработало "чувство запаха".
А ведь 80% этого "ужаса" снялось бы введением метода ForceSetActiveControl.
Но у меня есть МНОГО претензий к коду Borland'а в части обработки фокуса, особенно при наличии докинга.
... to be continued ...
P.S. До придумки Apple в xCode - ShowContextMenuForView, BecomeFirstResponder и CanBecomeFirstResponder - этому коду конечно далеко. Apple - "умнее" - он исходные коды не даёт. А то бы - я наверное многое бы там почерпнул....
P.P.S. А для докинга там есть продолжение. ActiveControl - не всегда в итоге устанавливается. Ибо CanFocus не всегда true.
P.P.P.S Опять спросили "ЗАЧЕМ я всё это пишу". Да ни зачем собственно. Просто чтобы привлечь внимание к вещам, которые меня волнуют. Заставить задуматься. А не потому, что я верю в то, что "кто-то исправит" или "кто-то прислушается". Просто есть хороший повод показать - как я бы делал бы и как я бы не делал бы.
Комментариев нет:
Отправить комментарий