Объявление процедуры Line в классе

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

Объявление процедуры Line в классе

Сообщение Filyus » 08.04.2013 (Пн) 6:48

Процедуру Line в классе просто так не объявить, в VB же есть уже такая стандартная. Ругался на несовпадение числа параметров. Методом перебора выяснил их количество и предназначение. Только FlagNull = 4 не знаю для чего, но устанавливается он всегда. Работает как в IDE, так и в скомпилированном виде.
Код: Выделить всё
Dim c As New Class1
Private Sub Form_Load()
  c.Line (100, 200)-(300, 400)
End Sub

Код: Выделить всё
Public Enum LineFlags
  FirstRelative = 1
  ColorPresented = 2
  FlagNull = 4
  SecondRelative = 8
  DrawBox = 16
  DrawBoxWithFrame = 32
End Enum
Public Sub Line(ByVal Flags As LineFlags, ByVal x1 As Long, ByVal y1 As Long, _
    ByVal x2 As Long, ByVal y2 As Long, ByVal Color As Long)
  Debug.Print Flags; x1; y1; x2; y2; Color
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление процедуры Line в классе

Сообщение Хакер » 08.04.2013 (Пн) 7:47

Теперь сделай то же самое для метода Circle :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Объявление процедуры Line в классе

Сообщение Filyus » 08.04.2013 (Пн) 11:08

Хакер писал(а):Теперь сделай то же самое для метода Circle :)

С ней не получается, но она мне особо и не нужна.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.04.2013 (Пн) 11:47

Что-то я не понял (пока без VB6), что это за магия...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.04.2013 (Пн) 11:55

Хотя, кажется начинаю догадываться. Ты хочешь в своём классе обрабатывать стандартный вызов Line?

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Объявление процедуры Line в классе

Сообщение Vi » 08.04.2013 (Пн) 12:39

Есть способ вызова функций, названных "запретными" словами - заключить в квадратные скобки. Т.е. в твоём случае: c.[Line] 11, 22, 33, 44, 55, 66.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.04.2013 (Пн) 12:44

Vi писал(а):Есть способ вызова функций, названных "запретными" словами - заключить в квадратные скобки.

Нет, видимо он как раз хотел (и сделал) вызов со стандартным для Line синтаксисом.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re:

Сообщение Vi » 08.04.2013 (Пн) 12:51

Qwertiy писал(а):Нет, видимо он как раз хотел (и сделал) вызов со стандартным для Line синтаксисом.

Вряд ли, просто VB не даёт других способов вызвать Line с параметрами другого синтаксиса. Некоторые просто обзывают Line как Line2 и не парятся либо отказываются от использования. Некоторые читают документацию и всё-таки вызывают нужную функцию, особенно если это касается внешних и уже существующих библиотек, написанных на другом языке, в котором нет ограничения на названия и вызовы функций.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление процедуры Line в классе

Сообщение Хакер » 08.04.2013 (Пн) 13:21

Vi писал(а):Вряд ли

«Вряд ли» как раз можно сказать о предположении, что Filyus не слышал/не знает про квадратные скобки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Объявление процедуры Line в классе

Сообщение ger_kar » 08.04.2013 (Пн) 18:07

А мне все таки интересно узнать, а зачем это все было нужно?
Бороться и искать, найти и перепрятать

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Объявление процедуры Line в классе

Сообщение Debugger » 08.04.2013 (Пн) 18:33

Чтобы кто-то принимал объект As Object и не сильно заботился, что это - PictureBox или этот класс.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление процедуры Line в классе

Сообщение Хакер » 09.04.2013 (Вт) 12:59

Хорошая идея: сделать граф. контейнер с продвинутой графикой (антиалисингом, слоями и т.п.), на котором можно было бы рисовать родным синтаксисом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Объявление процедуры Line в классе

Сообщение ger_kar » 09.04.2013 (Вт) 13:11

И чтобы можно было картинки с 32 битным цветом и альфа каналом юзать :)
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление процедуры Line в классе

Сообщение Хакер » 09.04.2013 (Вт) 13:16

ger_kar, у кого что болит :) Граф. контейнер тут никаким образом не причастен: для обеспечения такой возможности надо переписывать рантаймовую LoadPicture.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Объявление процедуры Line в классе

Сообщение ger_kar » 09.04.2013 (Вт) 13:28

Еще и как причастен. Что-бы в этом убедиться достаточно в имеющийся PictureBox загрузить картинку в формате PNG не использую рантаймовую LoadPicture. Для того, что-бы такая картинка отображалась так как ей положено придется изрядно попотеть и написать кучу кода.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Объявление процедуры Line в классе

Сообщение ger_kar » 09.04.2013 (Вт) 13:31

Да, и опять же, кто мешает в контейнер с продвинутой графикой добавить метод заменяющий рантаймовую LoadPicture?
Бороться и искать, найти и перепрятать

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Объявление процедуры Line в классе

Сообщение Mikle » 09.04.2013 (Вт) 14:53

Одно не пойму - зачем в новый контейнер тащить уродский синтаксис псевдометодов Line, Pset и т. п. Особенно меня вымораживают псевдопараметры B и BF в Line.
Эти конструкции были хороши для GWBasic, уже в QBasic с нормальным процедурным подходом это нужно было исправить.

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Объявление процедуры Line в классе

Сообщение Filyus » 09.04.2013 (Вт) 15:29

Mikle писал(а):Одно не пойму - зачем в новый контейнер тащить уродский синтаксис псевдометодов Line, Pset и т. п. Особенно меня вымораживают псевдопараметры B и BF в Line.
Эти конструкции были хороши для GWBasic, уже в QBasic с нормальным процедурным подходом это нужно было исправить.

B и BF использовать не собираюсь, а синтаксис (x1, y1) - (x2, y2) ещё более-менее нормальный.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление процедуры Line в классе

Сообщение Хакер » 09.04.2013 (Вт) 15:30

ger_kar писал(а):Что-бы в этом убедиться достаточно в имеющийся PictureBox загрузить картинку в формате PNG не использую рантаймовую LoadPicture.

Вот расскажи: это как загрузить, не используя? Через кнопочку [...]? Через буфер обмена?

ger_kar писал(а):Да, и опять же, кто мешает в контейнер с продвинутой графикой добавить метод заменяющий рантаймовую LoadPicture?

То, что это глупость. Изначальная идеология в том, что любой объект может прикинуться картинкой, вернее провозгласить себя ею, просто показав наружу реализацию IPicture/IPictureDisp.

Mikle писал(а):Одно не пойму - зачем в новый контейнер тащить уродский синтаксис псевдометодов Line, Pset и т. п. Особенно меня вымораживают псевдопараметры B и BF в Line.

У них два плюса: они пишутся (печатаются) короче, чем любой другой подход. Плюс опциональность начальной координаты, плюс суффикс Step. Второй плюс в том, что можно махнуть один контейнер на другой в уже существующем коде без переписывания кода, использующего контейнер. Бумс, и появился антиалиасинг (и прочие дела).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Объявление процедуры Line в классе

Сообщение Mikle » 09.04.2013 (Вт) 15:53

Хакер писал(а):Второй плюс в том, что можно махнуть один контейнер на другой в уже существующем коде без переписывания кода, использующего контейнер.

Это, пожалуй, единственный плюс, только, боюсь, что бОльшая часть существующего кода, использующего Pset, Line и т. п. уже заточена именно на "пикселизованность" этих методов и после подмены будет больше минусов, чем плюсов.
Хакер писал(а):опциональность начальной координаты

Будь в VB6 нормальный полиморфизм, это было бы лучше сделать перегрузкой:
Код: Выделить всё
Sub Line (ByVal X1 As Single, ByVal Y1 As Single, ByVal X2 As Single, ByVal Y2 As Single)
...
Sub Line (ByVal X As Single, ByVal Y As Single)

А можно просто новым методом LineTo.
Хакер писал(а):плюс суффикс Step

А это, вместе с B и BF завернуть в Enum с нормальными читаемыми названиями. И какая разница, что "пишутся (печатаются) короче", когда есть IntelliSense.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление процедуры Line в классе

Сообщение Хакер » 09.04.2013 (Вт) 16:02

Mikle писал(а):Будь в VB6 нормальный полиморфизм, это было бы лучше сделать перегрузкой:

Буэ. Будь в эманспиации экзорцизм, мы б на марсе построили коммунизм.

Полиморфизм в VB6 не может «быть», он может быть там «возможен». И полиморфизм в VB6 — возможен. Если речь шла о перегрузке, то нафиг здесь перегрузка, если то, что ты написал, делается опциональными параметрами.

Речь идё о том, что вот такое: Me.Line -Step(1,2) будет записано неудобно как x.Line Abs, , , Rel, 1, 2
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Объявление процедуры Line в классе

Сообщение Mikle » 09.04.2013 (Вт) 16:45

Хакер писал(а):будет записано неудобно как x.Line Abs, , , Rel, 1, 2

Вот. А если бы мы могли перегрузить Line, то это было бы записано удобнее.
В любом случае, даже без перегрузки Line, Me.LineTo (1,2) и короче, и стандартнее, чем Me.Line -Step(1,2)
И ещё почему в данном случае не хотелось бы применять Optional параметры - нужно как-то запретить пользователю прописывать X, не прописывая Y.
Можно определить тип Vector, и использовать в параметрах два вектора, но VB6 не даёт делать параметры пользовательского типа Optional.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Объявление процедуры Line в классе

Сообщение ger_kar » 09.04.2013 (Вт) 17:35

Хакер писал(а):Вот расскажи: это как загрузить, не используя? Через кнопочку [...]? Через буфер обмена?
Ну так, как хранить картинки при таком раскладе получается только в ресурсах, то и загрузка соответственно происходит через LoadImage и OleCreatePictureIndirect.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление процедуры Line в классе

Сообщение Хакер » 10.04.2013 (Ср) 0:21

Mikle писал(а):но VB6 не даёт делать параметры пользовательского типа Optional.

Mikle писал(а):Me.LineTo (1,2) и короче, и стандартнее, чем Me.Line -Step(1,2)


Не понял.

Me.Line -Step(1,2) ==> Me.LineTo (1,2)
Me.Line -(1,2) ==> Me.LineTo (1,2) тоже?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Объявление процедуры Line в классе

Сообщение ger_kar » 10.04.2013 (Ср) 6:35

Ну можно же сделать как-то так: Me.Line -(1,2) ==> Me.LineTo (-1,-2)
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Объявление процедуры Line в классе

Сообщение Хакер » 10.04.2013 (Ср) 6:49

ger_kar писал(а):Ну можно же сделать как-то так: Me.Line -(1,2) ==> Me.LineTo (-1,-2)

Чушь... сам то понимаешь хоть, насколько глупо то, что ты написал?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Объявление процедуры Line в классе

Сообщение ger_kar » 10.04.2013 (Ср) 6:56

Хакер писал(а):Чушь... сам то понимаешь хоть, насколько глупо то, что ты написал?
Конечно нет :)
Бороться и искать, найти и перепрятать

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Объявление процедуры Line в классе

Сообщение Mikle » 10.04.2013 (Ср) 8:41

Хакер писал(а):Не понял.

Да, LineTo x,y больше соответствует простому Line -(x,y), а вместо Line -Step(x,y) подошло бы скорее LineStep x,y
А на счёт "VB6 не даёт делать параметры пользовательского типа Optional." разве не так?


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

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

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

    TopList