Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
14-1102242598
dr Tr0jan
2004-12-05 13:29
2004.12.26
Гриль в микроволновке


1-1102956645
Dema-X
2004-12-13 19:50
2004.12.26
что за qtintf70.dll


3-1101388631
Bless
2004-11-25 16:17
2004.12.26
q.FilterGroup:=fgPredicate Как этим пользоваться?


1-1102691955
Аня
2004-12-10 18:19
2004.12.26
конвертирование отчетов Rave


3-1101967627
Death
2004-12-02 09:07
2004.12.26
Програмное изменение занчений полей