Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизTEdit ы на TForm Найти похожие ветки
← →
Easter (2004-12-10 16:41) [0]У меня на TScrollBox находится 8 компонент TMemo, имеющих имя типа memo1, memo2, memo3 и т.д. За пределами TScrollBox лежит resultMemo в котором надо сплюсовать содержимое всех предыдущих. Как это сделать?
Дело в том, что первые мемки создаются динамически и их количество разное, в зависимости от условий...
← →
begin...end © (2004-12-10 16:50) [1]> Easter (10.12.04 16:41)
var
I: Integer;
M: TComponent;
begin
I := 1;
repeat
M := ScrollBox.FindComponent("Memo" + IntToStr(I));
if Assigned(M) and (M is TMemo) then
// Добавляем текст из TMemo(M) в ResultMemo
until not Assigned(M)
end.
← →
begin...end © (2004-12-10 16:51) [2]Ой, извиняюсь: перед until нужно добавить Inc(I).
← →
Rem © (2004-12-10 16:55) [3]
for i := 0 to ScrollBox.ComponentCount - 1 do
if (ScrolBox.Components[i] is TMemo) then
ResultMemo.Lines.Text := ResultMemo.Lines.Text + {#10#13 +} TMemo(ScrollBox.Components[i]).Lines.Text;
← →
begin...end © (2004-12-10 17:02) [4]> [3] Rem © (10.12.04 16:55)
По-моему, это будет верно только для случая, когда порядок "склеивания" текста не имеет значения.
← →
Easter (2004-12-10 17:13) [5]Сделал так...
if (ScrollBox.Components[i] is TMemo) then
begin
for i := 0 to ScrollBox.ComponentCount - 1 do
begin
Lines.Add("---");
Lines.Add( TMemo(ScrollBox.Components[i]).Lines.Text );
Lines.Add("---");
Lines.Add("");
end;
end;
Ругается...
← →
Rem © (2004-12-10 17:18) [6]Это будет верно для случая, когда Memo создаются в порядке последующего физического расположения.
← →
Easter (2004-12-10 17:20) [7]Уважаемый Rem, тогда подскажи как твоим спосбом перед текстом каждой из мемок добавлять разделители (как в примере моего кода)? Я только учусь...
← →
begin...end © (2004-12-10 17:20) [8]> [5] Easter (10.12.04 17:13)
Строка if (ScrollBox.Components[i] is TMemo) then должна быть внутри цикла. Не говоря уже о надобности with ResultMemo do.
> [6] Rem © (10.12.04 17:18)
Да, но про порядок создания в вопросе ничего не было.
← →
Rem © (2004-12-10 17:23) [9]Правильно ругается. У Вас проверка "is" идет перед циклом, и выполняется один единственный раз для i-го компонента (чему равно при этом i?).
for i := 0 to ScrollBox.ComponentCount - 1 do
if (ScrolBox.Components[i] is TMemo) then
ResultMemo.Lines.Text := ResultMemo.Lines.Text + #13"-----"#13 + TMemo(ScrollBox.Components[i]).Lines.Text + #13"-----"#13;
Но, как правильно сказал begin...end, это будет верно только при условии, когда порядок создания Memo совпадает с физическим размещением. Т. е., первый создаваемый Memo должен размещаться вверху, ниже него - второй, и т. д.
← →
Rem © (2004-12-10 17:27) [10]begin...end © (10.12.04 17:20) [8]
>>Да, но про порядок создания в вопросе ничего не было.
Согласен. Ваше решение полностью соответствует поставленной задаче. Пойду курить... :)
← →
Easter (2004-12-10 17:30) [11]Ага, понятно. Тогда такой вопрос... ScrollBox тоже динамически создается в другой процедуре, которая идет перед моей. По сему я не могу на него сослатся по имени. Как тогда это сделать?
← →
Easter (2004-12-10 17:34) [12]Сделал так:
TabSheet.FindComponent("mResult")
Уже не ругается, но и не складывает %)))
← →
Easter (2004-12-10 17:35) [13]А вот процедура целиком:
procedure TfMain.bNextToStep3Click(Sender: TObject);
var
i: Integer;
TabSheet: TTabSheet;
ScrollBox: TScrollBox;
Memo: TMemo;
begin
TabSheet := TTabSheet.Create(Self);
TabSheet.PageControl := pcMain;
TabSheet.Caption := " Øàã 3 ";
TabSheet.Name := "ts3";
with TMemo.Create(TabSheet) do
begin
Align := alClient;
Parent := TabSheet;
Name := "mResult";
Lines.Clear;
for i := 0 to TabSheet.FindComponent("mResult").ComponentCount - 1 do
if (TabSheet.FindComponent("mResult").Components[i] is TMemo) then
Lines.Text := Lines.Text + #13"-----"#13 + TMemo(TabSheet.FindComponent("mResult").Components[i]).Lines.Text + #13"-----"#13;
end;
end;
← →
Rem © (2004-12-10 17:36) [14]Почему же не можете?
TForm1 = class(TForm)
...
procedure Button1Click(Sender: TObject);
private
ScrollBox: TScrollBox;
procedure CreateScrollBox;
procedure DestroyScrollBox;
...
end;
procedure TForm1.CreateScrollBox;
begin
if (ScrollBox = nil) then
begin
ScrollBox := TScrollBox.Create(Self);
ScrollBox.Parent := Self;
ScrollBox.Left := ...
...
end;
end;
procedure TForm1.DestroyScrollBox;
begin
if (ScrollBox <> nil) then
FreeAndNil(ScrollBox);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if (ScrollBox <> nil) then
...
end;
← →
Rem © (2004-12-10 17:39) [15]>>
TabSheet.FindComponent("mResult").ComponentCount
Вы же говорите, что TMemo лежат на ScrollBox"е. А на самом деле перебираете компоненты, принадлежащие TMemo с Name = "mResult". Не там ищете...
← →
Easter (2004-12-10 17:45) [16]> Вы же говорите, что TMemo лежат на ScrollBox"е. А на самом деле перебираете компоненты, принадлежащие TMemo с Name = "mResult". Не там ищете...
Не совсем. Те мемки, которые плюсуются, лежат на скроле. А мемка в которой плюсуется лежит не на скроле. а на уровень выше - на TabSheet
← →
Rem © (2004-12-10 17:54) [17]
for i := 0 to TabSheet.FindComponent("mResult").ComponentCount - 1 do
if (TabSheet.FindComponent("mResult").Components[i] is TMemo) then
Lines.Text := Lines.Text + #13"-----"#13 + TMemo(TabSheet.FindComponent("mResult").Components[i]).Lines.Text + #13"-----"#13;
В этом коде вы перебираете все компоненты, владельцем которых является mResult. Если при создании "тех Memo, что в большом количестве" вы пишете TMemo.Create(TabSheet.FindComponent("mResult")), тогда все правильно. Иначе Вам надо перебирать компоненты, владельцем которых является ScrollBox...
← →
Leonid Troyanovsky (2004-12-10 18:01) [18]
> Rem © (10.12.04 17:54) [17]
> for i := 0 to TabSheet.FindComponent("mResult").ComponentCount
> - 1 do
Если известно, что оные компоненты суть контролы,
то искать их бы следовало среди контролов, бо
вырожденные случаи с Parent = nil, видимо, неинтересны.
(в отличии от Owner = nil, обычного для динамически
создаваемых компонентов).
--
С уважением, LVT.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.033 c