Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Делаю “skin” для TabControl помогите   Найти похожие ветки 

 
Idx ©   (2005-10-22 07:49) [0]

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

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

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


 
Idx ©   (2005-10-22 08:47) [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;


 
DVM ©   (2005-10-24 10:21) [2]


> Idx ©   (22.10.05 07:49)  

Какой смысл писать то одного, то от другого имени?



Страницы: 1 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.045 c
14-1133350849
sanich
2005-11-30 14:40
2005.12.25
Документация по компонентам InterBase


2-1134390880
De1uxe
2005-12-12 15:34
2005.12.25
Где ошибка?


2-1133911495
aleyna
2005-12-07 02:24
2005.12.25
DBGrid


14-1133770503
Fin
2005-12-05 11:15
2005.12.25
Текст о поиске работников!


3-1131004093
AlexTer
2005-11-03 10:48
2005.12.25
Отчет с перекрестной таблицей