Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как выделить объект?

6.7K
09 августа 2005 года
kasyava
28 / / 27.07.2005
У меня такой вопрос!!!

Во время выполнения программы я создаю множество различных огбъектов на TPanel (таких как Label и Image).

Как мне сделать так чтобы при нажатии на один из них мышкой он выделялся прямоугольником и при этом тот объект который был выделен до него потерял свое выделение..

Пробовал использовать DrawFocusRect но почемуто Label не выделяется..
Может кто нибудь знает другой способ.....???

буду признателен за помощь!
488
09 августа 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by kasyava
Пробовал использовать DrawFocusRect но почемуто Label не выделяется..
Может кто нибудь знает другой способ.....???

Если уже есть (полу)работающий код, то сперва установи для всех TLabel свойство Transparent=true. Может поможет.

6.7K
09 августа 2005 года
kasyava
28 / / 27.07.2005
Цитата:
Originally posted by Mоngооsе
Если уже есть (полу)работающий код, то сперва установи для всех TLabel свойство Transparent=true. Может поможет.



Пробовал не помогает :(

488
09 августа 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by kasyava
Пробовал не помогает :(

Да и мне как бы надо чтобы оно было =FALSE

Значит код не рабочий.

 
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TRect r;
  r = Label1->BoundsRect;
  this->Canvas->DrawFocusRect(r);
}
Выделяет Label1
 
Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  TRect r;
  r = Label1->BoundsRect;
  this->Canvas->DrawFocusRect(r);
  r = Label2->BoundsRect;
  this->Canvas->DrawFocusRect(r);
}
Снимает выделение с Label1 и выделяет Label2.

Нужно определить глобальную переменную TRect lastBoundRect.
Инициализировать в (0,0,0,0) в Form OnCreate. Определить обработчик
 
Код:
void __fastcall TForm1::OnLabelClick(TObject *Sender)
{
  this->Canvas->DrawFocusRect(lastBoundRect);
  TRect r = ((TLabel *)Sender)->BoundsRect;
  this->Canvas->DrawFocusRect(r);
  lastBoundRect = r;
}
и привязать к нему OnClick события нужных TLabel.
10
09 августа 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by kasyava
Пробовал использовать DrawFocusRect но почемуто Label не выделяется..


Тебе нужно виндовое выделение или программная эмуляция? По-виндовому можно выделять только наследников TWinControl - они имеют дескриптор окна. А неоконные компоненты, вроде TLabel, просто рисуются на (контексте) канве родителя.

259
09 августа 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Все объекты, порожденные от TControl, в.т.ч. и TLabel имеют property Color.

Specifies the background color of the control.

__property Graphics::TColor Color = {read=FColor, write=SetColor, stored=IsColorStored, default=-2147483643 };

Description

Use Color to read or change the background color of the control.

If a control's ParentColor property is true, then changing the Color property of the control's parent automatically changes the Color property of the control. When the value of the Color property is changed, the control's ParentColor property is automatically set to false.
6.7K
09 августа 2005 года
kasyava
28 / / 27.07.2005
2 Mоngооsе
Спасибо за помощь, буду пробовать..
246
10 августа 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by kasyava
У меня такой вопрос!!!

Во время выполнения программы я создаю множество различных огбъектов на TPanel (таких как Label и Image).

Как мне сделать так чтобы при нажатии на один из них мышкой он выделялся прямоугольником и при этом тот объект который был выделен до него потерял свое выделение..

Пробовал использовать DrawFocusRect но почемуто Label не выделяется..
Может кто нибудь знает другой способ.....???

буду признателен за помощь!


Ну если втупую, то каждый Лейбел помести на панель, панель автосайз = true и меняй бордюр панели при клике.

585
10 августа 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by kasyava
У меня такой вопрос!!!

Во время выполнения программы я создаю множество различных огбъектов на TPanel (таких как Label и Image).

Как мне сделать так чтобы при нажатии на один из них мышкой он выделялся прямоугольником и при этом тот объект который был выделен до него потерял свое выделение..

Пробовал использовать DrawFocusRect но почемуто Label не выделяется..
Может кто нибудь знает другой способ.....???

буду признателен за помощь!


Ну очень простой метод.
в .h

Код:
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TLabel *Label1;
    TLabel *Label2;
    void __fastcall FormDblClick(TObject *Sender);
    void __fastcall SelectClick(TObject *Sender);
private:    // User declarations
    TLabel* prev;
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};


в .cpp
Код:
void __fastcall TForm1::SelectClick(TObject *Sender)
{
if(prev)
    {
    prev->Color = clBtnFace;
    prev->Font->Color = clWindowText;
    }
prev = (TLabel*)Sender;
prev->Color = clBlue;
prev->Font->Color = clWhite;
}

на OnClick вешаешь SelectClick, дальше тебя может ограничить только твоя фантазия.
P.S.
Кстати Лэйблов может быть сколько угодно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог