Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
snapp
-
- Начинающий
-
-
- Сообщения: 2
- Зарегистрирован: 14.10.2008 (Вт) 17:33
snapp » 14.10.2008 (Вт) 17:41
помогите перекодить с QBasic на VB
вот исходник QBasic
- Код: Выделить всё
SCREEN 12
For i = 0 To 5
For j = 0 To 5
Line (10 + j * 40, 10 + j * 40)-(210 + j * 40, 10 + j * 40), 7
Line (10 + i * 40, 10)-(210 + i * 40, 210), 7
Next j
Next i
For i = 0 To 4
For j = 0 To 4
x = 50 + i * 40 + j * 40
y = 30 + i * 40
s = (i + j) Mod 2
If s = 0 Then Paint (x,y),5,7
Next j
Next i
на QB первый цикл создает сетку из паралелограммов.. а второй цикл - закрашивает их через один. как добиться такого же резульата в VB. и как правильно его там оформить чтобы просмотреть результат.
[Viper] :: Не забываем ползоваться тэгами CODE!
-
Proxy
-
- Профессор VB наук
-
-
- Сообщения: 2941
- Зарегистрирован: 31.08.2007 (Пт) 4:41
Proxy » 14.10.2008 (Вт) 18:01
Убери Screen 12, подставь перед каждым Line "Form1." Предварительно ещё "Form1.autoredraw = true"
А вот что Paint делает я не помню. Если заливка, то посмотри про заливку посты. Скорей всего без API для заливки не выйдет.
Ах да, и цвет 7 убери. Тут будет чёрный подефолту, если ты ничего нигде не менял. Белый по серому ты не увидишь.
Follow the white rabbit.
-
snapp
-
- Начинающий
-
-
- Сообщения: 2
- Зарегистрирован: 14.10.2008 (Вт) 17:33
snapp » 16.10.2008 (Чт) 17:08
на QB так
- Код: Выделить всё
CLS
SCREEN 12
R = 200: n = 16: k = 10: h = R \ k
pi = 4 * ANT(1)
u = 2 * pi / n
FOR i = 1 TO n
xi = 320 + R * cos (i * u)
yi = 240 + R * sin (i * u)
LINE (320, 240)-(xi,yi),5
next i
for j = 1 to k
circle(320, 240), j * h , 5
next j
for j = 0 to k - 1
for i = 1 to n
x=320 + (h/2 +j*h)*cos(u/2+i*u)
y=240 + (h/2 +j*h)*sin(u/2+i*u)
s=(i+j) MOD 2
if s=0 then paint (x,y),11 ,5
next j
next i
paint (320 + R + 2, 240), 2, 5
на VB вышло так
- Код: Выделить всё
Option Explicit
Private Enum FloodFillType
FLOODFILLBORDER = 0
FLOODFILLSURFACE = 1
End Enum
Private Declare Function ExtFloodFill Lib "gdi32" ( _
ByVal hDC As Long, ByVal x As Long, ByVal y As Long, _
ByVal crColor As Long, ByVal wFillType As FloodFillType) As Long
Private Sub Form_Load()
Dim i As Long, j As Long, s As Long
Dim x As Long, y As Long
Dim R As Long, n As Long, k As Long
Dim h As Single, u As Single, pi As Single
Dim xi As Single, yi As Single
AutoRedraw = True
ScaleMode = vbPixels
R = 200: n = 16: k = 10: h = R \ k
pi = 4 * Atn(1)
u = 2 * pi / n
For i = 1 To n
xi = 320 + R * Cos(i * u)
yi = 240 + R * Sin(i * u)
Line (320, 240)-(xi, yi), vbBlack
Next i
For j = 1 To k
Circle (320, 240), j * h, vbBlack
Next j
FillColor = vbRed
FillStyle = vbSolid
For j = 0 To k - 1
For i = 1 To n
x = 320 + (h / 2 + j * h) * Cos(u / 2 + i * u)
y = 240 + (h / 2 + j * h) * Sin(u / 2 + i * u)
s = (i + j) Mod 2
If s = 0 Then ExtFloodFill hDC, x, y, vbBlack, FLOODFILLBORDER
Next i
Next j
End Sub
чертит 10 колец и разбивает их лучами из середины.. разбивы в кольцах закрашивает через один.. для 9и колец все нормально выплняется, а для 10ого кольца нет.. Где ошибка?
-
djalex777
-
- Постоялец
-
-
- Сообщения: 461
- Зарегистрирован: 23.03.2006 (Чт) 16:02
-
djalex777 » 16.10.2008 (Чт) 17:37
Линия не рисуется до конца, поэтому заливка заливает (во как
) и то, что рядом. Либо линни подлиннее, либо окружности покороче...
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 64