Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2017, 12:52   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию Компонент в классе - как реализовать?

Здравствуйте!
Есть (условно) работающая программа со статическим списком принтеров. Смотрит в потоке очередь принтера отображает на лейбле, в StaticText отображает состояние принтера. Но принтеры не редко меняются, поэтому решил, что надо бы создавать всё это динамически, получая список принтеров из текстового файла.
Думаю, самое удобное будет всё, что необходимо для конкретного принтера запихнуть в класс, а их список сделать в виде TObjectList.
Но вот возникла первая проблемка. Не пойму, как разместить в классе компонент. Попробовал на кнопке.
Код:
type
  TPrintViz = class
    constructor Create(PortNom: string; OwnerComp, ParentComp: TWinControl);
  end;
...

procedure TForm1.FormCreate(Sender: TObject);
var
  PrintViz:TPrintViz;
begin
  ....
  PrintViz.Create('230',Form1,ScrollBox1);
end;

...

constructor TPrintViz.Create(PortNom: string; OwnerComp, ParentComp: TWinControl);
var Btn1: TButton;
begin
  Btn1:=TButton.Create(OwnerComp);
  Btn1.Parent:=ParentComp;
  Btn1.Left:=10;
  Btn1.Top:=10;
  Btn1.Caption:=PortNom;
end;
Кнопка создаётся, но при этом выводятся сообщения об ошибках Access Violation at Address, три раза.

Как это сделать без ошибок и правильно?

P.S. Вынес PrintViz в глобальные переменные - пропала только одна Access Violation. Две остались.

Последний раз редактировалось Ship_1; 19.09.2017 в 12:55.
Ship_1 вне форума Ответить с цитированием
Старый 19.09.2017, 13:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

"классика" жанра - при создании объекта обращаетесь к ещё не созданному объекту.

замените
Цитата:
Код:
 PrintViz.Create('230',Form1,ScrollBox1);
на
Код:
 PrintViz := TPrintViz.Create('230',Form1,ScrollBox1);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.09.2017, 13:27   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
получая список принтеров из текстового файла
а еще список установленных принтеров можно получить из Printer.Printers
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.09.2017, 13:46   #4
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Serge_Bliznykov, да... Теперь всё гладко... Спасибо! С потоками в классах тоже нет никаких особых нюансов?

Аватар, я это подозревал, но мне нужны IP-адреса сетевых принтеров, чтобы получать информацию о них через IdHTTP, а как получить IP принтера мне так и не удалось найти в интернете. Точнее, что-то находилось, но какая-то громоздкая информация очень давних лет.

А если вместо OwnerComp писать ParentComp.Parent, убрав таким образом один параметр - это нормальный ход, или, всё же, лучше оставить два параметра?

Последний раз редактировалось Ship_1; 19.09.2017 в 13:50.
Ship_1 вне форума Ответить с цитированием
Старый 19.09.2017, 14:01   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

можно и
Код:
  Btn1:=TButton.Create(ParentComp);
  Btn1.Parent:=ParentComp;
владельцем может быть и любой другой класс(компонент) а не только форма(Form1)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать класс для матриц. В этом классе реализовать интерфейс, содержащий методы для выполнения Wexley Помощь студентам 0 07.12.2016 12:13
Реализовать в производном классе метод Adamson Общие вопросы C/C++ 6 08.12.2015 09:45
можно ли в одном классе реализовать несколько интерфейсов Galinka08 Общие вопросы по Java, Java SE, Kotlin 2 08.03.2008 21:33
Как реализовать перемещение ползунка при проигрывании mp3 файла компонент mediaplayer, в нужную позицию? strannik Компоненты Delphi 5 12.12.2006 05:23