Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.023 c
2-1182825150
Alex7
2007-06-26 06:32
2007.07.22
Полоса прокрутки в MEMO


6-1166559294
PHPDeveloper
2006-12-19 23:14
2007.07.22
аплоад файлов


11-1165943277
Goko
2006-12-12 20:07
2007.07.22
Создание MCK компонента


2-1183203762
Qzzma
2007-06-30 15:42
2007.07.22
TTreeView


2-1182764274
oi!
2007-06-25 13:37
2007.07.22
проблемы с загрузкой в image