Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Контейнер визуальных объектов


Автор: jsa 9.12.2008, 11:39
Hi All

есть тут у меня задачка одна:

хочу создать некий контейнер визуальных объектов - область с воможность прокрутки(пока нужно по горизонтали), объекты внутри области - панели с неким расширенным набором свойств
сейчас взял за основу TScrollBox, в котором создаются динамически несколько объектов TPanel 
на данном моменте интересует вопросы:
1 как сделать обработку кликов - т.е. кликнул по какой-то панели - она стала активной - каким либо образом перекрасилась
2 как выводить текст на панели( если ширина заранее не известна) что бы (возможно длинный) текст переносился автоматот на на другие строки по пробелам, или просто часть текста обрезалась и подставлялись 3 точки
3 если я изменю ширину одной панели - как сказать остальным что бы они подвинулись

ЗЫЖ 
буду признателен за лыбые ссылки, коментарии, идеи

Автор: Alexeis 9.12.2008, 12:04
  Комментарий простой, компонент удобен когда используется много раз, для однократного использования можно воспользоваться фреймом, в нем реализовать все обработчики кликов и проч. , а на реальной форме кинуть скролбокс, в котором создать сам фрейм. 

Автор: Bose 9.12.2008, 16:00
Цитата(jsa @  9.12.2008,  11:39 Найти цитируемый пост)
1 как сделать обработку кликов - т.е. кликнул по какой-то панели - она стала активной - каким либо образом перекрасилась

присваивать создаваемым панелям обработчик OnClick. Например такой:
Код

procedure MyComponent._OnPanelClick(Sender: TObject);
begin
  (Sender as TPanel).Color :=  RGB( random(255),random(255),random(255));
end;


Цитата(jsa @  9.12.2008,  11:39 Найти цитируемый пост)
2 как выводить текст на панели( если ширина заранее не известна) что бы (возможно длинный) текст переносился автоматот на на другие строки по пробелам, или просто часть текста обрезалась и подставлялись 3 точки

Для вывода текста в своём формате, сделать наследника(или class helper сойдёт?), в котором будет перекрыт метод protected метод Paint. И соответственно рисовать там текст со своими параметрами. Я сейчас не помню, но то ли у процедуры DrawText, то ли у TextOut, то ли у TextOutRect была возможность рисовать текст с переносами, либо укорачивать длинный текст многоточием.

Цитата(jsa @  9.12.2008,  11:39 Найти цитируемый пост)
3 если я изменю ширину одной панели - как сказать остальным что бы они подвинулись

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

Автор: jsa 10.12.2008, 06:24
Bose, 
Цитата(Bose @  9.12.2008,  21:00 Найти цитируемый пост)
или class helper сойдёт

не понял про class helper

Автор: Bose 10.12.2008, 22:38
Цитата(jsa @  10.12.2008,  06:24 Найти цитируемый пост)

не понял про class helper

class helper позволяет добавить к классу новые метода без написания наследника. но это в общем и неважно. Наверняка у тебя не просто TPanel используются, а определён свой наследник.

Автор: jsa 11.12.2008, 06:29
Цитата(Bose @  11.12.2008,  03:38 Найти цитируемый пост)
Наверняка у тебя не просто TPanel используются, а определён свой наследник

ага, так и есть

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)