Главная страница
    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.48 MB
Время: 0.007 c
2-1203512226
Tetri
2008-02-20 15:57
2008.03.23
Работа с термопарами/манометрами через com или usb


8-1177567835
givigudze
2007-04-26 10:10
2008.03.23
Звук м,е,


15-1202490531
@!!ex
2008-02-08 20:08
2008.03.23
Проверка орфографии в OpenOffice


4-1178650355
Strate
2007-05-08 22:52
2008.03.23
Опять ListView, изменение колонки.


2-1203513538
..::KraN::..
2008-02-20 16:18
2008.03.23
Вставка картинки в Synedit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский