Главная страница
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.47 MB
Время: 0.024 c
6-1090534772
Victor!
2004-07-23 02:19
2004.10.03
mht шки от IE 5 в IE 6


3-1094022900
-SeM-
2004-09-01 11:15
2004.10.03
Сервисы в Interbase/Firebird/Yaffil


1-1095154474
webpauk
2004-09-14 13:34
2004.10.03
Parent


8-1088608890
LAnd
2004-06-30 19:21
2004.10.03
Наложение текстур OpenGL


10-1043587233
stend
2003-01-26 16:20
2004.10.03
DCOM