Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамически созданный Memo на PageControl [D6, XP]


Artem ©   (2008-02-11 01:13:00) 

Господа!

Как обратиться к динамически созданному Memo, который в свою очередь размещен на динамически созданном TabSheet? Например, сохранить Memo.lines.saveTOfile....?

Процесс создания компонент:
inc(pages);
TabSheet := TTabSheet.Create(Self);
TabSheet.Name:='p'+inttostr(pages);
TabSheet.PageControl := PageControl1;
Memo:=TMemo.Create(self);
Memo.Align:=alClient;
memo.Name:='m'+inttostr(pages);
memo.parent:=TabSheet;
memo.bevelinner:=bvNone;
memo.BevelKind:=bkFlat;
memo.BevelOuter:=bvLowered;
memo.BorderStyle:=bsNone;
memo.font.name:='Tahoma';
memo.font.Size:=10;
memo.ScrollBars:=ssBoth;
rs := TResourceStream.Create(hinstance, 'ST1', RT_RCDATA);
  try
   memo.Lines.LoadFromStream(rs);
  finally
    rs.Free;
  end;


Как мне впоследствии обращаться? Например, мне нужно сохранить содержимое MEMO на текущей вкладке (PageControl1.ActivePage)???

Заранее огромное спасибо за помощь. Очень выручите.


ANB   (2008-02-11 16:41:00) [1]


> Не. Не запоминает он его. Более того, он использует "внешнюю
> переменную" Memo при создании сего объекта

Запоминает в списке парентов странички. Иначе не смог бы отобразить.


clickmaker   (2008-02-11 16:23:00) [2]


> memo.parent:=TabSheet;

ежели так, то мемо живет среди TabSheet.Controls


{RASkov}   (2008-02-11 16:21:00) [3]

> [12] ketmar ©   (11.02.08 15:49)

глюк kpmc ? :) ...с тэгами.


ANB   (2008-02-11 16:21:00) [4]

Ну примерно, тупорыленько так (и с ричэдитом) :

procedure TfmImpUFEBSMain.acPrintRptExecute(Sender: TObject);
var
 i, n : Integer;
 tsRpt : TTabSheet;
 reRptObj :  TControl;
 reRpt : TRichEdit;
 RptName : String;
begin
 if pcReports.PageCount = 0 then begin
   ShowDialog(
     'Ошибка'
   , 'Нет отчетов для печати'
   , sdiStop, []);
   Exit;
 end;
 tsRpt := pcReports.ActivePage;
 RptName := tsRpt.Caption;
 reRpt := nil;
 n := tsRpt.ControlCount - 1;
 for i := 0 to n do begin
   reRptObj := tsRpt.Controls[i];
   if reRptObj is TRichEdit then begin
     reRpt := TRichEdit(reRptObj);
   end;
 end;
 if reRpt nil then begin
   if (ShowDialog(
         'Подвердите'
       , 'Отправить на печать отчет "' + RptName + '" ?'
       , sdiConfirm, ['&Да', '&Нет']) = 1)
   then begin
     Print_TRichEdit(RptName, reRpt, reRpt.Tag);
     ShowDialog(
         'Печать'
       , 'Отчет "' + RptName + '" отправлен на печать'
       , sdiInform, []);
   end;
 end else begin
   ShowDialog(
     'Ошибка'
   , 'Для отчета "' + RptName + '" не найден объект TRichEdit. Сообщите разработчику'
   , sdiStop, []);
 end;
end;

!!! Если на вкладке может быть несколько редакторов, то объектам придется присваивать при создании имена.


{RASkov}   (2008-02-11 16:18:00) [5]

> [12] ketmar ©   (11.02.08 15:49)

Германн имел ввиду, что одна переменная для мемо на всех вкладках пэйджконтрола - это не разумно :)
т.е. в ней(переменной Мемо) будет мемо созданное на последней вкладке... а остальные утекли...)


ketmar   (2008-02-11 15:49:00) [6]

>[9] Германн © (2008-02-11 03:31:00)
цитата из 0: Memo:=TMemo.Create(self);
Memo — это не переменная, по-твоему? O_o

---
Understanding is not required. Only obedience.


{RASkov}   (2008-02-11 13:09:00) [7]

> тема закрыта,

Вот как вариант решения данного сабжа:
 
 TabSheet:=TTabSheet.Create(PgCtrl);
 TabSheet.PageControl:=PgCtrl;
 ....
 Mm:=TMemo.Create(TabSheet);
....
 TabSheet.Tag:=Integer(Mm)

где TabSheet: TTabSheet; Mm: TMemo; PgCtrl: TPageControl на форме.....
Ну и доставать Memo нужно примерно так:
TMemo(PgCtrl.ActivePage.Tag).<методы или свойства Мемо>....


Artem   (2008-02-11 03:41:00) [8]

Народ, проблема решена, тема закрыта, не ссорьтесь :) Всем спасибо.


Германн   (2008-02-11 03:31:00) [9]


> ketmar ©   (11.02.08 03:20) [8]
>
> >[7] Германн © (2008-02-11 02:59:00)
> как же не запоминает? вот в этой переменной и запоминает.
>
>
>

Не ну Дарк, это уже перебор!
Даже затрудняюсь.
А ты не забыл как "орудовать" метлой?


ketmar   (2008-02-11 03:20:00) [10]

>[7] Германн © (2008-02-11 02:59:00)
как же не запоминает? вот в этой переменной и запоминает.

---
Understanding is not required. Only obedience.


Германн   (2008-02-11 02:59:00) [11]


> ketmar ©   (11.02.08 01:53) [3]
>
> >[2] Artem ()
> >Не знаю как это сделать...
> однако, ты объект memo запоминаешь? запоминаешь. в чём дальше
> проблема

Не. Не запоминает он его. Более того, он использует "внешнюю переменную" Memo при создании сего объекта.


{RASkov}   (2008-02-11 02:16:00) [12]

> [5] Artem   (11.02.08 02:06)

В твоем случае не обязательно заводить дополнительный массив указателей на Memos,
так как нечто такое у тебя уже есть - например: Tag у TabSheet...)


Artem   (2008-02-11 02:06:00) [13]

Все, понял. Просто надо сделать массив array of TMemo и там уже работать


Artem   (2008-02-11 01:57:00) [14]


> однако, ты объект memo запоминаешь?


запоминаю, и что? как мне в коде к нему обращение-то прописать?

если, например, напишешь m2.lines.savetofile, то будет ругаться, что нет такого компонента!


ketmar   (2008-02-11 01:53:00) [15]

>[2] Artem ()
>Не знаю как это сделать...

однако, ты объект memo запоминаешь? запоминаешь. в чём дальше проблема? опять критический баг в DNA?

---
Understanding is not required. Only obedience.


Artem   (2008-02-11 01:43:00) [16]


> Наверное сохранить куда-то значение memo и потом к нему
> обращаться?


Нет. Значение memo изменяется пользователем во время работы программы после того, как memo было создано динамически. Т.е. пользователь ввел инфу, нажал на кнопку сохранить, а программа должна взять содержимое (причем содержимое memo на динамически созданной вкладке) и savetofile.

Не знаю как это сделать...


Бывалый   (2008-02-11 01:36:00) [17]

Наверное сохранить куда-то значение memo и потом к нему обращаться?
Ну там, в переменную какую-нибудь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо