Техническая поддержка :

Современные решения

для защиты Windows программ

и восстановления исходного кода

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Pointer To Variant Array?

From: "Сулейманов Тимур"


Привет всем.

Подскажите как в VB6 создать ссылку на массив Variant?
Есть класс, мною написанный,
в нем свойсво-массив.

когда читаю это свойство так:

Dim V as Variant
V = Obj.DataArray
массив естественно копируется и при большом размере память умирает.

дочитался до
Public Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Var()
As Any) As Long
которая дает адресс массива, а как достать по этому адресу значение i,j не
знаю.

Я видел летом здесь подобное уже обсуждалось, но я потерял этот текст...

С уважением, Сулейманов Тимур
--
Timson


* Origin: OOO BIS (2:5020/400)


RichTextBox

Приветствую тебя, _Sergey_ !


Sergey Broudkov и Vitaliy Pryahin сидели дома,пили пиво и болтали на тему _Re: RichTextBox_.


SB> Pos = RichTextBox1.Find(txtSearch.Text, RichTextBox1.SelStart + 1)
SB> If Pos = -1 Then
SB> MsgBox "Hе найдено"
SB> Else
SB> RichTextBox1.SelStart = Pos
SB> RichTextBox1.SelLength = Len(txtSearch.Text)
SB> End If
SB> End Sub
ага,спасибо!

Hе скучай,_Sergey_. С уважением,Виталий.

* Origin: (2:5096/19)


Re: Pointer To Variant Array?

Мы где-то виделись, Сулейманов?

10 Oct 03 11:36:24 в RU.VISUAL.BASIC Сулейманов Тимур -> All:

СТ> дочитался до
СТ> Public Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr"
СТ> (Var() As Any) As Long
СТ> которая дает адресс массива, а как достать по этому адресу значение i,j не
СТ> знаю.

СТ> Я видел летом здесь подобное уже обсуждалось, но я потерял этот текст...

Тебе достаточно просто скопировать весь Variant в переданную ByRef переменную.

Есть тут один нюанс. При выходе из области видимости Variant уничтожается
вместе со всем своим содержимым, поэтому надо его обнулить, чтобы твой массив
не был удален.

MyObj:

Private mArr As Variant
Public Sub GetArray(ByRef v As Variant)
CopyMemory v, mArr, 16
End Sub

Код:

Dim v As Variant
MyObj.GetArray v
' ...
ZeroMemory v, 16

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Защита программ

>\/

IK>>>> Я так понимаю -- написал пpогpамму, денежки получил, пеpедал в
IK>>>> пользование. Или хочется много денюшек? Или по интеpнету
IK>>>> пpодавать? Втоpой ваpиант безпеpспективнее пеpвого.
IE>>> Более того я не видел на VB ни одной шаровары, даже
IE>>> поганенькой... Дело впрочем хозяйское...
RY>> http://attackie.com/obg.php ;)
IE> Ура! Я выиграл -1400$ два раза! :) Hичего так, прикольно.
IE> Хочется чтоб на некоторые неправильные ответы прога гнусно
IE> прикалывалась :)
Дык это, деньги гони.

Рег. код - 91134nastya

А насчет ответов - могу поделиться исходниками, только у меня винт умирал, насколько они старые - не знаю. Сделаем СП. ;)


А вы говорите - нет, нет. ;)

>/\
* Origin: Пейджер: телефон 510-511, для номера 506-607 (2:5045/44.13)


динамическое созда ние

киньте, плиз, примерчик динамического создания, например, кнопки, а то msdnки
нету =(

10x

* Origin: Linux Registered User #295225 (2:6083/13.15)


Help

Я ВАС приветствую All!

Ребята помогите разобраться скачалл с инета софт для управления синтезатором частоты на МС 145170 через LPT порт а при запуске выскакивает окошко с надписью
Run-time '429':
ActiveX component can't create object.
в чём может быть проблема?
При инсталяции софта были установлены следующие файлы
Vb6stkit.dll
Comcat.dll
Stdole2.tlb
Asycfilt.dll
Olepro32.dll
Oleaut32.dll
Msvbvm60.dll
Msmask32.ocx

И ещё одна библиотека под названием MC145170.dll а также программа для управления самим синтезатором mccnfg.exe
Софт был скачан с www.gsl.net/zl1wjq/mswin.zip (1528kb)
Если кто может помочь разобраться вышлю MC145170.dll и mccnfg.exe
исходников нет и думаю, что автор не даст их.
Да ещё система стоит WIN 98.
Может кто писал подобный софт для управления данной микросхемой то поделитесь пожалуйста.

С уважением, Роман Спотарь.
Home 380-6242-39915 (15:30-21:00)

* Origin: Зажигалка Zippo огнетушитель UnZippo (2:4653/10.5)


Re: динамическое созда ние

Мы где-то виделись, Gennady?

10 Oct 03 23:59:38 в RU.VISUAL.BASIC Gennady Tarada -> All:

GT> киньте, плиз, примерчик динамического создания, например, кнопки, а то
GT> msdnки нету =(

Dim l As Label
Set l = Controls.Add("VB.Label", "Label2")
With l
.Move 0, 0, 60, 16
.Caption = "Лейбл 2"
.Visible = True
End With

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: Help

Мы где-то виделись, Roman?

10 Oct 03 20:13:00 в RU.VISUAL.BASIC Roman Spotar -> All:

RS> Run-time '429':
RS> ActiveX component can't create object.

[здесь ничего и не было]

RS> И ещё одна библиотека под названием MC145170.dll а также программа для

[здесь ничего и не было]

Попробуй выполнить
regsvr32 MC145170.dll

Всего хорошего!
Дмитрий Козырев aka Master

P.S. Хоть это и не совсем по теме конференции.

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: динамическое созда ние

/Hу как оно, Gennady?! Ты завел(а) себе йожыга?/

10 Окт 03 в 23:59 Gennady Tarada == All:

GT> киньте, плиз, примерчик динамического создания, например, кнопки, а то
GT> msdnки нету =(

Вот тебе примерчик из MSDN:

===== _Windows Clipboard_ родился =====
Add Method (Controls Collection)


Adds a control to the Controls collection and returns a reference to the control.

Syntax

object.Add (ProgID, name, container)

The Add method syntax has these parts:

Part Description
object Required. Anobject expression that evaluates to an object in the Applies To list.
ProgID Required. A string that identifies the control. The ProgID of most controls can be determined by viewing the Object Browser. The ProgID is composed of the Library and Class of the control. For example, the CommandButton control's ProgID is VB.CommandButton. In cases where the ProgID differs from that shown in the Object Browser, Visual Basic displays an error message that contains the correct ProgId.
name Required. A string that identifies the member of the collection.
container Optional. An object reference that specifies a container of the control. If not specified or NULL, defaults to the container to which the Controls collection belongs. You can put a control in any existing container control (such as the Frame control) by specifying this argument. A user control or an ActiveX document can also be a container.


Remarks

Note The Controls collection is a late-bound collection. This means the compiler cannot determine in advance which controls are contained by the collection, their objects or their interfaces. Without this information, the Auto Statement Builder will not function.

This method allows you to add controls to an application at run time. Dynamic control addition can be used to add the functionality of a control to an application, even after the application has been compiled and deployed. For example, you may have several complex user controls, each suited to a different task. Depending on an external factor, such as time or date or user input, a different user control could be added to an existing form in an application. You can also use the container argument of the method to specify a container control (such as the Frame control) to position the control. Or you can design an application that automatically reads a file, database, or registry entry for new controls to load. In this way, you can modify an application without having to redeploy it.

Important When you add an unreferenced control that requires a license to an existing (deployed) application, you must also add the license key for the control before using the Add method. For information on when and how to add licenses, see "Licenses Collection" in the See Also list.

Adding Unreferenced Controls at Run Time
You can also use the Add method to dynamically add a control that is not referenced in the project. (An "unreferenced" control is a control that is not present in the Toolbox.) To do so, you must also add the control's License key to the Licenses collection as well. The example below adds a control's license key before adding the control itself:

Option Explicit
Private WithEvents extCtl As VBControlExtender

Private Sub Form_Load()
Licenses.Add "prjWeeks.WeeksCtl", "xydsfasfjewfe"
Set extCtl = Form1.Controls.Add("prjWeeks.WeeksCtl", "ctl1")
extCtl.Visible = True ' The control is invisible by default.
End Sub

Note See Add Method (Licenses Collection) in the See Also list for more information about retrieving a control's license key.

In order to program the events of such an unreferenced control, however, you must declare an object variable using the WithEvents keyword as a VBControlExtender object (shown above), and set the object variable to the reference returned by the Add method. Then use the VBControlExtender object's ObjectEvent event to program the control's events. An abbreviated example is shown below.

Option Explicit
Dim WithEvents objExt As VBControlExtender ' Declare VBControlExtender variable

Private Sub LoadControl()
Licenses.Add "Project1.Control1", "xydsfasfjewfe"
Set objExt = Controls.Add("Project1.Control1", "myCtl")
objExt.Visible = True
End Sub

Private Sub extObj_ObjectEvent(Info As EventInfo)
' Program the events of the control using Select Case.
Select Case Info.Name
Case "Click"
' Handle Click event here.
' Other cases now shown
Case Else ' Unknown Event
' Handle unknown events here.
End Select
End Sub

Note You can't assign an intrinsic control to the VBControlExtender variable; any attempt will result in a type mismatch error.

You can also program the events of a dynamically added control by declaring an object variable using the WithEvents keyword, and setting the reference returned by the method to the variable, as shown below:

Option Explicit
' Declare object variable as CommandButton.
Private WithEvents cmdObject As CommandButton

Private Sub Form_Load()
Set cmdObject = Form1.Controls.Add("VB.CommandButton", "cmdOne")
cmdObject.Visible = True
cmdObject.Caption = "Dynamic CommandButton"
End Sub

Private Sub cmdObject_Click()
Print "This is a dynamically added control"
End Sub

If you intend to add a user control or any ActiveX control to your form, you must either add the control to the Toolbox, or add its License key to the Licenses collection. See the Add Method (Licenses Collection) for more information.

Note If you add an ActiveX or user control to your project but don't use it on a form, you must also uncheck the Remove Information About Unused ActiveX Controls option on the Make tab of the Project Properties dialog box. If your application attempts to add the control, the Add method will fail because the necessary information has been discarded.

Removing Controls
To remove any controls added dynamically, use the Remove method. It should be noted that you can only remove controls added using the Add method (in contrast to controls added using the Load statement). The example below removes a dynamically added control:

Form1.Controls.Remove "ctl1" ' The control's name is ctl1.

===== _Windows Clipboard_ умер :( =====

With best regards, Anton Ziborov aka BeNS.
* Origin: Don't look too far /*_bensdeveloper(at)rambler.ru_*/ (2:5035/73)


Re: динамическое созд а ние

On Sat, 11 Oct 2003 13:20:00 +0700 Dmitriy Kozyrev
wrote:

DK> Dim l As Label
DK> Set l = Controls.Add("VB.Label", "Label2")
DK> With l
DK> .Move 0, 0, 60, 16
DK> .Caption = "Лейбл 2"
DK> .Visible = True
DK> End With

а как события обрабатывать?

Private Sub Label2_Click()
Print "Hello!"
End Sub

^^^^ не работает

* Origin: Linux Registered User #295225 (2:6083/13.15)



Назад Содержание Вперед




Главная     Программы     Статьи     Разное     Форум     Контакты