Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TImage над TStringGrid


denkop ©   (2011-09-22 14:44:00) 

Как нибудь возможно показать TImage над TStringGrid? Сейчас он уходит под грид, а очень хочется чтобы он был сверху.


Cobalt   (2011-10-07 15:42:00) [1]

Дык, я на то и намекаю - отлавливай OnMouseLeave?


denkop   (2011-10-07 12:11:00) [2]

Но и OnMouseUp тоже не вызывается.. В том что OnClick не происходит и есть проблема. У кнопки есть 3 состояния, когда курсор попал в область кнопки, ставлю картинку активной кнопки, когда кнопка мыши нажата он же OnMouseDown, ставлю картинку утопленной кнопки, потом кнопка отпускается и ставлю изначальную картинку. Так вот если нажать на кнопку и увести курсор за пределы грида, то на кнопке останется картинка утопленная, а нужно вернуть картинку которая была изначально..


Cobalt   (2011-10-07 12:02:00) [3]

Есть такое поведение у кнопок - если мышка не над кнопкой в нажатом виде - то кнопка не считает себя "нажатой".
Т.е. если нажать на TButton "левой кнопкой мышки", зажать и увести её с TButton - то OnClick не произойдёт.

У тебя такое поведение поддерживается?


denkop   (2011-10-07 11:05:00) [4]

Сейчас реализовано через OnDrawCell, обрабатывается также OnMouseMove чтобы ловить OnMouseEnter, OnMouseLeave, OnMouseDown, но есть проблема с OnMouseUp.. когда кнопку мыши зажал и выводишь в зажатом состоянии за пределы грида, то OnMouseUp уже не срабатывает. Отсюда и пошёл вопрос о контролах на гриде.

Image1.Parent := StringGrid1 тоже спасает. я изначально в runtime создавал все картинки и родителем ставил грид, не помогает, картинка под гридом остаётся..


Бездомный   (2011-10-06 13:37:00) [5]

Если все-таки хочется странного:

Image1.Parent := StringGrid1

в runtime.


wisekaa   (2011-10-05 23:35:00) [6]

+1 к предыдущему оратору. а уж примеров от рисовки компонент в гриде полно в рунете.


ProgRAMmer Dimonych   (2011-09-22 16:38:00) [7]

> [7] pointerman   (22.09.11 16:34)
> Возможно, но может есть менее трудоёмкие способы? Помимо
> события OnClick ещё нужны события OnMouseEnter, OnMouseLeave,
> OnMouseDown, OnMouseUp.. Я пока с трудом представляю как
> такое реализовать даже если доработать TStringGrid.

Ну, для отрисовки отдельных ячеек так и вовсе не нужно ничего наследовать - OnDrawCell или как его там. Если кнопка должна быть частью грида и её можно привязать к ячейкам - это тоже вариант. Вопрос только в том, насколько легко будет рассчитать необходимые координаты и отрисовать на канву загруженную картинку.


pointerman   (2011-09-22 16:34:00) [8]

Возможно, но может есть менее трудоёмкие способы? Помимо события OnClick ещё нужны события OnMouseEnter, OnMouseLeave, OnMouseDown, OnMouseUp.. Я пока с трудом представляю как такое реализовать даже если доработать TStringGrid.


ProgRAMmer Dimonych   (2011-09-22 15:21:00) [9]

А кнопка случайно не расширяет функциональность грида? М.б. логичнее унаследоваться от TStringGrid и реализовать желаемое там?


denkop   (2011-09-22 15:13:00) [10]

Конкретно в моей задаче, нужно сделать так чтобы в строках грида были кнопки. Стандартный TButton не подходит, кнопка графическая с прозрачными скруглениями углов (PNG c альфа каналом). Может есть другие мысли как это реализовать?


MBo   (2011-09-22 15:02:00) [11]

Потому что TStringGrid - TWinControl, а TImage - TGraphicControl, т.е. в сущности - картинка, участок на родительском оконном компоненте, который отрисовывается раньше, чем грид.


denkop   (2011-09-22 14:56:00) [12]

а почему вообще так происходит? может подскажете как доработать TImage класс чтобы появилась возможность поднять его над TStringGrid?


denkop   (2011-09-22 14:51:00) [13]

Часть картинки прозрачная, а у панели нет свойства Transparent..


MBo   (2011-09-22 14:45:00) [14]

Положи его на панель


Наверх

Титульная страница Поиск, карта сайта Написать письмо