Форум: "Основная";
Текущий архив: 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.015 c