Пунктирная линия толще 1 пт

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Пунктирная линия толще 1 пт

Сообщение Alec » 31.10.2008 (Пт) 18:25

Есть ли какие-нибудь способы нарисовать пунктирную (штрих-пунктирную и проч.) линии толщиной более 1 пт? Или придется циклом по кусочкам (что по моему не есть гуд...)
Иногда лучше вовремя остановиться...
И начать заново!

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

Re: Пунктирная линия толще 1 пт

Сообщение alibek » 31.10.2008 (Пт) 18:43

О чем речь?
Lasciate ogni speranza, voi ch'entrate.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Пунктирная линия толще 1 пт

Сообщение pronto » 31.10.2008 (Пт) 19:14

CreatePen со стилем PS_DASH (=1) и заданной толщиной..?
O, sancta simplicitas!

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Пунктирная линия толще 1 пт

Сообщение Alec » 31.10.2008 (Пт) 19:27

Вообще метод Line и свойства DrawStyle, DrawWidth.
MSDN: "If DrawWidth property setting is greater than 1, DrawStyle property settings 1 through 4 produce a solid line"
А что,
pronto писал(а):CreatePen со стилем PS_DASH (=1) и заданной толщиной
поможет? Просто-так все переписывать под API не хочется (да и не шибко умеется...)
Иногда лучше вовремя остановиться...
И начать заново!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Пунктирная линия толще 1 пт

Сообщение tyomitch » 31.10.2008 (Пт) 19:29

Alec писал(а):Вообще метод Line и свойства DrawStyle, DrawWidth.
MSDN: "If DrawWidth property setting is greater than 1, DrawStyle property settings 1 through 4 produce a solid line"
А что,
pronto писал(а):CreatePen со стилем PS_DASH (=1) и заданной толщиной
поможет?

Нет.
MSDN писал(а):CreatePen returns a pen with the specified width bit with the PS_SOLID style if you specify a width greater than one for the following styles: PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT.
Изображение

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Пунктирная линия толще 1 пт

Сообщение Alec » 31.10.2008 (Пт) 19:37

Потому-то и задан такой вопрос... Как быть?
Иногда лучше вовремя остановиться...
И начать заново!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Пунктирная линия толще 1 пт

Сообщение tyomitch » 31.10.2008 (Пт) 19:38

Переходить на GDI+ :-D
Изображение

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Пунктирная линия толще 1 пт

Сообщение pronto » 31.10.2008 (Пт) 19:43

Извиняюсь за дезу, конечно, ExtCreatePen!
P.S. Нет необходимости все переписывать! Достаточно только тот участок, который отрисовывает прямые. Если появится желание переписать, то выложу примерчик.
O, sancta simplicitas!

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Пунктирная линия толще 1 пт

Сообщение Alec » 31.10.2008 (Пт) 20:17

pronto писал(а):Достаточно только тот участок, который отрисовывает прямые

А как учесть тот факт, что данные о координатах у меня в сантиметрах (и соответственно его долях, тип Single), ScaleMode - сантиметры плюс масштабирование... Пробовал в таких условиях выводить сетку через API, попасть в координаты так и не смог. Так что или все или ничего... Только вот ко "всему" пока морально не готов...
Но за наводку спасибо, может и решусь...
Иногда лучше вовремя остановиться...
И начать заново!

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Пунктирная линия толще 1 пт

Сообщение Alec » 01.11.2008 (Сб) 20:19

Ну, за сутки перевел всю свою графику в использование API.
Теперь пытаюсь вместо CreatePen использовать ExtCreatePen, но она почему-то всегда возвращает 0.
Может у нее какие-нибудь особенности?
Вызываю так:
Код: Выделить всё
PS_ = PS_SOLID 'пока пытаюсь заставить работать так
'...
With Brush
    .lbStyle = BS_SOLID
    .lbColor = FC_
    .lbHatch = 0
  End With
hPen = ExtCreatePen(PS_ Or PS_GEOMETRIC , DW_, Brush, 0, 0)'так возвращает 0
'  hPen = CreatePen(PS_, DW_, FC_) 'так - работает
  hOldPen = SelectObject(hdc, hPen)
'...
Иногда лучше вовремя остановиться...
И начать заново!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Пунктирная линия толще 1 пт

Сообщение pronto » 02.11.2008 (Вс) 9:45

Да, особенности есть. Посмотри пример и все станет ясно.
Вложения
ExtCreatePen Sample.rar
(3.32 Кб) Скачиваний: 57
O, sancta simplicitas!


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

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

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

    TopList