![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация
Leha1987 © (2008-02-20 22:28:00)Господа мастера, как можно оптимизировать нижеописанный код:
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;
KilkennyCat (2008-02-21 03:20:00) [1]Удалено модератором
Германн (2008-02-21 00:56:00) [2]Удалено модератором
Leha1987 (2008-02-20 23:43:00) [3]
> Обалденный код. Ты в курсе, что тебе MemProof выдаст?
>
Никаких ошибок не выдает все работает как и надо.
Но не оптимизировано.
homm (2008-02-20 23:35:00) [4]> [0] Leha1987 (20.02.08 22:28)
Обалденный код. Ты в курсе, что тебе MemProof выдаст?
KilkennyCat (2008-02-20 23:32:00) [5]> [12] Johnmen © (20.02.08 23:30)
ага, я так и понял. согласен.
Johnmen (2008-02-20 23:30:00) [6]
> KilkennyCat © (20.02.08 23:23) [11]
Вот, на пальцах:
Есть вариант чистого условия X < 0 (первое). Почему же нет чистого условия Y < 0???
Почему оси координат неравноправны?
KilkennyCat (2008-02-20 23:23:00) [7]> Johnmen © (20.02.08 23:19)
гм... наверное.
Я что-то не допонял.
Имеешь ввиду, что могут сроаботать два условитя, а отработает только первое?
KilkennyCat (2008-02-20 23:19:00) [8]> [8] Игорь Шевченко © (20.02.08 23:17)
знаю. лень было :)
Johnmen (2008-02-20 23:19:00) [9]
> KilkennyCat © (20.02.08 23:16) [7]
Потому, что координаты X и Y должны быть "симметричны".
А это не так...
Игорь Шевченко (2008-02-20 23:17:00) [10]
> 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:16:00) [11]> [5] Johnmen © (20.02.08 23:14)
> Тогда однозначно, что логика кривая.
ну почему же... может, нужна задержка?
KilkennyCat (2008-02-20 23:15:00) [12]Да, кстати, при попадании в последнее условие функция фигню вернет....
Johnmen (2008-02-20 23:14:00) [13]Тогда однозначно, что логика кривая.
KilkennyCat (2008-02-20 23:13:00) [14]
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;
не скажу, что оптимизация, но читать проще. можно и еще проще...
Leha1987 (2008-02-20 23:06:00) [15]функция вызывается на событии OnMouseMove и определяет параметры приращения шага по осям x, y Result(x,y). Короче, отслеживается выход курсора мыши за пределы контрола (ImgView32) в 4 возможных случаях ( Left, Top, Right, Bottom). Таймер определяет через какой промежуток времени скролбар будет менять позицию. В случае если курсор мыши выходит, скролим изображение на приращиваемый шаг.
Johnmen (2008-02-20 22:52:00) [16]Есть сильное предположение, что логика получения Result неверна. Нет "симметрии".
Loginov Dmitry (2008-02-20 22:50:00) [17]Поскольку не знаю, накой здесь нужно этот таймер, то предложу избавиться прежде всего от него.