Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

Как узнать на каком 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.043 c
3-1087821905
Bulgar
2004-06-21 16:45
2004.08.01
Альтернатива базе данных


3-1089200786
stud
2004-07-07 15:46
2004.08.01
программное добавление юзеров и прав


14-1089728469
vecna
2004-07-13 18:21
2004.08.01
МТС


14-1089964830
Dmitriy O.
2004-07-16 12:00
2004.08.01
Референдум


1-1090242041
flash
2004-07-19 17:00
2004.08.01
Как напрямую вызвать метод суперкласса из потомка >2-го уровня