Главная страница
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.024 c
4-1176208381
Mabia
2007-04-10 16:33
2007.10.14
Создание exe файла


15-1189955101
master_asasin
2007-09-16 19:05
2007.10.14
Подключение


15-1190105915
Сергей М.
2007-09-18 12:58
2007.10.14
про Линух ..


15-1189679887
Sonia
2007-09-13 14:38
2007.10.14
VAX/VMS


2-1190014526
~ShamaN~
2007-09-17 11:35
2007.10.14
Странности с модальной формой