Как работать с группами проектов?

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

Re: Как работать с группами проектов?

Сообщение Diamock » 20.05.2011 (Пт) 4:01

Хакер, спасибо! Очень интересно и познавательно. Буду экспериментировать.
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Как работать с группами проектов?

Сообщение Diamock » 20.05.2011 (Пт) 16:11

Хакер писал(а):То есть по сути, ровно то, о чём я говорил — сделать публичную обёртку над New. Но вы же предпочитаете делать какую-то гадость...

Если я правильно понял, выходит так...

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

Public FormDisplayed As Boolean
Dim myForm As New FormExemple

Sub ShowForm()
   
On Error Resume Next
   
If myForm Is Nothing Then
    Set myForm = New FormExemple
End If
   
FormDisplayed = True
myForm.Show

End Sub

:?:
Или надо создать абстрактный класс myForm и на его основе, используя Implement создать класс-обёртку?
In der Beschrankung zeigt sich erst der Meister
Графоманю...

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

Re: Как работать с группами проектов?

Сообщение Хакер » 20.05.2011 (Пт) 16:34

Нет! :twisted: Как можно только придумывать такую муть...

Зачем дублировать уже имеющееся естественное поведение DAN-ссылок своим аналогичным образом?
То, что метод класса называется ShowForm говорит о том, что ничего не был понято.
Зачем переменная FormDisplayed?

Придётся делать пример.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Как работать с группами проектов?

Сообщение Хакер » 20.05.2011 (Пт) 17:35

Лови и разбирайся тщательнейшим образом. То, что в проекте CLIENT, отношения к делу имеет мало, — это просто чтобы пример красиво работал. То, что в проекте SERVER — это непосредственно фабрика экземпляров форм с возможностью выбором типа формы.

Изучай, как из CLIENT-проекта я имею доступ к свойству Caption и методу Show любой из трёх форм без создания трёх идиотских классов с тремя идиотскими методами ShowForm.

FormFactoryInActiveXDll.zip
(54.27 Кб) Скачиваний: 375


На каждую из трёх кнопок «Породить» жать по нескольку раз!А то ведь до некоторых так и не доходит, что у одной формы может быть сто экземпляров.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как работать с группами проектов?

Сообщение Денис » 15.07.2011 (Пт) 14:17

Хакер писал(а):сделать публичную обёртку над New

Это как?
Сделать в dll публичный класс, в нем сделать метод NewForm, который будет дергать метод New у формы в dll?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: Как работать с группами проектов?

Сообщение Хакер » 15.07.2011 (Пт) 14:27

Денис писал(а):Это как?

Прежде чем поднимать старые темы, вернее вместо этого, тебе следовало скачать проект, который приаттачен постом выше и посмотреть, что я имел в виду.

Денис писал(а):Сделать в dll публичный класс, в нем сделать метод NewForm, который будет дергать метод New у формы в dll?

У формы нет метода New.
Есть квази-оператор New.
Есть моя волшебная обёртка над ним, позволяющая избежать огромный Select-Case для множества классов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как работать с группами проектов?

Сообщение Денис » 15.07.2011 (Пт) 15:19

Да, тормознул я. У этой ветки была вторая страница.
Тем не менее.
Когда у меня был VB, я пробовал делать подобное и у меня не получилось. Принципиальной разницы со своим кодом я не вижу:
Код: Выделить всё
'В dll
'Публичный класс:
public function LoadDLLForm() as object
   dim frm1 as Form
   set LoadDLLForm = New Form1 'само собой, Form1 есть в проекте dll
end function

'B exe
'В том месте, где надо вызвать форму.
private sub Button1_Click()
   dim DLLForm as Form
   Set DLLForm = LoadDLLForm()
end sub

И не работало. Выдавало ошибки. За давностью лет не помню, какие именно, но выдавало. А сейчас нет васика под рукой, чтоб проверить.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: Как работать с группами проектов?

Сообщение Хакер » 15.07.2011 (Пт) 15:22

Денис писал(а):где надо вызвать форму.

Опять вызвать форму.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Как работать с группами проектов?

Сообщение Diamock » 15.07.2011 (Пт) 15:49

Возможно, немного не в тему, но что значит : квази-оператор?
In der Beschrankung zeigt sich erst der Meister
Графоманю...

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

Re: Как работать с группами проектов?

Сообщение Хакер » 15.07.2011 (Пт) 16:14

Меня самого всего режет, когда я пишу этот термин. Потому что термин сугубо мой, и любой вправе предъявить претензию: что это вообще такое.

Поясняю.
Оператор — это языковая сущность, которая применяется к одному, двум или трём выражениям, и порождает новое выражение.

Например, унарный оператор «минус»: применённый к выражению (2+9) даёт новое выражение -(2+2).
Или унарный оператор «Not»: примерённый к выражению bFlag даёт новое выражение Not bFlag, с его участием.

Или бинарный оператор «плюс», применённый к двум выражениями i * 3 и 20 даёт новое выражение i * 3 + 20.

В общем, оператор принимает выражения и в результате даёт выражение. То есть его операнды — выражения. И результат исчисления — выражение.

Квази-оператор во всём похож на оператор, за исключением того, что его операнды — не являются исчислимыми выраженими с точки зрения языка программирования.

Квази-оператор как и оператор порождает выражение, но если операндом оператора может быть любое субвыражение (атомарное или комплексное), то операндом квазиоператора всегда будет какая-то языковая сущсность, специфичная для конкретно взятого квазиоператора.

В VB это:
  • AddressOf x (операнд — не выражение, а имя функции)
  • New x (операнд — не выражение, а имя coclass-а)
  • TypeOf x Is y (второй операнд — не выражение, а имя типа)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Как работать с группами проектов?

Сообщение Diamock » 15.07.2011 (Пт) 16:25

Хакер, спасибо за пояснение. В общем, понятно изложено, но в ясную картинку ещё не сложилось. :( Будем думать :!: .
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как работать с группами проектов?

Сообщение Денис » 15.07.2011 (Пт) 16:31

Ну это просто языковая конструкция. В конкурирующих языках за создание и уничтожение объектов отвечают специальные методы соответствующего класса, конструкторы и деструкторы. А вот в бейсике все наперекосяк. За создание объекта отвечает "квази-оператор" а за уничтожение отвечает присваивание "квази-переменной" Nothing.

[Хакер] :: Не надо намеренно писать ЧУШЬ галактических масштабов.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: Как работать с группами проектов?

Сообщение Хакер » 15.07.2011 (Пт) 16:36

Простое правило-детектор: если операнд нельзя взять в скобки, значит мы имеем дело с квазиоператором.

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

a =   b   +     c     ' Так можно
a = ( b ) + ( ( c ) ) ' Так _тоже_ можно
' Вывод: Плюс — это нормальный оператор

A = AddressOf SomeProcedure ' Так можно
a = AddressOf (SomeProcedure) ' Так нельзя
' AddressOf — квази-оператор

a =   b   and c ' Так можно
a = ( b ) and c ' Так _тоже_ можно
' Вывод: And — это нормальный оператор

a = not     b     ' Так можно
a = not    (b)    ' Так можно тоже
a = not ( ( b ) ) ' И так можно
' Вывод: Not — это нормальный оператор

If TypeOf A Is B Then ' Так можно
If TypeOf ( A ) Is B Then ' Так тоже можно
If TypeOf ( A) Is ( B ) Then ' Так уже нельзя
' TypeOf...Is — квази-оператор

Set B = New Class1 ' Так можно
Set B = New ( Class1 ) ' Так нельзя
' New — квази-оператор
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как работать с группами проектов?

Сообщение Денис » 15.07.2011 (Пт) 16:40

Хакер писал(а):Не надо намеренно писать ЧУШЬ галактических масштабов.

Эээ! Что конкретно тебе не нравится? Конструкторы и деструкторы? "Квази-оператор" как синтаксическая конструкция?
Объяснись.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Как работать с группами проектов?

Сообщение Diamock » 15.07.2011 (Пт) 16:44

Всё понятно! :D
In der Beschrankung zeigt sich erst der Meister
Графоманю...

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

Re: Как работать с группами проектов?

Сообщение Хакер » 15.07.2011 (Пт) 16:50

Хакер писал(а):Что конкретно тебе не нравится?


По пунктам:
Денис писал(а):Ну это просто языковая конструкция.

Это не конструкция.
Выделение из множества операторов подмножества квазиоператоров — это таксономическая методология, применяемая ко многим языкам программирования.

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

Вот это просто дикая чушь. Конструктуры и дескрукторы вообще никаким образом сюда не относятся. Во всех остальных известных мне популярных языках программирования, в которых есть классы, и даже в которых классов нет, для создания объектов используется оператор New. Во многих языках он является при этом квазиоператором.

Денис писал(а):А вот в бейсике все наперекосяк.

В твой голове всё наперекосяк.

Денис писал(а):а за уничтожение отвечает присваивание "квази-переменной" Nothing.

И это чушь. Никаких квази-переменных не существует. Nothing не является ни квази-переменной, ни просто переменной, а является самой обычной константой со значением 0.

Даже если закрыть глаза на то, что сказано до этого. Присвоение объектной переменной этого значения не отвечает за уничтожение объекта. За уничтожения объекта отвечает логика самого объекта. COM вообще и VB в частности допускает существоание таких объектов, которые не уничтожаются вообще, даже если число ссылок на них достигло нуля.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Как работать с группами проектов?

Сообщение Хакер » 15.07.2011 (Пт) 16:59

Diamock писал(а):Всё понятно! :D

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

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как работать с группами проектов?

Сообщение Денис » 15.07.2011 (Пт) 17:01

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

И New, и Create и то что ты называешь квазиоператором, на самом деле называется конструктором. При этом конструктор либо принадлежит классу, либо наследуется от класса-предка.

alibek :: Ругательства удалены
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: Как работать с группами проектов?

Сообщение Хакер » 15.07.2011 (Пт) 17:13

Денис писал(а):И New, и Create и то что ты называешь квазиоператором, на самом деле называется конструктором. При этом конструктор либо принадлежит классу, либо наследуется от класса-предка.


Всё верно, за исключением того, что New и конструктор класса — две разные вещи. New — оператор, а конструктор — процедура, принадлежащая классу. За реализацию конструктора отвечает автор класса, за реализацию же New — компилятор/интерпретатор, и эта реализация включает в себя поиск информации о нужном классе и вызов его конструктора.
—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: Как работать с группами проектов?

Сообщение ger_kar » 16.07.2011 (Сб) 13:54

Вообще все предельно ясно, я раньше все называл операторами.
Diamock писал(а):Возможно, немного не в тему, но что значит : квази-оператор?

Хакер писал(а):Меня самого всего режет, когда я пишу этот термин. Потому что термин сугубо мой, и любой вправе предъявить претензию: что это вообще такое.
А мне понравилось, включу как я его в свой лексикон :) А если что сошлюсь на Хакера :)
Бороться и искать, найти и перепрятать

Пред.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList