Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> popupmenu, множественная ower-отрисовка 
:(
    Опции темы
Proxin
Дата 26.5.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



проблема такая. нужно поменять отрисовку пунктов - с этим разобрался. но их много (около десятка), а на каждый создавать ondrawitem и onmeasureitem - долго и, кажется, неразумно. есть ли способ задать новый способ отрисовки сразу для всех пунктов меню?  
upd.
нашёл изврат
Код

procedure TAWND.N1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
function GetItemIndex:integer;
begin
result:=(arect.bottom div 16) - 1;
end;
begin
//перед ещё идёт отрисовка своего выделения
setbkmode(acanvas.handle,0);
acanvas.textout(18,arect.top+2,popupmnu.items[getitemindex].caption);
end;
procedure TCLWND.N1MeasureItem(Sender: TObject; ACanvas: TCanvas;
  var Width, Height: Integer);
var i:integer;
begin
width:=acanvas.textwidth(popupmnu.items[0].caption);
for i:=0 to popupmnu.items.count-1 do
if acanvas.textwidth(popupmnu.items[i].caption)>width then
width:=acanvas.textwidth(popupmnu.items[i].caption);
inc(width,18);
end;

но интересует цивилизованный способ.

Это сообщение отредактировал(а) Proxin - 26.5.2010, 22:16
PM MAIL   Вверх
DarkProg
Дата 27.5.2010, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Можно задать всем пунктам некоторую общую функцию которая и будет отрисовывать: задавать надо на том этапе где это нужно

Ну что-то типа такого сли у вас всё через N1, N2 и т.д.
for i:=1 to 10 do
begin
 (findconponent('N'+inttostr(i)) as TpopupmenuItem).OnDrawItem:=N1DrawItem;
 (findconponent('N'+inttostr(i)) as TpopupmenuItem).OnMeasureItem:=N1MeasureItem;
end;

Имя функций которые присваиваю обычно задаю следующим образом: сначала создаю функцию для одного объекта, потом у этого объекта убираю связь, а имя что-то типа PopupMenuDrawItems и это имя ставлю как у самой присваиваемой функции, так и выше где она объявлена.

P.S. код писал "на коленке", прям в браузере так что возможны ошибки. Я надеюсь понятно написал, если нет спрашивайте.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Proxin
Дата 27.5.2010, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



это прекрасно знаю. но как сделать цивилизованный способ отрисовки без div-ов и прочего?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.