Главная страница
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.028 c
15-1182508002
4martina
2007-06-22 14:26
2007.07.22
MACTEPA KAK....


3-1175257148
DmitrichJ
2007-03-30 16:19
2007.07.22
Копирую из InterBase в MS SQL с фотографиями!


15-1182576092
KilkennyCat
2007-06-23 09:21
2007.07.22
Как убить продукт, или о бесплатном ПО


1-1179295087
fishka
2007-05-16 09:58
2007.07.22
Снять выделение и установить курсор в позицию Combobox-а


15-1182673046
Michael L Birnov
2007-06-24 12:17
2007.07.22
Как получить список Com-портов?