Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.038 c
1-1102910118
Керик
2004-12-13 06:55
2004.12.26
Работа с папками


3-1101193848
Нулевой
2004-11-23 10:10
2004.12.26
Скажите что с датой?


1-1102697804
SoT1
2004-12-10 19:56
2004.12.26
Dll


14-1102089960
Шишкин Илья
2004-12-03 19:06
2004.12.26
Почта


3-1101880675
pkm
2004-12-01 08:57
2004.12.26
Dos and Window





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский