Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

2Kladov : Bug Fix OnIdle?


ecm ©   (2004-08-17 19:37:00) 

Ув. Владимир я тут вам посылал письмо. По-поводу найденых
ошибок в OnIdle. Может оно не дошло?
Вот его содержание:

Здравствуйте, Vladimir.

Заметил одну "неприятность" в механизме OnIdle.
Может я чего пропустил в форуме, но в последней версии
(я проверил еще раз - скачав V1.90 и применив update 190to192)
предлагаю поправить следующее:

//[function FindIdleHandler]
function FindIdleHandler( const OnIdle: TOnEvent ): integer;
var
 i: integer;
begin
 i := 0;
 if (not AppletTerminated) and (IdleHandlers <> nil) then //+ {Maxim Pushkar}
                           ========================= 1) После UnRegisterIdleHandler список уже может
                                                        быть разрушен!
 with TMethod(OnIdle), IdleHandlers{-}^{+} do
   while i < Count do begin
     if (Items[i] = Code) and (Items[i + 1] = Data) then
     begin
       Result := i;
       exit;
     end;
     Inc(i, 2);
   end;
 Result := -1;
end;
//[END FindIdleHandler]

//[procedure UnRegisterIdleHandler]
procedure UnRegisterIdleHandler( const OnIdle: TOnEvent );
var
 i: integer;
begin
 i := FindIdleHandler(OnIdle);
 if i <> -1 then
 with IdleHandlers{-}^{+} do
 begin
   Delete(i);
   Delete(i);
   {added by dominiko:}
   if IdleHandlers.Count = 0 then begin  // 2) Проверка на 0 только, если найден обработчик -> i<>-1!
     ProcessIdle := DummyObjProc;        // 3) либо в ProcessIdle проверять в начале, что IdleHandlers <> nil
     Free_And_Nil(IdleHandlers);
   end;
 end;
end;

Последовательность действий для проявления ошибки:
- Исходно обработчиков еще нет;
- RegisterIdleHandler(..);
- UnRegisterIdleHandler(..) - при отсутствии изменения 3 - падение  в ProcessIdle
                             т.к. IdleHandlers = nil;
- еще раз UnRegisterIdleHandler(..)/Имею я право разрегистировать
незарегистрированный обработчик? :=)/ - при отсутствии 1 - падение в Find..  2 - падение в UnRegister..
                                       т.к. IdleHandlers = nil;
--
С уважением,
ECM                          mailto:ecm@ua.fm

Хотелось бы услышать ваше мнение ...
Непонятно что будет дальше IdleHandler-ами?


SPeller   (2004-08-19 06:40:00) [1]


> 4. Чтение-запись иконок (записанные иконки не всегда потом
> читаются)

Чтение-запись в файл?


Vladimir Kladov   (2004-08-18 17:09:00) [2]

исправлять ошибки, если обнаруживаются, конечно надо. Но прежде чем вносить что-то новое, очень хотелось бы быть уверенным:
1. что это не вносит ошибок
2. что это не увеличивает код
3. и насчет лицензионной чистоты тоже. А потом всякие SCO купят права на тот продукт, из которого это вытащено, и начнут права качать...

из того, что уже есть в KOL, хотелось бы видеть доведенными до ума:
1. прозрачность/двойная буферизация
2. выравнивание (Align) - иногда бывает, что все-таки не работает само, приходится подталкивать вызовом Global_Align( родитель ) а то и просто писать свой код на OnResize
3. MDI - просто нужен специалист, который умеет делать это на API
4. Чтение-запись иконок (записанные иконки не всегда потом читаются)

А времени никогда не хватает... И не заниматься же мне все время одним только KOL'ом, у меня тоже есть другие интересы. То что работает - этим я сам очень здорово пользуюсь, но опять же не всем, так что баги иногда все еще обнаруживаются.

Так что, начинайте помогать. Нашли ошибку - делайте исправление, тестируйте, присылайте список изменений или upd-файл. По возможности буду вносить корректировки.


SPeller   (2004-08-18 15:20:00) [3]

И так нормально. Просто Владимир как никто другой знает идеологию всей библиотеки, и, я думаю, никто кроме него содержать ее в нормальном состоянии, в том числе и концептуальном не сможет.


ecm   (2004-08-18 13:05:00) [4]

Ну дык CVS для этого и предназначен.
А Кладов мог бы там быть "модератором" (root)


SPeller   (2004-08-18 13:00:00) [5]

Да мы и так помогаем. У него просто нет времени просмотреть то что мы предлагаем и внести это всё в конечный модуль.


ecm   (2004-08-18 12:02:00) [6]

По-моему надо как-то помогать Кладову - он же
не железный!


ecm   (2004-08-18 11:46:00) [7]

2Speller & 2Kladov может быть стоит перенести проект в CVS
чтобы "корифеи" могли править самостоятельно?!
В крайнем случае Кладов всегда мог бы сделать Rollback!


SPeller   (2004-08-18 03:09:00) [8]

Исправь у себя и жди когда Владимир м.б. внесет эти изменения. У меня у самого своих изменений куча, которые вручную качуют из одной версии в другую :)


ecm   (2004-08-17 23:03:00) [9]

Вопрос остается!


Наверх

Титульная страница Поиск, карта сайта Написать письмо