Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 272

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Вопрос таков: есть большое кол-во Memo и Edit (в моём случае по 12). И их иногда нужно очищать. Пробовал писать процедуру (указана внизу), обругало Access Violation'ом. Пришлось делать тупым перебором. Можно ли как-то этого избежать?

Приложение:
  1. {{code}}
  2. procedure TForm1.ClearMemos(Quant: byte);
  3. var i: byte;
  4. begin
  5. for i:=1 to Quant do TMemo('Memo'+IntToStr(i)).Clear;
  6. end;
  7. {{/code}}


AlphA Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: AlphA (статус: Посетитель)
Вопрос отправлен: 11 октября 2009, 16:02
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 12 октября 2009, 10:21; участников в обсуждении: 3.
IlluminatI

IlluminatI (статус: 2-ой класс), 11 октября 2009, 17:28 [#1]:

Привет AlphA!
Как насчет такого кода (по нажатию кнопки):

 procedure TForm1.Button1Click(Sender: TObject);
var i: byte;
begin
 for I := 0 to ComponentCount - 1 do
  begin
    if (Components[i] is TEdit) then (Components[i] as TEdit).Text:='';
    if (Components[i] is TMemo) then (Components[i] as TMemo).Text:='';
  end;
end;
AlphA

AlphA (статус: Посетитель), 11 октября 2009, 18:15 [#2]:

Вроде работает... Но как? Берёт первые 12 созданных компонентов такого-то типа и чистит?
IlluminatI

IlluminatI (статус: 2-ой класс), 11 октября 2009, 18:28 [#3]:

пробегается по всем компонентам (а не по первым 12ти), и, если это TEdit или TMemo - очищает его. Конечно, код можно еще оптимизировать, чтобы не писать два if...then подряд, но это уже мелочи :)
AlphA

AlphA (статус: Посетитель), 11 октября 2009, 18:40 [#4]:

А можно как-то запретить чистить определённые объекты?
IlluminatI

IlluminatI (статус: 2-ой класс), 11 октября 2009, 18:46 [#5]:

этот код чистит только Edit / Memo. В принципе, можно запретить чистить определенные Edit / Memo, например, поставить для определенных компонентов свойство Tag и проверять (сразу после begin такой код):

if (Components[i].Tag неравно < значение Tag компонента > ) then
 begin
 ...
 end;
AlphA

AlphA (статус: Посетитель), 11 октября 2009, 18:56 [#6]:

Спасибо!
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 12 октября 2009, 10:21 [#7]:

Еще можно воспользоваться функцией поиска компонента по имени.

for i:=1 to Quant do
 TMemo(FindComponent('Memo'+IntToStr(i))).Clear;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.02 сек.