Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2008, 22:22   #1
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию Оптимизировать код

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

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.ScrollBar s.Slave).Width) then
begin
Result := Point(1, 0);
SetTimer(
Handle, FKeyId_TranslocateIn,
const_def_DELAYTRANSLOCATEIN, FlpTimerFunc);
end
else
if (Y > FDownCtrl.Height -
TCustomRangeBar(FDownCtrl.ScrollBar s.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;
NeiL вне форума Ответить с цитированием
Старый 21.02.2008, 08:33   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Я бы сделал так:

Для начала разобьем плоскость на 9 областей и произвольно пронумеруем их

1|2|3
------
4|5|6
------
7|8|9

Определим, в какую область попадает точка:

Код:
function ReceivePoint: TPoint;
var N : integer;
begin
    if x < 0 then begin
        if        y < 0 then N := 1
        else if  y < FDownCtrl.Height then N := 4
        else N := 7             
    end else 
    if x <= FDownCtrl.Width then begin
        if        y < 0 then N := 2
        else if  y < FDownCtrl.Height then N := 5
        else N := 8             
    end else 
    begin
        if        y < 0 then N := 3
        else if  y < FDownCtrl.Height then N := 6
        else N := 9             
    end;
Далее действия в зависимости от того, в какую область попадает точка

Код:
case N of 
    1 : result := point(-1, 0)
    ...
end;
Код:
if N = 5 
then KillTimer(Handle, FKeyId_TranslocateIn)
else SetTimer(Handle, FKeyId_TranslocateIn, const_def_DELAYTRANSLOCATEIN, FlpTimerFunc);
И еще, Ваша функция возвращает point(1, 0). Видимо это какой то признак. Можно сразу вернуть N (в моем примере номер области) и измениль логику кода, который вызывает ReceivePoint.

Последний раз редактировалось alexBlack; 21.02.2008 в 08:44.
alexBlack вне форума Ответить с цитированием
Старый 21.02.2008, 08:57   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ябы просто аккуратно это переписал:
Код:
function ReceivePoint: TPoint;
begin
if X < 0 then Result := Point(-1, 0) else
 if Y < 0 then Result := Point(0, -1) else
  if (X > FDownCtrl.Width -TCustomRangeBar(FDownCtrl.ScrollBars.Slave).Width) then Result := Point(1, 0) else
    if (Y > FDownCtrl.Height -TCustomRangeBar(FDownCtrl.ScrollBars.Master).Heigh t) then Result := Point(0, 1);

if KillTimer(Handle, FKeyId_TranslocateIn)=0 then SetTimer(Handle, FKeyId_TranslocateIn,
const_def_DELAYTRANSLOCATEIN, FlpTimerFunc);
end;
I'm learning to live...

Последний раз редактировалось Stilet; 21.02.2008 в 09:04.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите оптимизировать процедуру Cold Went Компоненты Delphi 4 29.04.2008 15:11
Оптимизировать перегрузку операторов Иллидан Общие вопросы C/C++ 14 24.04.2008 11:18
Помогите оптимизировать! Altera Общие вопросы Delphi 6 25.03.2008 20:09
как может оптимизировать в фунцию? w1ze Помощь студентам 2 07.01.2008 23:19
Помогите оптимизировать сайт Nadejda HTML и CSS 4 07.01.2007 21:04