Форум: "Компоненты";
Текущий архив: 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