我用pagecontral可以实现。 procedure TVideo_Main.PageControl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var HitTest: TTCHitTestInfo; IDX:Integer; begin with HitTest do begin //这里得到的IDX是Tab的Index. IDX := TabCtrl_HitTest(TRZTabControl(Sender).Handle, @HitTest); ShowMessage(inttostr(idx)); //如果能正确得到Index,说明是在TAB按钮上单击。 if (IDX > -1) then begin //如果是在ICON上的单击。常量定义在下面。 if (flags and TCHT_ONITEMICON) <> 0 then begin //这里可以根据上面的IDX作一些操作,例如关闭IDX的页。 //ShowMessage('在图标中单击.'); end; end; end; end; 但是rzpagecontral就是不行。
procedure TForm.rzPageControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TabIndex, OffsetBmpIndex, OffsetX: Integer; const //定位图片的像素宽度,默认是16像素,再加4,因为图标前面还有4个像素空出 BmpOffsetWidth = 16 + 4; begin if Shift = [ssLeft] then begin //当前点中的是哪个页签 TabIndex := pcMain.TabAtPos(X, Y); if TabIndex >= 0 then begin //将当前坐标减去图片的偏移量,判断此时击中的页签 //如果两个不一样,说明击中的是页签图标区域 OffsetX := X - BmpOffsetWidth; OffsetBmpIndex := pcMain.TabAtPos(OffsetX, Y); if TabIndex > OffsetBmpIndex then begin //两者不同,击中的是页签的图标 ShowMessage('点中页签' + InttoStr(TabIndex) + '的图片了!'); end; end; end; end;
RZTabSheet没有直接提供单击的是图标,但我们可以在单击事件中根据点坐标相对RZTabSheet偏移量
算出单击的是哪个区域(图标,文字,关闭按钮)。
procedure TVideo_Main.PageControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
HitTest: TTCHitTestInfo;
IDX:Integer;
begin
with HitTest do
begin
//这里得到的IDX是Tab的Index.
IDX := TabCtrl_HitTest(TRZTabControl(Sender).Handle, @HitTest);
ShowMessage(inttostr(idx));
//如果能正确得到Index,说明是在TAB按钮上单击。
if (IDX > -1) then
begin
//如果是在ICON上的单击。常量定义在下面。
if (flags and TCHT_ONITEMICON) <> 0 then
begin
//这里可以根据上面的IDX作一些操作,例如关闭IDX的页。
//ShowMessage('在图标中单击.');
end;
end;
end;
end;
但是rzpagecontral就是不行。
procedure TForm.rzPageControlMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
TabIndex, OffsetBmpIndex, OffsetX: Integer;
const
//定位图片的像素宽度,默认是16像素,再加4,因为图标前面还有4个像素空出
BmpOffsetWidth = 16 + 4;
begin
if Shift = [ssLeft] then
begin
//当前点中的是哪个页签
TabIndex := pcMain.TabAtPos(X, Y);
if TabIndex >= 0 then
begin
//将当前坐标减去图片的偏移量,判断此时击中的页签
//如果两个不一样,说明击中的是页签图标区域
OffsetX := X - BmpOffsetWidth;
OffsetBmpIndex := pcMain.TabAtPos(OffsetX, Y);
if TabIndex > OffsetBmpIndex then
begin
//两者不同,击中的是页签的图标
ShowMessage('点中页签' + InttoStr(TabIndex) + '的图片了!');
end;
end;
end;
end;