Форум: "Потрепаться";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизКод 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c