Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.14;
Скачать: CL | DM;

Вниз

Как обрисовать выделенный регион штриховой (пунктирной) линией?   Найти похожие ветки 

 
Dr. Andrew   (2007-07-31 03:56) [0]

Доброй ночи, Мастера! Функция FrameRgn обрисовывает регион сплошной линией, а как обрисовать выделенный регион штриховой (пунктирной) линией с использованием региона?


 
MBo ©   (2007-07-31 06:09) [1]

Для регионов нет функций рисования границы пером
Так что траекторию создай (Path) и StrokePath


 
Однокамушкин   (2007-07-31 08:48) [2]


> Функция FrameRgn обрисовывает регион сплошной линией

А если использовать не сплошную кисть, а что-то типа HS_CROSS? Это, конечно, не совсекм пунктир получится, но для вашего случая, возможно, подойдёт...


 
MBo ©   (2007-07-31 09:20) [3]

>а что-то типа HS_CROSS
Я пробовал, для прямоугольных - нормально, для округлых  - убого получается


 
MBo ©   (2007-07-31 09:24) [4]


var
 hr1, hr2: HRGN;
 br: HBRUSH;
begin
 hr1 := CreateEllipticRgn(100, 100, 300, 300);
 hr2 := CreateRectRgn(150, 250, 250, 400);
 CombineRgn(hr1, hr1, hr2, RGN_OR);
 br := CreateHatchBrush(HS_DIAGCROSS, 0);
 FrameRgn(Canvas.Handle, hr1, br, 1, 1);
 DeleteObject(br);
 DeleteObject(hr1);
 DeleteObject(hr2);


 
Инс ©   (2007-07-31 10:18) [5]

1. Может вместо региона записать Path?
2. Может вместо того, чтобы очертить регион пунктиром, очертите его инвертирующей кистью? Тоже будет выделяться и смотрится не так плохо.
3. Придумать (найти) хитрый алгоритм для выделения границы региона (в виде Path, например). Правда в общем случае граница региона может быть сложной (дырки внутри), это нужно учесть.


 
Инс ©   (2007-07-31 10:37) [6]

Может подойдет это?

procedure DrawFocusRgn(DC: HDC; Reg: HRGN; x,y: integer; Width: integer);
var
 Bitmap, MaskField: TBitmap;
 RgnBox: TRect;
begin
 GetRgnBox(Reg,RgnBox);
 Bitmap:=TBitmap.Create;
 Bitmap.Width:=RgnBox.Right;
 Bitmap.Height:=RgnBox.Bottom;
 Bitmap.Canvas.Brush.Color:=clBlack;
 Bitmap.Canvas.Rectangle(0,0,Bitmap.Width,Bitmap.Height);
 Bitmap.Canvas.Brush.Color:=clWhite;
 FrameRgn(Bitmap.Canvas.Handle,Reg,Bitmap.Canvas.Brush.Handle,Width,Width);
 MaskField:=TBitmap.Create;
 MaskField.Width:=Bitmap.Width;
 MaskField.Height:=Bitmap.Height;
 MaskField.Canvas.Brush.Bitmap:=Mask;
 MaskField.Canvas.FillRect(Rect(0,0,MaskField.Width,MaskField.Height));
 BitBlt(Bitmap.Canvas.Handle,0,0,Bitmap.Width,Bitmap.Height,
   MaskField.Canvas.Handle,0,0,SRCAND);
 BitBlt(DC,x,y,Bitmap.Width,Bitmap.Height,Bitmap.Canvas.Handle,0,0,SRCINVERT);
 MaskField.Free;
 Bitmap.Free;
end;



Страницы: 1 вся ветка

Текущий архив: 2007.10.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
2-1190291790
MDSEnterprises
2007-09-20 16:36
2007.10.14
Работа с чужими окнами...


2-1189618648
олег79
2007-09-12 21:37
2007.10.14
защита программ от нелегального копирования


2-1190569290
Bast
2007-09-23 21:41
2007.10.14
Копировать


1-1185839798
Dr. Andrew
2007-07-31 03:56
2007.10.14
Как обрисовать выделенный регион штриховой (пунктирной) линией?


6-1171636318
ovb68
2007-02-16 17:31
2007.10.14
ServerSocket, одновременная передача файлов клиентами