Текущий архив: 2008.03.09;
Скачать: CL | DM;
Вниз
Динамически созданный Memo на PageControl Найти похожие ветки
← →
Artem (2008-02-11 01:13) [0]Господа!
Как обратиться к динамически созданному 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)???
Заранее огромное спасибо за помощь. Очень выручите.
← →
Бывалый (2008-02-11 01:36) [1]Наверное сохранить куда-то значение memo и потом к нему обращаться?
Ну там, в переменную какую-нибудь.
← →
Artem (2008-02-11 01:43) [2]
> Наверное сохранить куда-то значение memo и потом к нему
> обращаться?
Нет. Значение memo изменяется пользователем во время работы программы после того, как memo было создано динамически. Т.е. пользователь ввел инфу, нажал на кнопку сохранить, а программа должна взять содержимое (причем содержимое memo на динамически созданной вкладке) и savetofile.
Не знаю как это сделать...
← →
ketmar © (2008-02-11 01:53) [3]>[2] Artem ()
>Не знаю как это сделать...
однако, ты объект memo запоминаешь? запоминаешь. в чём дальше проблема? опять критический баг в DNA?
---
Understanding is not required. Only obedience.
← →
Artem (2008-02-11 01:57) [4]
> однако, ты объект memo запоминаешь?
запоминаю, и что? как мне в коде к нему обращение-то прописать?
если, например, напишешь m2.lines.savetofile, то будет ругаться, что нет такого компонента!
← →
Artem (2008-02-11 02:06) [5]Все, понял. Просто надо сделать массив array of TMemo и там уже работать
← →
{RASkov} © (2008-02-11 02:16) [6]> [5] Artem (11.02.08 02:06)
В твоем случае не обязательно заводить дополнительный массив указателей на Memos,
так как нечто такое у тебя уже есть - например: Tag у TabSheet...)
← →
Германн © (2008-02-11 02:59) [7]
> ketmar © (11.02.08 01:53) [3]
>
> >[2] Artem ()
> >Не знаю как это сделать...
> однако, ты объект memo запоминаешь? запоминаешь. в чём дальше
> проблема
Не. Не запоминает он его. Более того, он использует "внешнюю переменную" Memo при создании сего объекта.
← →
ketmar © (2008-02-11 03:20) [8]>[7] Германн © (2008-02-11 02:59:00)
как же не запоминает? вот в этой переменной и запоминает.
---
Understanding is not required. Only obedience.
← →
Германн © (2008-02-11 03:31) [9]
> ketmar © (11.02.08 03:20) [8]
>
> >[7] Германн © (2008-02-11 02:59:00)
> как же не запоминает? вот в этой переменной и запоминает.
>
>
>
Не ну Дарк, это уже перебор!
Даже затрудняюсь.
А ты не забыл как "орудовать" метлой?
← →
Artem (2008-02-11 03:41) [10]Народ, проблема решена, тема закрыта, не ссорьтесь :) Всем спасибо.
← →
{RASkov} © (2008-02-11 13:09) [11]> тема закрыта,
Вот как вариант решения данного сабжа:
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).<методы или свойства Мемо>....
← →
ketmar © (2008-02-11 15:49) [12]>[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 16:18) [13]> [12] ketmar © (11.02.08 15:49)
Германн имел ввиду, что одна переменная для мемо на всех вкладках пэйджконтрола - это не разумно :)
т.е. в ней(переменной Мемо) будет мемо созданное на последней вкладке... а остальные утекли...)
← →
ANB (2008-02-11 16:21) [14]Ну примерно, тупорыленько так (и с ричэдитом) :
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:21) [15]> [12] ketmar © (11.02.08 15:49)
глюк kpmc ? :) ...с тэгами.
← →
clickmaker © (2008-02-11 16:23) [16]
> memo.parent:=TabSheet;
ежели так, то мемо живет среди TabSheet.Controls
← →
ANB (2008-02-11 16:41) [17]
> Не. Не запоминает он его. Более того, он использует "внешнюю
> переменную" Memo при создании сего объекта
Запоминает в списке парентов странички. Иначе не смог бы отобразить.
Страницы: 1 вся ветка
Текущий архив: 2008.03.09;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.013 c