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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2018, 18:37   #1
Roman00710
Новичок
Джуниор
 
Регистрация: 25.01.2018
Сообщений: 1
Восклицание Проблема с определением координат

Ребята всем привет, проблема встала боком не могу догадаться что делать у я сделал карту на компоненте scrollbox наложен компонент image сделал не профиксенный зум с помощью стрелок вверх и вниз (увеличить уменьшить), и при уменьшении image координаты сбиваются, подскажите как решить эту программу на скринах думаю видно более подробно так же вкладываю код программы, чуть не забыл при уменьшении на один клик координата по X смещается на 6, а по координате Y на 3 примерно. КАК СДЕЛАТЬ ЧТОБЫ ПРИ УМЕНЬШЕНИИ КАРТИНКИ КООРДИНАТЫ НЕ СБИВАЛИСЬ? там в программе я еще строю красный прямоугольник по координатам он строиться все хорошо при любом масштабе а тут капец не понимаю ....

unit Unit1;

interface

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

type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Image1: TImage;
TrackBar1: TTrackBar;
Button1: TButton;
Label1: TLabel;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TrackBar1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button1Click(Sender: TObject);
procedure Image1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
oldpos,karpos:Tpoint;
capture:Boolean;
key:char;


implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
begin
capture:=true;
oldpos.x:=x;
oldpos.Y:=y;
end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if capture then
with(sender as Timage) do
begin
left:=left+x-oldpos.X;
top:=top+y-oldpos.Y;
end;
Label1.Caption:='X='+inttostr(x)+'Y ='+inttostr(y);
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
capture:=false;
if (x>700)and(x<1200)and(y>990)and(y<1 860)then ShowMessage('Попал!');
end;

procedure TForm1.TrackBar1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
keypreview:=true;
if key=40 then begin

form1.Image1.Width:=form1.Image1.Wi dth-100;
form1.Image1.Height:=form1.Image1.H eight-100;

end;
if key=38 then begin
form1.Image1.Width:=form1.Image1.Wi dth+100;
form1.Image1.Height:=form1.Image1.H eight+100;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('1.bmp' );
end;

procedure TForm1.Image1DblClick(Sender: TObject);
begin
image1.Canvas.Pen.Color:=clred;
image1.Canvas.Brush.Style:=bsclear;
image1.Canvas.Rectangle(700,990,120 0,1860);
end;

end.
Изображения
Тип файла: jpg P80125-181737.jpg (118.0 Кб, 154 просмотров)
Тип файла: jpg P80125-181856.jpg (109.1 Кб, 132 просмотров)
Roman00710 вне форума Ответить с цитированием
Старый 25.01.2018, 23:16   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Это как надо ненавидеть людей, чтобы показывать им такое?

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.01.2018, 09:30   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

различать
1. координаты карты(географические)
2. координаты текущей точки ИЗОБРАЖЕНИЯ карты/
3. координаты текущей точки экрана дисплея
и делать преобразования(пересчет).
и сказать наконец какие из перечисленных выше координат сбиваются и когда (при каких действиях).

Цитата:
Код:
form1.Image1.Width:=form1.Image1.Wi dth+100;
form1.Image1.Height:=form1.Image1.H eight+100;
Ваша карта(изображение) изначально квадратное?
Нет.
Значит будет(и есть) НЕПРОПОРЦИОНАЛЬНОЕ изменение масштаба (растяжение/ сжатие изображения по горизонтали/вертикали).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с определением пути bat-ником Fakov Помощь студентам 6 05.02.2013 14:27
Проблема с определением кодировки ZePr Общие вопросы Delphi 8 08.01.2012 15:03
Прошу помочь с определением координат курсора на форме. Dem.IG Помощь студентам 1 17.12.2009 16:00
Проблема с определением строки в макросе Евгений(mE) Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 17.11.2008 11:40
проблема с определением внешнего ключа! veter_s_morya SQL, базы данных 1 26.06.2008 18:37