Текущий архив: 2007.07.22;
Скачать: CL | DM;
Вниз
Проблема с вкладками Найти похожие ветки
← →
Ivolg © (2007-06-27 21:54) [0]Всем привет ! Решил написать "многовкладочный" текстовый редактор, вот возникли трудности с этими "вкладками". Создаю вкладку с 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;
Когда пишешь в первой созданой вкладке, текст нормально отображается в заголовке формы, создаешь еще одну вкладку, там тоже нормально пишешь и все отображается в заголовке, но когда стоит полистать вкладки туда-сюда, возникает так, что текст из первой вкладке появляется тогда, когда нажимаешь вторую и наобарот. Помогите пожайлуста, в чем может быть проблема ?
← →
Desdechado © (2007-06-27 22:02) [1]> var NewESyn: TESyn; NewTabSheet: TTabSheet;
Проблема здесь - у тебя одна глобальная переменная на все вкладки.
← →
Ivolg © (2007-06-27 22:21) [2]Desdechado © (27.06.07 22:02) [1]
> var NewESyn: TESyn; NewTabSheet: TTabSheet;
Проблема здесь - у тебя одна глобальная переменная на все вкладки.
Может сделать с помощью массива ? Например:
NewESyn: Array[0..50] of TMemo;
← →
Loginov Dmitry © (2007-06-27 22:23) [3]Списки рулят!
Юзай TList.
← →
Ivolg © (2007-06-27 22:35) [4]Loginov Dmitry © (27.06.07 22:23) [3]
Списки рулят!
Юзай TList.
Мне нужно сделать именно со вкладками, ну например как у Notepad++ или других текстовых редакторов.
← →
Johnmen © (2007-06-27 22:36) [5]
> Может сделать с помощью массива ?
> Например: NewESyn: Array[0..50] of TMemo;
Динамические массивы.
NewTabSheet: Array of TTabSheet;
NewESyn: Array of TMemo;
← →
Loginov Dmitry © (2007-06-27 22:39) [6]
> Динамические массивы.
Ему же именно со вкладками нужно :))
← →
Johnmen © (2007-06-27 22:49) [7]Я не знаю, что такое "вкладки" :)
← →
Ivolg © (2007-06-27 22:50) [8]Попробовал, все та же беда (
← →
Anatoly Podgoretsky © (2007-06-27 22:57) [9]
> Проблема здесь - у тебя одна глобальная переменная на все
> вкладки.
Не важно, можно даже совсем переменную убрать, она нужна только на период создания, чтобы присвоить парент
← →
Ivolg © (2007-06-27 23:17) [10]Может есть какие-нибудь исходники программ на эту тему ?
← →
Ivolg © (2007-06-27 23:31) [11]Кажется я придумал как это сделать =)
← →
icWasya © (2007-06-28 14:53) [12]Да причём тут массивы -
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-28 15:08) [13]icWasya © (28.06.07 14:53) [12]
Биг спасиба ! Действительно была путаница с событиями !
Страницы: 1 вся ветка
Текущий архив: 2007.07.22;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.032 c