Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

Код Delphi на VB!   Найти похожие ветки 

 
Maxim Vetera   (2003-12-17 10:00) [0]

Привет!

Как записать следующий код Delphi на VB (версии 4 или 5)?

type
SomeArr=array[0..1] of Single;

function FillArr:SomeArr;
begin
Result[0]:=17;
Result[1]:=2003;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(FloatToStr(FillArr[0]));
ShowMessage(FloatToStr(FillArr[1]));
end;


 
Digitman ©   (2003-12-17 10:46) [1]

Option Base 0

Function FillArr() As Variant
Dim Arr(2) As Single
Arr(0) = 17
Arr(1) = 2003
FillArr = Arr
End Function

Sub Button1Click()
MsgBox FillArr(0), , ""
MsgBox FillArr(1), , ""
End Sub


 
Maxim Vetera   (2003-12-17 11:02) [2]

2Digitman © (17.12.03 10:46)

Спасибо, но я имел в виду чтобы переменной можно было присвоить тип, возвращаемый функцией.

Уточняю код примера на Delphi:

type
TSomeArr=array[0..1] of Single;

function FillArr: TSomeArr;
begin
Result[0]:=17;
Result[1]:=2003;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
SA:TSomeArr;

begin
SA:=FillArr;
ShowMessage(FloatToStr( SA[0]));
ShowMessage(FloatToStr( SA[1]));
end;


 
Digitman ©   (2003-12-17 11:08) [3]

VB-ф-ции не могут возвращать результат пользовательского типа
т.е. именно в том виде, в каком ты хочешь, портировать текст не удастся

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

в теле же FillArray просто заполняй поля факт.аргумента, память под который должна явно выделяться вызывающим кодом


 
Maxim Vetera   (2003-12-17 11:29) [4]

2Digitman © (17.12.03 11:08)

А сам пользовательский тип задать можно?

Type End Type это как я понял запись.


 
Maxim Vetera   (2003-12-17 11:37) [5]

Пока добился следующей работающей программы:

для Module1:

Type SomeType
SomeArr(2) As Single
End Type

Function f() As SomeType
MsgBox "Привет"
End Function


для Form1:

Private Sub Command1_Click()
f
End Sub


 
Digitman ©   (2003-12-17 11:38) [6]


> А сам пользовательский тип задать можно?
> Type End Type это как я понял запись


да, директива TYPE описывает структуру польз.типа
ну и что ?

мне не оч понятно - ты VB-то знаешь как таковой ?
может, прежде чем портировать Паскаль-код, следует таки изучить для начала все тонкости собственно VB ?


 
Maxim Vetera   (2003-12-17 11:52) [7]

ЭВРИКА!

для Module1:

Type TSomeType
SomeArr(2) As Single
End Type

Function FillArr() As TSomeType
FillArr.SomeArr(0) = 17
FillArr.SomeArr(1) = 2003
End Function


для Form1:

Private Sub Command1_Click()
Dim SA As TSomeType
SA = FillArr
Print SA.SomeArr(0)
Print SA.SomeArr(1)
End Sub


2Digitman © (17.12.03 11:38) [6]


> мне не оч понятно - ты VB-то знаешь как таковой ?
> может, прежде чем портировать Паскаль-код, следует таки
> изучить для начала все тонкости собственно VB ?


> VB-ф-ции не могут возвращать результат пользовательского
> типа


С утра изучил достаточно, чтобы разобраться, что VB-ф-ции не могут возвращать результат пользовательского типа

С уважением.
Спасибо за ответы.


 
Maxim Vetera   (2003-12-17 11:55) [8]

С утра изучил достаточно, чтобы разобраться, что VB-ф-ции МОГУТ возвращать результат пользовательского типа

Извиняюсь за ошибку.


 
Digitman ©   (2003-12-17 12:58) [9]


> Maxim Vetera


в таком случае и я извинюсь

имелось ввиду, что VB-ф-ции не могут возвращать МАССИВЫ польз.типов.. а отдельный экз-р переменной польз.типа - пожалуйста... но это совсем не то, что ты имел ввиду, когда интересовался портацией кода "один-в-один"


 
Maxim Vetera   (2003-12-17 13:41) [10]

>Digitman

Проблемы понимания друг друг друга неизбежны. Чтобы их не было (или меньше по крайней мере) русский язык формализовать надо.
Войны начинаются, из-за того, что люди договориться не могут.

Так что взаимопонимание между людьми и программами "один-в-один" это unreal.

Вот, что у меня получилось:

для Module1

Option Base 1 " В этом случаи, например Redim MyArray(5) резервирует память для 5 элементов, иначе для 6
"Определяем тип пользователя - динамический массив
Type TSomeType
SomeArr() As Single
End Type

"Задаем функцию, возвращающую nRand случайных элементов
Function FillArr(nRand As Integer) As TSomeType
ReDim FillArr.SomeArr(nRand)
For i = 1 To nRand
FillArr.SomeArr(i) = Rnd
Next i
End Function


для Form1

"Генерация и печать случайных элементов с использовании функции FillArr()
Private Sub Command1_Click()
Dim n As Integer
Dim SA As TSomeType
Cls
n = Val(InputBox("Введите количество случайных элементов"))
SA = FillArr(n)
For i = LBound(SA.SomeArr) To UBound(SA.SomeArr)
Print SA.SomeArr(i)
Next i
End Sub



> что VB-ф-ции не могут возвращать МАССИВЫ польз.типов.. а
> отдельный экз-р переменной польз.типа - пожалуйста...


Явно, видимо так и есть, но неявно можно возвращать любые структуры, например указав тип пользователя вместо выделенного жирным As Single в примере.


 
Digitman ©   (2003-12-17 15:23) [11]

мне не оч понятно, на кой шут тебе этот VB сдался..
и что ты делаешь на Делфи-конференции, коль уж тебя так заботит VB)


 
Maxim Vetera ©   (2003-12-17 16:15) [12]

Я дельфист, студентам VB даю. А эту задачку попросил помочь решить и.о. зав. кафедрой.
Удачи!


 
Maxim Vetera ©   (2003-12-17 16:16) [13]

Зарегистрировался.


 
Digitman ©   (2003-12-17 17:07) [14]


> Maxim Vetera


ну решение задачки, коль ты считаешь его найденным, строго говоря - некорректное ... не соответствует оно в точности начальным условиям


 
Maxim Vetera ©   (2003-12-17 19:09) [15]

Для решения задачи мне нужно было узнать как сделать в VB, чтобы функция возвращала тип пользователя. Я знал как это делается в Delphi и решил сформировать вопрос, основынный на простом примере.



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
14-25567
Kein
2003-12-17 18:06
2004.01.09
почему?


4-25641
dream
2003-11-06 12:18
2004.01.09
как создать новую форму программно?


14-25514
}|{yk
2003-12-16 11:33
2004.01.09
Можно ли заставить Builder пользоваться делфийским дебуггером?


4-25637
ZEE
2003-11-05 17:34
2004.01.09
OnChange у Edit а : (


3-25244
yorik
2003-12-10 23:08
2004.01.09
dbf для Excel