Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.07.2014, 15:07
Alexandr_17_10 Alexandr_17_10 вне форума
Прохожий
 
Регистрация: 17.06.2014
Сообщения: 27
Версия Delphi: Delphi 7, XE6
Репутация: 10
По умолчанию свой цвет выделния у компонентов Listbox и т.п

Собственно вопрос как сделать свою рамку выделения у listbox
Код:
procedure TMainApl.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  With (Control as TListBox) do begin
    if odSelected in State then
      if Index mod 2 = 0 then begin
        DrawFocusRect((Control as TListBox).Canvas.Handle, Rect);
        canvas.Pen.Width:=3;
        canvas.Pen.Color:=clblue;
        canvas.Brush.Color:=clred
      end else begin
        DrawFocusRect((Control as TListBox).Canvas.Handle, Rect);
        canvas.Pen.Width:=3;
        canvas.Pen.Color:=clblue;
        canvas.Brush.Color:=clyellow;
      end
    else begin
      canvas.Pen.Width:=0;
      canvas.Pen.Color:=color;
      canvas.Brush.Color:=color;
    end;
    canvas.FillRect(rect);
    DrawText(Canvas.Handle, PChar(Items[Index]), Length(Items[Index]), Rect,
     Control.DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX));
  end;
end;
но при этом мое выделение дйствует только на четных числах а нужно чтобы действовало на всех
Ответить с цитированием
  #2  
Старый 10.07.2014, 15:22
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
With (Control as TListBox) do begin
    if odSelected in State then
      //if Index mod 2 = 0 then
      begin
        DrawFocusRect((Control as TListBox).Canvas.Handle, Rect);
        canvas.Pen.Width:=3;
        canvas.Pen.Color:=clblue;
        canvas.Brush.Color:=clred
     // end else
    //  begin
     //   DrawFocusRect((Control as TListBox).Canvas.Handle, Rect);
      //  canvas.Pen.Width:=3;
     //   canvas.Pen.Color:=clblue;
     //   canvas.Brush.Color:=clyellow;
      end
    else begin
      canvas.Pen.Width:=0;
      canvas.Pen.Color:=color;
      canvas.Brush.Color:=color;
    end;
    canvas.FillRect(rect);
    DrawText(Canvas.Handle, PChar(Items[Index]), Length(Items[Index]), Rect,
     Control.DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX));
  end;
Ответить с цитированием
  #3  
Старый 11.07.2014, 10:30
Alexandr_17_10 Alexandr_17_10 вне форума
Прохожий
 
Регистрация: 17.06.2014
Сообщения: 27
Версия Delphi: Delphi 7, XE6
Репутация: 10
По умолчанию

Вариант уже пробывал не кактит. Темболее что вывод текста нужно делать через textout так как в будущем я еще и картинки буду отрисовывать рамку надо рисовать через rectangle но без багов (следы после рамки) у меня чет не получается

Последний раз редактировалось Alexandr_17_10, 11.07.2014 в 10:36.
Ответить с цитированием
  #4  
Старый 11.07.2014, 10:52
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Скачайте себе drkb, масса вопросов отпадёт сама-собою
Ответить с цитированием
  #5  
Старый 11.07.2014, 11:16
Alexandr_17_10 Alexandr_17_10 вне форума
Прохожий
 
Регистрация: 17.06.2014
Сообщения: 27
Версия Delphi: Delphi 7, XE6
Репутация: 10
По умолчанию

function DrawIcon; external user32 name 'DrawIcon';
А есть аналогичная только для bitmap'ов
Ответить с цитированием
  #6  
Старый 11.07.2014, 12:08
Alexandr_17_10 Alexandr_17_10 вне форума
Прохожий
 
Регистрация: 17.06.2014
Сообщения: 27
Версия Delphi: Delphi 7, XE6
Репутация: 10
По умолчанию

Код:
procedure TMainApl.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var bmp:TBitmap;
begin
  With (Control AS TlistBox) do begin
    if odFocused in State then
      if index mod 2 = 0 then
        canvas.Brush.Color:=clRed
      else
        canvas.Brush.Color:=clYellow
    else
      canvas.Brush.Color:=color;
    canvas.Font.Color:=canvas.Brush.Color xor RGB(255, 255, 255);
    canvas.FillRect(rect);
    bmp:=TBitmap.Create;
    Imagelist1.GetBitmap(2, bmp);
    Canvas.Draw(rect.Left, rect.Top - font.Size + (ItemHeight div 2),bmp);
    Canvas.TextOut(rect.Left+bmp.Width+2, rect.Top - font.Size + (ItemHeight div 2),
    Items.Strings[index]);
    if odFocused in State then
      DrawFocusRect(Canvas.Handle, Rect);
  end;
end;
Теперь осталось последнее как нарисовать рамку
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter