Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Редактор 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 действительно нельзя.


Наверх

Титульная страница Поиск, карта сайта Написать письмо