Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 075

/ вопрос открыт /

Здравствуйте!

1) Скажите, нужно ли в конструкторе класса TTheftAutoServer создавать экземпляр TADOConnection чтобы обращаться к свойствам и методам последнего? По идее нужно, но когда просто кидается компонент на форму, то куда запихивается такая строчка самой средой? - вроже так-же в публичном разделе объектная переменная описывается и все.

2) Если в первом вопросе решили что нужно, то в строчке "ADOConnection1 := TADOConnection.Create(nil);" Delphi требует указать TComponent, я поставид там nil. Что подставить в качестве пораметра? - наверное нужно указатель на главную форму где и будет создаваться экземпляр TTheftAutoServer. передать его в конструкторе чтоли?
Скажите ка по человечески тут сделать?

Приложение:
  1. unit TAServer;
  2.  
  3. interface
  4.  
  5. uses
  6. SysUtils, DB, ADODB;
  7.  
  8. type
  9. TTheftAutoServer = class(TObject)
  10. //private
  11. { Private declarations }
  12. ADOConnection1: TADOConnection;
  13. //IdTCPServer1: TIdTCPServer;
  14. procedure ADOConnection1BeforeConnect(Sender: TObject);
  15. public
  16. { Public declarations }
  17. constructor Create();
  18. destructor Destroy();
  19. end;
  20.  
  21. implementation
  22.  
  23. constructor TTheftAutoServer.Create();
  24. begin
  25. inherited Create();
  26.  
  27. ADOConnection1 := TADOConnection.Create(nil);
  28. end;


Roman Novikov Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Roman Novikov (статус: Посетитель)
Вопрос отправлен: 7 августа 2009, 23:26
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Roman Novikov!

Цитата:

1) Скажите, нужно ли в конструкторе класса TTheftAutoServer создавать экземпляр TADOConnection чтобы обращаться к свойствам и методам последнего?

Нельзя обращаться к несозданному объекту. исключение составляют только статические методы. Конструктор объекта это "магический метод", которому можно обращаться, когда объект ещё не существует. Хотя на самом деле мы обращаемся не к объекту, а к классу.

Цитата:

По идее нужно, но когда просто кидается компонент на форму, то куда запихивается такая строчка самой средой? - вроже так-же в публичном разделе объектная переменная описывается и все.

никуда. компилятор вставляет в код программы специальный код, который анализирует dfm файл и вызывает конструкторы и другие методу для установки свойств.

Цитата:

2) Если в первом вопросе решили что нужно, то в строчке "ADOConnection1 := TADOConnection.Create(nil);" Delphi требует указать TComponent, я поставид там nil. Что подставить в качестве пораметра? -

Так обычно и делают в этом случае.

Цитата:

наверное нужно указатель на главную форму где и будет создаваться экземпляр TTheftAutoServer. передать его в конструкторе чтоли?
Скажите ка по человечески тут сделать?

Невизуальным компонентам ссылка на форму не нужна (обычно, хотя есть и исключения). А передача ссылки на форму в данном случае приведет только к усложнению кода.

Зачем же все таки этот компонент требует эту ссылку, если она ему не нужна? это плата за то, что бы быть компонентом, что бы можно было поставить на форму и настраивать свойства. А также, что бы этот компонент был создан в начале работы программы и разрушен в конце.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 8 августа 2009, 00:51
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 8 августа 2009, 12:40; участников в обсуждении: 2.
Roman Novikov

Roman Novikov (статус: Посетитель), 8 августа 2009, 11:53 [#1]:

> компилятор вставляет в код программы специальный код, который анализирует dfm файл и вызывает конструкторы и другие методу для установки свойств.

Из той же области вопрос: Когда кидаем компонент на форму и описываем стандартные события для него (в инспекторе объектов), то где прячется строчка с присвоением переменной процедурного типа данного обработчика? - где-то в конструкторе объекта или тоже компилятор позже анализирует?
Roman Novikov

Roman Novikov (статус: Посетитель), 8 августа 2009, 12:03 [#2]:

> ADOConnection1/Так обычно и делают в этом случае.
Еще нужно передать компоненту путь к базе данных (какое-то первоначальное значение при создании в конструкторе) - как это можно сделать? Писать свойство для установки - это уже наверное для изменения после конструктора. А для Application.ExeName нужно в файл класса подключать 2 файла и как-то тоже не есть хорошо. В конструкторе TTheftAutoServer.Create() может передать строку?
Roman Novikov

Roman Novikov (статус: Посетитель), 8 августа 2009, 12:11 [#3]:

Ниже приведены два варианта описания члена класса. Если (как в первом варианте) ADOConnection1 указан за пределами секций, определяющих область видимости, то каким он считается - публичным членом класса? public/publishing?

type
TTheftAutoServer = class(TObject)
ADOConnection1: TADOConnection;
private
public
end;

type
TTheftAutoServer = class(TObject)
private
ADOConnection1: TADOConnection;
public
end;
Roman Novikov

Roman Novikov (статус: Посетитель), 8 августа 2009, 12:14 [#4]:

> Зачем же все таки этот компонент требует эту ссылку, если она ему не нужна? это плата за то, что бы быть компонентом, что бы можно было поставить на форму и настраивать свойства. А также, что бы этот компонент был создан в начале работы программы и разрушен в конце.
В конструкторе компилятор ставит указатель на форму с компонентом в этом случае?
Вадим К

Вадим К (статус: Академик), 8 августа 2009, 12:40 [#5]:

Цитата:

Когда кидаем компонент на форму и описываем стандартные события для него

Откройте dfm файл. там всё есть.

Цитата:

А для Application.ExeName нужно в файл класса подключать 2 файла и как-то тоже не есть хорошо

Ну можно заменить на ParamStr(0). С другой стороны, никто не мешает передать имя базы данных как параметр в конструктор.

Цитата:

В конструкторе компилятор ставит указатель на форму с компонентом в этом случае?

В каком? при создании формы? Да.

Может хелп откроете в конце концов и почитаете базовые вещи?
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:37
Выполнено за 0.02 сек.