Главная страница
    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.033 c
8-1096044372
Antonmm2
2004-09-24 20:46
2004.12.26
Разделение AVI файла


6-1097349683
Ralf
2004-10-09 23:21
2004.12.26
Поиск компьютеров


3-1101980098
intaari
2004-12-02 12:34
2004.12.26
Выбор типа базы данных (Paradox, DBase, FOXPRO или др.)


1-1102880508
E_
2004-12-12 22:41
2004.12.26
Размер exe


14-1101230112
alex145
2004-11-23 20:15
2004.12.26
Visual Studio





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский