Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
2-1203486854
серж
2008-02-20 08:54
2008.03.23
ComboBox


9-1168206700
akaValerius
2007-01-08 00:51
2008.03.23
Направление движения при повороте


15-1202736092
clickmaker
2008-02-11 16:21
2008.03.23
IContextMenu и AV


8-1177430973
Sholah_Weras
2007-04-24 20:09
2008.03.23
PNG с альфа каналом в DDS.


2-1202884430
Alex
2008-02-13 09:33
2008.03.23
Новый обработчик иконки help окна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский