Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Торможу - в контроле нельзя использовать TYPE ??? / 16 сообщений из 16, страница 1 из 1
26.05.2006, 17:36
    #33755150
sysadm2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
...
Рейтинг: 0 / 0
26.05.2006, 18:11
    #33755251
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Как описан Relation? Как Object? Либо описывай, не как Object, чтобы не было late binding, либо тип описывай в public-классе (что возможно только в проекте соответствующего вида, например, ActiveX DLL). По-видимому, так надо понимать сообщение об ошибке. В общем, логичное требование.
...
Рейтинг: 0 / 0
26.05.2006, 18:26
    #33755290
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Или попробуй сделать тип классом.
...
Рейтинг: 0 / 0
26.05.2006, 21:56
    #33755557
sysadm2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Сейчас просто как Collection.
Соответсвенно при инициализации контрола в Run-Time - Dim Relation as NEW Collection.
Ну как вариант можно конечно и классом сделать.
...
Рейтинг: 0 / 0
27.05.2006, 14:17
    #33755911
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Ну, тогда либо сделать тип классом, либо сделать свой класс-коллекцию, работающий именно с этим типом.
...
Рейтинг: 0 / 0
27.05.2006, 17:38
    #33756103
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
в public процедуре или функции использовать private type, enum, etc. нельзя.
либо делать процедуру личной, либо тип публичным.
...
Рейтинг: 0 / 0
27.05.2006, 22:58
    #33756368
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Aklin,
здесь другая ситуация - см. скриншот.
...
Рейтинг: 0 / 0
29.05.2006, 07:46
    #33757270
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
А в коллекцию нельзя добавть переменную Type тут ни причем. Можно объект или строку.
...
Рейтинг: 0 / 0
29.05.2006, 11:29
    #33757678
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
WorobjoffА в коллекцию нельзя добавть переменную Type тут ни причем. Можно объект или строку.
переменную можно. но только variant, а в него сконвертировать Type-переменную, объявленную в непаблик модуле - нельзя.
...
Рейтинг: 0 / 0
29.05.2006, 11:37
    #33757695
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Worobjoff,
можно, если тип описан как Public Type в классе с Instancing=2 (PublicNotCreatable) или больше.
...
Рейтинг: 0 / 0
29.05.2006, 12:01
    #33757750
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Бенедиктможно, если тип описан как Public Type в классе с Instancing=2 (PublicNotCreatable) или больше.А вот это - поподробней если можно.
А то что-то не слышал я чтобы в VB6 был боксинг переменных.
...
Рейтинг: 0 / 0
29.05.2006, 12:38
    #33757868
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Worobjoff,
1) Запускаем VB6.
2) Создаём проект типа ActiveX DLL. Проект уже содержит класс Class1 с Instancing=5 (MultiUse).
3) В модуле класса Class1 пишем:
Код: plaintext
1.
2.
3.
Public Type TMyType
   i As Long
   s As String
End Type
4) Добавляем в группу проектов обычный проект - Меню:File\Add Project...\Standard Exe.
5) Делаем вновь созданный проект Project2 стартовым - в Project Explorer правый щелчок на Project2, Контекстное Меню:Set As Start Up.
6) Делаем ссылку в Project2 на Project1 - Меню:Project\References..., ставим галочку на Project1 (5-я строка).
7) Рисуем на Form1 кнопку, пишем обработчик нажатия:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub Command1_Click()
 Dim c As New Collection
 Dim a As TMyType
 Dim b As TMyType
 Dim i As Long
 
 a.i =  111 
 a.s = "первый"
 b.i =  222 
 b.s = "второй"
 c.Add a
 c.Add b
 
 AutoRedraw = True
 Cls
 For i =  1  To c.Count
    Print "[" & i & "]: i=" & c(i).i & ", s=""" & c(i).s & """"
 Next i
End Sub
8) Запускаем Project2 на выполнение (F5), жмём кнопку Command1.


Если откомпилировать Project1, в IDL тип TMyType выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    typedef [uuid(FD0E40BF-5F75-45B4-8A1A-AD2C22A4B486), version( 1 . 0 )]
    struct tagTMyType {
        [helpstring("i")        
]
        long i;
        [helpstring("s")        
]
        BSTR s;
    } TMyType;
В h так:
Код: plaintext
1.
2.
3.
4.
typedef /* [version][uuid] */ struct  tagTMyType
    {
    /* [helpstring] */ long i;
    /* [helpstring] */ BSTR s;
    }	TMyType;
...
Рейтинг: 0 / 0
29.05.2006, 13:00
    #33757941
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Бенедикт
Я подозревал что Type может в структуру скомпилироваться. Иногда, не понятно когда.
Да. В C++ структура - то же ссылочный тип. Поэтому его положить в коллекцию можно.
Но, в рамках dll, по-моему лучше класс написать. Лишний файл, но работать - проще.
Мне бы интересно было типами пользоваться лишь для уменьшения количества файлов в проекте.
...
Рейтинг: 0 / 0
29.05.2006, 15:40
    #33758492
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Worobjoff,
Переменные UDT всегда структуры (с точки зрения C; в этом можно убедиться с помощью LSet или CopyMemory). Про структуру в C++, ccылочный тип и помещение в коллекцию не понял. В коллекцию можно и переменную типа Long положить, с тем же успехом, что переменную UDT - в коллекции будет храниться, с точки зрения программиста на VB, копия переменной, в отличие от ситуации с классом (хранится ссылка). Как это внутри коллекции хранится - её дело, но поскольку Add принимает, а Item возвращает Variant, то логично предположить, что хранится в виде Variant. Можно ли операции преобразования из UDT в Variant и обратно называть boxing и unboxing - не уверен.
...
Рейтинг: 0 / 0
31.05.2006, 14:42
    #33763522
sysadm2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
Порадовал Бенедикт с IL. Спасибо.

Еще предложу рабоче-крестьянское решение боксинга:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim Relation As New Collection  
.....
Relation.Add (CStr(grTop_RowId) & ":" & CStr(grLeft_RowId))
....
Dim i As Long
For i =  1  To Relation.Count
If CStr(grTop_RowId) & ":" & CStr(grLeft_RowId) = Relation(i) Then
    Relation.Remove (i)
    Exit For
    End If
Next i
....
Dim i As Long, Y() As String
For i =  1  To Relation.Count
    Y = Split(Relation(i), ":")
    If Y( 1 ) = RowIndex Then
        ...
        Exit Sub
    End If
Next i
...
Рейтинг: 0 / 0
05.06.2006, 16:36
    #33772825
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Торможу - в контроле нельзя использовать TYPE ???
sysadm2000Еще предложу рабоче-крестьянское решение боксинга
Чем-то вроде 1С повеяло... "Правильный" рабоче-крестьянское "боксинг" двух Long-ов - в Currency:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Type RelationItem
   Top As Long
   Right As Long
End Type

Private Type RelationItemCcy
   Value As Currency
End Type

Public Function BoxRelationItem(RI As RelationItem) As Currency
 Dim c As RelationItemCcy
 LSet c = RI
 BoxRelationItem = c.Value
End Function

Public Function UnboxRelationItem(BoxedVal As Currency) As RelationItem
 Dim RI As RelationItem
 Dim c As RelationItemCcy
 c.Value = BoxedVal
 LSet RI = c
 UnboxRelationItem = RI
End Function
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Торможу - в контроле нельзя использовать TYPE ??? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]