Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.23;
Скачать: CL | DM;

Вниз

Оптимизация   Найти похожие ветки 

 
Leha1987   (2008-02-20 22:28) [0]

Господа мастера, как можно оптимизировать нижеописанный код:

function ReceivePoint: TPoint;
begin
  if X < 0 then
  begin
    Result := Point(-1, 0);
    SetTimer(
    Handle, FKeyId_TranslocateIn,
      const_def_DELAYTRANSLOCATEIN, FlpTimerFunc);
  end
  else
  if Y < 0 then
  begin
    Result := Point(0, -1);
    SetTimer(Handle, FKeyId_TranslocateIn,
      const_def_DELAYTRANSLOCATEIN, FlpTimerFunc);
  end
  else
  if (X > FDownCtrl.Width -
      TCustomRangeBar(FDownCtrl.ScrollBars.Slave).Width) then
  begin
    Result := Point(1,  0);
    SetTimer(
    Handle, FKeyId_TranslocateIn,
      const_def_DELAYTRANSLOCATEIN, FlpTimerFunc);
  end
  else
  if (Y > FDownCtrl.Height -
       TCustomRangeBar(FDownCtrl.ScrollBars.Master).Height) then
  begin
    Result := Point(0,  1);
    SetTimer(Handle, FKeyId_TranslocateIn,
      const_def_DELAYTRANSLOCATEIN, FlpTimerFunc);
  end
  else
  begin
    KillTimer(Handle, FKeyId_TranslocateIn);
  end;
end;


 
Loginov Dmitry ©   (2008-02-20 22:50) [1]

Поскольку не знаю, накой здесь нужно этот таймер, то предложу избавиться прежде всего от него.


 
Johnmen ©   (2008-02-20 22:52) [2]

Есть сильное предположение, что логика получения Result неверна. Нет "симметрии".


 
Leha1987   (2008-02-20 23:06) [3]

функция  вызывается на событии OnMouseMove и определяет параметры приращения шага по осям x, y Result(x,y). Короче, отслеживается выход курсора мыши за пределы контрола (ImgView32) в 4 возможных случаях ( Left, Top, Right, Bottom). Таймер определяет через какой промежуток времени скролбар будет менять позицию.  В случае если курсор мыши выходит, скролим изображение на приращиваемый шаг.


 
KilkennyCat ©   (2008-02-20 23:13) [4]

function ReceivePoint: TPoint;
var
 zx, zy : integer;
begin
 zx := 0;
 zy := 0;
 if X < 0 then zx := -1 else
 if Y < 0 then zy := -1 else
 if (X > FDownCtrl.Width - TCustomRangeBar(FDownCtrl.ScrollBars.Slave).Width) then zx := 1 else
 if (Y > FDownCtrl.Height - TCustomRangeBar(FDownCtrl.ScrollBars.Master).Height) then zy := 1 else begin
   KillTimer(Handle, FKeyId_TranslocateIn);
   exit;
 end;
 Result := Point(zx, zy);
 SetTimer(Handle, FKeyId_TranslocateIn, const_def_DELAYTRANSLOCATEIN, FlpTimerFunc);
end;


не скажу, что оптимизация, но читать проще. можно и еще проще...


 
Johnmen ©   (2008-02-20 23:14) [5]

Тогда однозначно, что логика кривая.


 
KilkennyCat ©   (2008-02-20 23:15) [6]

Да, кстати, при попадании в последнее условие функция фигню вернет....


 
KilkennyCat ©   (2008-02-20 23:16) [7]

> [5] Johnmen ©   (20.02.08 23:14)
> Тогда однозначно, что логика кривая.


ну почему же... может, нужна задержка?


 
Игорь Шевченко ©   (2008-02-20 23:17) [8]


>  if X < 0 then zx := -1 else
>  if Y < 0 then zy := -1 else
>  if (X > FDownCtrl.Width - TCustomRangeBar(FDownCtrl.ScrollBars.
> Slave).Width) then zx := 1 else
>  if (Y > FDownCtrl.Height - TCustomRangeBar(FDownCtrl.ScrollBars.
> Master).Height) then zy := 1 else begin
>    KillTimer(Handle, FKeyId_TranslocateIn);
>    exit;
>  end;


Читать просто невозможно. Вот если бы esle был под if-ом, тогда читать несколько проще


 
KilkennyCat ©   (2008-02-20 23:19) [9]

> [8] Игорь Шевченко ©   (20.02.08 23:17)

 знаю. лень было :)


 
Johnmen ©   (2008-02-20 23:19) [10]


> KilkennyCat ©   (20.02.08 23:16) [7]

Потому, что координаты X и Y должны быть "симметричны".
А это не так...


 
KilkennyCat ©   (2008-02-20 23:23) [11]

> Johnmen ©   (20.02.08 23:19)

гм... наверное.
Я что-то не допонял.
Имеешь ввиду, что могут сроаботать два условитя, а отработает только первое?


 
Johnmen ©   (2008-02-20 23:30) [12]


> KilkennyCat ©   (20.02.08 23:23) [11]

Вот, на пальцах:
Есть вариант чистого условия X < 0 (первое). Почему же нет чистого условия Y < 0???
Почему оси координат неравноправны?


 
KilkennyCat ©   (2008-02-20 23:32) [13]

> [12] Johnmen ©   (20.02.08 23:30)

ага, я так и понял. согласен.


 
homm ©   (2008-02-20 23:35) [14]

> [0] Leha1987   (20.02.08 22:28)

Обалденный код. Ты в курсе, что тебе MemProof выдаст?


 
Leha1987   (2008-02-20 23:43) [15]


> Обалденный код. Ты в курсе, что тебе MemProof выдаст?
>


Никаких ошибок не выдает все работает как и надо.
Но не оптимизировано.


 
Германн ©   (2008-02-21 00:56) [16]

Удалено модератором


 
KilkennyCat ©   (2008-02-21 03:20) [17]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2008.03.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
15-1202821756
TankMan
2008-02-12 16:09
2008.03.23
Информация по написанию гаджетов....


3-1194080441
aa
2007-11-03 12:00
2008.03.23
ADO Connection


2-1203861728
batya-x
2008-02-24 17:02
2008.03.23
мерцание на Timage


2-1203688480
Igor23
2008-02-22 16:54
2008.03.23
Excel


15-1202597190
Андрей
2008-02-10 01:46
2008.03.23
разбирайте кто хочет