Главная страница
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.023 c
14-1095076029
Sergey13
2004-09-13 15:47
2004.10.03
Президент совершил революцию в системе выборов


1-1095162356
Луарвик
2004-09-14 15:45
2004.10.03
TForm1.BitBtn1MouseDown(Sender: TObject...


3-1094107222
Koala
2004-09-02 10:40
2004.10.03
RxDBLookUpCombo помогите третий день мучаюсь


14-1095161406
frankvi
2004-09-14 15:30
2004.10.03
PDF Viewer


4-1092836312
R1
2004-08-18 17:38
2004.10.03
Диалог свойств файла (ShellExecuteEx)