Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.005 c
14-36349
zzet
2002-11-18 21:18
2002.12.12
страна непуганых буратин.. гы..


1-36289
RDA
2002-11-30 10:48
2002.12.12
ActivX - F1Book


1-36164
VJar
2002-12-03 23:53
2002.12.12
Установка иконок проекта


1-36252
----
2002-11-29 18:02
2002.12.12
Многопоточность.....


1-36177
konstantinov
2002-12-04 01:18
2002.12.12
Программная установка новой раскладки клавиатуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский