Форум: "Основная";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
ВнизКак обрисовать выделенный регион штриховой (пунктирной) линией? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c