![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамически созданный 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 и потом к нему обращаться?
Ну там, в переменную какую-нибудь.