Вверх ↑
Ответов: 838
Рейтинг: 4
#1: 2005-11-06 17:09:04 ЛС | профиль | цитата
А может сделаем так: pas-файл:
[code:1] unit hiTabControl;

interface

{$I share.inc}

uses Kol,Share,Win,Windows,Messages;

type
THITabControl = class(THIWin)
private
procedure _OnChange(Obj:PObj);
public
Arr:Array Of AnsiString;
Ars:array of string;
ImgLst:PImageList;
_prop_Tabs:string;
_prop_Buttons:boolean;
_prop_HotTrack:boolean;
_prop_FocusTabs:boolean;
_prop_Vertical:boolean;
_prop_Bottom:boolean;
_prop_Icons:boolean;
_prop_Border:boolean;
_prop_Bitmaps:PStrListEx;

_data_NewPageText:THI_Event;
_data_Index:THI_Event;
_event_onChange:THI_Event;

procedure Init; override;
procedure _work_PageInsert(var _Data:TData;Index:word);
procedure _var_CurTabIndx(var _Data:TData; Index:word);
procedure _var_CurTabCaption(var _Data:TData; Index:word);
procedure _work_PageDelete(var _Data:TData; Index:word);
procedure _var_TabCount(var _Data:TData; Index:word);
procedure _work_GoToPage(var _Data:TData; Index:word);
end;

implementation

procedure THITabControl.Init;
var i:integer;
Lst:PStrList;
s:string;
tco:TTabControlOptions;
bmp:PBitmap;
begin
tco:=[];
if _prop_Buttons then
tco:=[tcoButtons];
if _prop_HotTrack then
include(tco,tcoHotTrack);
if _prop_FocusTabs then
include(tco,tcoFocusTabs);
if _prop_Vertical then
include(tco,tcoVertical);
if _prop_Bottom then
include(tco,tcoBottom);
if _prop_Border then
include(tco,tcoBorder);
//Ñîçäàíèå array Of AnsiString;
Lst := NewStrList;
Lst.text := _prop_Tabs;
if Lst.Count > 0 then
begin
SetLength(Arr,Lst.Count);
SetLength(Ars,Lst.Count);
for i := 0 to Lst.Count-1 do
begin
Ars[i] := Lst.Items[i];
Arr[i] := PChar(Ars[i]);
end;
end;
//Ñîçäàíèå ImageList
if Assigned(_prop_Bitmaps) {and _prop_Bitmaps.Count > 0} then
begin
ImgLst := NewImageList(Applet);
//bmp := NewBitmap(0,0);
//if _prop_Icons then
include(tco,tcoIconLeft);
for i := 0 to _prop_Bitmaps.Count-1 do
begin
//bmp.Handle := _prop_Bitmaps.Objects[i];
//bmp.PixelFormat := pf24bit;
//BmpTransparent(bmp);
ImgLst.BlendColor := clWhite;
//ImgLst.BkColor := ImgLst.BlendColor;
ImgLst.ImgWidth := 16;
ImgLst.ImgHeight := 16;
ImgLst.Add(_prop_Bitmaps.Objects[i],i);
end;
end;
//Ñîçäàíèå êîíòðîëà
Control :=NewTabControl(FParent,Arr,tco,ImgLst,0);
inherited;
with Control{$ifndef F_P}^{$endif}do
OnSelChange := _OnChange;
end;

procedure THITabControl._OnChange;
begin
_hi_OnEvent(_event_onChange,Control.CurIndex);
end;

procedure THITabControl._work_PageInsert;
var s:string;
begin
s:=ReadString(_Data,_data_NewPageText,');
Control.TC_Insert(0,s,3);
end;

procedure THITabControl._work_GoToPage;
var s:string;
begin
SendMessage(Control.Handle,TCM_SETCURFOCUS,ReadInteger(_Data,null,0),0);
end;

procedure THITabControl._work_PageDelete;
var ind:integer;
begin
ind:=ReadInteger(_Data,_data_Index,0);
Control.TC_Delete(ind);
end;

procedure THITabControl._var_CurTabIndx;
begin
_Data.Data_type := data_int;
_Data.idata := Control.CurIndex;
end;

procedure THITabControl._var_CurTabCaption;
begin
_Data.Data_type := data_str;
_Data.sdata := Control.TC_Items[Control.CurIndex];
end;

procedure THITabControl._var_TabCount;
begin
_Data.Data_type := data_int;
_Data.idata := Control.Count;
end;
end.
[/code:1]

ini-файл:

[code:1] [About]
Version=1.0
Author=EvilGeo

[Type]
Class=WinElement
Info=Контроллёр страниц

[Edit]
Class=Tab
Tabs=Tabs
Color=Color

[Property]
##Place=Позиция и габариты элемента
@Left=Отступ элемента слева|1|0
@Top=Отступ элемента от верха|1|0
@Width=Длинна элемента|1|145
@Height=Высота элемента|1|155
##
@Align=Выравнивание элемента|14|0|caNone,caLeft,caTop,caRight,caBottom,caClient
Ctl3D=При установленном False 3-х мерная рамка вокруг элемента рисоваться не будет|4|0|True,False
@Font=Шрифт элемента|15
+Tabs=Определяет страницы|5|
Bitmaps=Массив картинок для страниц(16-цветные рисунки)|13|11
ParentFont=Использовать шрифт родительского компонента|14|1|True,False
@Visible=Элемент виден/скрыт|14|0|True,False
@Enabled=Элемент разрешен/заблокирован|14|0|True,False
Buttons=Кнопки или обычные страницы|14|1|True,False
HotTrack=Включить подсвечивание страниц|14|1|True,False
FocusTabs=Страницы с установленным фокусом ввода|14|1|True,False
Vertical=Ориентация элемента на форме|14|1|True,False
Border=Элемент вписанный в форму|14|1|True,False
Bottom=Ориентация элемента на форма|14|1|True,False
Cursor=Курсор|14|0|crDefault,crIBeam,crHandPoint,crHourGlass,crHelp, crBusy,crWait,crCross,crSize,crNo,crSizeAll,crSizeNESW,crSizeNS, crSizeNWSE, crSizeWE,crUpArrow,crPen,crCD

[Methods]
PageInsert=Создаёт новую страницу|1|
GoToPage=Переходит на страницу с индексом из потока|1|
*PageDelete=Удаляет страницу с индексом|1|
*doSendToBack=Помещает элемент под всеми другими элементами формы|1|
*doBringToFront=Помещает элемент над всеми другими элементами формы|1|
onChange=Сoбытиe пpoиcxoдит вcякий paз пpи изменение текущей страницы|2|
*onMouseDown=событие происходит всякий раз при клике в области компонента( перед событием onClick) и возвращает в поток код нажатой кнопки|2|
*onMouseUp=событие происходит всякий раз при отпускание кнопки мыши и возвращает в поток код нажатой кнопки|2|
*onMouseMove=Событие происходит всякий раз при перемещение окна по экрану|2|
*CurTabIndx=Хpaнит индекс текущей страницы|3|int
*CurTabCaption=Хpaнит название текущей страницы|3|int
TabCount=Кол-во страниц|3|int
*Width=Ширина картинки|3|int
*Height=Высота картинки|3|int
*Left=Содержит отступ элемента слева от родительского компонента|3|int
*Top=Содержит отступ элемента от верха родительского компонента|3|int
*Handle=Содержит идентификатор элемента|3|int
NewPageText=Определяет текст новой страницы|4|str
*Index=Индекс страницы для метода PageDelete|4|int
[/code:1]
карма: 0
Coder
0