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

Вниз

Как узнать на каком Label кликнули мышью?   Найти похожие ветки 

 
denmin ©   (2004-07-21 10:52) [0]

Здравствуйте.
Есть форма, на ней висят Labelы русского и английского алфавита. Необходимо, при клике мышью на любом лейбле узнать какая буква и отфильтровать в таблице все записи начинающиеся на эту букву. Т.е. как на страничках в интернете, где на букву нажал, и перешел на названия с этой буквы. Просто не хочется на каждый лейбл вешат событе онклик. Заранее всем благодарен.


 
Суслик ©   (2004-07-21 11:00) [1]


> Просто не хочется на каждый лейбл вешат событе онклик

почему?
весик очередной изобретаем?


 
Плохиш ©   (2004-07-21 11:00) [2]

Sender


 
Суслик ©   (2004-07-21 11:01) [3]

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


 
Sun bittern ©   (2004-07-21 11:02) [4]

if Sender is TLabel then
case TLabel(Sender).Tag of
1:...;
2:...;
end;


 
Sandman25 ©   (2004-07-21 11:05) [5]

[4] Sun bittern ©   (21.07.04 11:02)

Вот в таких случаях нужно писать отдельные обработчики для разных лабелов!!!
Несерьезно, если OnClick используется аналогично WndProc :)


 
default ©   (2004-07-21 11:10) [6]

Sandman25 ©   (21.07.04 11:05) [5]
серьёзно, если весомая часть кода выполняется для всех меток, остальная специфицируется


 
Sandman25 ©   (2004-07-21 11:13) [7]

[6] default ©   (21.07.04 11:10)

Это понятно. Я писал о данном конкретном случае, когда весь обработчик состоит из одного большого case.


 
Плохиш ©   (2004-07-21 11:18) [8]


> Sandman25 ©   (21.07.04 11:13) [7]
> [6] default ©   (21.07.04 11:10)
>
> Это понятно. Я писал о данном конкретном случае, когда весь
> обработчик состоит из одного большого case.

В данном конкретном случае [0] case вообще не нужен


 
Sandman25 ©   (2004-07-21 11:24) [9]

[8] Плохиш ©   (21.07.04 11:18)

Согласен. И tag тоже не нужен. Но я-то реагировал на [4], а не [0]


 
Space Hunter   (2004-07-21 11:26) [10]

В OnClick:

if Sender is TLabel then begin
 ch := TLabel(Sender).Caption;
 // Получили кликнутую букву. Дальше фильтруй! ;)
 ...
end;


 
Анонимщик ©   (2004-07-21 11:36) [11]

Если делать так, ка хочет автор вопроса, то нужно бросить на форму TApplicationEvents и в обработчике OnMessage написать:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
var
 i: Integer;
 aP1, aP2: TPoint;
begin
 if (Msg.message = WM_LBUTTONDOWN) and (Msg.hwnd = Form1.Handle) then
 begin
     for i := 0 to Form1.ControlCount - 1 do
     begin
       if Form1.Controls[i] is TLabel then
       begin
         aP1 := ClientToScreen(Point(Form1.Controls[i].Left, Form1.Controls[i].Top));
         aP2 := ClientToScreen(Point(Form1.Controls[i].Left + Form1.Controls[i].Width, Form1.Controls[i].Top + Form1.Controls[i].Height));
         if (Msg.pt.X >= aP1.X) and
            (Msg.pt.X <= aP2.X) and
            (Msg.pt.Y >= aP1.Y) and
            (Msg.pt.Y <= aP2.Y) then
               ShowMessage((Form1.Controls[i] as TLabel).Caption);
       end;
     end;
 end;
 Handled := false;
end;


 
Sandman25 ©   (2004-07-21 11:39) [12]

[11] Анонимщик ©   (21.07.04 11:36)

Ага, давайте откажемся от всех обработчиков и все будем делать в OnMessage...


 
Анонимщик ©   (2004-07-21 11:45) [13]

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


 
Sandman25 ©   (2004-07-21 11:47) [14]

[13] Анонимщик ©   (21.07.04 11:45)

А я против. Надеюсь, не надо объяснять преимущества и недостатки обоих подходов.


 
Анонимщик ©   (2004-07-21 11:49) [15]

Не надо. Для меня недостатков у обработчиков, вообще говоря, больше (но не в этом случае).


 
Sandman25 ©   (2004-07-21 11:50) [16]

[15] Анонимщик ©   (21.07.04 11:49)

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


 
Анонимщик ©   (2004-07-21 11:56) [17]

Тогда да. Но должен все равно сказать, что начинающих программировать в дельфи обработчики настолько сбивают с толку, что они вообще не понимают что к чему.


 
Sandman25 ©   (2004-07-21 12:01) [18]

[17] Анонимщик ©   (21.07.04 11:56)

Согласен. Можно работать программистом, не зная о существовании сообщений, потоков и прочих семафоров :)


 
Sun bittern ©   (2004-07-21 12:26) [19]

Sandman25 ©   (21.07.04 12:01) [18]

>> Согласен. Можно работать программистом, не зная о существовании сообщений, потоков и прочих семафоров :)

А зачем это знать. На это форум есть, вдруг готовое кинут ;)


 
Sandman25 ©   (2004-07-21 12:28) [20]

[19] Sun bittern ©   (21.07.04 12:26)

Часто бывает, что вместо готового кода пишут RTFM и F1. И это правильно :)


 
Анонимщик ©   (2004-07-21 12:28) [21]

Sun bittern
Неверно. На это есть не форум, а Дельфи.


 
Sun bittern ©   (2004-07-21 12:35) [22]

Sandman25 ©   (21.07.04 12:28) [20]
Анонимщик ©   (21.07.04 12:28) [21]

Но почему то иногда попадаются личности с мнением на оборот :)



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

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

Наверх




Память: 0.49 MB
Время: 0.038 c
1-1090151824
Вопрос
2004-07-18 15:57
2004.08.01
PenPos или "как нарисовать линию"


1-1089808277
goliath
2004-07-14 16:31
2004.08.01
Работа с метафайлами (wmf)


3-1089063526
Sir John
2004-07-06 01:38
2004.08.01
TclientDataSet и поля с autoincrement


1-1090392773
denmin
2004-07-21 10:52
2004.08.01
Как узнать на каком Label кликнули мышью?


1-1089934447
Alex870
2004-07-16 03:34
2004.08.01
Excel





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