классы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

классы

Сообщение Bonesnapper » 22.05.2005 (Вс) 21:18

у меня есть поект ехе в нем 2 класса
как передать 1му классу 2й класс в качестве параметра

Код: Выделить всё

Dim L As New 2
Dim  butT1 As New 1
Dim  butT2 As New 1

butT1.init d3dDevice, pos, textur(), L
butT2.init d3dDevice, pos, textur(), L
  в 1 классе функция INIT:
Sub init(...,l_ as 2)

If Not l_ Is Nothing Then
    Set lb = New 2
    Set lb = l_
...
    lb.setPos x, y
End If

lb.draw

end sub



проблема в том что lb получается общим для butT1 и butT2
хотя lb должна быть уникальна для каждого butT1 и butT2

заранее спасибо

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.05.2005 (Вс) 21:49

Ничего не понял... Но если ты хочешь, чтобы существовало два разных lb, то явно "Set lb = New 2" должно быть написано дважды.
Изображение

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 23.05.2005 (Пн) 9:30

вот полная функция
Код: Выделить всё


Sub init(d3dDev As Direct3DDevice8, butT As RECT, textur() As Direct3DTexture8, lab_ As DXlabel)

If Not lab_ Is Nothing Then
    Set labl = New DXlabel
    Set labl = lab_
    hasLabel = True
   
    Dim x As Long, y As Long
    x = 0
    y = 0
    x = labl.getPos.Left + 10
    y = labl.getPos.Top + 10
    MsgBox x
    labl.setPos x, y
Else
    hasLabel = False
End If
end sub



в начале labl.getPos.Left =10
то есть х=20 и все ок
но тк у меня L передается 2 раза
butT1.init d3dDevice, pos, textur(), L '-msgbox выдает 20
butT2.init d3dDevice, pos, textur(), L '-msgbox выдает 30 !!!!!!!!

то х в конце получается =30
да и передаваемый мной L тоже меняется !?

как я думаю если так записать
Set labl = lab_
то при изменении labl будет меняться lab_ и наоборот
как мне это обойти :x

если совсем уж не понятно могу дать исходник

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.05.2005 (Пн) 10:42

Неа.
Ничё не понятно.

Option explicit поставь. Переменные объяви. И объясни, в чём смысл
Код: Выделить всё
Set labl = New DXlabel
Set labl = lab_
, потому что одна из двух строк точно не имеет смысла, правда не знаю какая, по логике твоей функции.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 23.05.2005 (Пн) 15:14

смысл

есть класс который рисует Лэйбл (dxlabel)
есть класс который рисует кнопку (dxbutton)

хочу сделать так
при создании кнопки (dxbutton.init) передать ей (кнопке) лэйбл
и чтоб этол лэйбл выступал как Caption Следоватьльно должен
быть свой у каждой кнопки

делаю так
1) создаю один лэйбл
2) создаю первую кнопку и передаю ей этот лэйбл
3) меняю текст и координаты в лэйбле из пункта 1
4) создаю вторую кнопку и передаю ей этот лэйбл

НО получается так что текст в лэйбле один и тот же и координаты те же

lab_- тот лайбл который я создаю и передаю кнопке
Set labl = lab_ - этим я копирую передаваемый лайбл что бы затем
при рисовании его опять не передавать
НО затем при изменении labl изменяется и lab_

Option explicit поставил


смысл

Set labl = New DXlabel
Set labl = lab_

просто я сначала вне функции обьявляю так dim labl as dxlabel
я не знаю может Set labl = New DXlabel не нужно писать если
затем приравнивать к такому же классу

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.05.2005 (Пн) 16:17

Ну а чему ты удивляешься?
Ты же каждый раз делаешь setPos x, y одному и тому же Label.


А Set labl = New DXlabel убрать, предварительно почитав азы работы с объектами...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 23.05.2005 (Пн) 23:46

почему одному и томуже то
в каждом классе кнопки есть свой Label (labl-обьявляется в классе кнопки)

и вообще почему при изменении (внутри класса кнопки) labl
изменяется и передаваемый лэйбл

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.05.2005 (Вт) 9:44

Ты понимаешь разницу между структурными и ссылочными объектами?
Ты понимаешь, в чём разница между копированием объекта и копированием ссылки?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.05.2005 (Вт) 11:15

GSerg писал(а):Ты понимаешь разницу между структурными и ссылочными объектами?
Ты понимаешь, в чём разница между копированием объекта и копированием ссылки?

В VB6 нету структурных объектов, только ссылочные ;-)
Более корректно было бы сформулировать вопрос так: "... разницу между структурными и ссылочными типами."
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.05.2005 (Вт) 12:08

А... Редиска :)

Объясни лучше смысл своей текущей подписи, потому что я не въезжаю :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.05.2005 (Вт) 12:11

GSerg писал(а):Объясни лучше смысл своей текущей подписи, потому что я не въезжаю :)

Хм...
Может это?
http://groups.google.ru/groups?q=%22Sanity+is+a+little+box%22&hl=ru&lr=&selm=31F24805.5889%40earthlink.net&rnum=2

> S N I P
> I read a couple posts about the Rev being a pedophile. I really don't
> care, but i wanted to say something that was probably said already. At
> the very end of My Monkey, after the loops of Charles Manson? saying
> 'sanity is a little box', you can hear Marilyn say 'um, it better that
> you, uh, d-don't tell your mom and dad we did this, ok?' and right
> after it there's some backwards thing that i haven't figured out yet.
Lasciate ogni speranza, voi ch'entrate.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 24.05.2005 (Вт) 16:51

Ну скажите тогда как мне копировать обьект :cry:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.05.2005 (Вт) 16:53

Set ... = New ...
и поэлементно
Lasciate ogni speranza, voi ch'entrate.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 24.05.2005 (Вт) 17:28

Спасибо

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.05.2005 (Вт) 20:27

alibek писал(а):
GSerg писал(а):Объясни лучше смысл своей текущей подписи, потому что я не въезжаю :)

Хм...
Может это?

Почти: http://64.233.183.104/search?q=cache:Ya ... x%22&hl=ru
Charles Manson писал(а):Sanity is a little box society expects you to live in. Insanity is a universe...



2Bonesnapper: приличные люди добавляют в свои классы метод Clone, который возвращает копию текущего объекта. Тогда не придётся его копировать по одному полю каждый раз, где это требуется.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.05.2005 (Ср) 7:35

tyomitch, я как раз хотел про Clone написать, но передумал, чтобы меня снобом не посчитали :)
Lasciate ogni speranza, voi ch'entrate.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 25.05.2005 (Ср) 8:46

А в методе Clone как я понимаю нужно будет по элементно копировать :?:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.05.2005 (Ср) 8:59

Разумеется.
Но снаружи будет выглядеть грамотно и удобно.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 165

    TopList