Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2014, 19:40   #1
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию Фоновая картинка в листбоксе и отрисовка

Здравствуйте, рисую в листбоксе (style = lbOwnerDrawFixed) картинку в фоне, под итемами, в итемах есть картинки и текст (аватарки и ник) но при нажатии на 0 итем остальные не прорисовываются, если убрать if index=0 то прорисовываться будет лишь тот итем на который кликнули, подскажите как прорисовывать все итемы и фоновую картинку сразу? (плюс залить строчку зеленым полупрозрачным желательно)




Код:
procedure TForm3.lst1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  i:integer;
  j:integer;
  jpg:TJPEGImage;
  me:TMemoryStream;
begin
  if index=0 then
  begin
    bitBlt(lst1.Canvas.Handle,0,0,lst1.Width,lst1.Height,fon.Canvas.Handle,0,0,SRCCOPY);         // Грузим фон
  end;

  if not MyCl[Index].avatar^.recv then
  begin
    client.RequestAvatar(mycl[Index].id);                          // нет аватарки - запрос
  end;

  jpg:=nil;
  if mycl[index].avatar_mini<>nil then                            // Если есть аватарка - грузим
  begin
    me:=TMemoryStream.Create;
    me.Write(mycl[index].avatar_mini^.pict,mycl[index].avatar_mini^.pict_size);
    me.Seek(0,soFromBeginning);

    jpg:=TJPEGImage.Create;
    jpg.LoadFromStream(me);

    me.free;
  end;

  if MyCl[Index].online=1 then
  begin
    if Index mod 2 = 0
    then lst1.canvas.Brush.Color := RGB(0, 150, 0)                  // онлайн - зеленый/темно зеленый (пока не заливаем)
    else lst1.canvas.Brush.Color := RGB(0, 130, 0);
    //lst1.canvas.textout(rect.left+il1.width+5,rect.top+16,'В сети');
  end
  else
  begin 
    if Index mod 2 = 0                 // оффлайн - серый
    then lst1.canvas.Brush.Color := clGray
    else lst1.canvas.Brush.Color := clDkGray;
  end;

  lst1.Canvas.Brush.Style:=bsclear;          // делаем итем прозрачным
  lst1.canvas.fillrect(rect);

  if jpg<>nil then
  begin
    lst1.Canvas.Draw(Rect.Left,rect.Top,jpg);          // лепим аватарку
    //il1.Draw(lst1.Canvas,Rect.Left,rect.Top,index);
    jpg.free;
  end;

  //lst1.Canvas.Brush.Color:=clWindowText;
  lst1.canvas.textout(rect.left+55,rect.top+2,lst1.items[index]);   // выводим текст
end;
Здравствуйте

Последний раз редактировалось Stilet; 06.10.2014 в 21:03.
NEoMASTERR вне форума Ответить с цитированием
Старый 06.10.2014, 20:15   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Заливку фоновой картинки скорее всего отлавливая WM_ERASEBKGND. В любом случае не в OnDrawItem
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.10.2014, 22:03   #3
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Заливку фоновой картинки скорее всего отлавливая WM_ERASEBKGND. В любом случае не в OnDrawItem
большое Спасибо

Теперь попутный вопрос, выделенный итем чтобы был заполнен каким либо цветом (полупрозрачным), как?
Здравствуйте

Последний раз редактировалось NEoMASTERR; 06.10.2014 в 22:05.
NEoMASTERR вне форума Ответить с цитированием
Старый 06.10.2014, 22:53   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Не забывайте говорить спасибо)
спасибо, чо...

по проблеме: в хэлпах есть экзэмпл. Сам найдёшь или мне его сюда вывалить?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фоновая картинка формы mazak Общие вопросы C/C++ 1 04.04.2012 11:40
Фоновая картинка Visual Basic СобачийКусок Помощь студентам 0 22.05.2011 21:02
Поиск в ЛистБоксе Артур Иваныч Microsoft Office Excel 4 12.12.2009 20:52
Папки в листбоксе beemoto Общие вопросы Delphi 9 20.05.2009 19:04
Файлы в листбоксе blackstersl Общие вопросы Delphi 12 01.10.2008 10:47