Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кнопка закрытия в TabControl 
:(
    Опции темы
kemiisto
Дата 15.9.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



Необходимо, чтобы все закладки в TabControl имели кнопку закрытия (крестик) в правом углу. Такая возможность реализована во многих программах (Firefox, например). 

Как быть ???


--------------------
PM MAIL WWW GTalk Jabber   Вверх
shilnik
Дата 16.9.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 377
Регистрация: 22.12.2003

Репутация: нет
Всего: 1



Стардантный таб такого не может. Писать свой. Или искать сторонние компоненты. Я такого не видел, к сожалению.


--------------------
каталог товаров qp1
PM MAIL WWW   Вверх
kemiisto
Дата 16.9.2007, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



Цитата(shilnik @  16.9.2007,  18:26 Найти цитируемый пост)
Стардантный таб такого не может. Писать свой. Или искать сторонние компоненты.


Это все понятно! Вопрос как? (если писать свой) или где? (ссылка на компонент).



--------------------
PM MAIL WWW GTalk Jabber   Вверх
MetalFan
Дата 16.9.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



OwnerDraw в True
рисуешь, что тебе надо (крестик, как в FF), в OnMouseXXX отлавливаешь мышь и принимаешь соотв. меры


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
MetalFan
Дата 16.9.2007, 22:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



хотя можно и проще.
вот накидал тут на коленке:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls,
  ComCtrls;

const
  WM_KILLBTN = WM_APP + 1;

type
  TForm1 = class(TForm)
    tabctl: TTabControl;
    procedure FormCreate(Sender: TObject);
  private
    procedure UpdateButtonRect( AButton: TSpeedButton; AIndex: Integer );
    procedure CreateCloseButtons;
    procedure UpdateButtonList;
    procedure OnCloseBtnClick( Sender: TObject );
    procedure OnKillBtn( var AMsg: TMessage ); message WM_KILLBTN;
    { Private declarations }
  public

    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

  uses StrUtils;

{ TForm1 }

procedure TForm1.CreateCloseButtons;
var
  i: Integer;
  lBtn: TSpeedButton;
begin
  for i := 0 to pred( tabctl.Tabs.Count ) do
  begin
    lBtn := TSpeedButton.Create(Self );
    lBtn.Caption := 'X';
    UpdateButtonRect( lBtn, i );
    lBtn.Parent := tabctl;
    lBtn.OnClick := OnCloseBtnClick;
    lBtn.Tag := i;
    lBtn.Flat := True;
    lBtn.Transparent := True;
    tabctl.Tabs.Objects[i] := lBtn;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateCloseButtons;
end;

procedure TForm1.OnCloseBtnClick(Sender: TObject);
var
  lBtn: TSpeedButton;
begin
  lBtn := TSpeedButton(Sender);
  tabctl.Tabs.Delete( lBtn.Tag );
  PostMessage( Self.Handle, WM_KILLBTN, Integer(lBtn), 0 );
end;

procedure TForm1.OnKillBtn(var AMsg: TMessage);
begin
  TSpeedButton( AMsg.wParam ).Free;
  UpdateButtonList;
end;

procedure TForm1.UpdateButtonList;
var
  i: Integer;
  lBtn: TSpeedButton;
begin

  for i := 0 to Pred( tabctl.Tabs.Count ) do
  begin
    lBtn := TSpeedButton(tabctl.Tabs.Objects[i]);
    lBtn.Tag := i;
    UpdateButtonRect( lBtn, i );
  end;
end;

procedure TForm1.UpdateButtonRect(AButton: TSpeedButton; AIndex: Integer);
const
  lC_Ident = 2;
  lC_2Ident = lC_Ident * 2;
var
  lRect: TRect;
  lInt: Integer;
begin
  lRect := tabctl.TabRect(AIndex);
  lInt := lRect.Bottom - lRect.Top - lC_2Ident;
  with lRect do
    lRect := Rect( Right - lInt - lC_Ident, Top + lC_Ident, Right-lC_Ident, Bottom - lC_Ident );
  AButton.BoundsRect := lRect;
end;

end.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ilya198293
Дата 17.9.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет



Скопировал текст в пустой проект.
И на форму кинул TabControl с несколькими страницами.
При запуске кнопки не появились.
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
ilya198293
Дата 17.9.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет



Всё разобрался...благадарюsmile
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
MetalFan
Дата 17.9.2007, 16:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



ilya198293, головой можно не только кушать...
вот как ты думаешь, почему у тебя не заработало, а у меня вот работает?
наверное что-то не так ты сделал ;) может имена полей класса формы(читай компонентов) несоответствуют

Добавлено через 56 секунд
Цитата(ilya198293 @  17.9.2007,  16:15 Найти цитируемый пост)
Всё разобрался...благадарюsmile 

вот так бы и сразу, а то я уж плохо о голове подумал)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ilya198293
Дата 18.9.2007, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет



Переделал всё для PageControl. Всё заработало.
Но только когда динамически созданных страниц становится много и появляется линейка прокрутки, то с крестиками начинается такой бардак.
Один на другом и непонятно кто кого закрывает.
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
ilya198293
Дата 18.9.2007, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет



Опять написал неподумавши...вроде всё нормально...
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
MetalFan
Дата 18.9.2007, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(ilya198293 @  18.9.2007,  07:32 Найти цитируемый пост)
Но только когда динамически созданных страниц становится много и появляется линейка прокрутки, то с крестиками начинается такой бардак.
Один на другом и непонятно кто кого закрывает.


Цитата(ilya198293 @  18.9.2007,  07:48 Найти цитируемый пост)
Опять написал неподумавши...вроде всё нормально... 

как победил? показуй)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ilya198293
Дата 18.9.2007, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет



да это мой тупняк...просто в твоём коде поглубже покопался
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
kemiisto
Дата 22.9.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



MetalFan, большое человеческое спасибо! Работает! smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
MetalFan
Дата 23.9.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



kemiisto, np)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Dende-Soft
Дата 3.1.2008, 22:45 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 10.3.2007

Репутация: нет
Всего: нет



Цитата

Опять написал неподумавши...вроде всё нормально... 


Выкинь рлз сюда пример для пэйдж контрол.
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 3.1.2008, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



почти так же, как и для табконтрола


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ilya198293
Дата 9.1.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 17.3.2007
Где: Сириус, созвездие Большого Пса

Репутация: нет
Всего: нет



Цитата

Выкинь рлз сюда пример для пэйдж контрол.


Отказался от таких кнопок в названии вкладки.
Сделал отдельное меню, которое должно быть доступно для каждой вкладки отдельно. И в него закинул кнопку закрытия вкладки.
По идее такое меню пришлось бы делать по любому, чтоб работали другие функции, которые мне нужны во вкладке, а так ещё с этой кнопкой заморачиваться.
--------------------
Недавно пытался объяснить сыну, кто такой модератор. Сошлись на Мойдодыре.
PM MAIL   Вверх
v_enom
Дата 21.2.2009, 12:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 11.10.2006

Репутация: нет
Всего: нет



вот чел описал как это сделать. но я Xml не знаю, потому не пробовал

пример
PM MAIL   Вверх
kemiisto
Дата 21.2.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



v_enom, очень сильно ошибся разделом. Там речь идёт о WPF. А это .NET 3.x и к теме обсуждения отношения не имеет. И, кстати говоря,
Цитата(v_enom @  21.2.2009,  10:24 Найти цитируемый пост)
но я Xml не знаю

XAML это, а не XML.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1368 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.