![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте форумчане, нужна ваша помощь в реализации подсветки компонента 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.Последний раз редактировалось lmikle, 07.03.2013 в 08:36. |
|
#2
|
|||
|
|||
|
Я не могу реализовать третий пункт...
|
|
#3
|
|||
|
|||
|
Цитата:
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
|
|||
|
|||
|
а) После того, как пользователь навел мышку на метку1, и не щелкнул на неё, она должна закрасится в стандартный(серый) цвет.
б) Метка 1 должна оставатся темнокрасной до тех пор, пока пользователь не щелкнет на 2-ую метку в) Метка 1 должна закрасится в стандартный(серый) цвет. г) Одновременно темнокрасным цветом должна быть раскрашена только одна метка из восьми. |
|
#5
|
||||
|
||||
|
То что ты пытаешься изобрести называется URLLabel и давно реализовано во множестве вариантов.
|