Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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]

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



Страницы: 1 вся ветка

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

Наверх





Память: 0.48 MB
Время: 0.004 c
1-8806
f0rm
2002-01-15 12:32
2002.02.04
Перевод юниксовского времени в нормальное виндовое


1-8878
Alexm
2002-01-16 12:52
2002.02.04
Свертывание окна


4-9033
Mr.Death
2001-11-22 08:59
2002.02.04
Как перехватить вперед системы сочетание Сtrl+Alt+Del из под WIN2000/XP


14-8983
Olgerd
2001-12-08 18:07
2002.02.04
Иконы


1-8820
shagen
2002-01-18 19:25
2002.02.04
Глупый, но важный вопрос.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский