Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Управление свойством компонента   Найти похожие ветки 

 
dreamse   (2006-09-25 06:30) [0]

Пишу компонент.
Создал свойстно новое у компонента для управления видимостью одного элемента :


type
 TMuteVisible = (mNormal, mHide);
 TShellVolumePanel = class(TRzPanel)
 private
   { Private declarations }
//    EMuteVisible:TMuteVisible;
   FMuteVisible: TMuteVisible;

...

published
   { Published declarations }
    property MuteVisible: TMuteVisible read FMuteVisible write FMuteVisible;



Он отлично показываеться в IDE инспекторе объектов и изменяеться.

В самом компоненте стоит обработчик :


if MuteVisible = mNormal then
  TssChk.Visible := true;
if MuteVisible = mHide then
  TssChk.Visible := false;


Теперь вопрос : Куда этот обработчик вставтить чтобы он моментально фиксировал изменения свойства в инспекторе объектов ?

Если вставтить в секцию Create то он не обрабатываеться так как код выполняеться на этапе кидания компонента на форму :(

Какую процедуру в компоненты нужно создать чтобы она отлавливала момент изменения функции в инспекторе объектов ?


 
Ketmar ©   (2006-09-25 06:35) [1]

заменить во write ссылку на поле процедурой.


 
dreamse   (2006-09-25 06:49) [2]

Сделал так :



 protected
   { Protected declarations }
 procedure setMuteWolume;

published
property MuteVisible: TMuteVisible read FMuteVisible write setMuteWolume;

...

procedure TShellVolumePanel.setMuteWolume;
begin
if MuteVisible = mNormal then
 TssChk.Visible := true;
if MuteVisible = mHide then
 TssChk.Visible := false;
end;


ругаеться на строку : property MuteVisible: TMuteVisible read FMuteVisible write setMuteWolume;

говорит Incompatible types

Что это значит ?


 
dreamse   (2006-09-25 06:58) [3]

Всё разобрался !


 
dreamse   (2006-09-25 07:09) [4]

Блин теперь в IDE значение вообще не меняеться :(

чтобы заработало в прошло м примере поменял :


procedure setMuteVolume(Sender: TMuteVisible);


Весь код :


type
 TMuteVisible = (mNormal, mHide);
 TShellVolumePanel = class(TRzPanel)
 private
   { Private declarations }
   FMuteVisible: TMuteVisible;
 procedure setMuteVolume(Sender: TMuteVisible);
 protected
   { Protected declarations }
 public
   { Public declarations }
 published
   { Published declarations }
  property MuteVisible: TMuteVisible read FMuteVisible write setMuteVolume;
 end;

procedure Register;

implementation

procedure TShellVolumePanel.setMuteVolume;
begin

if MuteVisible = mHide then
  TssChk.Visible := false
else
if MuteVisible = mNormal then
  TssChk.Visible := true;
 
end;


В общем в данном варианте компилиться но не меняет в дизайнере объектов свойство.

Что делать ?


 
Ketmar ©   (2006-09-25 07:12) [5]

>[4] dreamse 25-Sep-2006, 07:09
>Что делать ?
за метлой, за метлой. потому как нельзя писать компоненты, не зная даже базы -- собственно языка. а я тут наблюдаю полное непонимание того, что есть свойства и как их правильно готовить.


 
dreamse   (2006-09-25 07:57) [6]

уже разобрался :) спасибо за советы

(Sender: TMuteVisible);  на MuteVisible: TMuteVisible


 
Ketmar ©   (2006-09-25 08:31) [7]

о ужас... это называется не "разобрался", а "украл костыль и бегу на марафон; непонятно только, почему на меня смотрят как на психа"...


 
Юрий Зотов ©   (2006-09-26 07:08) [8]

> но не меняет в дизайнере объектов свойство

Оно не в дизайнере, оно вообще не меняется. Вы же его нигде не меняете, так с чего ему меняться-то?


 
dreamse   (2006-09-26 07:28) [9]

> Юрий Зотов ©   (26.09.06 07:08) [8]

Угу.

Уже разобрался, меняю его в процедуре на которую указывает Write
Спасибо за советы



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
2-1161538165
abba
2006-10-22 21:29
2006.11.05
Как из A(x1,y1) в B(x2,y2) в StringGrid?


3-1157548675
tytus
2006-09-06 17:17
2006.11.05
Помогите с курсором


2-1161345479
Alex_C
2006-10-20 15:57
2006.11.05
EMcaretPos в RichEdit


2-1161329602
stalcker666
2006-10-20 11:33
2006.11.05
Telnet


6-1150219083
Интересующийся
2006-06-13 21:18
2006.11.05
Как определьть IP указывающий основной шлюз?





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