Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 150

/ вопрос открыт /

Доброе время, господа Прораммситы. Как программно создать кнопку в том месте, где находится курсор мышки

Geron Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Geron (статус: 1-ый класс)
Вопрос отправлен: 2 ноября 2006, 01:14
Состояние вопроса: открыт, ответов: 4.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Stalker!
См. пример в приложении. С координатами можно проводить различные комбинации. Для проверки работы кнопку нужно либо нажать программно (например, по таймеру), либо с помощью клавиатуры.
Удачи!

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. Var Btn: TButton;
  3. begin
  4. Btn:=TButton.Create(Form1);
  5. Btn.Parent:=Form1;
  6. Btn.Left:=Mouse.CursorPos.X-GetSystemMetrics(SM_CXFRAME)-Form1.Left-10;
  7. Btn.Top:=Mouse.CursorPos.Y-GetSystemMetrics(SM_CYSIZE)-Form1.Top-10;
  8. end;


Ответ отправил: Dron (статус: Студент)
Время отправки: 2 ноября 2006, 08:00

Ответ #2. Отвечает эксперт: Новаковский Юрий Аврамович

Здравствуйте, Stalker!
Попробуйте так см. пример в приложении.
Если Вам надо чтоб кнопка появлялась на панели,
то соответственно
procedure TForm1.Panel1MouseDown(...
btn := TButton.Create(Panel1);
btn.Parent:=Panel1;
Удачи Вам!

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  12. Shift: TShiftState; X, Y: Integer);
  13. private
  14. { Private declarations }
  15. nBtn:integer;
  16. procedure btnClick(Sender: TObject);
  17. public
  18. { Public declarations }
  19. end;
  20.  
  21. var
  22. Form1: TForm1;
  23.  
  24. implementation
  25.  
  26. {$R *.dfm}
  27.  
  28. procedure TForm1.btnClick(Sender: TObject);
  29. begin
  30. MessageDlg('ÕÀ-ÕÀ ìåíÿ íàæàëè',mtCustom,[mbOk],0);
  31. end;
  32.  
  33. procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  34. Shift: TShiftState; X, Y: Integer);
  35. var btn:TButton;
  36. begin
  37. nBtn:= nBtn +1;
  38. btn := TButton.Create(Self);
  39. btn.Parent:=Self;
  40. btn.Caption:='Êíîïêà '+IntToStr(nBtn);
  41. btn.OnClick:=btnClick;
  42. btn.Left:=X-10;
  43. btn.Top:=Y-10;
  44. btn.Visible:=true;
  45. end;
  46.  
  47. end.
  48.  


Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 2 ноября 2006, 10:04

Ответ #3. Отвечает эксперт: Alex Van Glukhman

Здравствуйте, Stalker!

1.Прежде всего в uses подключаем модуль StdCtrls, содержащий описание класса TButton.
2.В разделе объявления переменных модуля формы (interface) объявляем переменную btn: TButton.
3.На Event OnMouseDown пишем код создания кнопки.
В нашем случае необходимо проверить наличие экземпляра кнопки. Если она имеется, то освобождаем её методом Free. Далее создаём её, назначаем родителя и в качестве свойств Left и Top назначаем координаты х и у являющимися входными параметрами процедуры FormMouseDown.
(Если кнопок должно быть много, то объяви динамический массив TMsv: array of TButton и названия для переменных TButton вытаскивай из него и не забывай о начальной иниализации массива и его конечном освобождении освобождении).
Вот исходный код:

unit MnFrm

interface

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

type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
private

public

end;

var
Form1: TForm1;
btn: TButton;

implementation
{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
//Если есть экземпляр кнопки то уничтожили
if Assigned(btn) then btn.Free;
//Создаём
btn:=TButton.Create(self);
//Родитель форма
btn.Parent:=Form1;
//Координаты кнопки - координаты клика mouse
btn.Left:=X;
btn.Top:=Y;
//Ну и назначаем Caption, т.к. кнопка наследует
//все свойства методы и события класса TButton
btn.Caption:='Кнопка';
end;

Удачи!!!

Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 2 ноября 2006, 13:22

Ответ #4. Отвечает эксперт: sattar

uses StdCtrls;
var
x2,y2:integer;
a:array[1..10] of TButton;
i:integer=1;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
x2:=x;
y2:=y;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
A:=TButton.Create(self);
a.Left:=x2;
a.Top:=y2;
a.Width:=75;
a.Height:=25;
a.Parent:=Form1;
a.Caption:='Кнопка'+inttostr(i);
inc(i);
end;

Ответ отправил: sattar (статус: 2-ой класс)
Время отправки: 7 ноября 2006, 19:22


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:02
Выполнено за 0.03 сек.