Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как на канве нарисовать жирную пунктирную линию? Pen.Style=psDot 
:(
    Опции темы
ДЫМ
Дата 20.1.2005, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: нет
Всего: 8



Свойство пера Style определяет вид линии. При Pen.Style=psDot выводится пунктирная линия, но это справедливо только для Width = 1. В противном случае линии этих стилей рисуются как сплошные.
Неужели никак нельзя нарисовать пунктирную линию, например для Width = 10?


PM MAIL WWW   Вверх
mvdr
Дата 20.1.2005, 04:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 42



можно заморочиться и самому нарисовать какой надо пунктир. через цикл рисуем линию через определенное кол-во пикселей.


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
RA
Дата 20.1.2005, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 1
Всего: 115



Код


 Canvas.Pen.Color:= $484848;
 Canvas.Pen.Style:= psDot;
 Canvas.Pen.Width:= 1;
 Canvas.Rectangle(0, 0, ClientWidth, ClientHeight);



Это сообщение отредактировал(а) RAdmin - 20.1.2005, 07:00
PM   Вверх
p0s0l
Дата 20.1.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Borland не стал делать поддержку геометрических pen'ов... Сейчас в TPen реализован только косметический pen. Геометрический же позволяет рисовать и жирные и пунктирные и скругленные, жирные пунктиры могут быть как заливкой так и паттерном/битмапом. Короче возможностей куча, но делать это придется через WinAPI...
Создается это дело через ExtCreatePen..
Щас проверять некогда, уже надо бежать, но можешь попробовать так:
если в TPen можно указывать Handle pen'а, то можно самому вручную создать геометрический pen, и установить его:
TCanvas.Pen.Handle := ExtCreatePen (PS_GEOMETRIC, PS_DASH or PS_ENDCAP_ROUND or PS_JOIN_ROUND, 10, @lb, 0, nil)...
А далее рисовать обычными TCanvas.LineTo и т.д....



--------------------
С уважением, г-н Посол.
PM   Вверх
ДЫМ
Дата 21.1.2005, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: нет
Всего: 8



p0s0l
Цитата

если в TPen можно указывать Handle pen'а, то можно самому вручную создать геометрический pen, и установить его:
TCanvas.Pen.Handle := ExtCreatePen (PS_GEOMETRIC, PS_DASH or PS_ENDCAP_ROUND or PS_JOIN_ROUND, 10, @lb, 0, nil)...
А далее рисовать обычными TCanvas.LineTo и т.д....


Так просто TCanvas.Pen.Handle значение функции не присвоишь, но даже на чистом API ничего не получается.

Что я делаю не так?
Код

procedure TForm1.Button1Click(Sender: TObject);
var lb:tagLOGBRUSH;
   DC: hDC;
   Wnd: HWnd;
   Pen:hPen;
begin
Pen :=ExtCreatePen (PS_GEOMETRIC and PS_DASH, 10, lb, 0, nil);
Wnd:=Form1.Handle;
DC := GetWindowDC(Wnd);
SelectObject(DC, Pen);
Rectangle(DC, 10, 10, 100, 100);

MoveToEx(DC, 100, 100, nil);
LineTo(DC, 200, 200);

DeleteObject(DC, Pen);
end;


Рисуется обычная сплошная линия шириной в 1 пиксель.

Если вместо
Код

Pen :=ExtCreatePen (PS_GEOMETRIC and PS_DASH, 10, lb, 0, nil);

использовать функцию CreatePen
Код

Pen:=CreatePen(PS_GEOMETRIC and PS_DASH,10,10);


то рисуется линия уже шириной 10, но все равно сплошная


PM MAIL WWW   Вверх
RA
Дата 21.1.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 1
Всего: 115



Код


lb.lbColor := ColorToRGB(ClBlack);
lb.lbStyle := bs_Solid;

Pen :=ExtCreatePen (PS_GEOMETRIC or PS_DASH, 1, lb, 0, nil);
Wnd:=Form1.Handle;
DC := GetWindowDC(Wnd);
SelectObject(DC, Pen);
//Rectangle(DC, 10, 10, 100, 100);

MoveToEx(DC, 100, 100, nil);
LineTo(DC, 100, 200);

DeleteObject(Pen); {В D6 только так}



Тоесть нехватало lb.lbStyle := bs_Solid;

Это сообщение отредактировал(а) RAdmin - 21.1.2005, 10:11
PM   Вверх
p0s0l
Дата 21.1.2005, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Цитата
Так просто TCanvas.Pen.Handle значение функции не присвоишь, но даже на чистом API ничего не получается.
Только что проверил - спокойно присваивается smile
Код
procedure TForm1.Button2Click(Sender: TObject);
var
 lb : LOGBRUSH;
begin
 lb.lbStyle := BS_SOLID;
 lb.lbColor := clGreen;
 Canvas.Pen.Handle := ExtCreatePen(PS_GEOMETRIC or PS_DASH, 10, lb, 0, nil);
 Canvas.Rectangle(20, 20, 90, 80);
end;





--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 21.1.2005, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Перенесено из раздела Дельфи


--------------------
С уважением, г-н Посол.
PM   Вверх
ДЫМ
Дата 22.1.2005, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: нет
Всего: 8



Спасибо, все понял.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0621 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.