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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2014, 09:57   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Координаты для создания компонента

Добрый день!
Получаю координаты указателя на форме:
...
Код:
 begin
  L:=ScreenToClient(Mouse.CursorPos).X;
  T:=ScreenToClient(Mouse.CursorPos).Y;
 end;
...
далее мне надо создать кнопку по координатам полученным:
Код:
 
 begin
  B.Left:=L;
  B.Top:=T;
 end;
Но у меня почему-то не получается. Получается, что кнопка создается в совершенно другом месте, не в том, где я получал координаты указателя. Прошу помочь в правильности приведения координат.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.10.2014, 10:16   #2
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

если рисуется дальше чем координаты, попробуй вычесть координаты компонента на котором создаешь кнопку
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure Panel1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Panel1Click(Sender: TObject);
var
  btn:TButton;
begin
  btn:=TButton.Create(Panel1);
  btn.Parent:=Panel1;
  btn.Left:=ScreenToClient(Mouse.CursorPos).X - Panel1.Left;
  btn.Top:=ScreenToClient(Mouse.CursorPos).Y - Panel1.Top;
end;

end.
пыжок

Последний раз редактировалось maloun; 21.10.2014 в 10:28.
maloun вне форума Ответить с цитированием
Старый 21.10.2014, 10:29   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Не, у меня кнопка создается на форме, не на каком-то другом компоненте.
Попробовал вместо панели форму написать, неправильный пересчет координат получается.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 21.10.2014 в 10:46.
artemavd вне форума Ответить с цитированием
Старый 21.10.2014, 10:36   #4
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

у меня все работает, выкладывай свой код
Вложения
Тип файла: zip cursor_test.zip (4.7 Кб, 18 просмотров)
пыжок
maloun вне форума Ответить с цитированием
Старый 21.10.2014, 10:48   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
var
  p: TPoint;
begin
  ...
  btn.Parent:=Panel1;
  p:=Panel1.ScreenToClient(Mouse.CursorPos);
  btn.top:=p.Y+2;
  btn.left:=p.X+2;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.10.2014, 10:51   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Я свой код выложил. Я забыл сказать вот что.
У меня процедура создания кнопки вынесена в отдельный модуль. Соответственно, значение L и T из моего кода передается туда из обычной формы.
Может быть что-то при передаче значений неправильно приводится? У меня вроде бы также как и в твоем вложении сделано было, подобно, однако, не работало.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.10.2014, 11:02   #7
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

ну хз, может ты L и T местами поменял)
никаких подводных камней в работе с параметрами процедур в других модулях нет, а стоп - есть...) посмотри если у тебя в другом модуле есть глобальные переменные с такими же именами или еще че-нить такое,
убедись в том что параметры действительно передаются в твою процедуру и действительно используются для установки координат кнопке
пыжок

Последний раз редактировалось maloun; 21.10.2014 в 11:06.
maloun вне форума Ответить с цитированием
Старый 21.10.2014, 11:40   #8
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Хз, без всяких костылей все работает

Код:
var
   X, Y: integer;
   bt: TButton;
begin
   X:=Form1.ScreenToClient(Mouse.CursorPos).X;
   Y:=Form1.ScreenToClient(Mouse.CursorPos).Y;
   bt:=TButton.create(Form1);
   bt.Parent:=Form1;
   bt.Top:=Y;
   bt.Left:=X;
end;
— Двери есть везде. Просто нужно знать, как в них войти.
Foreseen вне форума Ответить с цитированием
Старый 23.10.2014, 10:16   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А можно ли написать так, чтобы новая кнопка всегда создавалась строго по центру формы?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 23.10.2014, 10:22   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Кнопка.Left:=(ClientWidth-Кнопка.Width) div 2;
Для Top аналогично
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажыте програму для создания gif-анимаций, которые после создания не теряют четкости pufystyj Софт 1 24.02.2011 01:50
Компонент на форме -> работа компонента до создания формы YarUnderoaker Компоненты Delphi 2 26.07.2010 15:32
пример создания окна для ActiveX(OLE) компонента(по типу WebBrowser или Flash) Пепел Феникса Win Api 4 25.12.2009 09:08
Пример создания простого GUI компонента на C# SunKnight Общие вопросы .NET 4 26.04.2009 20:43