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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2014, 13:46   #1
Roma30
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 12
По умолчанию Координатная плоскость

В общем есть координатная плоскость, кликаем по координатной плоскости, нажимаем enter, он вносит координаты точки в едиты. Заново кликаем по плоскости, нажимаем enter, и он записывает, уже эти координаты в другие едиты и т.д. Смысл понятен, но написать не могу. Помогите.
Roma30 вне форума Ответить с цитированием
Старый 10.09.2014, 13:56   #2
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Почему не можете написать, что мешает? Наработки вылаживайте Сколько всего едитов планируете использовать, чем Мемо не устраивает?
— Двери есть везде. Просто нужно знать, как в них войти.
Foreseen вне форума Ответить с цитированием
Старый 10.09.2014, 14:09   #3
Roma30
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 12
По умолчанию

Пишу программу для предприятия, им нужно так. Планирую 6 пар едитов. Написать не могу, потому что мозгов не хватает.

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.ClientWidth:=1000;
Form1.ClientHeight:=1000;
with Image1 do
 begin
  Image1.Width:=950;
  Image1.Height:=950;
  xc:=Image1.Width div 2;
  yc:=Image1.Height div 2;
  ms:=(xc-25)/80;
  with Canvas do
   begin
    pen.Width:=2;
    rectangle(25,25,942,942);
    moveto(25,yc);lineto(942,yc);
    moveto(xc,25);lineto(xc,941);
    pen.Width:=1;
    pen.Style:=psDot;
    for op:=1 to 80 do
     begin
      if op mod 5=0 then
       begin
        moveto(xc+round(op*ms),25);
        lineto(xc+round(op*ms),942);
        moveto(xc-round(op*ms),25);
        lineto(xc-round(op*ms),942);
        moveto(25,yc+round(op*ms));
        lineto(942,yc+round(op*ms));
        moveto(25,yc-round(op*ms));
        lineto(942,yc-round(op*ms));
       end;
      if op mod 10=0 then
       begin
        brush.Style:=bsClear;
        font.Style:=[fsBold];
        font.Color:=clBlue;
        textout(xc+round(op*ms)-5,yc+10,inttostr(op));
        textout(xc-round(op*ms)-5,yc+10,'-'+inttostr(op));
        textout(xc-30,yc-round(op*ms),inttostr(op));
        textout(xc-30,yc+round(op*ms)-5,'-'+inttostr(op));
       end;
      end;
   end;
 end;
end;



procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Edit1.Text:=floattostrF((x-xc)/ms,ffFixed,6,2);
Edit2.Text:=floattostrF((y-yc)/ms,ffFixed,6,2);
end;



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 10.09.2014 в 14:46.
Roma30 вне форума Ответить с цитированием
Старый 10.09.2014, 14:11   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Шаг сетки 80? А 25 это чего?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 10.09.2014, 15:21   #5
Roma30
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 12
По умолчанию

отступ от краев
Roma30 вне форума Ответить с цитированием
Старый 10.09.2014, 15:34   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Я когда рисую сложные изображения обычно разбиваю структуру на независимые элементы. Раз Вам не нравится рехтангле и Вы рисуете квадраты сами, вынесите данный код в отдельную функцию/процедуру.
А когда делаете пересчет координат мыши, отступ от краев отсчитывается? Я чей-то не увидел, покажите.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 10.09.2014, 20:08   #7
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Сыровато, но уже есть от чего плясать

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
i, x, y: integer;
begin
form1.ClientHeight:=700;
form1.ClientWidth:=700;
Image1.Top:=25;  //задаем отступы
Image1.Left:=25;
i:=700 div 80;
Image1.Height:=80*i; //Устанавливаем размер рабочей области
Image1.Width:=80*i;
for x:=1 to i do       //рисуем кординатную сетку
 for y:=1 to i do
  begin

   Image1.Canvas.Rectangle(x*80-80, y*80-80, x*80, y*80);
  end;
end;

procedure TForm1.Image1Click(Sender: TObject);
var
P:TPoint;
X1, Y1: integer;
begin
GetCursorPos(P);
P := Form1.ScreenToClient(P); //приводим координаты курсора к нашей сетке
X1:=(P.X-25) div 80;
Y1:=(P.Y-25) div 80;
Edit1.Text:=(IntToStr(X1)+'x'+IntToStr(Y1));
end;
— Двери есть везде. Просто нужно знать, как в них войти.
Foreseen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Координатная ось Medik07 C# (си шарп) 5 09.12.2016 05:27
Координатная плоскость korzunmaria Паскаль, Turbo Pascal, PascalABC.NET 1 23.04.2010 23:39
Плоскость в Delphi Sanprof Общие вопросы Delphi 21 29.01.2008 17:54