Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Делаю “skin” для TabControl помогите


Idx ©   (2005-10-22 07:48:00) 

В общем, почти сделал, но не знаю правильно не правильно
но думаю, для начало что-то есть (Если можете, подправьте)
Вроде все рисуется как надо =)  делать через WM_PAINT

Но теперь проблема моя программа сканирует все открытые
окна в системе ну что-то вроде TaskBar(а)  и все получилось
почти =| Не могу вставить иконки с лева то есть они рисуются
но не так как я хотел =( Они сливаются и рисуются но что мне
надо, то есть та иконка, которая должна быть она рисуется сверху
а остальные снизу, что мне сделать, что бы, не сливались, помогите.

И ещё как мне удалить не нужный элемент? Delete не работает
как надо =(  Она выдает ошибку при удалений предпоследние эл.


Idx   (2005-10-22 08:47:00) [1]

Забыл код добавить....


// А вот наши объявленные процедуры
procedure TMyTabControl.WMPAINT(var Msg: TWMPaint);
var
 r      : TRect;   // Это нам нужно что бы знать положение кнопки
 Idx    : Integer; // А это номер кнопки

Procedure AlignButtonView(BtnBmpMode:TBitmap; DownUp:Boolean);
  Var
    Txt:String;
    IcoBmp:TBitmap;
   Begin
       IcoBmp:=TBitmap.Create;
       // Если она нажата то выпоняем наши действий
       r.Bottom:=TaskBtnDown.Height; // Выровним высоту кнопки по картинке
       // Выдергиваем иконку программы
       Form1.ImageList1.GetBitmap(idx,IcoBmp);
       // Выделяем иконку (Исключаем белый цвет)
       CopyTransparentBrush(IcoBmp,BtnBmpMode,5,3, Rgb(255,255,255));
       // Рисуем её туда где надо! В "r" хранится положение кнопки
       Form1.TabControl1.Canvas.StretchDraw(r,BtnBmpMode);
       // Ресуем надпись!
       r.Top:=4; // Выровним позицию с верху вниз
       // Делаем текст с обрезанием...
       Txt:=Form1.TabControl1.Tabs[idx];
       // Если длина текста привешает 17 символов
       if Length(txt) > 17 then
       // тогда обрезаем
       txt:=copy(txt,1,17)+'...';

       IF not DownUp Then
       Self.Canvas.Font.Color := clBlack else
       Self.Canvas.Font.Color := clWhite;

       SetBkMode(Self.Canvas.Handle, TRANSPARENT);
       Self.Canvas.TextOut(r.TopLeft.X+32,r.TopLeft.Y,Txt);
       IcoBmp.Free;
end;

begin
 inherited; // Эт типа мы сначало вызовим старое
 if(TaskBtnDown.Handle=0)and(TaskBtnUp.Handle=0)Then exit;
 // Перебигаем все кнопки на TabControl(е)
  for idx:=0 to Form1.TabControl1.Tabs.Count-1 do
  begin
    // Берем по индексу размещение кнопки
    // размещение будет хранится в переменной "r"
    // которой относится тип TRECT.
     r:=Form1.TabControl1.TabRect(idx);
     // Здесь мы проверяем на НАЖАТУЮ И ОТЖАТУЮ КНОПКУ
     if Form1.TabControl1.TabIndex = idx then // Если она нажата
       AlignButtonView(TaskBtnDown,True)
    else // А если отжато то подставляем другую картинку
       AlignButtonView(TaskBtnUp,False);
  end;

  Msg.Result:=1;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо