Size: a a a

2020 February 14

DB

Dmitry Belkevich in Delphi & Lazarus
и на этом мы, бывает, летаем ) с другой стороны, с чего там будет лучше, если везде так
источник

SB

Sergey Bodrov in Delphi & Lazarus
Неохота читать, многабукв. Лучше пойду на стенд, гляну как там новая версия трещит от нагрузок.
источник

DV

Denis Vasilyev in Delphi & Lazarus
Ребята, вопрос, какой вам вариант больше нравится? и считаете правильней и понятней :)
1)
begin
 if ssLeft in Shift then begin
   (Sender as TControl).Left := (Sender as TControl).Left + X - FX;
   (Sender as TControl).Top := (Sender as TControl).Top + Y - FY;
 end;

2)
var
 cn: TControl absolute Sender;
begin
 if not (Sender is TControl) then exit;
 if ssLeft in Shift then begin
   cn.Left := cn.Left + X - FX;
   cn.Top := cn.Top + Y - FY;
 end;

3)
предложить свой вариант :)
источник

SB

Sergey Bodrov in Delphi & Lazarus
Попробовал еще такой вариант записи в строку:
Write(f, 'int=', i, ' str=', s, ' hex=', IntToHex(i, 4));
где f - это TextFile, перенаправленный в TStringStream. Скорость примерно такая же, как у Format().
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Denis Vasilyev
Ребята, вопрос, какой вам вариант больше нравится? и считаете правильней и понятней :)
1)
begin
 if ssLeft in Shift then begin
   (Sender as TControl).Left := (Sender as TControl).Left + X - FX;
   (Sender as TControl).Top := (Sender as TControl).Top + Y - FY;
 end;

2)
var
 cn: TControl absolute Sender;
begin
 if not (Sender is TControl) then exit;
 if ssLeft in Shift then begin
   cn.Left := cn.Left + X - FX;
   cn.Top := cn.Top + Y - FY;
 end;

3)
предложить свой вариант :)
2) вроде норм
источник

DB

Dmitry Belkevich in Delphi & Lazarus
не уверен насчет абсолюта, можно и без него. но и так пойдет
источник

SP

Sergey Pechenko in Delphi & Lazarus
Denis Vasilyev
Ребята, вопрос, какой вам вариант больше нравится? и считаете правильней и понятней :)
1)
begin
 if ssLeft in Shift then begin
   (Sender as TControl).Left := (Sender as TControl).Left + X - FX;
   (Sender as TControl).Top := (Sender as TControl).Top + Y - FY;
 end;

2)
var
 cn: TControl absolute Sender;
begin
 if not (Sender is TControl) then exit;
 if ssLeft in Shift then begin
   cn.Left := cn.Left + X - FX;
   cn.Top := cn.Top + Y - FY;
 end;

3)
предложить свой вариант :)
На мой взгляд, первый вариант правильней, так как ты не закладываешься на размещение структур в памяти, но там пропущена проверка на
Sender is TControl
источник

DB

Dmitry Belkevich in Delphi & Lazarus
var
 cn: TControl;
begin
 if Sender is TControl then
  cn := Sender
 else
  exit;
 if ssLeft in Shift then begin
   cn.Left := cn.Left + X - FX;
   cn.Top := cn.Top + Y - FY;
 end;
источник

SB

Sergey Bodrov in Delphi & Lazarus
С точки зрения языка и здравого смысла правильнее через 'as'. Но на деле через absulete проще и безопаснее.
Я обычно делаю как у Dmitry Belkevich
источник

DB

Dmitry Belkevich in Delphi & Lazarus
можно сделать так. но разницы в реальности с вариантом два я думаю не будет вообще никогда
источник

DV

Denis Vasilyev in Delphi & Lazarus
Т.е эти два варианта идентичны? Мне если честно второй вариант нравится потому что меньше кода :)
1)
var
 cn: TControl;
begin
 if Sender is TControl then
  cn := TControl(Sender)
 else
  exit;
...

2)
var
 cn: TControl absolute Sender;
begin
 if not (Sender is TControl) then exit;
...
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Оставь второй. По идее должно быть всё ок
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Условие должно отсечь всё лишнее
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Если что-то не отсечется, то оба варианта одинаково плохо сработают
источник

DB

Dmitry Belkevich in Delphi & Lazarus
И, да, там на присвоении в моем варианте надо тип привести. Ну вдруг кто читать будет ещё
источник

DV

Denis Vasilyev in Delphi & Lazarus
Dmitry Belkevich
И, да, там на присвоении в моем варианте надо тип привести. Ну вдруг кто читать будет ещё
да, точно, подправил ))
источник

AS

Alexey Shumkin in Delphi & Lazarus
Denis Vasilyev
Ребята, вопрос, какой вам вариант больше нравится? и считаете правильней и понятней :)
1)
begin
 if ssLeft in Shift then begin
   (Sender as TControl).Left := (Sender as TControl).Left + X - FX;
   (Sender as TControl).Top := (Sender as TControl).Top + Y - FY;
 end;

2)
var
 cn: TControl absolute Sender;
begin
 if not (Sender is TControl) then exit;
 if ssLeft in Shift then begin
   cn.Left := cn.Left + X - FX;
   cn.Top := cn.Top + Y - FY;
 end;

3)
предложить свой вариант :)
Оформи код как "код" .форматни в телеге, в смысле
источник

AS

Alexey Shumkin in Delphi & Lazarus
Denis Vasilyev
Ребята, вопрос, какой вам вариант больше нравится? и считаете правильней и понятней :)
1)
begin
 if ssLeft in Shift then begin
   (Sender as TControl).Left := (Sender as TControl).Left + X - FX;
   (Sender as TControl).Top := (Sender as TControl).Top + Y - FY;
 end;

2)
var
 cn: TControl absolute Sender;
begin
 if not (Sender is TControl) then exit;
 if ssLeft in Shift then begin
   cn.Left := cn.Left + X - FX;
   cn.Top := cn.Top + Y - FY;
 end;

3)
предложить свой вариант :)
3
, как у Дмитрия (но с отступами по Borland/Embarcadero code-style 😁)
источник

AS

Alexey Shumkin in Delphi & Lazarus
Denis Vasilyev
Т.е эти два варианта идентичны? Мне если честно второй вариант нравится потому что меньше кода :)
1)
var
 cn: TControl;
begin
 if Sender is TControl then
  cn := TControl(Sender)
 else
  exit;
...

2)
var
 cn: TControl absolute Sender;
begin
 if not (Sender is TControl) then exit;
...
"если ты можешь это сделать, ещё не значит, что должен" :)
источник

D

Darlok(Artem) in Delphi & Lazarus
Имхо, но обращаться к компоненту посредством Sender'a - плохая, как никак, практика. Вдруг там злобный коллега засунул свою реализацию контрола или, что ещё хуже, вызвал метод и скормил в него nil? Плюс это вносит неясность когда идёт обращение. Кто там в том Sender'e, что он там делает, как это происходит? Как говорит Гвидо Ван Россум и его одно из правил питона: "Явное лучше неявного". Потому я голосую за 3-й вариант :D
источник