Главная страница
    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.007 c
15-1240248467
Kolan
2009-04-20 21:27
2009.06.28
«Интерфейс пользователя» → Искрографики (Sparklines)


15-1240167231
Pavia
2009-04-19 22:53
2009.06.28
Проблемы с wi-fi


15-1240413424
TCrash
2009-04-22 19:17
2009.06.28
Подскажите софтинку


2-1241611459
Mishenka
2009-05-06 16:04
2009.06.28
Фокус при скроллинге в ListViewСкроллинг


6-1204126047
rar
2008-02-27 18:27
2009.06.28
IdFTP





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