Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];

Вниз

Обработка клика мыши   Найти похожие ветки 

 
MZP   (2008-01-18 22:43) [0]

Всем добрый вечер!
Подскажите пожалуйста, как можно обработать клик мыши на созданном компоненте TImage? У меня их на форме расположено порядка 10 экземпляров. И в них загружены изображения из списка. Подскажите пожалуйста.


 
Palladin ©   (2008-01-18 22:44) [1]

ну видимо назначить обработку события OnClick на изображениях


 
MZP   (2008-01-18 22:48) [2]

А как не подскажите? Я пробовал, не получается.


 
Palladin ©   (2008-01-18 22:50) [3]

нет, не подскажу... я тоже пробовал, но получается...


 
MZP   (2008-01-18 22:52) [4]

Palladin, я в этом начинающий и очень хочу разобраться. Но разбираться трудно.
Тогда подскажи пожалуйста, как со следующем можно работать.
MyImage.OnClick(<не могу понять что дальше писать>).


 
Palladin ©   (2008-01-18 22:55) [5]

незнание закона не освобождает от ответственности, это - раз. два - звание начинающий не освобождает от чтения книг. да прибудет с тобой begin закончившийся своим end"ом, и святой var в параметрах...


 
MZP   (2008-01-18 22:57) [6]

С этим я согласен. Но самоучка в эти рамки не входит. Потому и обращаюсь за советом... :(


 
{RASkov} ©   (2008-01-18 23:02) [7]

> [4] MZP   (18.01.08 22:52)
> MyImage.OnClick(<не могу понять что дальше писать>).

Дело в том, что события - это теже свойства, только тип у них процедурный.... вот и приравнивай РодноТипные методы....
На твоем примере:
type TForm1 = class(TForm)
   ......
 procedure FormClick(Sender: TObjecvt);
...........
 end;

где-то в коде в месте создания например
MyImage.OnClick:=FormClick;

Ну и реализация метода (FormClick) как обычно.....


 
MZP   (2008-01-18 23:04) [8]

то есть, не обязательно обращаться к созданному компоненту по его индексу? Просто кликаю на нужном Image и обрабатывать нужные действия?


 
Palladin ©   (2008-01-18 23:09) [9]

Времена самоучек прошли, самородки расстворились в толпе... пришел интернет...

дак какой тебе совет то дать раз ты ничего особенного то не конкретизировал в своей задаче... из вопроса я понял что ты накидал кучу компонентов TImage на форму и хочешь что бы они реагировали на нажатие левой кнопки мыши когда курсор мыши находится над ними...
ну так выбери свой накиаднный компонент на форме, перейди в инспектор объектов и обнаружишь там свойства кинутого на форму компоннета с названием ImageXXX... рядом с надписью properties будет вкладка events, шо означает события, вот на нее переключишься и увидишь надпись OnClick... шелкнешь на эту надпись и забелеет такой яркий квадратик справа от надписи с мигающей вертикальной палочкой... эта мигающая вертикальная палочка сигналит тебе о том что когда ты будет теперь нажимать кнопочки на клавиатуре в том месте где мигает вертикальная палочка, в лучшем случае, булут отображаться значки нарисованные на кнопочках которые ты нажимал, а сама вертикальная мигающая палочка будет смещаться направо по мере жмыканья тобой кнопочек и всегда указывать на то место где возникнет нажатая тобой картинка на клавиатуре...

но это я чего то не об этом... тебе особенно не надо картинки на клавиатуре нажимать... тебе нужно навестись курсором мышки (
это стрелочка такая, которая двигается когда ты толкаешь предмет справап от клавиатуры, у него на верху еще крышки такие что до них чуть дотронешся они клацкать начинают, это кнопки, там еще такая полусфера есть, ну на самом деле она - есть полный круг, но на всякий случай если ты не догадываешься, то это просто колесико, вторая половина которого скрыта, и тебе кажется что всего пол сферы) ну вот... наведешься этим курсором мышки на то самое поле где горит мигающий вертикальный отрезок небольшого размер, так что бы стрелочка была на этой белой области. вот. а теперь что есть силы жмакай два раза с отпусканием пальца по левому углу устроцства слева от клавиатуры, которое стрелкой управляет...

ну что ж... это было нелгко, это очень сложно... что же делать потом спросишь ты себя? ну ну... не все сразу, отдохни, расслабся, ты проделал сложную работу, нужен перерыв....


 
{RASkov} ©   (2008-01-18 23:11) [10]

> [8] MZP   (18.01.08 23:04)

У методов есть параметр Sender - в нем как раз тот обект, чей обработчик(событие) в данный момент выполняется....
Sender типа TObject т.е. подходит под всех, ну и само собой практически всегда нужно приведение Sender"а к нужному типу...
Опять же на твоем примере:
if Sender is TImage then TImage(Sender).Picture.LoadFromFile("FileName.ext");
т.е. сначала проверяем на принадлежность нужному нам классу (это нужно потому что как мы уже поняли, что один и тот же метод может быть назначен разным(по типу) объектам...) и если все Ок, то просто "в лоб" приводим к нужному нам типу (TImage) и работаем с его полями(свойствами), методами....


 
{RASkov} ©   (2008-01-18 23:14) [11]

> [9] Palladin ©   (18.01.08 23:09)

Вау.... кайф :) И ведь хватило терпения столько текста "поучительного" набирать.....


 
Palladin ©   (2008-01-18 23:15) [12]

я когда выпью очень добрый... вот только доброта моя о двух концах :)


 
MZP   (2008-01-18 23:19) [13]

да....... я с колесиком наяриваю давно :)
Есть неточности, извини.
1. Я не накидывал "кучу" на форму.
2. я создавал их так:
 MyImage := TImage.Create(Form);
 MyImage.Parent := Form;
 ....
3. Что такое Events и как с ним работать тоже знаю не хуже других :)
4. Про пальцы тоже известно - их пять :))))
5. Как раз пятое. Самоучкой разве ты не был в свое время? Когла рот от любопытства разивал, а? Согласись, друг, ты горел таким же желанием разобраться и научиться работать и думать головой. И поверь, ты поступил бы так же как и я - просил-молил о помощи и совете.
6. я не хочу ругаться. и не должен ругаться.
7. Гласит же ПЕРВАЯ строчка форума - БЫТЬ ВЕЖЛИВЫМ ДРУГ К ДРУГУ. И если есть ЖЕЛАНИЕ и ВОЗМОЖНОСТИ помогать ДРУГИМ - Вам сюда.
таким образом, приятель, можно сделать вывод, что ты строишь себя крутого и умного и хвалишься этим!
8. Дай БОГ ТЕБЕ знать больше, чем на данный момент времени.
9. множитель твоей репутации в данном выходе снижается к минимуму....
10. жаль, что есть такой "мастер" :(


 
MZP   (2008-01-18 23:23) [14]

{RASkov}, спасибо за помощь! Очень признателен! Настоящий мастер!
И теорию и пример показали! Спасибо!
Относительно данной темы - ещё один вопрос.
Из приведенного вами примера
if Sender is TImage then TImage(Sender).Picture.LoadFromFile("FileName.ext");
необходимо сначала "на всякий случай" провести проверку/преобразование на принадлежность к тому или иному типу? Извините, может неправильно подбираю слова, но все же..


 
{RASkov} ©   (2008-01-18 23:28) [15]

> [13] MZP   (18.01.08 23:19)
> MyImage := TImage.Create(Form);
> MyImage.Parent := Form;

Хоть это и пример, т.е. возможно не из рабочего модуля кусок, и возможно что Form - это не то о чем я подумал, но всеж.... Так не делают.
Правильнее, если я конечно правильно подумал что Form - это форма, в методе которой выполняется данный код, использовать нужно Self, а не конкретный экземпляр формы....

> 3. Что такое Events и как с ним работать тоже знаю не хуже других :)

Обманываешь :(
5. Зря ты так (

Знаешь что с обиженными делают? Ага... воду возят, а на этом форуме..... промолчу :)


 
{RASkov} ©   (2008-01-18 23:30) [16]

> Из приведенного вами примера
> if Sender is TImage then TImage(Sender).Picture.LoadFromFile("FileName.ext");
> необходимо сначала "на всякий случай" провести проверку/преобразование
> на принадлежность к тому или иному типу?

А [10] внимательно прочитал? :) Именно об этом я там и рассказывал, но твоя "обида" возможно тебя отвлекла :)


 
MZP   (2008-01-18 23:34) [17]

Ладно, может я и неправ. 99% не прав. Просто очень обидно стало :(
Приножу свои извинения Palladin"у! Извини.

Хочу продолжить разговор на данную тему.
Пытался сначала найти нужный компонент и обратитиься по индексу - ноль. Ничего не выходит. FindComponent мне ничего не дал.
тут и пришла в голову мысль, что если удается присваивать созданным компонентам свойиства то таким образом и можно обработать клик мыши на созданном компоненте на форме.


 
Palladin ©   (2008-01-18 23:36) [18]


> 1. Я не накидывал "кучу" на форму.

уау, уточнение


> 2. я создавал их так:
>  MyImage := TImage.Create(Form);
>  MyImage.Parent := Form;
>  ....

уау, уточнение


> 3. Что такое Events и как с ним работать тоже знаю не хуже
> других :)

уау, уточнение


> 4. Про пальцы тоже известно - их пять :))))

уау, уточнение, но их все таки десять


> Как раз пятое. Самоучкой разве ты не был в свое время?

был


> Когла рот от любопытства разивал, а?

неа


> Согласись, друг, ты горел таким же желанием разобраться
> и научиться работать и думать головой.

неа, я не горел желанием, я его реализовывал :) и инета у меня не было... наверное поэтому я такой... наглый...


>  поверь, ты поступил бы так же как и я - просил-молил о
> помощи и совете.

моя единственная помощь и мольба по этой ссылке
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988619105&n=19


> . Гласит же ПЕРВАЯ строчка форума - БЫТЬ ВЕЖЛИВЫМ ДРУГ К
> ДРУГУ. И если есть ЖЕЛАНИЕ и ВОЗМОЖНОСТИ помогать ДРУГИМ
> - Вам сюда.

нифига, эта сторочка гласит о том что вы обязаны быть вежливыми с теми кто имеет желание и возможности помочь сам себе


> Дай БОГ ТЕБЕ знать больше, чем на данный момент времени.

я агностик


> множитель твоей репутации в данном выходе снижается к минимуму....

у меня нет множителя репутации


> жаль, что есть такой "мастер" :(

я не один :) нас много

а теперь, когда ты осознал насколько ты был неправ, в своем первоначальном вопросе, когда же мы наконец то уточнили чего же тебе нехватает в жизни может перейти и к конкретике, которая заключается в следующем.

есть понятие процедуры, есть понятие метода, любое из этих понятий является набором исполняемого кода - следовательно обладает точкой входа (входа исполнения). надеюсь пока понятно. Pascal, а с недавних пор Delphi обладает свойством определять две взаимосвязанных, между собой, вещи:

1. процедурный тип данных.
2. совойства

товарищи компонентокидатели просто неспособны понять что они эти вещи используют, для них это прозрачно, товарищи которым все таки интересно, а я надеюсь тебе это интересно, замечают следующую вещь: попробуй создать проект и правильно расопложить те куски кода, приведенные ниже

Type
TGetCaptionMethod=Procedure (Var s:String) of Object;
TGetCaptionProc=Procedure (Var s:String);
THelloWorld=Class
 Private
  m_theSejchaCaptionDljaTButtonVozjmut:TGetCaptionMethod;
 Protected
  Procedure MouseClick(Sender:TObject);
 End;

Procedure THelloWorld.MouseClick;
Var
s:String;
Begin
If (m_theSejchaCaptionDljaTButtonVozjmut<>Nil) and (Sender is TButton) Then
 Begin
  s:="";
  m_theSejchaCaptionDljaTButtonVozjmut(s);
  TButton(Sender).Caption:=s;
 End;
End;


чет я еще задумал про не метод но забыл... спросишь, я напомню, писать устаал уже... :)


 
MZP   (2008-01-18 23:38) [19]

10 пункт я прочитал и сейчас изучаю. Просто инет немного тормозит.


 
{RASkov} ©   (2008-01-18 23:40) [20]

> [14] MZP   (18.01.08 23:23)

Смотри:

B: TButton;
I: TImage;
E: TEdit;


И где-то:
B.OnClick:=CommonClick;
I.OnClick:=CommonClick;
E.OnClick:=CommonClick;
...............
procedure TForm1.CommonClick(Sender: TObject);
begin
 if Sender is TButton then TButton(Sender).Caption:="C:\Temp\pic.bmp";
 if Sender is TImage then TImage(Sender).Picture.LoadFromFile("C:\Temp\pic.bmp");
 if Sender is TEdit then TEdit(Sender).Text:="C:\Temp\pic.bmp";
end;


или например так

procedure TForm.Button1OnClick();
begin
 CommonClick(B);
 CommonClick(I);
...
end;


 
Palladin ©   (2008-01-18 23:42) [21]

ах емае... самое главное то забыл..

допустим у тебя есть форма, ну даже не допустим, а она у тебя стопудово есть, ты создаешь туеву хучу TImage (что кстати я тебе жестоко не рекомендую)...

ну так вот... создав объект класса подобного в моем предыдущем посте, ты сможешь назначить свойство объекта TImage.OnClick следующим образом

ImageXXX.OnClick:L=THelloWorld.MouseClick;
почему именно так - ты сможешь узнать глянув в справку по темам TNotifyEvent, TControl.OnClick
и статью http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342


 
Palladin ©   (2008-01-18 23:43) [22]


> я агностик

"а" лишняя, гностик я... пить меньше надо...


 
MZP   (2008-01-18 23:49) [23]

Palladin, вас много и я это вижу. Вы больше и сильнее меня я это также вижу. Приношу извинения ещё раз.
Просто растроился что башка не соображает немного. Ну, время такое. Типа устал. Наглость - это иногда полезно. Я сам иногда бываю наглым :)

На  счет теории и примера спасибо большое. Я щас его буду изучать и постараюсь поэкспериментировать.

{RASkov} - тоже очень благодарен! Спасибо! вы открыли мне глаза пошире и буквально заставили посмотреть туда куда казалось мне раньше трудно. Оказывается все просто!

Спасибо всем большое!

p.s. все свои слова, обиды и критику забираю назад.
p.p.s. больше так не буду!


 
Dib@zol ©   (2008-01-18 23:51) [24]

> p.s. все свои слова, обиды и критику забираю назад.
> p.p.s. больше так не буду!

Нифига себе народ культурный на форуме пошёл... Респект! На полном серьёзе!


 
Palladin ©   (2008-01-18 23:55) [25]

да не беспокойся :) не ты первый не ты последний... за 6 лет привык... самое главное в моем ответе конечно же не уточнения твоего вопроса, а именно ссылка на статью про жизнь и смерть объектов в рантайм. самое главное, но не самое приоретное, бо если ты захочешь еще раз здесь проконсультироваться, следует очень хорошо сформулировать вопрос, поверь мене, 70% вопросов решаются самими же вопрошающими на этапе формулирования... и поверь мне еще раз, сформулируя правильно, ты очень много узнаешь нового


 
{RASkov} ©   (2008-01-18 23:56) [26]

> [24] Dib@zol ©   (18.01.08 23:51)
:)
Лишь бы это не "просто слова" были :( т.е. - сказались и забылись :)
MZP Не подумай ничего плохого, а просто сделай вывод по ветке..)

ЗЫ: А я, если чесно в шоке от постов Palladin"a, у меня бы столько терпения не хватило.... это точно :)



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

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

Наверх




Память: 0.54 MB
Время: 0.043 c
15-1199628190
kotenok
2008-01-06 17:03
2008.02.10
Перенос базы данных на новый компьютер


15-1199303878
Lip
2008-01-02 22:57
2008.02.10
Оцените код


2-1200891748
VladSel
2008-01-21 08:02
2008.02.10
Структура для хранения данных


6-1177100083
Sp1r1t
2007-04-21 00:14
2008.02.10
Как передать массив по сети используя Indy?


15-1200057036
asdf
2008-01-11 16:10
2008.02.10
через какие компоненты получить доступ к MySQL. D7





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский