Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 113

Раздел: Delphi » Прочее
/ вопрос решён /

Здравствуйте!
В программе у меня нужно чтобы при нажатии на Лабел - он становился подчеркнутым и в конце нужна проверка
Помогите модернизировать мой код пожалуйста:

Приложение:
  1.  
  2. ...
  3.  
  4. variant[0]:=TLabel.Create(Self);
  5. variant[0].Left:=-100;
  6. for i:=1 to 5 do
  7. begin
  8. variant[i]:=TLabel.Create(Self);
  9. variant[i].Parent:=Panel1;
  10. variant[i].Font.Size:=14;
  11. variant[i].Font.Color:=clHotlight;
  12. variant[i].Left:=variant[i-1].Left+100;
  13. variant[i].Top:=300;
  14. variant[i].AutoSize:=True;
  15. variant[i].Cursor:=crHandPoint;
  16.  
  17. end;
  18.  
  19.  
  20.  
  21.  
  22.  
  23. Variant[0].Free;
  24.  
  25. Variant[1].OnClick:=Variant1Click;
  26. Variant[2].OnClick:=Variant2Click;
  27. Variant[3].OnClick:=Variant3Click;
  28. Variant[4].OnClick:=Variant4Click;
  29. Variant[5].OnClick:=Variant5Click;
  30.  
  31.  
  32.  
  33.  
  34. procedure Tform3.Variant1Click(Sender: TObject);
  35. begin
  36. if variant[1].Font.Style=variant[1].Font.Style+[fsUnderline]
  37. then
  38. variant[1].Font.Style:=variant[1].Font.Style-[fsUnderline]
  39. else
  40. variant[1].Font.Style:=variant[1].Font.Style+[fsUnderline];
  41. end;
  42. procedure Tform3.Variant2Click(Sender: TObject);
  43. begin
  44. if variant[2].Font.Style=variant[2].Font.Style+[fsUnderline]
  45. then
  46. variant[2].Font.Style:=variant[2].Font.Style-[fsUnderline]
  47. else
  48. variant[2].Font.Style:=variant[2].Font.Style+[fsUnderline];
  49. end;
  50. procedure Tform3.Variant3Click(Sender: TObject);
  51. begin
  52. if variant[3].Font.Style=variant[3].Font.Style+[fsUnderline]
  53. then
  54. variant[3].Font.Style:=variant[3].Font.Style-[fsUnderline]
  55. else
  56. variant[3].Font.Style:=variant[3].Font.Style+[fsUnderline];
  57. end;
  58. procedure Tform3.Variant4Click(Sender: TObject);
  59. begin
  60. if variant[4].Font.Style=variant[4].Font.Style+[fsUnderline]
  61. then
  62. variant[4].Font.Style:=variant[4].Font.Style-[fsUnderline]
  63. else
  64. variant[4].Font.Style:=variant[4].Font.Style+[fsUnderline];
  65. end;
  66. procedure Tform3.Variant5Click(Sender: TObject);
  67. begin
  68. if variant[5].Font.Style=variant[5].Font.Style+[fsUnderline]
  69. then
  70. variant[5].Font.Style:=variant[5].Font.Style-[fsUnderline]
  71. else
  72. variant[5].Font.Style:=variant[5].Font.Style+[fsUnderline];
  73. end;
  74.  
  75. procedure TForm3.Proverka3Click(Sender:Tobject);
  76. begin
  77. if (variant[2].Font.Style=variant[2].Font.Style+[fsUnderline])
  78. and (variant[1].Font.Style=variant[1].Font.Style-[fsUnderline])
  79. and (variant[3].Font.Style=variant[3].Font.Style-[fsUnderline])
  80. and (variant[4].Font.Style=variant[4].Font.Style-[fsUnderline])
  81. and (variant[5].Font.Style=variant[5].Font.Style-[fsUnderline])
  82.  
  83.  
  84. end;
  85.  
  86.  


Ruslan Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ruslan (статус: 1-ый класс)
Вопрос отправлен: 24 ноября 2008, 21:06
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Ruslan!
Можно, можно сократить, причем хорошо сократить. Я бы делал так.
Все Label поставил бы на форму и не придумал их ручное создание.
Теперь смотрим на все обработчики и понимаем, что они однотипные. Поэтому перепишем их так

procedure Tform3.Variant1Click(Sender: TObject);
begin
    if fsUnderline in TLabel(Sender).Font.Style
     then
      TLabel(Sender).Font.Style:=TLabel(Sender).Font.Style-[fsUnderline]
     else
    TLabel(Sender).Font.Style:=TLabel(Sender).Font.Style+[fsUnderline];
end;
Как видно по коду, теперь обращение идет к Sender - то есть тому компоненту, который вызвал обработчик.
Дальше - выделям все Label на форме и идем в инспектор объектов на вкладку события. Находим событие OnClick и нажимаем по треугольничку выпадающего списка. В нем выбираем наше новое событие - Variant1Click.
Процедуру проверки думаю и самостоятельно уже напишете. Только подскажу, если не внимательно смотрели на мой код выше, что проверить, подчеркнута ли метка, можно так
fsUnderline in TLabel(Sender).Font.Style
а не тем хитрым способом, который у вас:)

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 25 ноября 2008, 09:59
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: min@y™

Код жуткий, правда.
Я набросал тебе тут примерчик, снабжённый комметариями. Это только пример!
Прицепляю к ответу. Я бы расписал его работу, но нет времени: припёрлось начальство и запрягло срочной проблемой.
Вопросы будут - пиши в форум/аську/мыло.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 25 ноября 2008, 10:17
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 25 ноября 2008, 12:43; участников в обсуждении: 3.
DNK

DNK (статус: Студент), 25 ноября 2008, 11:16 [#1]:

Немного юмора.
Глядя на эти жудкие проверки на Ундерлайн из меня поперло творчество.

1) Проверка на равенство числа единице:
if 10 * a = 10 then

2) Проверка на равенство числа нулю:
if 10 + a = 10 then

3) Проверка на неотрицательное число:
if abs(a) - a = 0 then

4) Проверка на неположительное число:
if abs(a) + a = 0 then

5) Проверка булевой переменной:
if a = true then

6) Более продвинутый вариант:
if (a = true) = true then

Я спешу посмеяться над всем, иначе мне пришлось бы заплакать. (с) П.О. Бомарше
"Digital Networked Knight"
Вадим К

Вадим К (статус: Академик), 25 ноября 2008, 11:27 [#2]:

Весёлый код, если бы не был печальный. Вот например код
if abs(a) + a = 0 then
Казалось бы всё хорошо, но если забыть о переполнении, то можно получить чудный результат. Например, если a:integer и a = 80000000, то сумма будет как раз нулю...
Галочка "подтверждения прочтения" - вселенское зло.
Ruslan

Ruslan (статус: 1-ый класс), 25 ноября 2008, 12:43 [#3]:

Ну вот за помощью как раз таки я и обратился, спасибо большоЕ!

31 января 2011, 19:33: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.03 сек.