Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2009, 19:48   #1
Fezilk
Пользователь
 
Регистрация: 29.08.2008
Сообщений: 32
Счастье Поиск динамического Memo

Здравствуйте.

Есть форма, на которой лежит PageControl. В нем динамически создаются TabSheet (страницы).Пишу кое что типа чата, Имя TabSheet создается следующим образом:
"Tab" + номер канала.

Нужно найти Memo, которое лежит на активной TabSheet. Имя Memo = "Memo" + имя страницы (TabSheet).

Пожалуйста, помогите (своих мозгов не хватает, к сожалению).
Fezilk вне форума Ответить с цитированием
Старый 24.08.2009, 19:57   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Memo ведь тоже динамически создаешь ?
как им имена присваиваешь ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 24.08.2009, 20:04   #3
havok
Пользователь
 
Аватар для havok
 
Регистрация: 24.08.2009
Сообщений: 42
По умолчанию

смотреть тут или тут
icq 580047636 You're WELCOME!!!

Последний раз редактировалось havok; 24.08.2009 в 20:07.
havok вне форума Ответить с цитированием
Старый 24.08.2009, 20:29   #4
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 127
Радость

Можно найти нужный Memo

Код:
 Var I:Byte;
      M:TMemo;
  Begin
   For I:=1 To 10 Do
    Begin
     M:=FindComponent('Memo'+IntToStr(I)) As TMemo;
     If M<>NIL Then
      Begin
       M.Clear;
       M.Lines.Add('text memo'+IntToStr(I));
     End;
    End;
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 25.08.2009, 00:54   #5
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Вы бы лучше TabSheet'ы и Memo загоняли в динамические массивы или в один массив типа запись:
Код:
...
type
 TChatPages = record
  _sheet: TTabSheet;
  _memo: TMemo;
 end;
...
var
 Form1: TForm1;
 ChatPages: array of TChatPages;
...
И не надо заморачиваться с именами, свойству Tag, у созданных TabSheet'ов и memo, присваивайте индекс в массиве.
А потом "найти Memo, которое лежит на активной TabSheet" можно просто:

Код:
 ChatPages[PageControl1.ActivePage.Tag]._memo.Lines.Add('text');
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 25.08.2009, 11:12   #6
Fezilk
Пользователь
 
Регистрация: 29.08.2008
Сообщений: 32
По умолчанию

Спасибо всем, попробую последний способ.

Можно вопрос?
Цитата:
свойству Tag, у созданных TabSheet'ов и memo, присваивайте индекс в массиве.
как это сделать, и как загнать Memo в массив.

Последний раз редактировалось Stilet; 25.08.2009 в 12:29.
Fezilk вне форума Ответить с цитированием
Старый 25.08.2009, 18:55   #7
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Вот пример, на форме пустой PageControl и две кнопки, описан массив типа запись (как я вверху написал):
Код:
//Первая создает вкладку с memo на ней
procedure TForm1.bt_1Click(Sender: TObject);
begin
 SetLength(ChatPages, Length(ChatPages) + 1); //Устанавливаем длину массива на единицу больше его предыдущей длины
 ChatPages[Length(ChatPages) - 1]._sheet := TTabSheet.Create(Self); //Создаем вкладку
 With ChatPages[Length(ChatPages) - 1]._sheet do
 begin
  PageControl := PageControl1; //Присваиваем ей родителя
  Caption := Format('ChatWindow %d', [Length(ChatPages)]); 
  Tag := Length(ChatPages) - 1; //Присваиваем Tag равным индексу в массиве
 end;
 ChatPages[Length(ChatPages) - 1]._memo := TMemo.Create(Self); //Создаем memo
 With ChatPages[Length(ChatPages) - 1]._memo do
 begin
  Parent := ChatPages[Length(ChatPages) - 1]._sheet; //Присваиваем родителя: только что созданную вкладку
  //Тут просто изменяем вид memo в кладке
  Align := alClient;
  AlignWithMargins := true;
  Margins.Left := 10;
  Margins.Top := 10;
  Margins.Bottom := 10;
  Margins.Right := 10;
  Tag := Length(ChatPages) - 1; //Так же присваиваем Tag
 end;
end;

//Вторая показывает сообщение: индекс в массиве текущей вкладки и первую строчку в memo на текущей вкладке
procedure TForm1.bt_2Click(Sender: TObject);
begin
 if Length(ChatPages) = 0 then Exit; //Если вкладок вообще нет, то нечего и показывать сообщение, а то на ошибку напоремся

 //Показываем сообщение
 ShowMessage(Format('Index: %d; MemoFirstLine: %s', [PageControl1.ActivePage.Tag,
   ChatPages[PageControl1.ActivePage.Tag]._memo.Lines[0]]));
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 26.08.2009, 20:39   #8
Fezilk
Пользователь
 
Регистрация: 29.08.2008
Сообщений: 32
По умолчанию

спасибо =) но, к сожалению, такой способ не прокатывает.

Код:
if ChatPages[Form3.PageControl1.ActivePage.Tag]._memo.Name = 'MemoTab' + suin then
ChatPages[Form3.PageControl1.ActivePage.Tag]._memo.Text := 'asdasdasd';
при получении сообщения от отправителя с номером "suin" ничего не происходит, а должно быть тек: при получении текст в Memo изменяется на asdasdasad

Memo создается так:
Код:
 ChatPages[Length(ChatPages) - 1]._memo := TMemo.Create(Self); //Создаем memo
 With ChatPages[Length(ChatPages) - 1]._memo do
 begin
  Parent := Pan2; //Присваиваем родителя: только что созданную вкладку
  //Тут просто изменяем вид memo в кладке
  Tag := Length(ChatPages) - 1; //Так же присваиваем Tag
  Name := 'MemoTab' + Form3.Edit1.Text;
  Text := '';
  Align := alNone;
  Width := 490;
  Height := 80;
  Top := 40;
  Left := 8;
  Parent := Pan2;
  Anchors := [akLeft,akTop,akRight,akBottom];
  BevelEdges := [beLeft,beTop,beRight,beBottom];
 end;
в Form3.Edit1.Text номер получателя (текст в Edit1 изменяется при выборе получателя)

извиняюсь! сам виноват, все работате)

Последний раз редактировалось Stilet; 27.08.2009 в 09:18.
Fezilk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
memo поиск и перенос строки andrey poki Общие вопросы Delphi 4 22.03.2009 06:54
access+delphi поиск по словам в поле memo gvozdkoff БД в Delphi 2 25.02.2009 07:13
Поиск по Memo photozaz Общие вопросы Delphi 5 25.05.2008 17:55
Поиск в Memo Terran Общие вопросы Delphi 4 07.05.2008 23:33
Поиск в поле Memo omi БД в Delphi 6 01.03.2007 18:39