Главная страница
    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.005 c
15-1240413424
TCrash
2009-04-22 19:17
2009.06.28
Подскажите софтинку


2-1241873934
Tany
2009-05-09 16:58
2009.06.28
TreeNode


15-1240584679
Кто б сомневался
2009-04-24 18:51
2009.06.28
Даже и не думайте пользоваться функцией Wow64DisableWow64FsRedire


2-1241715270
Forsted
2009-05-07 20:54
2009.06.28
сброс таймера


4-1211725686
leonidus
2008-05-25 18:28
2009.06.28
Балон над TRxTrayIcon





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский