Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Вниз

PageControl   Найти похожие ветки 

 
tsarevep   (2002-06-25 20:42) [0]

Всем доброе время суток!
Ребята выручите пожалуйста!Понадобилось срочно, проект колом встал. Заране прошу не сочтите наглостью. Все FAQ"и пересмотрел ничего не нашел.
Вообщем если не жалко и не трудно помогите демкой или хорошим куском кода. Надо при открытия нового документа создавать вкладку на PageControl или TabControl с названием файла , да вобщем примерно как редактор Делфи делает.Естественно уничтожать ее по закрытию и все такое. Писал на чужом компоненте(он такое в две строчки позволял сделать ), а сейчас отобрали у меня его за плохое поведение. В инете сидеть не могу денег сейчас нет(поэтому отвечать часто не буду-извините).Вообщем кому не жалко время и затрат пришлите на мыло.Еще раз не сочтите наглость.Заранее благодарен.
С уважением.


 
cypher   (2002-06-25 23:57) [1]

Я делал так...


type
TDCMyPage = class(TDCPage)
private
Memo:TMemo;
public
constructor Create(cname:String;AOwner:TComponent);
destructor Destroy; override;
end;

constructor TDCMyPage.Create(cname:String;AOwner:TComponent);
var
i :integer;
Column :TdxDBTreeListColumn;
begin
inherited Create(AOwner);
try
// создание закладки
PageControl := TDCCustomPageControl(AOwner);
ImageIndex := 14;
Caption := cname;
Memo := TMemo.Create(Self);
try
Panel.Parent := Self;
Panel.Align := alClient;
except
// ..raiseError
end;
end;

destructor TDCMyPage.Destroy;
begin
// ...
Inherited;
end;


Теперь главная форма


type
TFormMainForm = class(TForm)
DCPageControl: TDCPageControl;
procedure nmiNewFlorClick(Sender: TObject);
procedure nmiDelFlorClick(Sender: TObject);
end;

procedure TFormMainForm.nmiNewFlorClick(Sender: TObject);
var
dlg : TfromNewFlor;
begin
// add new tab
dlg := TfromNewFlor.Create(self); // запросить имя закладки
try
if dlg.ShowModal = mrOk then
with DCPageControl do begin
TDCMyPage.Create(dlg.FlatEditFlorName.Text,DCPageControl);
end;
finally
dlg.Free;
end;
end;

procedure TFormMainForm.nmiDelFlorClick(Sender: TObject);
begin
with DCPageControl do begin
DCPageControl.ActivePage.Free;
end;
end;


DCPageControl и TDCPage - это аналог обчного PageControl и его страничек(закладок)...


 
Gonza   (2002-06-26 00:16) [2]

А можно и так:

procedure TForm1.btnOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
with TTabSheet.Create(PageControl1) do
begin
PageControl:=PageControl1;
Caption:=ExtractFileName(OpenDialog1.FileName);
PageControl1.ActivePageIndex:=PageIndex;
end;
with TMemo.Create(PageControl1.ActivePage) do
begin
PArent:=PageControl1.ActivePage;
Align:=alClient;
ScrollBars:=ssBoth;
Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
end;

procedure TForm1.btnCloseClick(Sender: TObject);
begin
PageControl1.ActivePage.Free;
end;


 
tsarevep   (2002-06-26 17:24) [3]

Огромное спасибо!
Но я наверное немного не так поставил вопрос, у меня не получается при закрытии вкладки выдать запрос на сохранение изменений в документе. И при открытии не повторять открытие уже открытого документа. Да и еле еле с большими глюками связываю активное мемо с разными командами например с Undo, Hiden Character, WordWrap, и т.д. Поэтому и попросил демку какую нибудь.
Не принимайте выше сказанное за не благодарность, эти два кода мне очень пригодились. Еще раз спасибо.


 
cypher   (2002-06-26 22:08) [4]

Ну... очень просто

1. Открытие файла:


flag := false;
for i:=0 to PageControl.Count-1 do
if PageControl.Items[i].Caption := filename then begin
flag := false;
break;
end;
if flag then AddNewTab else PageControl.ActivePage := PageControl.Items[i];


а закрытие, тебе нада нада просто отлавлись событие (например от TPopupMenu с пунктом "Закрыть") где собственно и задавать вопрос, о сохранении... примера к сожалению нет, но ведь это просто!


 
tsarevep   (2002-06-26 22:24) [5]

Спасибо!
У меня в другом трабла я не могу к нему обратиться как к Мемо.
Всмысле не знаю как. Ведь есть Create TMemo. А названия самого мемо нет. И немогу ж я записать
if Tmemo.Modified then

Я понимаю что ламерски но никогда еще не создавал в RunTime. Sory.
С уважением.


 
Gonza   (2002-06-27 00:03) [6]

Если Memo один на сранице, то:


if TMemo(PageControl1.ActivePage.Controls[0]).Modified then ...


Если не один, то ищешь его:


for i:=0 to PageControl1.ActivePage.ContorlCount-1 do
if PageControl1.ActivePage.Controls[i].ClassNameIs("TMemo") then
begin
if TMemo(PageControl1.ActivePage.Controls[i]).Modified then
...
break;
end;


 
tsarevep   (2002-06-27 00:25) [7]

Огромное спасибо Gonza!
Вроде начал понимать.
С уважением.


 
cypher   (2002-06-27 20:18) [8]

Это хорошо (а если два TMemo?), но можно проще, опять же, используя мой способ (самый первый ответ) - определить свой класс на основе базового TPage в нем просто добавить две(!) строки:


TDCMyPage = class(TDCPage)
private
Memo:TMemo;
public
constructor Create(cname:String;AOwner:TComponent);
....
published
property SuperMemo : TMemo read Memo;
end;


а дальше обрашаться как свойству класса:


TDCMyPage(PageControl1.ActivePage).SuperMemo.Lines.Add("ура!");




 
Gonza   (2002-06-27 21:24) [9]


> cypher © (27.06.02 20:18)
> (а если два TMemo?),

Два TMemo где ?
Если на одной странице, то я не совсем понял твой код..

> TDCMyPage = class(TDCPage)
> private
> Memo:TMemo; //Тут же одно Memo...
> public
> constructor Create(cname:String;AOwner:TComponent);
> ....
> published
> property SuperMemo : TMemo read Memo;
> end;



 
cypher   (2002-06-28 00:49) [10]

А че не понятного? Хочешь два TMemo? пжалста:


TDCMyPage = class(TDCPage)
private
Memo1:TMemo;
Memo2:TMemo;
public
constructor Create(cname:String;AOwner:TComponent);
....
published
property SuperMemo1 : TMemo read Memo1;
property SuperMemo2 : TMemo read Memo2;
end;


Ну и...


TDCMyPage(PageControl1.ActivePage).SuperMemo1.Lines.Clear;
TDCMyPage(PageControl1.ActivePage).SuperMemo2.Lines.Add("wow");


Я эт к тому, что имхо, наследованиее более правильно и удобно, нежели перебор всех компонент на форме, особенно если в задаче все эти закладки типичны.


 
cypher   (2002-06-28 00:54) [11]

А моему коду пофиг че у тя на странице, каждый элемент имеет свое имя (если это нужно)

Надо писать правильно.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.019 c
3-47207
KIR
2002-06-15 13:51
2002.07.15
Как ячейке DBGrid a вывести текст в несколько строк


1-47253
Grave
2002-06-26 23:30
2002.07.15
Переключение задач (task switching)


1-47460
drt
2002-07-03 15:44
2002.07.15
Matrix


1-47386
First_May
2002-07-02 10:08
2002.07.15
Форма + DLL


1-47381
Yuri Btr
2002-07-02 09:37
2002.07.15
ListView и CheckBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский