Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.03.2013, 07:44
Linbo Linbo вне форума
Прохожий
 
Регистрация: 07.03.2013
Сообщения: 3
Репутация: 10
По умолчанию Подсветка Label

Здравствуйте форумчане, нужна ваша помощь в реализации подсветки компонента Label.
1)При наведени мыши на Label цвет(свойство Color) компонента Label должен подсвечиваться светлокрасным цветом(это реализовать я смог).
2)При нажати на Label(событие OnClick) цвет(свойство Color) компонента Label должен изменятся на темнокрасный цвет(это реализовать я смог).
3)Но при покидании зоны компонента Label(событие OnMouseLeave) цвет первого нажатого Label не должен изменятся на светлокрасный цвет, до тех пор пока пользователь не нажмет на следующий Label. В программе 8 Label'ов. Выклдаываю код и проект того, что у меня получилось.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    scrlbx1: TScrollBox;
    img1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure nored(ds:boolean);
    procedure Label1MouseLeave(Sender: TObject);
    procedure Label1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
(sender as TLabel).Transparent:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Color:=RGB(226,192,189);
Label2.Color:=RGB(226,192,189);
Label3.Color:=RGB(226,192,189);
Label4.Color:=RGB(226,192,189);
Label5.Color:=RGB(226,192,189);
Label6.Color:=RGB(226,192,189);
Label7.Color:=RGB(226,192,189);
Label8.Color:=RGB(226,192,189);
end;

procedure TForm1.nored(ds:boolean);
var
i: integer;
begin
if ds then
for i:=1 to 8 do
with self.FindComponent('Label'+inttostr(i))as tlabel do
begin
Transparent:=True;
Font.Color:=clBlack;
Color:=RGB(226,192,189);
end
end;

procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
nored(true);
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
(sender as TLabel).Color :=RGB(205,34,25);
(sender as TLabel).Font.Color :=clWhite;
end;

end.
Пожалуйста помогите разобратся, приветствуется любая помощь. Заранее спасибо!
Вложения
Тип файла: rar Пример 2.rar (219.9 Кбайт, 2 просмотров)

Последний раз редактировалось lmikle, 07.03.2013 в 08:36.
Ответить с цитированием
  #2  
Старый 07.03.2013, 07:49
Linbo Linbo вне форума
Прохожий
 
Регистрация: 07.03.2013
Сообщения: 3
Репутация: 10
По умолчанию

Я не могу реализовать третий пункт...
Ответить с цитированием
  #3  
Старый 07.03.2013, 08:45
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Linbo
Я не могу реализовать третий пункт...

1. Пользуемся тегами. Это я тебе как модератор говорю.
2. Не совсем понял задачу.
Т.е. пусть пользователь навел мышку на метку1. Она стала светло-красной.
а) Если он увел мышку не щелкнув по метке, что должно произойти?

Теперь пользователь щелкнул на метке1. Она стала темно-красной. При уводе мышки она такой и остается.

Теперь пользователь наводит мыша на метку2. Она становится светло-красной.
б) Что должно произойти с меткой1 в этот момент?

Ну и последнее. Пользователь шелкает по метке2.
в) Что должно произойти с меткой1?

Ну и на закуску.
г) Может ли быть раскрашено одновременно больше 1 (2) меток?

Как только ты ответишь на эти вопросы, то сразу поймешь как это реализовать. В принципе, ничто не мешает тебе сохранить указатель на выделенную (щелкнутую) метку и при шелчке по другой метке просто поменять цвет у этой сохраненной метки.
Код:
type
  TForm1 = class(TForm)
    Label1 : TLabel;
    ...
  private
    ClickedLabel : TLabel;
  end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  ClickedLabel := Nil;
end;

procedure TForm1.LabelClick(Sender : TObject);
begin
  If Assigned(ClickedLabel) Then ClickedLabel.Color := clBtnFace;
  ClickedLabel := Sender As TLabel;
  ClickedLabel.Color := clRed;
end;
Ответить с цитированием
  #4  
Старый 08.03.2013, 23:13
Linbo Linbo вне форума
Прохожий
 
Регистрация: 07.03.2013
Сообщения: 3
Репутация: 10
По умолчанию

а) После того, как пользователь навел мышку на метку1, и не щелкнул на неё, она должна закрасится в стандартный(серый) цвет.
б) Метка 1 должна оставатся темнокрасной до тех пор, пока пользователь не щелкнет на 2-ую метку
в) Метка 1 должна закрасится в стандартный(серый) цвет.
г) Одновременно темнокрасным цветом должна быть раскрашена только одна метка из восьми.
Ответить с цитированием
  #5  
Старый 08.03.2013, 23:32
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

То что ты пытаешься изобрести называется URLLabel и давно реализовано во множестве вариантов.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:07.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025