аналог RadioButton но для Label (вопрос новичка)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

аналог RadioButton но для Label (вопрос новичка)

Сообщение pensioner » 02.11.2009 21:33:20

Можно сказать что прижало написать программку.
Прошу быть снисходительным к новичку.

В программе нужно, что бы по щелчку по Label66 подсвечивалась (меняла цвет фона) Label24, затем по щелчку по Label67 --> Label25, и так далее, всего 21 поле.
Код: Выделить всё
procedure TForm1.Label66Click(Sender: TObject);
begin
  Label24.Color:=clRed;
end;

Мне же необходимо чтобы это работало как переключатель, типа RadioButton, тоесть по щелчку по очередному Label(66-86) прежние Label(24-44) возвращались в своё исходное положение, а подсвечено было только одно поле.

Подскажите пожалуйста как это лучше реализовать.
pensioner
новенький
 
Сообщения: 13
Зарегистрирован: 02.11.2009 21:02:28

Re: аналог RadioButton но для Label (вопрос новичка)

Сообщение Andreich » 02.11.2009 21:53:14

Не совсем понял что именно нужно,.. и еще меньше представляю где это могут использоваться переключатели из 86ти Label'ов, но если все настолько круто, то можешь попробовать воспользоваться свойством Tag + if_then_else.

Но разумнее все же будет использовать RadioGroup.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: аналог RadioButton но для Label (вопрос новичка)

Сообщение pensioner » 02.11.2009 22:34:17

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

и еще меньше представляю где это могут использоваться переключатели из 86ти Label'ов

Насамом деле их будет намного больше.
Просто нужно чтобы интерфейс программы приближённо напоминал фэйс оригинальной программы, написаной на бейсике и работающей на windows (см. вложение, подсвечивается "v3" на графике и в таблице).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
pensioner
новенький
 
Сообщения: 13
Зарегистрирован: 02.11.2009 21:02:28

Re: аналог RadioButton но для Label (вопрос новичка)

Сообщение Vadim » 03.11.2009 06:28:02

pensioner
Наверное лучше воспользоваться одним обработчиком на всех и в нём использовать конструкцию Case .. Of.
При этом лейблы сделать не самостоятельными элементами накиданными на форму, а элементами массива для удобства групповой обработки.

Добавлено спустя 4 минуты 33 секунды:
pensioner
Вопрос не в тему... :)
У меня тоже встала сейчас задача подобная Вашей. ;) Будет чертёж с большим количеством отрезков и эти отрезки надо подписывать названиями, всё прямо как у Вас. :) Собственно вопрос - как это сделать, чтобы названия не налезали на линии? Линии будут рисоваться под углом, зависящим от входных параметров, т.е. угол заранее неизвестен. У Вас, я вижу, это сделано просто превосходно. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: аналог RadioButton но для Label (вопрос новичка)

Сообщение pensioner » 03.11.2009 23:31:33

Нашёл таки решение)))))
через переменную TLabel

Код: Выделить всё
var
MyVarLabel: TLabel;
..............................
..............................
procedure TForm1.FormCreate(Sender: TObject);
begin
  MyVarLabel:=Label24; // обязательно нужно поместить в переменную любой Label
end; 
................................
................................
// а дальше всё просто))
procedure TForm1.Label66Click(Sender: TObject);
begin
   MyVarLabel.Color:=clNone;
   MyVarLabel:=Label24;
   MyVarLabel.Color:=clRed;
end;

procedure TForm1.Label67Click(Sender: TObject);
begin
    MyVarLabel.Color:=clNone;
    MyVarLabel:=Label25;
    MyVarLabel.Color:=clRed;
end;

procedure TForm1.Label68Click(Sender: TObject);
begin
    MyVarLabel.Color:=clNone;
    MyVarLabel:=Label26;
    MyVarLabel.Color:=clRed;
end;
...................................
...................................
// и так далее

всё переключается))
pensioner
новенький
 
Сообщения: 13
Зарегистрирован: 02.11.2009 21:02:28

Re: аналог RadioButton но для Label (вопрос новичка)

Сообщение svk12 » 05.11.2009 13:33:37

Достаточно написать один обработчик и привязать его ко всем лейблам через инспектор объектов.
В этом случае его код будет выглядеть так:

Код: Выделить всё
procedure TForm1.Label66Click(Sender: TObject);
begin
   MyVarLabel.Color:=clNone;
   MyVarLabel:=Sender as TLabel;
   MyVarLabel.Color:=clRed;
end;


А чтобы не мучаться щёлкая мышкой по ИО , можно сделать это через код в обработчике onCreate формы:

Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
  MyVarLabel:=Label24; // обязательно нужно поместить в переменную любой Label
  for i := 0 to Self.ComponentCount-1  do
  if Self.Components[i] is TLabel then
  (Self.Components[i] as TLabel).OnClick:=@Label66Click;
end;
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

Re: аналог RadioButton но для Label (вопрос новичка)

Сообщение pensioner » 05.11.2009 19:06:27

svk12
Спасибо.
Мне конечно плохо (пока) понятна часть кода, но всё равно учту.
pensioner
новенький
 
Сообщения: 13
Зарегистрирован: 02.11.2009 21:02:28


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 36

Рейтинг@Mail.ru