Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Вниз

Событие на Мышь 


Dennis S   (2002-01-16 11:42) [0]

В цикле на форме создаются 10-15 кнопок...с индексированным именем (bt1...bt15)
Как отследить какую из этих кнопок шелкнули мышой
и получить имя этой кнопки?
По сути: как проследить на каком объекте было щелкнуто мышкой и получить имя этого объекта.

(Сразу оговорюсь: вопрос встал не в Delphi, а в VBA у друга)
(Но, если чесно, то я и Delphi не особо представляю как это проследить...)



gek   (2002-01-16 11:59) [1]

В обработке OnClick
begin
if (sender as TSpeedButton).name = "kuku" then
showmessage("1 button")
else
if (sender as TSpeedButton).name = "kuku1" then
showmessage("2 button")
.....
end;



vlv   (2002-01-16 12:00) [2]

В Delphi - легко: присваиваешь всем кнопам событие на клик(или на что надо):

procedure TForm1.Button2Click(Sender: TObject);
var s:string;
begin
if Sender is TButton then
s:=TButton(Sender).Caption;
end;


Далее обрабатываешь s как душеньке угодно.



Владислав   (2002-01-16 12:03) [3]

Назначить всем кнопкам один обработчик события OnClick.
При входе в обработчик (при нажатии одной из кнопок) делать проверку:

if Sender=Button12 then ShowMessage("Это кнопка № 12.");
ShowMessage("Имя кнопки: "+TComponent(Sender).Name);



Aleksandr   (2002-01-16 12:04) [4]

Ну, там где создаешь эти кнопки, пишешь:
procedure TForm1.FormCreate:
for i:=1 to 15 do
with TButton.Create(Self) do begin
Name:="bt"+IntToStr(i);
OnClick:=FButtonClick
end;

procedure TForm1.FButtonClick(Sender : TObject);
begin
//присваиваем тому, кому надо, название кнопки
ButtonClicked.Caption:=(Sender AS TButton).Name
end;



serg   (2002-01-16 12:06) [5]

в VBA у формы есть сво-о ActiveControl



Dennis S   (2002-01-16 12:43) [6]

Спасибо всем!
Попробую...

2 Aleksandr ©
Кажется, самый реальный вариант... :)

2 Остальные
посмотрите и поймете свои ошибки*...
...(button-ов) как таковых нет. Как я им наставлю OnClick!?
Тем более, что каждый раз генерится разное кол-во кнопок.

Еще раз спасибо!



Владислав   (2002-01-16 12:54) [7]

Какие проблемы?

procedure Form1.CreateAllButton;
var
i: integer;
begin
for i:=0 to 100 do
with TButton.Create(self) do begin
Name:="bt"+IntToStr(i);
Caption:="Button "+IntToStr(i);
OnClick:=ButtonClick
end
end;

procedure Form1.ButtonClick(Sender: TObject);
begin
ShowMessage("Имя кнопки: "+TComponent(Sender).Name);
end;



Dennis S   (2002-01-16 14:19) [8]

2 Владислав ©
А сам пробовал? У меня не прёт... :(
...и вообще кнопики не лезут - чистая форма ???



Владислав   (2002-01-16 14:23) [9]

Что пробовал? Что значит "не прет"? И что значит "кнопки не лезут"?

Подобным кодом я пользовался. Замечательно работает.
Если у тебя кнопки не отображаются, так там надо добавить: Parent:=Self. Я тебе идею даю, а не готовый вариант. Задача-то твоя.



Dennis S   (2002-01-16 15:16) [10]

2 Владислав ©
А как теперь обратиться к кнопке bt2, например?
Click-ом на форме поменять её Top или Width...



Dennis S   (2002-01-16 16:01) [11]

У меня все еще не получается... :(
Не могу обратиться(правильно) к этой кнопке после еще создания...
На имя bt2 - не прёт, а как её ещё вылавливать?



MBo   (2002-01-16 16:07) [12]

либо обходи компоненты
for i:=0 to componentcount-1 do begin
if components[i] is tbutton then
if tbutton(components[i]).name="bt2" then...
end;
или (лучше) заведи список и в него заноси создаваемые кнопки
var bt:tbutton;
for...
bt:=TButton.Create(self);
with bt do begin
Parent:=self;
Name:="bt"+IntToStr(i);
Caption:="Button "+IntToStr(i);
OnClick:=ButtonClick
end;
objectlist.add(bt);
end;//for



Dennis S   (2002-01-16 16:24) [13]

А как var-ить bt и objectlist?
И как потом из objectlist вытастивать bt2???



MBo   (2002-01-16 16:30) [14]

var
bt:tbutton;
list:tobjectlist;

list:=tobjectlist.create;
...
tbutton(list[2]).caption:=" третья кнопка";



Dennis S   (2002-01-16 16:35) [15]

list: TObjectList - не воспринимает...
:?



Adder   (2002-01-16 16:37) [16]

uses contnrs;



Владислав   (2002-01-17 09:39) [17]

> Dennis S © (16.01.02 15:16)

А как теперь обратиться к кнопке bt2, например?

В коде, который я приводил (см. Владислав © (16.01.02 12:54))
в обработчике события OnClick добавь код:

procedure Form1.ButtonClick(Sender: TObject);
var
CurComp: TComponent;

begin
ShowMessage("Имя кнопки: "+TComponent(Sender).Name);
CurComp:=FindComponent(TComponent(Sender).Name);
if CurComp is TButton then
with TButton(CurComp) do begin
... //Здесь то, что ты хочешь сделать с компонентом (кнопкой)
end

end;



Dennis S   (2002-01-21 11:57) [18]

СПАСИБО ВСЕМ!
:)




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.02 c
1-8867            Andron                2002-01-15 22:29  2002.02.04  
Как отключить предупреждения компилятора типа ... specific to a platform?


3-8771            Reals                 2002-01-05 19:37  2002.02.04  
Как правильно сделать проверку в таблице...


7-9009            Predator              2001-10-28 00:16  2002.02.04  
ОС


1-8939            Socol                 2002-01-18 07:14  2002.02.04  
Поиск файла


3-8745            sashak                2001-12-28 15:24  2002.02.04  
Можно ли выполнить скрипт через ADO ?