Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];

Вниз

Правильное отображение рисунков в ЛистБоксе   Найти похожие ветки 

 
andreil   (2008-02-16 21:39) [0]

Делаю программу, в которой необходим список игр с их иконками (в одном контроле само собой). Для этой цели я на VCL использовал ListBox, на КОЛ - тоже самое, только вот отображает он както криво: те элементы, что видны при старте программы, отбражаются нормально. при прокрутке нижние элементы либо вообще не видны (и иконка и текст), либо врхняя часть иконки обрезана; при выделении Item"а он начинает отображаться нормально. Те те элементы, которые при старте проворачивания были не видны и отображаются криво.

Приду домой, отпишу сюда текст прорисовки элементов списка.


 
andreil ©   (2008-02-17 00:08) [1]

Как и обещал, процедура рисования:
function TForm1.GamesListDrawItem(Sender: PObj; DC: HDC; const Rect: TRect;
 ItemIdx: Integer; DrawAction: TDrawAction;
 ItemState: TDrawState): Boolean;
begin
 //рисуем иконки игр...
 GamesList.Canvas.FillRect(Rect);
 try
   icons[ItemIdx+1].Draw(DC, Rect.Left, Rect.Top);
   GamesList.Canvas.TextOut(Rect.Left+icons[ItemIdx+1].Size+2, Rect.Top+3, GamesList.Items[ItemIdx]);
 except
   GamesList.Canvas.TextOut(Rect.Left+2, Rect.Top+3, GamesList.Items[ItemIdx]);
 end;
 If GamesList.CurIndex=ItemIdx then ItemState:=[odsMarked];
 result:=true;  
end;


 
Elec3C ©   (2008-02-17 03:08) [2]

loOwnerDrawFixed выставлен?


 
andreil ©   (2008-02-17 13:56) [3]

Выставлены: loNoData, loOwnerDrawFixed, loOwnerDrawVariable.


 
Compiler ©   (2008-02-17 14:57) [4]

> loNoData, loOwnerDrawFixed, loOwnerDrawVariable.

Вот так уменя работает
function TForm1.Listbox1DrawItem(Sender: PObj; DC: HDC; const Rect: TRect;
 ItemIdx: Integer; DrawAction: TDrawAction;
 ItemState: TDrawState): Boolean;
var
TextRect  : TRect;
begin
if ItemIdx > -1 then begin
FillRect(DC,Rect,0);
TextRect := Rect;
TextRect.Left := 20;
Bmp.Draw(DC, Rect.Left, Rect.Top);
DrawText(DC,PChar(PControl(Sender).Items[ItemIdx]),Length(PControl(Sender).Items [ItemIdx]),
                TextRect,DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX);
if (odaSelect in DrawAction) then InvertRect(DC,TextRect)
end;
result:=False;
end;


 
andreil ©   (2008-02-17 18:54) [5]


> Вот так уменя работает

Спасибо. Только у тебя нету объявления "bmp: pBitMap;..... bmp:=NewBitMap(16,16);". Я это ввел и заработало. только вот вместо картинок - черные прямоугольники. попробую сам разобраться.


 
andreil ©   (2008-02-17 19:15) [6]

Все. Теперь рисует нормально. ЗменилBmp.Draw(DC, Rect.Left, Rect.Top); на свой icons[ItemIdx+1].Draw(DC, Rect.Left, Rect.Top);.
Только вот как убрать возможность одновременного выделения нескольких Айтемов при протягивании мышкой с зажатой кнопкой?


 
Compiler ©   (2008-02-17 21:13) [7]

Замени
if (odaSelect in DrawAction) then
на if (odsFocused  in ItemState) then


 
Compiler ©   (2008-02-17 21:42) [8]

> Compiler ©   (17.02.08 21:13) [7]

Плохой вариант. Лучше так
if (odsSelected  in ItemState) then
    InvertRect(DC,TextRect);

и в опциях ListBox"a выставить loNoExtendSel=TRUE


 
andreil ©   (2008-02-18 00:17) [9]


> Плохой вариант. Лучше так if (odsSelected  in ItemState)
> then     InvertRect(DC,TextRect);и в опциях ListBox"a выставить
> loNoExtendSel=TRUE

Спасибо, помогло.

Благодарю всех за участие в разработке Universal Pirat Kit 5.8 (KOL edition). За подробностями можете сходить сюда: http://csmania.ru/forum/viewtopic.php?f=19&t=4049



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

Форум: "KOL";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
2-1242205772
Aleksey Suslov
2009-05-13 13:09
2009.06.28
Работа с сетевым реестром


13-1124002126
cherrex
2005-08-14 10:48
2009.06.28
рефлексия


2-1241695713
Pavlov
2009-05-07 15:28
2009.06.28
Сохранить и удалить данные на жесткий диск


10-1158561582
silversmith
2006-09-18 10:39
2009.06.28
Печать документа через Word


15-1240437869
NailMan
2009-04-23 02:04
2009.06.28
Процентные соотношения. Какие правила?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский