Главная страница
    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-36085
Граф
2002-12-02 03:12
2002.12.12
кто-нибудь использовал TThreadList для создания пула потоков


1-36215
Dber
2002-11-30 16:15
2002.12.12
Нормальный Report


1-36127
Grrey
2002-12-03 11:50
2002.12.12
Сознание компонента. Похоже глюк делфи.


1-36238
SkyQuake
2002-11-30 13:56
2002.12.12
Как удалить отображённый в пямяти файл


1-36237
Евгений1001
2002-11-30 05:50
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский