Главная страница
    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.48 MB
Время: 0.032 c
15-1182391972
Slider007
2007-06-21 06:12
2007.07.22
С днем рождения ! 21 июня 2007 четверг


1-1175586374
Kolan
2007-04-03 11:46
2007.07.22
Свой ActionList


9-1142786016
Mortem
2006-03-19 19:33
2007.07.22
Конкурсы по программированию игр на Delphi продолжаются


2-1182786825
WFS
2007-06-25 19:53
2007.07.22
Проблема с переносом базы на другой комп


5-1157439365
vodvorezlaya
2006-09-05 10:56
2007.07.22
Помогите создать компонент.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский