![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Редактор TStrings в Design-Time
mfender © (2006-03-11 07:03:00)
private
FSQLSelect: TStrings;
procedure SetSelectQuery(Value: TStrings);
published
property SQLSelect:TStrings read FSQLSelect write SetSelectQuery;
implementation
procedure SetSelectQuery(Value: TStrings);
begin
FSQLSelect.Assign(Value);
end;
Уже всю голову сломал... Ну не включается String List Editor. А вместо него - Сannot assign a nil to a TRichEditStringsкакой-то...
Как с этим бороться. Уже смотрел, как в других компонентах это делается. Может я чего-то не вижу?
Loginov Dmitry (2006-03-12 10:24:00) [1]
> что бы когда nil придет в метод - AV получить.
А с чего это вдруг в метод придет nil? Не передавать nil в метод - и все будет в порядке.
jack128 (2006-03-11 21:38:00) [2]Loginov Dmitry © (11.03.06 20:04) [7]
что бы когда nil придет в метод - AV получить.
Loginov Dmitry (2006-03-11 20:04:00) [3]А к чему такая проверка, если не секрет?
> if Value = nil then Value.Add('');
mfender (2006-03-11 15:23:00) [4]Гаврила © (11.03.06 14:03) [5]
почему FSQLSelect - в притивном случае ты обращаешься к свойству, то есть вызываеття метод SetSelectQuery
Ну конечно! Как я сразу не догадался!
constructor TmfTreeView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSQLSelect := TStringList.Create;
end;
procedure TmfTreeView.SetSelectQuery(Value: TStringList);
begin
if Value = nil then Value.Add('');
FSQLSelect.Assign(Value);
end;
Так всё работает. Спасибо всем за участие!
Гаврила (2006-03-11 14:03:00) [5]
> Когда я попробовал добавить в конструктор SQLSelect :=
> TStringList.Create
FSQLSelect := TStringList.Create;
почему FSQLSelect - в притивном случае ты обращаешься к свойству, то есть вызываеття метод SetSelectQuery
а внутренний объект FSQLSelect у тебя не создан.
Вообще объекты (а TStrings - это объект) надо создавать и разрушать руками, автоматически это не делается.
(и не забыть разрушить в деструкторе)
mfender (2006-03-11 13:55:00) [6]
TmfTreeView = class(TTreeView)
private
FSQLSelect: TStringList;
published
constructorCreate(AOwner: TComponent); override;
propertySQLSelect:TStringList readFSQLSelect writeSetSelectQuery;
end;
implementation
constructorTmfTreeView.Create(AOwner: TComponent);
begin
inheritedCreate(AOwner);
end;
procedureTmfTreeView.SetSelectQuery(Value: TStringList);
begin
FSQLSelect.Assign(Value);
end;
Вот уже и TStringList попробовал - не помогает.
To Юрий Зотов © (11.03.06 10:10) [1]:
Когда я попробовал добавить в конструктор SQLSelect := TStringList.Create; в ответ получил Access Violation. Пробовал добавить туда пустую строку. Тоже не работает...
Гаврила (2006-03-11 13:51:00) [7]
> Loginov Dmitry ©
нет.
Весь вопрос в том, что именно было фактически создано (и было ли - похоже, что нет)
Loginov Dmitry (2006-03-11 12:49:00) [8]1) Почему в реализации вашей функции не указан тип класса?
2) Попробуйте заменить TStrings на TStringList (тогда точно заработает)
Юрий Зотов (2006-03-11 10:10:00) [9]1. Покажите конструктор и деструктор.
2. Если в SetSelectQuery передается Value=nil, то так и должно быть. Ассигновать nil действительно нельзя.