Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прорисовываться только до границ формы 
:(
    Опции темы
ShadowDancer
Дата 9.4.2006, 12:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

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 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код
  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;

PM MAIL   Вверх
ShadowDancer
Дата 9.4.2006, 20:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А как, допустим, прорисовываться только до пределов формы, размером 300х300 ?
  Вверх
Демо
Дата 9.4.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



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


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


--------------------
    
PM MAIL ICQ Skype   Вверх
Snowy
Дата 9.4.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

  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;

PM MAIL   Вверх
ShadowDancer
Дата 10.4.2006, 16:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

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

Snowy, спасибо
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.