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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2009, 17:28   #1
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию Рисуем крестик (Delphi 7)

На форме есть компонент Image, при двойном клике хочу нарисовать на нем крестик, но почему-то он получается смещенным.

Делаю так:

Код:
x := Mouse.CursorPos.X-(fmMain.Left + ImageDesktop.Left);
y := Mouse.CursorPos.Y-(fmMain.Top + ImageDesktop.Top);
ImageDesktop.Canvas.MoveTo(x-3, y);
ImageDesktop.Canvas.LineTo(x+4, y);
ImageDesktop.Canvas.MoveTo(x, y-3);
ImageDesktop.Canvas.LineTo(x, y+4);
Подскажите, как правильно определить координаты, где нужно рисовать?
Вложения
Тип файла: zip TextDesk.zip (9.4 Кб, 11 просмотров)
alxd вне форума Ответить с цитированием
Старый 09.09.2009, 17:37   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Мне кажется, мешаются бордюры формы.
Узнать ширину бордюра можно вроде так:
Код:
GetSystemMetrics(SM_CXEDGE)
А заголовок окна (бордюр вверху), так:
Код:
GetSystemMetrics(SM_CYCAPTION)
Описание функции GetSystemMetrics

Так что код можно попробовать изменить так:

Код:
x := Mouse.CursorPos.X-(fmMain.Left + ImageDesktop.Left + GetSystemMetrics(SM_CXEDGE));
y := Mouse.CursorPos.Y-(fmMain.Top + ImageDesktop.Top + GetSystemMetrics(SM_CYCAPTION));
ImageDesktop.Canvas.MoveTo(x-3, y);
ImageDesktop.Canvas.LineTo(x+4, y);
ImageDesktop.Canvas.MoveTo(x, y-3);
ImageDesktop.Canvas.LineTo(x, y+4);
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 09.09.2009, 17:40   #3
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Цитата:
Мне кажется, мешаются бордюры формы.
Я так и думал, просто не знал как определить это значение.

Спасибо!
alxd вне форума Ответить с цитированием
Старый 09.09.2009, 17:42   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
implementation

{$R *.dfm}
var x1,y1:integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
ImageDesktop.Canvas.Brush.Color := clWhite;
  ImageDesktop.Canvas.FillRect(Canvas.ClipRect);
  ImageDesktop.Canvas.Rectangle(0, 0, ImageDesktop.Width, ImageDesktop.Height);

end;

procedure TForm1.ImageDesktopDblClick(Sender: TObject);
begin
 ImageDesktop.Canvas.Brush.Color := clWhite;
  ImageDesktop.Canvas.FillRect(Canvas.ClipRect);
  // Перерисвываем
  ImageDesktop.Canvas.Rectangle(0, 0, ImageDesktop.Width, ImageDesktop.Height);
  ImageDesktop.Canvas.MoveTo(x1-3, y1);
  ImageDesktop.Canvas.LineTo(x1+4, y1);
  ImageDesktop.Canvas.MoveTo(x1, y1-3);
  ImageDesktop.Canvas.LineTo(x1, y1+4);
end;

procedure TForm1.ImageDesktopMouseDown(Sender: TObject; Button:TMouseButton; 
  Shift: TShiftState; X, Y: Integer);
begin
x1:=X;
y1:=Y;
end;
//проще взять координаты в этом событии у1 и х1 глобальные переменные и всё
SERG1980 вне форума Ответить с цитированием
Старый 09.09.2009, 17:46   #5
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

О! Класс! Спасибо! Так даже правильнее, мне кажется
alxd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деактивировать "Крестик" в GetOpenFile Klim Bassenger Microsoft Office Excel 6 30.04.2009 11:20
РИСУЕМ В ПАСКАЛЕ red141 Паскаль, Turbo Pascal, PascalABC.NET 1 11.04.2009 00:52
не получается отключение CTRL+alt+del? Alt+TAb, часов с панели задач и Крестик окна Reds Общие вопросы Delphi 1 30.09.2008 10:37
Рисуем в ячейке DBGrig _SERGEYX_ Компоненты Delphi 10 02.06.2008 13:39