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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2008, 18:40   #1
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию Определение нажития на Компонент

Здрасте, кнопочек многа и картинок, и леиблов тоже хватает, хотел бы узнать как определить произошло-ли нажатие на компонент. Пробовал при нажатии на форме: if Sender = {Button1 к примеру} ... но не сработало. Можно конечно же попробовать у каждого компонента сделать переменную булеан, а потом в каком-нибудь таймере обрабатывать... Но хотелось бы узнать есть-ли нормальные способы?
Zeraim вне форума Ответить с цитированием
Старый 26.05.2008, 18:47   #2
Gladiator
Пользователь
 
Аватар для Gladiator
 
Регистрация: 18.04.2008
Сообщений: 70
По умолчанию

ты про что?
про свойство ONclick
или тебе надо определить нажимался ли этот компонент раньше?
Gladiator вне форума Ответить с цитированием
Старый 26.05.2008, 18:54   #3
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Мне нужно определить на какой компонент произошло нажатие мышкой
Zeraim вне форума Ответить с цитированием
Старый 26.05.2008, 19:16   #4
Gladiator
Пользователь
 
Аватар для Gladiator
 
Регистрация: 18.04.2008
Сообщений: 70
По умолчанию

ну одной строкой как сделать не знаю.ну эсли компонентов не много можешь обычной integer переменной в каждом из компонентов присваивоить разные значения а потом где надо определить какой нажат case -ом выбрать нужное...
Gladiator вне форума Ответить с цитированием
Старый 26.05.2008, 19:43   #5
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

То есть чтоб нажатие на все компоненты обрабатывалось одной процедурой? Тогда каждому компоненту пишешь уникальное значение свойства Tag и дальше чтонибудь в таком духе
Код:
ShowMessage(IntToStr((Sender as TComponent).Tag));
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 26.05.2008, 19:48   #6
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Понятноть, видать всеравно придется у каждого компонента в OnClick прописывать, просто думал что можно обоитись без этого =\\
Zeraim вне форума Ответить с цитированием
Старый 26.05.2008, 21:06   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Zeraim, назначь одну процедуру на клик всех компонентов, делается это так:
Компонент.OnClick:=Твоя_процедура(S ender: TObject);
Процедуру описать как метод формы.
В переменной Sender и будет объект на к-рый нажали.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 26.05.2008, 21:15   #8
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Еть вариант по проще. Я так думаю, речь идёт о создании компонентов в Run-Time?
Если да, то выход такой:

1. Создаешь новый класс, например TSuperbutton, наследником которого является Tbutton:

Код:
TSuperButton = class(TButton)
  private
    nom:integer;
  end;
отличие которого от обычного только одно: каждый буттон имеет в себе переменную.

создаем в var массив:

Код:
var but:array[1..100] of TSuperButton;
И создаем саму кнопочку (где хош, пропиши):

Код:
  inc(t);
  but[t]:=TSuperButton.Create(self);
  but[t].Parent:=self;
  but[t].OnClick:=superButtonClick;
  but[t].Left:=...
  but[t].Top:=...;
  inc(allnom); 
  but[t].nom:=allnom;
теперь в процедуре спокойно:

Код:
procedure SuperButtonClick(Sender: TObject);
begin
  for n:=1 to t do begin
    if but[n].nom= номер нашей нужной нам кнопочки then
  end;
end;
Может это и самый сложный способ, но моё дело предложить)))
ЗЫ: возмозны ошибки, ибо набирал в браузере.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 26.05.2008, 21:26   #9
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Спасибо ребят, попробую оба примера.
Zeraim вне форума Ответить с цитированием
Старый 02.06.2008, 18:49   #10
Andre1723
Пользователь
 
Аватар для Andre1723
 
Регистрация: 17.02.2008
Сообщений: 74
По умолчанию

procedure TfmMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
fmMain.StatusBar1.SimpleText:= (Sender As TControl).Name;
end;
А потом назначаеш эту процедуру для всех элементов в OnMouseMove
Andre1723 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение сокета SLASH_CyberPunk Работа с сетью в Delphi 3 21.07.2008 13:02
Определение IP IvanLex HTML и CSS 6 28.03.2008 07:46
Определение IP IvanLex Общие вопросы по Java, Java SE, Kotlin 1 19.02.2008 09:12
Определение IP RKS Работа с сетью в Delphi 3 13.12.2007 15:43
из Паскаля определить запущен ли Windows Трофимов Александр Паскаль, Turbo Pascal, PascalABC.NET 9 14.06.2007 15:25