![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Access violation in design time
RDS © (2005-09-21 15:37:00)Написал класс, отладил, теперь хочу сделать его как компонент. Компонент невизуальный. после установки его на форму пробую менять свойства и после нескольких изменений вываливается сабж. Привожу описание класса:
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;
RDS (2005-09-21 17:06:00) [1]Всем спасибо разобрался
Reindeer Moss Eater (2005-09-21 17:01:00) [2]при установке компонента на форму флаг faArchive=false
Из-за чего?
Из-за того, что никто ему не присвоил True
RDS (2005-09-21 17:00:00) [3]Еще одна непонятка:
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
RDS (2005-09-21 16:49:00) [4]Сорри, по-мойму понял. Ошибка действительно есть.
вместо
procedure TFindFiles.SetIncMask;
begin
fIncludeMask:=Strs;
end;
нужно
procedure TFindFiles.SetIncMask;
begin
fIncludeMask.Assign(Strs);
end;
Похоже помогло.
Reindeer Moss Eater (2005-09-21 16:46:00) [5]А ты не подумал, куда деваются указатели на созданные в конструкторе стринглисты, каждый раз, когда ты присваивание делаешь своим свойствам?
Reindeer Moss Eater (2005-09-21 16:42:00) [6]Круто.
RDS (2005-09-21 16:38:00) [7]
procedure TFindFiles.SetDirs;
begin
fFindDirs:=Strs;
end;
procedure TFindFiles.SetIncMask;
begin
fIncludeMask:=Strs;
end;
procedure TFindFiles.SetExcMask;
begin
fExcludeMask:=Strs;
end;
Юрий Зотов (2005-09-21 16:24:00) [8]> RDS © (21.09.05 15:37)
> пробую менять свойства и после нескольких изменений
> вываливается сабж.
Значит, для начала нужно показать код методов Set для этих свойств. А там посмотрим.
Reindeer Moss Eater (2005-09-21 16:19:00) [9]>Так почему их не возникает, если я создаю компонент в RunTime
Потому что у твоего компанента есть методы.
И методы эти наверняка не делают никаких различий между временем проектирования и временем выполнения.
Например начинают шерстить каталоги не только во время работы программы, но и когда компонентом манипулируют на форме.
RDS (2005-09-21 16:15:00) [10]Сейчас закоментил почти весь код, кроме создания СтрингЛистов. после внесения некоторых изменений пишет: AV at address ...... in module rtl70.bpl
RDS (2005-09-21 16:08:00) [11]Sorry за настойчивость, просто непонятно, почему все работает в одном варианте и возникают ошибки в другом
RDS (2005-09-21 16:04:00) [12]RDS © (21.09.05 15:55) [2]
Так почему их не возникает, если я создаю компонент в RunTime
Reindeer Moss Eater (2005-09-21 15:57:00) [13]Потому что у тебя ошибка в коде.
RDS (2005-09-21 15:55:00) [14]Так почему их не возникает, если я создаю компонент в RunTime и возникает, когда я при помощи PKG выношу его на палитру инструментов, ставлю на форму и начинаю менять св-ва в _DESIGN_TIME_
Reindeer Moss Eater (2005-09-21 15:47:00) [15]Ну и нафига ты декларацию класса здесь привел?
Исключения возникают внутри реализации, а не в разделе интерфейса.