1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
1

Выделение предложения (Объекта) по клику

23.10.2013, 19:18. Показов 1198. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!

Подскажите пожалуйста, как реализовать выделение предложения по клику?

В программе слева представлен список (содержание). Необходимо, чтобы при выборе того или иного пункта он как-то выделялся визуально (подчеркивался, цветом и т.д.)
Вложения
Тип файла: rar Демо 0.0.1.rar (4.57 Мб, 9 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2013, 19:18
Ответы с готовыми решениями:

Визуальное выделение объекта по клику
Доброго времени суток! Помогите пожалуйста с решением следующего рода проблем: 1. Есть...

Выделение строки по клику
В общем задание: в Delphi по клику на memo/richedit, вся строка, по которой кликнули, должна...

Создание объекта по клику
Добрый вечер! Подскажите пожалуйста, каким образом осуществить следующую процедуру: ...

Выделение контура объекта на изображении
Здравствуйте, подскажите, пожалуйста, как найти контур объекта на картинке.

13
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
23.10.2013, 20:55  [ТС] 2
Выделение одного элемента получилось:
Delphi
1
Label4.Font.Color:=clRed;
А как сделать чтоб при выделении другого элемента, снималось выделение с предыдущего?
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
23.10.2013, 21:28 3
Цитата Сообщение от Mazanton Посмотреть сообщение
А как сделать чтоб при выделении другого элемента, снималось выделение с предыдущего?
Снимать со всех, кроме вновь выделенного.
0
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
23.10.2013, 21:29  [ТС] 4
Цитата Сообщение от northener Посмотреть сообщение
Снимать со всех, кроме вновь выделенного.
Каким образом?!
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
23.10.2013, 21:34 5
Цитата Сообщение от Mazanton Посмотреть сообщение
Каким образом?!
Задать им прежний цвет шрифта.
1
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
23.10.2013, 21:38  [ТС] 6
Цитата Сообщение от northener Посмотреть сообщение
Задать им прежний цвет шрифта.
Подскажите пожалуйста тогда, каким образом можно взять и присвоить всем объектам (в моем случае все объекты типа: Tlabel) один цвет, а не присваивать цвет по отдельности каждому объекту всякий новый раз.
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
23.10.2013, 22:28 7
Если на форме нет никаких других компонент типа Tlabel, чей цвет отличается от цвета некликнутых лейблов, то
при клике по какому-то лейблу сначала сделать так
Delphi
1
2
for i:=0 to ComponentCount-1 do
  if Components[i] is TLabel then TLabel(Components[i]).Font.Color:=...
А потом
Delphi
1
Label4.Font.Color:=clRed;
P.S. Cменe цвета лучше сделать в общем для этих лейблов обработчике OnClick.
1
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
23.10.2013, 22:38  [ТС] 8
Проблема решена.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Label3Click(Sender: TObject);
begin
 
 for I := 1 to 6 do
   with TLabel(FindComponent('Label' + IntToStr(I))) do
  Font.Color:=ClBlack;
 
Label3.Font.Color:=ClRed;
WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)+'html/1.html');
 
 
 
end;
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
23.10.2013, 22:44 9
Цитата Сообщение от Mazanton Посмотреть сообщение
Проблема решена.
И на каждый из 6 лейблов свой обработчик OnClick с практически одинаковым кодом? Ну-ну.
0
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
24.10.2013, 00:12  [ТС] 10
Цитата Сообщение от northener Посмотреть сообщение
Если на форме нет никаких других компонент типа Tlabel, чей цвет отличается от цвета некликнутых лейблов, то
при клике по какому-то лейблу сначала сделать так
Delphi
1
2
for i:=0 to ComponentCount-1 do
  if Components[i] is TLabel then TLabel(Components[i]).Font.Color:=...
А потом
Delphi
1
Label4.Font.Color:=clRed;
P.S. Cменe цвета лучше сделать в общем для этих лейблов обработчике OnClick.
Прошу прощения. Не заметил Вашего сообщения, когда отправлял свое.
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
24.10.2013, 01:06 11
Цитата Сообщение от Mazanton Посмотреть сообщение
for I := 1 to 6 do with TLabel(FindComponent('Label' + IntToStr(I))) do
FindComponent в таком цикле использовать просто глупо, ибо FindComponent выполняет поиск в цикле по Components. Так зачем выполнять 6 раз один и тот же цикл?
0
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
24.10.2013, 17:35  [ТС] 12
Цитата Сообщение от northener Посмотреть сообщение
P.S. Cменe цвета лучше сделать в общем для этих лейблов обработчике OnClick.
Ребят, подскажите пожалуйста, как бы это реализовать?

Вынести в юнит и запускать функцией? Или как ? Как сформулировать это даже не знаю..Где про это почитать можно?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
24.10.2013, 18:06 13
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Mazanton, У тебя версия Дельфи какая? Я смотрю, что-то выше 2009, судя по проекту? Я бы сделал вот такой финт тогда:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
type
  TLabel = class(Vcl.StdCtrls.TLabel)
  protected
    procedure Click; override;
  class var
    LastClicked : TLabel;
  end;
 
  TForm1 = class(TForm)
  // тут твоя форма, без изменений...
 
 
// А вот реализация метода Click:
{ TLabel }
 
procedure TLabel.Click;
begin
  if Assigned(LastClicked) then LastClicked.Font.Color := clBlack;
  Self.Font.Color := clRed;
  LastClicked := Self;
 
  inherited; // тут будут вызываться твои обработчики OnClick
end;
 
initialization
  TLabel.LastClicked := nil;
, теперь при клике на любой лейбл, выделение с предыдущего будет снято, и перенесено на новый... Сколько бы лейблов не было. И не надо никаких циклов...
1
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
24.10.2013, 18:30  [ТС] 14
Цитата Сообщение от UI Посмотреть сообщение
Mazanton, У тебя версия Дельфи какая? Я смотрю, что-то выше 2009, судя по проекту? Я бы сделал вот такой финт тогда:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
type
  TLabel = class(Vcl.StdCtrls.TLabel)
  protected
    procedure Click; override;
  class var
    LastClicked : TLabel;
  end;
 
  TForm1 = class(TForm)
  // тут твоя форма, без изменений...
 
 
// А вот реализация метода Click:
{ TLabel }
 
procedure TLabel.Click;
begin
  if Assigned(LastClicked) then LastClicked.Font.Color := clBlack;
  Self.Font.Color := clRed;
  LastClicked := Self;
 
  inherited; // тут будут вызываться твои обработчики OnClick
end;
 
initialization
  TLabel.LastClicked := nil;
, теперь при клике на любой лейбл, выделение с предыдущего будет снято, и перенесено на новый... Сколько бы лейблов не было. И не надо никаких циклов...
Спасибо большое! Все работает! Да, выше 2009 - 2013.
0
24.10.2013, 18:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2013, 18:30
Помогаю со студенческими работами здесь

Выделение границ объекта на изображении
помогите плиз. Нужна программа для выделения границ. Например, путем изменения контраста. С...

Пермещение объекта в позицию другого объекта по его клику
Имеется command1 и command2 Как сделать чтобы при нажатии на command2, command1 перемещалась в...

Выделение DataGridCheckBoxColumn по одному клику
Здравствуйте, уважаемые программисты! Проблема состоит в том, что по клику на...

Выделение текста по клику в TextField
В общем есть много TextField на панели, я хочу чтобы по клику мыши текст выделялся в том же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru