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

Вниз

Как юзая 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
8-36305
DarkSimpson
2002-08-08 02:31
2002.12.12
Где взять алгоритмы FFT и Эквалайзера (на Delphi-Pascal)?


6-36318
Flex
2002-09-29 09:25
2002.12.12
Как закачать файл с сервера, если сервер проверяет поле REFERER?


3-35997
Login
2002-11-23 15:14
2002.12.12
Как без логина подключатся к Access


4-36483
Axis_of_Evil
2002-10-31 15:43
2002.12.12
DeckTop Click


1-36132
SergeyDove
2002-12-03 13:55
2002.12.12
Не запускается проект