Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Ширина выводимой меню, при OwnerDraw=true   Найти похожие ветки 

 
mehos   (2004-04-03 21:33) [0]

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

mehos


 
mehos   (2004-04-04 15:49) [1]

Нарыл такой код в 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


 
Delphi5.01 ©   (2004-04-04 16:49) [2]

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 19:08) [3]

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

mehos


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

Ничего там править не надо. Там код:
         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 21:04) [5]

Да, вы были правы, извиняюсь. Забыл, что 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



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
14-1095335509
Cosinus
2004-09-16 15:51
2004.10.03
Как свести воедино видео (avi) и аудио(wav). Точнее чем?


1-1095400109
Leaner
2004-09-17 09:48
2004.10.03
Вызов процедуры из собственной библиотеки.


14-1095206568
Мазут Береговой
2004-09-15 04:02
2004.10.03
Хакеры иногда бывают полезны.


14-1094707224
kaZaNoVa
2004-09-09 09:20
2004.10.03
Потокобезопасность или как написать потокобезопасный код ?


3-1094586493
sherbacov
2004-09-07 23:48
2004.10.03
протоколирование БД