![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с вкладками [D7, XP]
Ivolg © (2007-06-27 21:54:00)Всем привет ! Решил написать "многовкладочный" текстовый редактор, вот возникли трудности с этими "вкладками". Создаю вкладку с Memo так:
...
type
TESyn = class(TMemo)
constructor Create(AOwner: TComponent); override; //Класс TESyn
end;
...
procedure CreatePage(const Caption: String); //Процедура созания страницы
procedure OnShowPage(Sender: TObject); //Событие при открытии страницы
procedure OnChangeSyn(Sender: TObject); //Событие при изменении содержимого в Memo1
function CurSyn: TESyn; //Memo, который выбран на данный момент
function CurSynName: String; //Имя страницы, которая выбрана сейчас
procedure Button1Click(Sender: TObject);
...
var
NewESyn: TESyn;
NewTabSheet: TTabSheet;
...
procedure TForm1.OnChangeSyn(Sender: TObject);
begin
Caption:=CurSyn.Text;
end;
procedure TForm1.OnShowPage(Sender: TObject);
begin
Caption:=CurSyn.Text;
end;
constructor TESyn.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Align:=alClient;
Font.Height:=-13;
Font.Size:=10;
ScrollBars:=ssBoth;
end;
procedure TForm1.CreatePage(const Caption: String);
begin
NewTabSheet:=TTabSheet.Create(PageControl1);
NewTabSheet.PageControl:=PageControl1;
NewTabSheet.Caption:=Caption;
NewESyn:=TESyn.Create(Self);
NewESyn.Parent:=NewTabSheet;
NewTabSheet.OnShow:=OnShowPage;
NewESyn.OnChange:=OnChangeSyn;
NewTabSheet.Show;
end;
function TForm1.CurSyn: TESyn;
begin
Result:=(PageControl1.Pages[PageControl1.ActivePageIndex].Controls[0] as TESyn);
end;
function TForm1.CurSynName: String;
begin
Result:=PageControl1.Pages[PageControl1.ActivePageIndex].Caption;
end;
procedure TForm1.Button1Click(Sender: TObject); //Пример использования
begin
CreatePage('New');
end;
Когда пишешь в первой созданой вкладке, текст нормально отображается в заголовке формы, создаешь еще одну вкладку, там тоже нормально пишешь и все отображается в заголовке, но когда стоит полистать вкладки туда-сюда, возникает так, что текст из первой вкладке появляется тогда, когда нажимаешь вторую и наобарот. Помогите пожайлуста, в чем может быть проблема ?
Ivolg (2007-06-28 15:08:00) [1]icWasya © (28.06.07 14:53) [12]
Биг спасиба ! Действительно была путаница с событиями !
icWasya (2007-06-28 14:53:00) [2]Да причём тут массивы -
var NewESyn: TESyn; NewTabSheet: TTabSheet;
должны быть вообще локальными переменными в процедуре CreatePage
А по проблеме - событие OnShowPage срабатывает раньше, чем ActivePageIndex изменится
например можно сделать так
procedure TForm1.OnShowPage(Sender: TObject);
begin
Caption:=(TTabSheet(Sender).Controls[0] as TESyn).Text;
end;
Ivolg (2007-06-27 23:31:00) [3]Кажется я придумал как это сделать =)
Ivolg (2007-06-27 23:17:00) [4]Может есть какие-нибудь исходники программ на эту тему ?
Anatoly Podgoretsky (2007-06-27 22:57:00) [5]
> Проблема здесь - у тебя одна глобальная переменная на все
> вкладки.
Не важно, можно даже совсем переменную убрать, она нужна только на период создания, чтобы присвоить парент
Ivolg (2007-06-27 22:50:00) [6]Попробовал, все та же беда (
Johnmen (2007-06-27 22:49:00) [7]Я не знаю, что такое "вкладки" :)
Loginov Dmitry (2007-06-27 22:39:00) [8]
> Динамические массивы.
Ему же именно со вкладками нужно :))
Johnmen (2007-06-27 22:36:00) [9]
> Может сделать с помощью массива ?
> Например: NewESyn: Array[0..50] of TMemo;
Динамические массивы.
NewTabSheet: Array of TTabSheet;
NewESyn: Array of TMemo;
Ivolg (2007-06-27 22:35:00) [10]Loginov Dmitry © (27.06.07 22:23) [3]
Списки рулят!
Юзай TList.
Мне нужно сделать именно со вкладками, ну например как у Notepad++ или других текстовых редакторов.
Loginov Dmitry (2007-06-27 22:23:00) [11]Списки рулят!
Юзай TList.
Ivolg (2007-06-27 22:21:00) [12]Desdechado © (27.06.07 22:02) [1]
> var NewESyn: TESyn; NewTabSheet: TTabSheet;
Проблема здесь - у тебя одна глобальная переменная на все вкладки.
Может сделать с помощью массива ? Например:
NewESyn: Array[0..50] of TMemo;
Desdechado (2007-06-27 22:02:00) [13]> var NewESyn: TESyn; NewTabSheet: TTabSheet;
Проблема здесь - у тебя одна глобальная переменная на все вкладки.