Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Создание копии компанента...


Автор: Anatol 17.3.2006, 21:21
Здравствуйте, уважаемые!

Можно ли создать копию компонента (например кнопки или созданного пользователем другого элемента управления) как копию класса в процессе выполнения программы? И каким образом?

Заранее благодарен, Анатолий.

Автор: Naghual 17.3.2006, 21:25
Можно, если я правильно понял вопрос

Автор: Anatol 17.3.2006, 21:32
...задача следующая:
есть информация по скважинам которая должна отображаться в виде графиков на некотором компаненте созданым мной. При чем для каждой скважины необходим свой такой компанент...
вот отсюда и вопрос....

Автор: Naghual 17.3.2006, 21:42
Это массив компонентов что-ли? А сколько кушает памяти один такой компонент и на сколько он загружает процессор?
Действительно ли есть необходимость ОДНОВРЕМЕННОГО показа нескольких графиков?

Автор: Anatol 18.3.2006, 06:24
Да, в процессе работы этой программы необходим набор компаненттов.
Сам по себе компонент не большой - это просто область для отображения графиков и размещение такого компанента в памяти не проблема.
Предполагается что понадобиться не более 10 таких компонентов (чаще 3-4), можно было бы их сразу поместить на форму и просто отображать по мере необходимости, но мне просто захотелось узнать о возможности их создавания в процессе программы.

... предположим что мне необходимо сделать копию простой кнопки в процессе выполнения программы - как это сделать?

Автор: Exception 18.3.2006, 12:49
Маленькая просьба - пишите грамотно. Компонент, а не компанент.

Автор: Тутанхамец 18.3.2006, 15:45
Копию простой кнопки можно делать так:

1) Нарисовать кнопку и ее свойству index присвоить значение, допустим, ноль. Возникнет массив элементов управления. Теперь можно добавлять в него элементы и удалять их спомощью операторов load и unload. (Создать такой массив VB настойчиво предлагает, когда элементы копируешь в режиме проектирования.)

2) В процедуру нажатия кнопки такой код:

Код

Private Sub Command1_Click(Index As Integer)
Dim n As Long, i As Long
n = Command1.Count
Load Command1(n)
Command1(n).Visible = True
Command1(n).Left = Command1(n - 1).Left + 200
Command1(n).Top = Command1(n - 1).Top + 200
Command1(n).Width = Command1(n - 1).Width
Command1(n).Height = Command1(n - 1).Height
Command1(n).ZOrder
End Sub


Кстати, я привык думать, что такие массивы - единственный путь в VB для создания новых контролов во время выполнения. Буду приятно удивлен, если это окажется не так.
Добавлено @ 15:48
Как сделать так, чтобы и из самопального AciveX можно было сделать такой массив я, признаться, не очень представляю.
Добавлено @ 15:56
Идея! Можно выводит каждый ActiveX на отдельной форме, а вот копий одной формы можно наделать сколько угодно.

То есть, рисуешь на Form1 свой график, а копии Form1 получаешь так:

Код

Option Explicit
Public f As Form1


Private Sub Command1_Click()
Set f = New Form1
f.Show
End Sub




Автор: Anatol 18.3.2006, 16:55
Всем большое спасибо за участие в решение вопроса. Особенно спасибо тебе Тутанхамец.

З.Ы. ...прошу прощения за ошипки допущенные в теме тарапился однако...

Автор: Тутанхамец 18.3.2006, 18:39
На здоровье smile

P.S. Полезный вопрос, кстати. Если бы не он, я бы не заметил, что свойство index появляется у компонента автоматически. В режиме разработки ActiveX его не видно. Поэтому массив своих АктивИксов можно создавать абсолютно так же, как массив кнопок, текстбоксов и т.д.

Автор: Anatol 18.3.2006, 19:36
...это именно то, что мне было нужно, я и не подозревал, что все будет настолько просто...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)