![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
sheka |
![]()
Сообщение
#1
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
С помощью инета сделал свой компонент. Подскажите, как
unit component1; изменять, например, свойство Visible формы, на которую этот компонент установлен. Сообщение отредактировано: sheka - 17.11.2009 18:43 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Свойство Owner тебе поможет.
|
sheka |
![]()
Сообщение
#3
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
На самом деле лучше бы так сделать:
type. Кстати, почему таймер - глобальная переменная? |
sheka |
![]()
Сообщение
#5
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Цитата Кстати, почему таймер - глобальная переменная? это я с сайта списывал.Цитата property ShowType: boolean read FshowType write SetShowType; Насколько я понял, то что стоит после read - процедура считывания информации с поля; после write - записи в поле. Только в чем прикол этих процедур - я не понял. А где у вас таймер на выполнение процедуры SetShowType? или потом в OnTimer вызывать эту процедуру? Сообщение отредактировано: sheka - 17.11.2009 20:56 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Нет, мне не удалось добиться того, что ты хочешь (регулировать видимость невидимость формы). Таймер - работает, для проверки я сделал наследника от TEdit, и по таймеру каждую секунду выводил текущее время. С этим проблема нет, даже в Design-Time. А вот с видимостью формы - проблема, даже тогда, когда таймер запускался по нажатию дополнительной кнопки уже после старта приложения. С чем это связано - не знаю.
|
sheka |
![]()
Сообщение
#7
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Выложите пожалуйста свой компонент. не могу понять в чем проблема. ни то что я пишу, ни то что копирую уже готовое с нета - ничего не работает
![]() Видимость- это я взял с неба - для наглядности)не думал что с этим могут быть какие-то проблемы. |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Вот сам компонент:
![]() В основном приложении на форме лежит этот компонент и кнопка. Кнопка делает следующее: procedure TForm1.Button1Click(Sender: TObject);, после чего в MyComponent1 начинает выводиться текущее время. |
sheka |
![]()
Сообщение
#9
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Спасибо, уже кое-что стало понятно,но еще вопросы остались:
хочу сделать событие 'OnChange' например, при каждом изменении Text чтобы Timer.Enabled:=not Timer.Enabled но его и остальные поля и методы предка - НЕТ! т.е. их не видит. почему? и еще, что вот это за проверка:if Assigned(FOnTimer) then FOnTimer(Self); выполнилось ли событие OnTimer или нет? Сообщение отредактировано: sheka - 18.11.2009 19:13 |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата но его и остальные поля и методы предка - НЕТ! т.е. их не видит. ![]() Цитата и еще, что вот это за проверка:if Assigned(FOnTimer) then FOnTimer(Self); А если у тебя за время между тиками таймера (т.е. за эту самую секунду) произошли изменения, ты (ну, или кто-то другой, неважно) сбросил FOnTimer в nil? Что будет на следующем тике? Попытка разыменовать нулевой указатель будет, а это приведет только к аварийному вылету. Вот поэтому сначала проверяем, есть ли собственно обработчик, и если есть - то вызываем его. |
sheka |
![]()
Сообщение
#11
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Вот смотрите: если на форме стоит только один Edit1 и прописать:
procedure TForm1.Edit1Change(Sender: TObject); тогда в Run-Time будет при изменении Edit1.Text будет меняться form1.Caption. как мне сделать чтобы при изменении текста моего компонента происходило то же самое, без предварительной прописки в новоп проекте: procedure TForm1.MyComponent1Change(Sender: TObject); Что собой представляет TNotifyEvent? указатель на какое-то событие? если да, то ним могут быть все(OnClick,OnCreate..итд)? |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата как мне сделать чтобы при изменении текста моего компонента происходило то же самое, без предварительной прописки в новоп проекте: Ну, так в чем проблема? Проверяй, что компонент лежит на форме, а не на каком-нибудь другом компоненте, и изменяй заголовок владельца:procedure TMyComponent.MyOnTimer(Sender: TObject);Только что проверил - работает... Только ты должен перерегистрировать компонент, и только потом его использовать в проекте. Цитата Что собой представляет TNotifyEvent? указатель на какое-то событие? если да, то ним могут быть все(OnClick,OnCreate..итд)? Цитата(Исходники VCL) type TNotifyEvent = procedure(Sender : TObject) of object; |
sheka |
![]()
Сообщение
#13
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Ну, так в чем проблема? Вы меня не правильно поняли: проблема у меня с тем, чтобы создать событие OnChange для моего компонента. Т.е. сделать все тоже самое, только не на MyOnTimer, а на СОБСТВЕННЫЙ OnChange НОВОГО компонента. Цитата TCustomForm(Owner).Caption := Caption; а у Edita вроде Text,а не Caption ![]() Цитата Только ты должен перерегистрировать компонент, и только потом его использовать в проекте. Да, с этим я уже намучался ![]() ![]() |
sheka |
![]()
Сообщение
#14
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Я сделал то что хотел!!!
procedure TMyComponent.Change; У меня были такие ошибки: 1. procedure TMyComponent.OnChange; - поэтому и говорило, что такого метода нет! 2. где-то нашел, что надо писать inherited Change; для унаследования всех свойств предка. ![]() |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Нет, по-моему мы друг друга не понимаем... Какая проблема перенести то же самое в обработчик события OnChange? Смотри:
type И опять же все работает: забросил я свой компонент на форму, запустил программу, но таймер не активизировал. И изменяю содержимое Эдита. Тут же обновляется заголовок формы. Что-то не так? Цитата а у Edita вроде Text,а не Caption У TControl есть свойство Caption, и если ты внутри потомка TControl, то у тебя есть к нему доступ (TEdit - потомок TControl, так что все в порядке). Если то же самое попытаться сделать из основной программы - то будет ошибка при попытке обращения к защищенному члену класса TControl. Можешь использовать Text, если тебе удобнее...Добавлено через 3 мин. Бррр... Так ты хочешь, чтобы твой метод Change был доступен извне, или все-таки: Цитата(sheka) как мне сделать чтобы при изменении текста моего компонента происходило то же самое, без предварительной прописки в новоп проекте: ? Ты ж для себя реши, что тебе надо? |
sheka |
![]()
Сообщение
#16
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Бррр... Так ты хочешь, чтобы твой метод Change был доступен извне? Нет, извне мне он не нужен. Я хочу просто чтобы всегда при изменении компонента исполнялись определенные действия, но и из проекта(т.е. как обычно) можно было добавить еще что-то в Onchange. Оба варианта(мой и Ваш) работают именно так. А какая между ними разница? Сообщение отредактировано: sheka - 19.11.2009 18:35 |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Хелп читал?
Цитата Applications do not call the Change method directly. It is triggered automatically by Windows events. Change is exposed as a protected method so that derived classes can make additional responses when the text changes beyond invoking the OnChange event handler. (Вот отсюда)А ты вызываешь напрямую метод Change. Кстати, как ты описал заголовок? Тебя Дельфи не предупредила, что твой Change скрывает одноименный метод из TCustomEdit? Я же метод Change не вызываю, а переопределяю реакцию компонента на срабатывание события OnChange. |
sheka |
![]()
Сообщение
#18
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Я ничего не описывал.
Не предупредила. |
sheka |
![]()
Сообщение
#19
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Создается компонент, картинка. при нажатии на нее изменяется цвет компонента. Но почему-то не видно дополнительной картинки...(которая находится в средине компонента). Подскажите пожалуйста.
unit image1; |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Ты забыл добавить Parent-а создаваемой картинке. А для этого тебе надо наследоваться от TWinControl-я, или его наследника. TImage как базовый класс здесь не пойдет. Возьми, например, TPanel...
|
![]() ![]() |
![]() |
Текстовая версия | 10.07.2025 9:06 |