Форум: "Основная";
Текущий архив: 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.031 c