Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как можно сделать вкладку tabcontrol'a нективной?


Автор: AlexST 4.10.2006, 14:59
Сабж.

Автор: Zero 4.10.2006, 20:17
В общем как вариант из кода он может редактироваться так:
Код

  tabcontrol1.Tabs.Text := 'вкладка1'+#13+'вкладка2';

В определённых случаях можно сделать чтобы были видны разные вкладки.
Если нужно работать с конкретной вкладкой, то используй другой компонент вкладки, например TPageControl.

Автор: AlexST 5.10.2006, 20:05
Цитата(Zero @  4.10.2006,  20:17 Найти цитируемый пост)
В определённых случаях можно сделать чтобы были видны разные вкладки.
Не совсем понял. Можно поподробнее.

Цитата(Zero @  4.10.2006,  20:17 Найти цитируемый пост)
В общем как вариант из кода он может редактироваться так:
Но тогда надо всё равно как-то скрывать 2 вкладку.

Автор: Elfebet 6.10.2006, 08:51
Код

TabSheet.Visible:=False;

Автор: Yanis 6.10.2006, 09:20
Решение от розыча smile
Код
unit GSPageControl;

interface

uses
  Windows, Messages, Types, SysUtils, Classes, Controls, ComCtrls, CommCtrl;

type
  TGSPageControl = class(TPageControl)
  private
    FNewPageIndex, FNotifyIndex: Integer;
  protected
    function GetTabFromCursor: Integer;
    function CanChange: Boolean; override;
    procedure WMKeyDown(var Message: TWMKey); message WM_KEYDOWN;
    procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
  public
    property NewPageIndex: Integer read FNewPageIndex;
    constructor Create(AOwner: TComponent); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TGSPageControl]);
end;

{ TGSPageControl }

function TGSPageControl.CanChange: Boolean;
begin
  FNewPageIndex := GetTabFromCursor;
  if FNewPageIndex = -1 then
    FNewPageIndex := FNotifyIndex;
  Result := inherited CanChange;
  FNewPageIndex := -1;
end;

procedure TGSPageControl.CMDialogKey(var Message: TCMDialogKey);
begin
  if (Focused or Windows.IsChild(Handle, Windows.GetFocus)) and
    (Message.CharCode = VK_TAB) and (GetKeyState(VK_CONTROL) < 0) then
    FNotifyIndex := FindNextPage(ActivePage, True, False).TabIndex;
  inherited;
end;

constructor TGSPageControl.Create(AOwner: TComponent);
begin
  inherited;
  FNotifyIndex := 0;
  FNewPageIndex := 0;
end;

function TGSPageControl.GetTabFromCursor: Integer;
var
  HitTestInfo: TTCHitTestInfo;
  P: TPoint;
begin
  GetCursorPos(P);
  HitTestInfo.pt := Self.ScreenToClient(P);
  HitTestInfo.flags := TCHT_ONITEM;
  Result := SendMessage(Self.Handle, TCM_HITTEST, 0, Integer(@HitTestInfo));
end;

procedure TGSPageControl.WMKeyDown(var Message: TWMKey);
begin
  with Message do
    case Message.CharCode of
      37: FNotifyIndex := FindNextPage(ActivePage, False, False).TabIndex;
      39: FNotifyIndex := FindNextPage(ActivePage, True, False).TabIndex;
    end;
  inherited;
end;

end.


Взял http://forum.sources.ru/index.php

Автор: Zero 7.10.2006, 07:00
Цитата(AlexST @  5.10.2006,  21:05 Найти цитируемый пост)
Не совсем понял. Можно поподробнее.

Смысл в том, чтоесли тебе нужно чтобы отображалась только первая вкладка, то надо написать так:
Код

tabcontrol1.Tabs.Text := 'вкладка1';

А если нужно только вторая, то вот так:
Код

tabcontrol1.Tabs.Text := 'вкладка2';

А если другая, то подругому, но принцип один и тотже.

Автор: AlexST 26.10.2006, 10:50
Zero, спасип. То что надо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)