совет по Контролу

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

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

совет по Контролу

Сообщение grigoreo » 17.06.2010 10:58:24

Уважаемые форумчане, есть к примеру компонент TImage (у него есть хорошие свойства для моей задачи такие как отображение изображения с пропорциональным масшабированием и в центре своей области, но у него к примеру нет фокуса ), есть контрол TButton и TBitBtn(у обоих есть фокус но у второго нет масштабирование отображаемого глифа)

и как мне поступить чтобы получить на форме все эти свойства(масштабированое отображение и наличие фокуса с событием OnClick) в одном флаконе или как их можно скомпоновать чтобы на форме они выглядели как один контрол?(может есть готовые решения)
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: совет по Контролу

Сообщение А.Н. » 17.06.2010 11:09:54

Написать свой компонент. Что касается window$: TImage - неоконный контрол. Он не может иметь фокус, поскольку системе об этом контроле ничего неизвестно. Объект просто прорисовывает картинку на родительском контроле.
TButton - оконный контрол. Один из его базовых классов - TWinControl. При создании объекта кнопки, создаётся соответствующее окно.
Т.е., кнопка является окном и, соответственно, полноценным объектом ОС: имеет хэндл, получает фокус, содержится в списках объектов ОС и т.д..

Готовые решения почти наверняка есть. Стоит поискать. Но, думаю, не столь сложно самому реализовать такое.

Добавлено спустя 53 секунды:
Кстати, а причём тут OnClick? Он есть и у TImage.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: совет по Контролу

Сообщение grigoreo » 17.06.2010 11:22:20

Кстати, а причём тут OnClick? Он есть и у TImage.


да есть? не так выразил просто интересен компонент TImage в виде кнопки с каймой и эфектом нажатия не только мышкой но и с клавиатуры

Добавлено спустя 58 минут 49 секунд:
а еще попутный вопрос может кто знает имеется изображение к примеру внутри TImage как загнать из него в компонент TBitBtn в свойство Glyph это изображение причем в том виде как его отобразил TImage (c пропорциональным масштабированием)
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: совет по Контролу

Сообщение А.Н. » 17.06.2010 20:19:17

К примеру, так:
Код: Выделить всё
var bmp: TBitmap;
    r: TRect;
begin
  bmp         := TBitmap.Create;
  bmp.Width   := Image1.Width;
  bmp.Height  := Image1.Height;
  r := Rect(0, 0, bmp.Width, bmp.Height);
  bmp.Canvas.CopyRect(r, Image1.Canvas, r);
  BitBtn1.Glyph.Assign(bmp);
  bmp.Free;

Минус в том, что на glyph'е будет именно то, что на канве Image.
Т.е., если снизу - контрол, он также будет прорисован.

Добавлено спустя 16 часов 10 минут 42 секунды:
Кстати, совсем забыл, ещё имеется: Canvas.StretchDraw().
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39

Рейтинг@Mail.ru