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

Вниз

ошибка в WndProcGradientEx   Найти похожие ветки 

 
Don ©   (2006-12-06 15:26) [0]

function Ceil( X: Double ): Integer;
begin
 Result := Round( X ) + 1;
end;
Этот код неправильно работает, лучше заменить на:

function Ceil( X: Double ): Integer;
begin
 if X < 0 then
   Result := Trunc(X-0.5)
 else
   Result := Trunc(X+0.5);
end;

Можно вынести как отдельную функцию (корректное округление)


 
Don ©   (2006-12-06 15:34) [1]

Еще используются процедуры ExtSelectClipRgn, но нигде нет обнуления. Соответсвенно, при вызове fOnPaint2, fOnPaint рисовние будет происходить в последнем выделенном регионе... я бы добавил перед проверкой и вызовом fPaint2  SelectClipRgn(Self_.fPaintDC, 0);
 // дальше как и было
 if TMethod( Self_.fOnPaint2 ).Code = @ DummyPaintClear then
   Self_.fOnPaint2 := TOnPaint( MakeMethod( nil, @ DummyPaintProc ) );
 if Assigned( Self_.fOnPaint ) then
   Self_.fOnPaint( Self_, Self_.fPaintDC );
 ...


 
Vladimir Kladov   (2006-12-06 16:35) [2]

скажите, на каких исходных параметрах эта ошибка с ceil проявляется, чтобы это было заметно для глаза.


 
GMax   (2006-12-07 01:37) [3]

если я правильно понимаю что такое Ceil и Round, то Round(15.9)+1=17, а классический Ceil(15.9)=16. исправляется заменой Round на Trunc.

но исправленный Don"ом вариант тоже не верен. здесь как раз вместо Trunc должен быть Round :)


 
Galkov ©   (2006-12-07 09:12) [4]


> если я правильно понимаю что такое Ceil и Round


Можно попытаться исходить из какого-нибудь определения... Нашел такое:

> 17.12.10 ceil
> Synopsis: Return the lowest integer number greater than or equal to argument
> Declaration: function ceil(x: float) : Integer
> Visibility: default
> Description: Ceil returns the lowest integer number greater than or equal to x. > The absolute value of x should be less than maxint.
> Errors: If the asolute value of x is larger than maxint,  an overflow error will occur.


Но тогда правильно будет именно так:
function Ceil( X: Double ): Integer;
begin
Result := Trunc(X)
if Frac(X) > 0 then
  inc(Result);
end;


Ну это так, отвлечение на абстракцию :))


 
Don ©   (2006-12-07 10:23) [5]

При рисовании градиента со стилями gsElliptic, gsRombic, gsRectangle  с цветами
Color1 = RGB ($FF, $FF, $00 ) и
Color2 = RGB ($00, $FF, $FF )
рисуется градиент с абсолюно другими цветами, в частности не учитывается зелёный цвет. При вычислении с использованием Ceil зеленый цвет получается 256. А должен быть 255. Можно еще посмотреть градиент с цветами $FF0000-$FE0000.
По поводу функции, может и ошибся. Надо вообще Ceil убрать и вызывать Round вместо него, в этом случае все в порядке.


 
Vladimir Kladov   (2006-12-07 16:33) [6]

действительно, уголок видно, и при первом исправлении тоже. Просто Round чище получается.



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.079 c
2-1182513679
cosinus
2007-06-22 16:01
2007.07.22
Помогите с EnumChildWindows ...


9-1156801560
Pierre
2006-08-29 01:46
2007.07.22
Пишу игру Bowling мужна идея падения кегли при сбивании.


3-1177055878
Saro
2007-04-20 11:57
2007.07.22
!!! Вывод графики в DBGrid !!!!


2-1182861958
Tack
2007-06-26 16:45
2007.07.22
Как узнать, пуст ли буфер обмена Windows в настоящий момент?


15-1182636847
Nic
2007-06-24 02:14
2007.07.22
Есть тут кто?





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