Рисование _закрашенных_ треугольников и координаты клика.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Рисование _закрашенных_ треугольников и координаты клика.

Сообщение TAlex » 16.06.2003 (Пн) 12:51

Всем привет.
1. Есть двумерный массив, каждый элемент которого необходимо отобразить графически: 0-белый квадрат, 1-черный, 2-треугольник слева внизу, 3-треугольник справа внизу и т.д. Начал рисовать на PictureBox все получается кроме закрашивания треугольников ;( И не могу найти как это обойти. Скорее всего нужно рисовать как-то по-другому.

2. После отрисовки по событию "клик мыши" нужно взять координаты клика и сопоставить их с элементом массива.

Заранее спасибо всем откликнувшимся.

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 16.06.2003 (Пн) 15:19

Мил человек, а как ты закрашиваешь-то? :)
Кусочек кода или что-нибудь такое предоставь, чтобы разобраться можно было.

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 16.06.2003 (Пн) 15:59

В том то и дело, что не знаю как закрасить!
При рисовании прямоугольника можно сразу его закрасить: LINE с опцией BF.

А вообще-то думаю, что треугольник нарисованный с помощью LINE закрасить нельзя. Вот и спрашиваю как можно решить поставленную задачу, не приводя своих методов.

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 16.06.2003 (Пн) 16:51

Есть вот такие функции:

Код: Выделить всё
Public Declare Function FillRect Lib "user32" Alias "FillRect" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long

Public Declare Function FillRgn Lib "gdi32" Alias "FillRgn" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long


Первая закрашивает прямоугольник. Вторая посложнее - закрашивает область. Подробное описание есть в МСДН.

cg_ck
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 11.06.2003 (Ср) 12:02
Откуда: Riga(Latvia)

хм

Сообщение cg_ck » 16.06.2003 (Пн) 17:00

Галимый совет:
Не помню как, но можно было закрашивать замкнутые фигуры без всяких апи... Если не кто не ответит до завтра, сам отвечу, в книге посмотрю ;)
Ходит по лесу хомяк, хищный маленький дурак...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.06.2003 (Вт) 10:17

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

Код: Выделить всё
Option Explicit

Private Type POINTAPI
  x As Long
  y As Long
End Type

Private Declare Function PolyPolygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

Private Sub Form_Paint()
  Dim pts(0 To 2) As POINTAPI
  Dim numpoints(0 To 0) As Long
  Dim BrushHandle As Long
 
  pts(0).x = 100: pts(0).y = 0
  pts(1).x = 50: pts(1).y = 100
  pts(2).x = 150: pts(2).y = 100
  numpoints(0) = 3
 
  Me.ForeColor = &HFF00FF
  BrushHandle = CreateSolidBrush(&H346712)
  SelectObject Me.hdc, BrushHandle
  PolyPolygon Me.hdc, pts(0), numpoints(0), 1
  DeleteObject BrushHandle
End Sub


Form.AutoRedraw должно быть False!
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

cg_ck
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 11.06.2003 (Ср) 12:02
Откуда: Riga(Latvia)

'''

Сообщение cg_ck » 17.06.2003 (Вт) 15:43

сори, я поспешил с ответом... Просто у меня это глубоко село в памяти из qBasica. Ничего подобного в Визуале я вчера найти не успел и вариант и КуВасика проверить не успел... Может кто сделает это за меня? Цитирую книжку:

PAINT - оператор
Заполняет графическую область указанным цветом или образцом.
Формат записи:
PAINT [STEP] (x!,y!) [, [{цвет% | образец%}] [, [цвет_границ%] [,фон$]]]
где:
STEP указывает. что координаты задаются относительно текущей графической позиции курсора. и т.д. и т.п.
Ходит по лесу хомяк, хищный маленький дурак...

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 17.06.2003 (Вт) 15:51

paint в vb отсутствует насколько я помню
Ничто так не ограничивает полёт мысли программиста, как компилятор

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 17.06.2003 (Вт) 16:01

Да-а-а-а... Ничего себе как мудрено... А может все-таки есть вариант попроще? Я попробую и эти, но...

А второй пункт вопроса с координатами клика?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.06.2003 (Вт) 17:32

Paint действительно отсутствует в VB.

А с кликом всё ещё сложнее (хотя пока всё несложно :wink:) Придётся хитрыми вычисления заниматься из области планиметрии...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.06.2003 (Ср) 10:38

Есть API-функция FloodFill(hDC, X, Y, crColor) закрашивает область, ограниченную другими цветами. Практически тот же Paint
Lasciate ogni speranza, voi ch'entrate.

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 19.06.2003 (Чт) 11:26

Ну а все-таки как с кликом быть? Или вообще может не рисовать надо а в какую-нибудь MSFlexGrid али еще куда-нить это все сделать. С закрашенными-незакрашенными ячейками все просто (и с кликом заморачиваться не надо - там возвращается номер кликнутой ячейки), а что придумать с треугольником?

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Сообщение SergeySV » 19.06.2003 (Чт) 16:52

TAlex писал(а):Ну а все-таки как с кликом быть? Или вообще может не рисовать надо а в какую-нибудь MSFlexGrid али еще куда-нить это все сделать. С закрашенными-незакрашенными ячейками все просто (и с кликом заморачиваться не надо - там возвращается номер кликнутой ячейки), а что придумать с треугольником?


Посмотри здесь, по мойму по твоей тематике:
http://vbstreets.ru/default.asp?page=li ... =vectorvb1
http://vbstreets.ru/default.asp?page=li ... =vectorvb2
Главное двигаться не быстрее, чем думает твоя голова.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 48

    TopList