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

Вниз

Image+Rect   Найти похожие ветки 

 
Klim   (2007-12-19 12:27) [0]

Есть форма, целиком состоящая из рисунков(bsNone), форма должна изменять свои размеры, если потянуть за нижний правый угол. Решил делать это следующим образом: пользователь "тянет" за угол- рисуется пунктирная рамочка (Rect), отпускает- форма меняет размер.
Делаю это следующим образом:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
resiz:=true;
  DC := GetDC(0);
  Canvas_ := TCanvas.Create;
  Canvas_.Handle := DC;
  //
  mx:=mouse.CursorPos.X;
  my:=mouse.CursorPos.y;  
  dx:=form1.Left+form1.Width-mx;
  dy:=form1.Top+form1.Height-my;
  //
  Rec:= Rect(Form1.Left,Form1.Top,mouse.CursorPos.X+dx,mouse.CursorPos.y+dy);//
  Rec_:=Rect(0,0,x+dx,y+dy);
  //
  Canvas_.DrawFocusRect(rec); //рисуем рамку
//
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 fl:=form1.Left;
 ft:=form1.top;
 mx:=mouse.CursorPos.X;  
 my:=mouse.CursorPos.y;  
if (resiz=true) then
 begin
 Canvas_.DrawFocusRect(rec); //стираем старую
 //
 if (mx+dx)-rec.Left>150 then  //50 ограничение на минимум размера формы
     rec.Right:=mx+dx;
 //
 if (my+dy)-rec.Top>150 then
     rec.Bottom:=my+dy;
 Canvas_.DrawFocusRect(rec); // рисуем рамку на новом месте
 end;
//

end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
if resiz then
 begin
 form1.Width:= rec.Right-rec.Left;    
 form1.height:=rec.Bottom-rec.Top;  
 end;
 //
 Canvas_.DrawFocusRect(rec); // рисуем рамку на новом месте, ракрашивая старую
 //
 resiz:=false;
 ReleaseDC(0, DC);
 Canvas_.Free;
end;


Все работает замечательно, НО, когда TransparentColor формы в true, то рамка рисуется везде, кроме самой формы(если происходит уменьшение формы).
Что делать? Как быть?


 
{RASkov} ©   (2007-12-19 14:35) [1]

> [0] Klim   (19.12.07 12:27)

А попробуй вот такой примерно вариант:
function TForm1.MouseInRectSizing(const X, Y: Integer): Boolean;
begin
 Result:=(X>ClientWidth-10) and (Y>ClientHeight-10);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if not MouseInRectSizing(X, Y) then Exit;
 if Button=mbLeft then begin
   ReleaseCapture; Perform(WM_SYSCOMMAND, $F008, 0);
 end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if MouseInRectSizing(X, Y) then Cursor:=crSizeNWSE else Cursor:=crDefault;
end;


Или тебе необходимо рисвовать "фокусную рамку" и потом менять размер?


 
Klim   (2007-12-19 15:57) [2]

необходимо рисовать фокусную рамку



Страницы: 1 вся ветка

Текущий архив: 2009.10.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
15-1249613874
Дмитрий С
2009-08-07 06:57
2009.10.11
Как подключить слабые колонки к сильному усилителю?


2-1249889488
ЛД
2009-08-10 11:31
2009.10.11
DLL


15-1249934148
syteser78
2009-08-10 23:55
2009.10.11
У кого нибуть из вас воровали почтовый ящик?


15-1248781875
TIF
2009-07-28 15:51
2009.10.11
URL-кодировка (URL encoding, Percent-encoding)


15-1250109003
Юрий
2009-08-13 00:30
2009.10.11
С днем рождения ! 13 августа 2009 четверг