|
Вопрос # 2 113/ вопрос решён / |
|
Здравствуйте!
В программе у меня нужно чтобы при нажатии на Лабел - он становился подчеркнутым и в конце нужна проверка
Помогите модернизировать мой код пожалуйста:
Приложение: Переключить в обычный режим-
- ...
-
- variant[0]:=TLabel.Create(Self);
- variant[0].Left:=-100;
- for i:=1 to 5 do
- begin
- variant[i]:=TLabel.Create(Self);
- variant[i].Parent:=Panel1;
- variant[i].Font.Size:=14;
- variant[i].Font.Color:=clHotlight;
- variant[i].Left:=variant[i-1].Left+100;
- variant[i].Top:=300;
- variant[i].AutoSize:=True;
- variant[i].Cursor:=crHandPoint;
-
- end;
-
-
-
-
-
- Variant[0].Free;
-
- Variant[1].OnClick:=Variant1Click;
- Variant[2].OnClick:=Variant2Click;
- Variant[3].OnClick:=Variant3Click;
- Variant[4].OnClick:=Variant4Click;
- Variant[5].OnClick:=Variant5Click;
-
-
-
-
- procedure Tform3.Variant1Click(Sender: TObject);
- begin
- if variant[1].Font.Style=variant[1].Font.Style+[fsUnderline]
- then
- variant[1].Font.Style:=variant[1].Font.Style-[fsUnderline]
- else
- variant[1].Font.Style:=variant[1].Font.Style+[fsUnderline];
- end;
- procedure Tform3.Variant2Click(Sender: TObject);
- begin
- if variant[2].Font.Style=variant[2].Font.Style+[fsUnderline]
- then
- variant[2].Font.Style:=variant[2].Font.Style-[fsUnderline]
- else
- variant[2].Font.Style:=variant[2].Font.Style+[fsUnderline];
- end;
- procedure Tform3.Variant3Click(Sender: TObject);
- begin
- if variant[3].Font.Style=variant[3].Font.Style+[fsUnderline]
- then
- variant[3].Font.Style:=variant[3].Font.Style-[fsUnderline]
- else
- variant[3].Font.Style:=variant[3].Font.Style+[fsUnderline];
- end;
- procedure Tform3.Variant4Click(Sender: TObject);
- begin
- if variant[4].Font.Style=variant[4].Font.Style+[fsUnderline]
- then
- variant[4].Font.Style:=variant[4].Font.Style-[fsUnderline]
- else
- variant[4].Font.Style:=variant[4].Font.Style+[fsUnderline];
- end;
- procedure Tform3.Variant5Click(Sender: TObject);
- begin
- if variant[5].Font.Style=variant[5].Font.Style+[fsUnderline]
- then
- variant[5].Font.Style:=variant[5].Font.Style-[fsUnderline]
- else
- variant[5].Font.Style:=variant[5].Font.Style+[fsUnderline];
- end;
-
- procedure TForm3.Proverka3Click(Sender:Tobject);
- begin
- if (variant[2].Font.Style=variant[2].Font.Style+[fsUnderline])
- and (variant[1].Font.Style=variant[1].Font.Style-[fsUnderline])
- and (variant[3].Font.Style=variant[3].Font.Style-[fsUnderline])
- and (variant[4].Font.Style=variant[4].Font.Style-[fsUnderline])
- and (variant[5].Font.Style=variant[5].Font.Style-[fsUnderline])
-
-
- end;
-
-
 |
Вопрос задал: 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 (статус: Студент), 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 (статус: 1-ый класс), 25 ноября 2008, 12:43 [#3]:
Ну вот за помощью как раз таки я и обратился, спасибо большоЕ!
|
31 января 2011, 19:33: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|