Проблемка с TCustomTimer[Решено]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблемка с TCustomTimer[Решено]

Сообщение Maxizar » 09.10.2010 12:44:24

Решил я тут сделать компонент, анимированную иконку в трее. Написал Класс: TAnimateTrayIcon = class(TCustomTrayIcon)...
Смысл прост вместо Одной Icon используем TCustomImageList, и собственно таймер TCustomTimer.
Протестил все работает, решил создать компонент. Создал пакет, иконку выбрал и т.п. Установил. И тут ждал меня БАГ.
При добавлении компонента на форму в свойствах прописывается TCustomTimer. (вот тут я вообще не понял почему).
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, AniTrayIcon;

type

  { TForm1 }

  TForm1 = class(TForm)
    AnimateTrayIcon1: TAnimateTrayIcon;
    CustomTimer1: TCustomTimer;  //- прописалось само ПОЧЕМУ??
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

end.

И при выключении программы ошибка на строчке из модуля AnimateTrayIcon.
Код: Выделить всё
destructor TAnimateTrayIcon.Destroy;
begin

  Timer.Free; //Вот тут.
  Timer:=Nil;
  FIcons:=Nil;
  FAnimate:=False;
  FIconIndex:=0;
  FAnimateInterval:=0;

  inherited Destroy;
end;

В чем может быть проблема: ведь если ничего не пихать в пакет и не делать компоненту.. то все просто ОК.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Maxizar 09.10.2010 15:39:49, всего редактировалось 1 раз.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Проблемка с TCustomTimer

Сообщение Mr.Smart » 09.10.2010 13:09:31

Обратите внимание на строку 165 в файле anitrayicon.pas.
Код: Выделить всё
Timer:=TCustomTimer.Create(TheOwner);

В данном случае вы создаёте таймер с овнером которым является форма. Вот автоматически и появляется таймер в декларации.
При создании таймера в качестве овнера необходимо указывать тот компонент в который он инкапсулирован или не заморачиваться и просто передавать значение nil.
Код: Выделить всё
Timer:=TCustomTimer.Create(self);
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблемка с TCustomTimer

Сообщение Maxizar » 09.10.2010 15:35:10

Да Mr.Smart Вы правы. Теперь все работает, выкладываю компонент в разделе Компоненты и примеры
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru