Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];
ВнизКак юзая FrameRgn отрисовывать выделение как в PhotoShop? Найти похожие ветки
← →
AlexT1000 (2002-11-29 14:08) [0]Т.е. что бы выделение имело эффект непрерывного плавного движения
← →
Sonder (2002-12-01 17:09) [1]Если это до сих пор актуально.
Насчет плавного движения:
Легко использовать DrawFocusRect при помощи сл. процедур:
FormMouseDown, FormMouseMove, DrawSoftFrame, FormMouseUp.
Насчет FrameRgn:
Смотри Button1Click, там этот FrameRgn. Фигня. Придется добавить Mode типа pmNotXor или Draw/Erase в процедуру My(Yours)FrameRgn, где создавать эти регионы и браши(в зависимости от Mode, хотя можно сделать глобальные BrshErase, BrshDraw)
var
TestForm: TTestForm;
dwFlag: boolean;
Xst, Yst: integer;
Dx, Dy: integer;
RectExist: boolean = false;
implementation
{$R *.dfm}
{ TTestForm }
procedure DrawSoftFrame(Handle: HWND; X, Y: integer; Dx, Dy: integer);
procedure DrawFRBounds(L,T,W,H: Integer);
var
h_DC: HDC;
begin
h_DC := GetDC(Handle);
DrawFocusRect(h_DC, Bounds(L, T, W, H));
end;
begin
if Dx*Dy = 0 then begin
DrawFRBounds(X+1,Y+2,0,0);
//Почему X+1, Y+2?
//Сначала было X, Y, тогда кусочек FocusRect"а по уродски выглядывал из под курсора.
exit;
end;
if Dx*Dy > 0 then
if (Dx>0) then
DrawFRBounds(X,Y,Dx,Dy)
else
DrawFRBounds(X+Dx,Y+Dy,-Dx,-Dy)
else
if (Dx>0) then
DrawFRBounds(X,Y+Dy,Dx,-Dy)
else
DrawFRBounds(X+Dx,Y,-Dx,Dy);
end;
procedure TTestForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if RectExist then DrawSoftFrame(Handle,Xst,Yst,Dx,Dy);
dwFlag := True;
Dx := 0; Xst := X;
Dy := 0; Yst := Y;
DrawSoftFrame(Handle,X,Y,0,0);
end;
procedure TTestForm.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin;;
dwFlag := false;
Dx := X - Xst;
Dy := Y - Yst;
{if not RectExist then // попробуй убрать REM, может это надо
begin }
DrawSoftFrame(Handle,Xst,Yst,Dx,Dy);
{RectExist := true;
end }
end;
procedure TTestForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin;;
if not dwFlag then exit;
DrawSoftFrame(Handle,Xst,Yst,Dx,Dy);
Dx := X - Xst;
Dy := Y - Yst;
DrawSoftFrame(Handle,Xst,Yst,Dx,Dy);
end;
procedure TTestForm.Button1Click(Sender: TObject);
var Region: HRGN;
DC: HDC;
Brsh: HBRUSH;
begin
DC := GetDC(Handle);
Region := CreateRectRgn(10, 20, 40, 60);
Brsh := CreateSolidBrush(clBlack);
FrameRgn(DC, Region, Brsh,1,1);
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c