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

Вниз

Access violation in design time   Найти похожие ветки 

 
RDS ©   (2005-09-21 15:37) [0]

Написал класс, отладил, теперь хочу сделать его как компонент. Компонент невизуальный. после установки его на форму пробую менять свойства и после нескольких изменений вываливается сабж. Привожу описание класса:

type
 TFindFiles=class(TComponent)
 private
   Attr: integer;
   fFindDirs: TStrings;
   fIncludeMask: TStrings;
   fExcludeMask: TStrings;
   fFileAttrs: TFileAttrs;
   fRecursive: boolean;
   fOnFound: TOnFoundEvent;
   procedure SetDirs(strs: TStrings);
   procedure SetIncMask(strs: TStrings);
   procedure SetExcMask(strs: TStrings);
   function GetIAttr: integer;
   procedure SetIAttr(attr: integer);
   function IsExclude(n: string):boolean;
   procedure CallEvent(s: string; SearchRec: TSearchRec);
   procedure FindInSingleDir(Dir: string);
 protected
 public
   Found: TStrings;
   property Attributes: integer read GetIAttr write SetIAttr;
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure Execute;
   procedure Clear;
 published
   property FindDirs: TStrings read fFindDirs write SetDirs;
   property IncludeMask: TStrings read fIncludeMask write SetIncMask;
   property ExcludeMask: TStrings read fExcludeMask write SetExcMask;
   property FileAttrs: TFileAttrs read fFileAttrs write fFileAttrs default [faArchive];
   property Recursive: boolean read fRecursive write fRecursive;
   property OnFound: TOnFoundEvent read fOnFound write fOnFound;
 end;

Может ли кто подсказать, почему вылетает ошибка. Все объекты инициализируются.

constructor TFindFiles.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 fFindDirs:=TStringList.Create;
 fIncludeMask:=TStringList.Create;
 fExcludeMask:=TStringList.Create;
 Found:=TStringList.Create;
end;


 
Reindeer Moss Eater ©   (2005-09-21 15:47) [1]

Ну и нафига ты декларацию класса здесь привел?
Исключения возникают внутри реализации, а не в разделе интерфейса.


 
RDS ©   (2005-09-21 15:55) [2]

Так почему их не возникает, если я создаю компонент в RunTime и возникает, когда я при помощи PKG выношу его на палитру инструментов, ставлю на форму и начинаю менять св-ва в _DESIGN_TIME_


 
Reindeer Moss Eater ©   (2005-09-21 15:57) [3]

Потому что у тебя ошибка в коде.


 
RDS ©   (2005-09-21 16:04) [4]

RDS ©   (21.09.05 15:55) [2]
Так почему их не возникает, если я создаю компонент в RunTime


 
RDS ©   (2005-09-21 16:08) [5]

Sorry за настойчивость, просто непонятно, почему все работает в одном варианте и возникают ошибки в другом


 
RDS ©   (2005-09-21 16:15) [6]

Сейчас закоментил почти весь код, кроме создания СтрингЛистов. после внесения некоторых изменений пишет: AV at address ...... in module rtl70.bpl


 
Reindeer Moss Eater ©   (2005-09-21 16:19) [7]

>Так почему их не возникает, если я создаю компонент в RunTime

Потому что у твоего компанента есть методы.
И методы эти наверняка не делают никаких различий между временем проектирования и временем выполнения.
Например начинают шерстить каталоги не только во время работы программы, но и когда компонентом манипулируют на форме.


 
Юрий Зотов ©   (2005-09-21 16:24) [8]

> RDS ©   (21.09.05 15:37)  

> пробую менять свойства и после нескольких изменений
> вываливается сабж.

Значит, для начала нужно показать код методов Set для этих свойств. А там посмотрим.


 
RDS ©   (2005-09-21 16:38) [9]

procedure TFindFiles.SetDirs;
begin
 fFindDirs:=Strs;
end;

procedure TFindFiles.SetIncMask;
begin
 fIncludeMask:=Strs;
end;

procedure TFindFiles.SetExcMask;
begin
 fExcludeMask:=Strs;
end;


 
Reindeer Moss Eater ©   (2005-09-21 16:42) [10]

Круто.


 
Reindeer Moss Eater ©   (2005-09-21 16:46) [11]

А ты не подумал, куда деваются указатели на созданные в конструкторе стринглисты, каждый раз, когда ты присваивание делаешь своим свойствам?


 
RDS ©   (2005-09-21 16:49) [12]

Сорри, по-мойму понял. Ошибка действительно есть.

вместо
procedure TFindFiles.SetIncMask;
begin
fIncludeMask:=Strs;
end;

нужно
procedure TFindFiles.SetIncMask;
begin
fIncludeMask.Assign(Strs);
end;

Похоже помогло.


 
RDS ©   (2005-09-21 17:00) [13]

Еще одна непонятка:
RDS ©   (21.09.05 15:37)


published
......
  property FileAttrs: TFileAttrs read fFileAttrs write fFileAttrs default [faArchive];
......
end;


при установке компонента на форму флаг faArchive=false
Из-за чего?
ЗЫ: в качестве примера пользуюсь текстом TOpenDialog. Оттуда понял про Assign, но там же при конструкции :
   property Options: TOpenOptions read FOptions write FOptions default [ofHideReadOnly, ofEnableSizing];
указаные в default флаги установлены в True


 
Reindeer Moss Eater ©   (2005-09-21 17:01) [14]

при установке компонента на форму флаг faArchive=false
Из-за чего?


Из-за того, что никто ему не присвоил True


 
RDS ©   (2005-09-21 17:06) [15]

Всем спасибо разобрался



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

Форум: "Компоненты";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1141301434
azl
2006-03-02 15:10
2006.03.19
Нажатие неактивной кнопки в чужом приложении


2-1141053632
SMAC
2006-02-27 18:20
2006.03.19
FileRead(Write)


4-1135697085
Nigel
2005-12-27 18:24
2006.03.19
LPT порт


1-1140185224
KyRo
2006-02-17 17:07
2006.03.19
Почему не стартует нить ??


2-1141216756
Хрюша
2006-03-01 15:39
2006.03.19
Почему пропадает модальное окно?





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