Форум: "Начинающим";
Текущий архив: 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.005 c