Главная страница
    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.004 c
1-36257
Zergling
2002-12-02 11:23
2002.12.12
Динамический массив, поток и High


14-36345
DimaK
2002-11-16 21:54
2002.12.12
Помогите найти компонент.


14-36341
RV
2002-11-20 12:00
2002.12.12
Ура! Мне отпуск, наконец, подписали!


1-36133
Николай Быков
2002-11-30 19:07
2002.12.12
Как вывести картинку BitMap в OpenGL?


1-36283
Serbor
2002-12-02 17:03
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский