Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.08.2012, 11:09
Clition Clition вне форума
Прохожий
 
Регистрация: 21.08.2012
Сообщения: 3
Репутация: 10
По умолчанию Использование компонентов в своей процедуре

Добрый день!

Как в своей процедуре обратиться с свойству объекта? Например, хочу создать процедуру ClearText(); в которой хочу обратиться к RichEdit1.Text. Пишу:

procedure ClearText();
begin
RichEdit1.Text:='';
end;

компилятор ругается на [Error] Unit1.pas(58): Undeclared identifier: 'RichEdit1'. Как нужно сделать правильно?
Ответить с цитированием
  #2  
Старый 21.08.2012, 11:13
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Clition
Добрый день!

Как в своей процедуре обратиться с свойству объекта? Например, хочу создать процедуру ClearText(); в которой хочу обратиться к RichEdit1.Text. Пишу:

procedure ClearText();
begin
RichEdit1.Text:='';
end;

компилятор ругается на [Error] Unit1.pas(58): Undeclared identifier: 'RichEdit1'. Как нужно сделать правильно?
А ты RichEdit1 создал? Компилятор тебе пишет, что нет такого идентификатора.
Ответить с цитированием
  #3  
Старый 21.08.2012, 11:16
Clition Clition вне форума
Прохожий
 
Регистрация: 21.08.2012
Сообщения: 3
Репутация: 10
По умолчанию

Да, он создан, но видимо он вне области видимости моей функции.
Ответить с цитированием
  #4  
Старый 21.08.2012, 11:24
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Clition
Да, он создан, но видимо он вне области видимости моей функции.
Скорее всего так и есть. Если он лежит на форме, то нужно указать на какой форме он лежит (ведь на каждой форме может быть по своему RichEdit1 - откуда компилятору знать к какому ты хочешь обратиться). В простом случае указываешь что-то типа Form1.RichEdit1. Но это не лучший вариант! Крайне желательно к объектам формы обращаться не из обычных процедур, а из методов самой формы (например из обработчиков событий типа Button1Click). И в них не нужно указывать Form1.
Ответить с цитированием
  #5  
Старый 21.08.2012, 11:32
Clition Clition вне форума
Прохожий
 
Регистрация: 21.08.2012
Сообщения: 3
Репутация: 10
По умолчанию

Вы правы, это решило проблему.

Цитата:
Крайне желательно к объектам формы обращаться не из обычных процедур, а из методов самой формы (например из обработчиков событий типа Button1Click)

Функция должна вызываться из разных обработчиков.
Ответить с цитированием
  #6  
Старый 21.08.2012, 11:36
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Clition
Вы правы, это решило проблему.

Функция должна вызываться из разных обработчиков.
Из разных обработчиков одной и той же формы? Если так, то как я уже писал выше, эту процедуру нужно описывать не как обычную процедуру, а как метод формы.
То есть не так:
Код:
procedure ClearText();
begin
  Form1.RichEdit1.Text:='';
end;
А так:
Код:
procedure TForm1.ClearText();
begin
  RichEdit1.Text:='';
end;
Ответить с цитированием
  #7  
Старый 21.08.2012, 11:38
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от poli-smen
Крайне желательно к объектам формы обращаться не из обычных процедур, а из методов самой формы (например из обработчиков событий типа Button1Click).
глупость
......
Ответить с цитированием
  #8  
Старый 21.08.2012, 11:39
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от robt
глупость
......
Глупость говорить, что это глупость.
Ответить с цитированием
  #9  
Старый 21.08.2012, 11:45
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от poli-smen
Глупость говорить, что это глупость.
нену это реально глупость, которую ты сам придумал,вот еслибы это было рекомендация из самой дельфи тогда другое дело
Ответить с цитированием
  #10  
Старый 21.08.2012, 11:50
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от robt
нену это реально глупость, которую ты сам придумал,вот еслибы это было рекомендация из самой дельфи тогда другое дело
Т.е. "сама дельфи рекомендует" обращаться к объектам формы таким образом?:
Код:
  Form1.RichEdit1.Text:='';
Ответить с цитированием
  #11  
Старый 21.08.2012, 12:00
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от poli-smen
Т.е. "сама дельфи рекомендует" обращаться к объектам формы таким образом?:
Код:
  Form1.RichEdit1.Text:='';
а почему нет? можно еще модуль дописать Unit1.Form1.RichEdit1.Text:=''
Ответить с цитированием
  #12  
Старый 21.08.2012, 12:08
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от robt
а почему нет? можно еще модуль дописать Unit1.Form1.RichEdit1.Text:=''
Я же не говорил, что нельзя. Я написал, что с объетами формы желательно обращаться внутри самой формы (инкапсуляция), без использования глобальной переменной Form1.
Если нужны рекомендации, то вот рекомендую почитать: http://www.gunsmoker.ru/2011/04/blog-post.html

Последний раз редактировалось poli-smen, 21.08.2012 в 12:13.
Ответить с цитированием
  #13  
Старый 21.08.2012, 12:11
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

poli-smen, пользователь robt - тролль с комплексом наполеона, он толсто троллит всех, кто знает/не знает дельфи, просто забейте на него.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #14  
Старый 21.08.2012, 12:27
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

Цитата:
Сообщение от poli-smen
Я же не говорил, что нельзя. Я написал, что с объетами формы желательно обращаться внутри самой формы (инкапсуляция), без использования глобальной переменной Form1.
Если нужны рекомендации, то вот рекомендую почитать: http://www.gunsmoker.ru/2011/04/blog-post.html
прежде чем рекомендовать советы псевдогуру который просто излагает свое видение,что не означает что он прав и именно так должно быть
прочитай лучше первоисточники http://docwiki.embarcadero.com/RADSt...and_Qualifiers

а заодно осознай что вся шняга связанная с ООП и прочими инкапсуляциями существует только в исходном коде,а в бинарнике на выходе будет сплошной GOTO который тоже все "любят"
Ответить с цитированием
  #15  
Старый 21.08.2012, 12:29
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

http://blog.evseev.ru/2009/11/low-of-demeter.html
http://ru.wikibooks.org/wiki/%D0%9D%...82%D1%80%D0%B0
__________________
>woweook<

Последний раз редактировалось Pyro, 21.08.2012 в 12:31.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025