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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как удалить закладку созданную динамически, с контролами 
V
    Опции темы
ivan219
  Дата 30.9.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Как удалить закладку созданную динамически с контролами тоже создаными динамически.
Код

procedure TForm1.ButtonClick(Sender: TObject);
var
   S:String;
   TabSheet: TTabSheet;
   Button: TButton;
   LabeledEdit: TLabeledEdit;
begin
 S:=FloatToStr(I1);

 //Создаём TabSheet
 TabSheet:=TTabSheet.Create(Form1);
 TabSheet.Caption:='Tab'+S;
 TabSheet.Name:='Tab'+S;
 //Пирсваеваем TabSheet PageControl
 TabSheet.PageControl:=PageControl;

 //Создаём кнопку
 Button:=TButton.Create(Form1);
 Button.Caption := 'Button'+S;
 Button.Name:='Button'+S;
 Button.OnClick:= Form1.SomeMenuItemClick;
 //Присваеваем кнопку TabSheet
 TabSheet.InsertControl(Button);

 //Сздаём LabeledEdit
 LabeledEdit:=TLabeledEdit.Create(Form1);
 LabeledEdit.Name:='LabeledEdit'+S;
 LabeledEdit.Text := '';
 LabeledEdit.Top:=50;
 LabeledEdit.EditLabel.Caption:='adfdf';
 //Присваеваем LabeledEdit TabSheet
 TabSheet.InsertControl(LabeledEdit);

 Inc(I1);
end;[quote]

[/quote]


Только нужно удалять определённую вкладку smile 
PM MAIL ICQ   Вверх
Alexeis
Дата 30.9.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



ivan219, вот если бы вместо 

Button:=TButton.Create(Form1);

было 

Button:=TButton.Create(TabSheet);

то удаление производилось бы 

TabSheet.free;


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
Дата 30.9.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Спасибо.

Вот только немного не так как надо.
Она удаляет одну в кладку (уменя их много) а если его снова вызвать то ошибка smile 
PM MAIL ICQ   Вверх
Alexeis
Дата 30.9.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(ivan219 @  30.9.2006,  17:03 Найти цитируемый пост)
Она удаляет одну в кладку (уменя их много) а если его снова вызвать то ошибка


Не маленький уже! Если есть ошибка надо ее привести. Кроме того хотя бы часть кода который удаляет.
А так можно предположить, что происходит обращение к уже удаленному объекту.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Romikgy
Дата 30.9.2006, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



удаляй закладки сзаду, в обратном порядке как создавал


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Zero
Дата 30.9.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



ivan219, прикрепи свой проект к сообщению... Мне кажется я знаю что надо сделать. У меня подобные вопросы были, когда писал КР на 3 курсе.

Добавлено @ 21:06 
Цитата(ivan219 @  30.9.2006,  18:03 Найти цитируемый пост)
Она удаляет одну в кладку (уменя их много) а если его снова вызвать то ошибка

Скорее всего, повторно удаляется несуществующий объект.
PM MAIL ICQ   Вверх
ivan219
Дата 30.9.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



А так весь проект был в другой теме ну да ладно вот он.
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button: TButton;
    XPManifest: TXPManifest;
    PageControl: TPageControl;
    procedure ButtonClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure SomeMenuItemClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  I1:Integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SomeMenuItemClick(Sender: TObject);
begin
 Close;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var
   S:String;
   Button: TButton;
   TabSheet: TTabSheet;
   LabeledEdit: TLabeledEdit;
begin
 S:=FloatToStr(I1);

 //Создаём TabSheet
 TabSheet:=TTabSheet.Create(Self);
 TabSheet.Caption:='Tab'+S;
 TabSheet.Name:='Tab'+S;

 //Пирсваеваем TabSheet PageControl
 TabSheet.PageControl:=PageControl;

 //Создаём кнопку
 Button:=TButton.Create(TabSheet);
 Button.Caption := 'Button'+S;
 Button.Name:='Button'+S;
 Button.OnClick:= Form1.SomeMenuItemClick;

 //Сздаём LabeledEdit
 LabeledEdit:=TLabeledEdit.Create(TabSheet);
 LabeledEdit.Name:='LabeledEdit'+S;
 LabeledEdit.Text := '';
 LabeledEdit.Top:=30;

//Присваеваем кнопку TabSheet
 TabSheet.InsertControl(Button);

//Присваеваем LabeledEdit TabSheet
 TabSheet.InsertControl(LabeledEdit);
 Inc(I1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 TabSheet.free;
end;
end.


Закладок создаю несколько после жму Button2 и одна исчезает самая последняя жму второй раз и кердык smile 

PM MAIL ICQ   Вверх
Zero
Дата 30.9.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



ivan219, я имел ввиду, весь проект, вместе с dfm файлами и т.п. Ну или скажи на какой закладке находится PageControl.
Мне нужно воспроисвести то что есть у тебя, а потом уж искать ошибку.
PM MAIL ICQ   Вверх
Alexeis
Дата 30.9.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



ivan219, чет я не понял как это вообще компилится...

Код

procedure TForm1.Button2Click(Sender: TObject);
begin
 TabSheet.free;
end;


TabSheet вообще объявлена в другой функции как локальная переменная!
должна быть ошибка undeclarated identifier

Код

procedure TForm1.ButtonClick(Sender: TObject);
var
   S:String;
   Button: TButton;
   TabSheet: TTabSheet;


Это сообщение отредактировал(а) alexeis1 - 30.9.2006, 22:02


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
Дата 30.9.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



alexeis1, виноват не проверил smile 
Это чтоб время с экономить я с другово вопра скопировал и Buttom2 приписал smile а так TabSheet была глобальная.

Теперь всё как надо из проекта скопировал smile 
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button: TButton;
    PageControl: TPageControl;
    procedure ButtonClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure SomeMenuItemClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  TabSheet: TTabSheet;
  I1:Integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SomeMenuItemClick(Sender: TObject);
begin
 Close;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var
   S:String;
   Button: TButton;

   LabeledEdit: TLabeledEdit;
begin
 S:=FloatToStr(I1);

 //Создаём TabSheet
 TabSheet:=TTabSheet.Create(Self);
 TabSheet.Caption:='Tab'+S;
 TabSheet.Name:='Tab'+S;

 //Пирсваеваем TabSheet PageControl
 TabSheet.PageControl:=PageControl;

 //Создаём кнопку
 Button:=TButton.Create(TabSheet);
 Button.Caption := 'Button'+S;
 Button.Name:='Button'+S;
 Button.OnClick:= Form1.SomeMenuItemClick;

 //Сздаём LabeledEdit
 LabeledEdit:=TLabeledEdit.Create(TabSheet);
 LabeledEdit.Name:='LabeledEdit'+S;
 LabeledEdit.Text := '';
 LabeledEdit.Top:=30;

//Присваеваем кнопку TabSheet
 TabSheet.InsertControl(Button);

//Присваеваем LabeledEdit TabSheet
 TabSheet.InsertControl(LabeledEdit);
 Inc(I1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 TabSheet.free;
end;
end.



Zero, А там нету нечего кроме Button, Button2, PageControl просто брасаеш их на форму присваеваеш соответствующие имена и делаеш
Код

procedure TForm1.ButtonClick(Sender: TObject);
procedure TForm1.Button2Click(Sender: TObject);

После удали всё и вставь код выше.

Добавлено @ 22:38 
P.S. Я почемуто немогу прекрепить файлы smile 
PM MAIL ICQ   Вверх
Alexeis
Дата 30.9.2006, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



ivan219, тем не менее, когда удаляем
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
 TabSheet.free;
end;

удаляется только последняя вкладка созданая при помощи
Код

procedure TForm1.ButtonClick(Sender: TObject);
var
   S:String;
   Button: TButton;
   LabeledEdit: TLabeledEdit;
begin
 S:=FloatToStr(I1);
 //Создаём TabSheet
 TabSheet:=TTabSheet.Create(Self);
 TabSheet.Caption:='Tab'+S;
 TabSheet.Name:='Tab'+S;


Второй раз удалять нечего так как объект уже разрушен.

Я не совсем понял задачу. Какую вкладку нужно удалять? Удалять по индексу? по имени?

Добавлено @ 23:29 
Цитата(ivan219 @  30.9.2006,  22:37 Найти цитируемый пост)
P.S. Я почемуто немогу прекрепить файлы

Это в раздел о багах!


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Fedia
Дата 30.9.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

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



Цитата(ivan219 @  30.9.2006,  21:29 Найти цитируемый пост)
Закладок создаю несколько после жму Button2 и одна исчезает самая последняя жму второй раз и кердык 

Ошибка возникает по причине того, что переменная 
Код

TabSheet: TTabSheet;
 ассоциирована у тебя с последней созданной закладкой. Если для удаления закладки ты хочешь использовать ассоциированную с ней переменную, то лучше воспользоваться массивом переменных, типа:
Код

ArTabSheet: array of TTabSheet;
 или 
Код

ArTabSheet: array of integer;
//...
 TabSheet:=TTabSheet.Create(Self);    
 TabSheet.Caption:='Tab'+S;
 TabSheet.Name:='Tab'+S;
 TabSheet.PageControl:=PageControl;
 SetLength(ArTabSheet, I1 + 1);
 ArTabSheet[I1]:=integer(TabSheet); 
, а удалять 
Код

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if I1>0 then
  begin
    TTabSheet(ArTabSheet[I1-1]).Free;
    Dec(I1);
    SetLength(ArTabSheet, I1);
  end;
end;

Но самым лучшим вариантом, ИМХО, будет простая замена 
Код

  TabSheet.free;
 на 
Код

  PageControl.ActivePage.Free;



--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Zero
Дата 30.9.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(ivan219 @  30.9.2006,  23:37 Найти цитируемый пост)
А там нету нечего кроме Button, Button2, PageControl просто брасаеш их на форму

Да я понял что просто бросать на форму, но в какой вкладке ты нашёл этот компонент Page Control??? smile 
PM MAIL ICQ   Вверх
ivan219
  Дата 30.9.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Код

PageControl.ActivePage.Free;

Вот это другое дело всё работает smile 

Win32 2 с лева smile 

Это сообщение отредактировал(а) ivan219 - 30.9.2006, 23:38
PM MAIL ICQ   Вверх
Zero
Дата 30.9.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Либо в зависимости от задания:
Код

  PageControl1.Pages[N].Free;

где N - номер вкладки, который может определятся по определённому критерию (первая/последняя в списке и т.п.)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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