Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Прорисовываться только до границ формы


Автор: ShadowDancer 9.4.2006, 12:30
Имеется код, который рисует квадратик. Вопрос: как его прорисовывать чтобы значения не уходили в минус, то есть прорисовывать только по форме.
Код:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    Capturing : bool;
    Captured : bool;
    StartPlace : TPoint;
    EndPlace : TPoint;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function MakeRect(Pt1: TPoint; Pt2: TPoint): TRect;
begin
  if pt1.x < pt2.x then
  begin
    Result.Left := pt1.x;
    Result.Right := pt2.x;
  end
  else
  begin
    Result.Left := pt2.x;
    Result.Right := pt1.x;
  end;
  if pt1.y < pt2.y then
  begin
    Result.Top := pt1.y;
    Result.Bottom := pt2.y;
  end
  else
  begin
    Result.Top := pt2.y;
    Result.Bottom := pt1.y;
  end;
end;


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if Captured then
    DrawFocusRect(Form1.Canvas.Handle,MakeRect(StartPlace, EndPlace));
  StartPlace.x := X-64;
  StartPlace.y := Y-64;
  EndPlace.x := X+64;
  EndPlace.y := Y+64;
  DrawFocusRect(Form1.Canvas.Handle, MakeRect(StartPlace, EndPlace));
  Capturing := true;
  Captured := true;
end;

end.


Автор: Snowy 9.4.2006, 17:05
Код
  if x > 64 then StartPlace.x := X-64 else StartPlace.x := 0;
  if Y > 64 then StartPlace.y := Y-64 else StartPlace.y := 0;
  EndPlace.x := StartPlace.x + 128;    
  EndPlace.y := StartPlace.y + 128;

Автор: ShadowDancer 9.4.2006, 20:50
А как, допустим, прорисовываться только до пределов формы, размером 300х300 ?

Автор: Демо 9.4.2006, 21:16
Цитата(ShadowDancer @ 9.4.2006, 20:50 Найти цитируемый пост)
А как, допустим, прорисовываться только до пределов формы, размером 300х300 ?


Арифметику в школе изучал? Всего-то нужно вычислять длину отрезков.

Автор: Snowy 9.4.2006, 22:36
Код

  if x > 64 then StartPlace.x := X-64 else 
    if width - StartPlace.x < 128 then StartPlace.x := width - 128
      else StartPlace.x := 0;
  if Y > 64 then StartPlace.y := Y-64 else 
    if height - StartPlace.y < 128 then StartPlace.x := height - 128
      else StartPlace.y := 0;    
  EndPlace.x := StartPlace.x + 128;     
  EndPlace.y := StartPlace.y + 128;

Автор: ShadowDancer 10.4.2006, 16:39
Цитата(Демо @ 9.4.2006, 21:16 Найти цитируемый пост)
Арифметику в школе изучал? Всего-то нужно вычислять длину отрезков.

Просто не совсем въехал по этой теме.

Snowy, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)