|
Вопрос # 150/ вопрос открыт / |
|
Доброе время, господа Прораммситы. Как программно создать кнопку в том месте, где находится курсор мышки
 |
Вопрос задал: Geron (статус: 1-ый класс)
Вопрос отправлен: 2 ноября 2006, 01:14
Состояние вопроса: открыт, ответов: 4.
|
Ответ #1. Отвечает эксперт: Dron
Здравствуйте, Stalker!
См. пример в приложении. С координатами можно проводить различные комбинации. Для проверки работы кнопку нужно либо нажать программно (например, по таймеру), либо с помощью клавиатуры.
Удачи!
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- Var Btn: TButton;
- begin
- Btn:=TButton.Create(Form1);
- Btn.Parent:=Form1;
- Btn.Left:=Mouse.CursorPos.X-GetSystemMetrics(SM_CXFRAME)-Form1.Left-10;
- Btn.Top:=Mouse.CursorPos.Y-GetSystemMetrics(SM_CYSIZE)-Form1.Top-10;
- end;
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 2 ноября 2006, 08:00
|
Ответ #2. Отвечает эксперт: Новаковский Юрий Аврамович
Здравствуйте, Stalker!
Попробуйте так см. пример в приложении.
Если Вам надо чтоб кнопка появлялась на панели,
то соответственно
procedure TForm1.Panel1MouseDown(...
btn := TButton.Create(Panel1);
btn.Parent:=Panel1;
Удачи Вам!
Приложение: Переключить в обычный режим- unit Unit1;
-
- 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
- { Private declarations }
- nBtn:integer;
- procedure btnClick(Sender: TObject);
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.btnClick(Sender: TObject);
- begin
- MessageDlg('ÕÀ-ÕÀ ìåíÿ
íàæàëè',mtCustom,[mbOk],0);
- end;
-
- procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- var btn:TButton;
- begin
- nBtn:= nBtn +1;
- btn := TButton.Create(Self);
- btn.Parent:=Self;
- btn.Caption:='Êíîïêà '+IntToStr(nBtn);
- btn.OnClick:=btnClick;
- btn.Left:=X-10;
- btn.Top:=Y-10;
- btn.Visible:=true;
- end;
-
- end.
-
Ответ #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
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|