Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.01 c
14-25554
Тимохов
2003-12-18 17:31
2004.01.09
Chess


14-25578
SAG
2003-12-18 02:05
2004.01.09
Сборник


14-25614
mOBSCENE
2003-12-17 03:02
2004.01.09
массеги между программами


3-25209
www
2003-12-11 14:50
2004.01.09
Date и int


14-25559
JibSkeart
2003-12-18 13:33
2004.01.09
:))))





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский