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

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

Ширина выводимой меню, при OwnerDraw=true [Delphi, Windows]


mehos ©   (2004-04-03 21:33:00) 

Возник вот вопрос. Есть у меня менюшка, для которой для каждого элемента стоит OwnerDraw и соответственно свой обработчик для OnDrawItem. Так вот при таких условиях менюшка получается шириной пикселей в 10 и соотвественно ни одного пункта не видно. Лечится добавлением левого пункта в меню с названием подлиннее, у которого OwnerDraw = false, но это всё полумера. Копал в сторону OnMeasureItem, но в отличии от VCL компонента, он ширину не возвращает. Подскажите, что делать?

mehos


mehos   (2004-04-04 21:04:00) [1]

Да, вы были правы, извиняюсь. Забыл, что Integer 4 байта занимает - по учёбе больше под дос программить надо. Однако, всё-таки стоит добавить в хелп что-нибудь вроде

property OnMeasureItem: TOnMeasureItem;
Event handler returns item height in low-order part of value and item width in hi-order one. Property is used for owner-drawn items only. So if OwnerDraw set into false value will be ignored.

А то вот это не слишком понятно.
property OnMeasureItem: TOnMeasureItem;
This event is called for owner-drawn menu items. Event handler must return menu item height.

Всё, вопрос закрыт.

P.S. А за библиотеку спасибо, очень помогает.

mehos


Владимир Кладов   (2004-04-04 20:00:00) [2]

Ничего там править не надо. Там код:
          H := M.OnMeasureItem( M, I );
         if HiWord( H ) <> 0 then
           MIS.itemWidth := HiWord( H );
         if LoWord( H ) <> 0 then
           MIS.itemHeight := LoWord( H );

Он уже все делает, и если в старшем слове возвращена ширина, то будет учитываться.


mehos   (2004-04-04 19:08:00) [3]

Да ладно тебе, всё ж на добровольных началах. Но баги править надо, конечно. Я изменил тип выдаваемого значения OnMeasureItem на Dword. И выдаю всё вроде Result=MakeLong(height,width). Пока работает, только надо ещё MCK править.

mehos


Delphi5.01   (2004-04-04 16:49:00) [4]

TO: Avtoru KOL
Problema zakluchaetsa v tom chto tehnologia KOL esho novaia, i kolichestov programistov ochen malo, a te kto znaet linitsa otvetit, schitaet takie voprosi lamerskimi :-(( Pochemuta vse shitaut chto programistami rojdautsa :-(((

Zapomnite programistami stanovatsa :-)))
Nado hot dokumentaciu dovat, vse silki na dokumentaciu ne rabotaut, daje fotki na saite KOL.mastak.ru ne otobrajautsa, vidno avtoru ne nujni lishinie specialisti :-((( ...


mehos   (2004-04-04 15:49:00) [5]

Нарыл такой код в kol.pas:

if not Assigned( M.OnMeasureItem ) then
  Exit;
 H := M.OnMeasureItem( M, I );
    if HiWord( H ) <> 0 then
     MIS.itemWidth := HiWord( H );

Дык OnMeasureItem возвращает двухбайтовый Integer. То бишь
ширину в принципе поменять нельзя, кроме как стандартными
методами Винды. Нафиг тогда вообще OwnerDraw? Баг? Или я чего-то недопонимаю?

mehos


Наверх

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