Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2019, 16:13   #1
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию Повторить проект

Всем привет, что почитать и как такое реализовать? https://youtu.be/bTJnmDPX1gc?t=146
С графикой собственно не особо имел дело, а тут просто зацепил проект и хотел повторить, думал смогу, а не получилось (((

Вот, что получилось сделать, но почему-то не могу определить вхождение в координаты прямоугольника

Код:
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
  R:=Rect(200, 200, 400, 400);
  for i:=0 to 10 do
      begin
        Canvas.Pen.Color:=clDefault;
        Canvas.Brush.Style:=bsClear;
        Canvas.Rectangle(R);
        LCLProc.OffsetRect(R, 20, -20);
      end;
end;
 
procedure TForm1.FormClick(Sender: TObject);
begin
  if PtInRect(R, Point(200,200))
    then ShowMessage(' 200, 200 внутри прямоугольника')
    else ShowMessage(' 200, 200 вне прямоугольника');
end;
 
 
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 // Edit1.Caption:='x'+'='+FloatToStr(Mouse.CursorPos.x)+','+'y'+'='+FloatToStr(Mouse.CursorPos.y);
   Self.Caption := Format('%d x %d', [X, Y])
end;
Максим_maks вне форума Ответить с цитированием
Старый 19.10.2019, 19:35   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Это просто.
Код:
type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    SelectedRect:Integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
var i: integer;
 r:TRect;
begin
  R:=Rect(200, 200, 400, 400);
  for i:=0 to 10 do
      begin
        Canvas.Pen.Color:=clDefault;
        Canvas.Brush.Style:=bsClear;
        Canvas.Rectangle(R);
        OffsetRect(R, 20, -20);
      end;
  R:=Rect(200, 200, 400, 400);
  OffsetRect(R, 20*SelectedRect, -20*SelectedRect);
  Canvas.Pen.Color:=clDefault;
  Canvas.Brush.Style:=bsSolid;
  Canvas.Brush.Color:=clGreen;
  Canvas.Rectangle(R);

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var MousePoint:TPoint;
var i: integer;
 r:TRect;
begin
 if Button=mbLeft then
    begin
    MousePoint:=Point(X,Y);
    R:=Rect(200, 200, 400, 400);
    for i:=0 to 10 do
      begin
        if  PtInRect(R, MousePoint) then
          begin
           SelectedRect:=i;
           Break;
          end;
        OffsetRect(R, 20, -20);
      end;
    repaint;
    end;
end;

end.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 19.10.2019, 20:53   #3
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Это просто.
Код:
type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    SelectedRect:Integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
var i: integer;
 r:TRect;
begin
  R:=Rect(200, 200, 400, 400);
  for i:=0 to 10 do
      begin
        Canvas.Pen.Color:=clDefault;
        Canvas.Brush.Style:=bsClear;
        Canvas.Rectangle(R);
        OffsetRect(R, 20, -20);
      end;
  R:=Rect(200, 200, 400, 400);
  OffsetRect(R, 20*SelectedRect, -20*SelectedRect);
  Canvas.Pen.Color:=clDefault;
  Canvas.Brush.Style:=bsSolid;
  Canvas.Brush.Color:=clGreen;
  Canvas.Rectangle(R);

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var MousePoint:TPoint;
var i: integer;
 r:TRect;
begin
 if Button=mbLeft then
    begin
    MousePoint:=Point(X,Y);
    R:=Rect(200, 200, 400, 400);
    for i:=0 to 10 do
      begin
        if  PtInRect(R, MousePoint) then
          begin
           SelectedRect:=i;
           Break;
          end;
        OffsetRect(R, 20, -20);
      end;
    repaint;
    end;
end;

end.

Спасибо огромное - работает.
Максим_maks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена строчных букв на прописные, повторить цифру дважды Tris0606 Помощь студентам 1 12.10.2017 09:30
Требуется повторить функционал части сайта ItHighlander Фриланс 0 08.10.2017 17:36
Повторить событие клик для разных текстбоксов ольгаг Общие вопросы .NET 2 26.01.2016 13:13
VBA.Excel.Повторить определенные действия столько раз, сколько указано в ячейке. Alex4583 Microsoft Office Excel 0 01.07.2011 10:07