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

Вниз

Можно ли реализовать ловушку на изменение переменной???   Найти похожие ветки 

 
Zhekson   (2008-11-06 12:05) [0]

Добрый день.
Понятно, что сделать это в какой-то конкретный момент времени не составит труда, а вот если исходить от обратного, т.е. чтобы при изменении значения переменной запускалась определённая процедура.


 
Anatoly Podgoretsky ©   (2008-11-06 12:07) [1]

> Zhekson  (06.11.2008 12:05:00)  [0]

Ошибка в архитектуре.


 
Vlad Oshin ©   (2008-11-06 12:07) [2]

написать класс, определить св-во, менять его без вызова метода и не получится


 
Zhekson   (2008-11-06 12:12) [3]

Anatoly Podgoretsky ©   (06.11.08 12:07) [1]
В архитектуре чего??? (зная ваш искромётный юмор, у меня несколько вариантов: моего головного мозга??? Гробниц фараонов??? )

Vlad Oshin ©   (06.11.08 12:07) [2]
т.е. это я колдую там, где нет в этом смысла???


 
Palladin ©   (2008-11-06 12:15) [4]


> Zhekson   (06.11.08 12:05) 

нельзя


 
Zhekson   (2008-11-06 12:16) [5]

Palladin ©   (06.11.08 12:15) [4]
спасибо


 
Сергей М. ©   (2008-11-06 12:27) [6]


> Zhekson


А слбссно зачем понадобилась такая "ловля" ?
Это тому, что в [1] не "искрометный юмор", а вполне серьезный и прямой намек ..


 
Vlad Oshin ©   (2008-11-06 12:30) [7]

а что если все же так:

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

//описываем класс
 tVar=class
   FVar:integer;
 private
   procedure SetVar(AVar:Integer);
 published
   property VVar:integer read FVar write SetVar;
 end;

var
 Form1: TForm1;
 MyVar: tVar; //объявляем переменную

implementation

{$R *.dfm}

//используем
procedure TForm1.Button1Click(Sender: TObject);
begin
  myVar.VVar:=0;
  if myVar.VVar>0 then ShowMessage(">");
  myVar.VVar:=4;
  if myVar.VVar>0 then ShowMessage(">");
end;

{ tVar описываем "hook" :) }
procedure tVar.SetVar(AVar: Integer);
begin
 ShowMessage("Hook on Var");
  FVar:=AVar;
end;

//инициализируем где-нибудь тут
procedure TForm1.FormCreate(Sender: TObject);
begin
 MyVar:=tVar.Create;
end;


 
Наиль ©   (2008-11-06 12:40) [8]

Тоже самое, но проще
type
TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
  procedure FormCreate(Sender: TObject);
private
  FVar:integer;
  procedure SetVar(AVar:Integer);
published
  property VVar:integer read FVar write SetVar;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

//используем
procedure TForm1.Button1Click(Sender: TObject);
begin
 VVar:=0;
 if VVar>0 then ShowMessage(">");
 VVar:=4;
 if VVar>0 then ShowMessage(">");
end;

{ описываем "hook" :) }
procedure TForm1.SetVar(AVar: Integer);
begin
ShowMessage("Hook on Var");
FVar:=AVar;
end;



 
Сергей М. ©   (2008-11-06 12:41) [9]


> Vlad Oshin ©   (06.11.08 12:30) [7]


FVar - это ведь уже не "чистокровная" переменная, а поле объекта.
Т.е. налицо требуемое изменение архитектуры, о чем собссно АП и вполне резонно намекнул.


 
Zhekson   (2008-11-06 13:12) [10]

Vlad Oshin ©   (06.11.08 12:30) [7]  Наиль ©   (06.11.08 12:40) [8]

спасибо, это то, что нужно.


 
Anatoly Podgoretsky ©   (2008-11-06 13:30) [11]


> Vlad Oshin ©   (06.11.08 12:30) [7]

После Create переменная MyVar никогда не меняется!


 
Anatoly Podgoretsky ©   (2008-11-06 13:31) [12]

Zhekson   (06.11.08 13:12) [10]
Не за что, поскольку приведеный код не соответсвует вопросу.
А тебе зачем, ты что отладчик пишешь? Так знаний не хватит.


 
Vlad Oshin ©   (2008-11-06 14:02) [13]


> Anatoly Podgoretsky ©   (06.11.08 13:30) [11]

да понятно все,
просто телепатор подсказал, что это то что нужно автору.


 
Zhekson   (2008-11-06 15:29) [14]

Anatoly Podgoretsky ©   (06.11.08 13:31) [12]

> А тебе зачем, ты что отладчик пишешь? Так знаний не хватит.

:))) ну как же без этого???)))

Vlad Oshin ©   (06.11.08 14:02) [13]
телепатор???

я просто проверил код в программе и его функций мне хватило для реализации моей задачи. А задача заключалась в том, чтобы не во множестве мест прописывать реакцию на изменение значения переменной, а по событию изменения.


 
Anatoly Podgoretsky ©   (2008-11-06 15:32) [15]

> Vlad Oshin  (06.11.2008 14:02:13)  [13]

Что ему нужно очень сложно понять. ловлю изменение значения переменной можно сделать только с помощью отладчика, а это совсем другой уровень и ловушку придется писать не на Дельфи.
Ну а поля через свойства, при условии скрытия поля ловить нет проблем - 100 процентная гарантия, я в последнее время часто так пишу, никаких видимых полей только свойства и сеттеры/геттеры.


 
Palladin ©   (2008-11-06 15:47) [16]


> Zhekson   (06.11.08 15:29) [14]

поле класса не является переменной


 
Anatoly Podgoretsky ©   (2008-11-06 16:07) [17]

> Zhekson  (06.11.2008 15:29:14)  [14]

Серьезно, создания отладчика, работующего в кольце 0 - не тривиальная задача.


 
Anatoly Podgoretsky ©   (2008-11-06 16:08) [18]

Он же часто пишет не зачем, а как неправильно делать. А надо рассказывать про задачу, особенно в таких сложных случаев. В результате получается приложение с неверной архитектурой. Там где нужны свойства появляются свойства.


 
Юрий Зотов ©   (2008-11-06 16:32) [19]

> поле класса не является переменной

А все равно проблем нет, можно и для переменной сделать, чтобы лишние классы не плодить.

unit Unit1;

interface

function GetVar: integer;
procedure SetVar(Value: integer);

implementation

var
 MyVar: integer;

function GetVar: integer;
begin
 Result := MyVar
end;

procedure SetVar(Value: integer);
begin
 ... // Вот и ловушка
 MyVar := Value;
end;

end.

> Zhekson   (06.11.08 15:29) [14]

Не первый раз читаю Ваши ветки и всегда наблюдаю один и тот же результат - обсуждение постепенно перерастет в ругань. Скажите, а Вы не задумывались, почему именно с Вашими ветками такое происходит, да еще и с таким постоянством?

Поверьте - Вы достигнете гораздо лучших результатов (и гораздо быстрее), если поймете причину такого странного явления и сделаете соответствующие выводы.


 
Anatoly Podgoretsky ©   (2008-11-06 16:36) [20]

> Юрий Зотов  (06.11.2008 16:32:19)  [19]

Ну это же извращение, а мы так не договаривались.


 
Palladin ©   (2008-11-06 17:08) [21]


> Юрий Зотов ©   (06.11.08 16:32) [19]

:) а не подходит по определению задачи, товарищу нужно делать вызов при изменении, а не изменять посредством вызова...
да и св-ва создают, естественно, только видимость вызова при изменении...


> Zhekson

а ты не бибижайся, бо, при начальной постановке задачи, диагноз Анатоля поставлен довольно верно и точно...
лишь бы не в архитектуре мозга...


 
Zhekson   (2008-11-06 17:09) [22]

Юрий Зотов ©   (06.11.08 16:32) [19]

> Не первый раз читаю Ваши ветки и всегда наблюдаю один и
> тот же результат - обсуждение постепенно перерастет в ругань.
>  Скажите, а Вы не задумывались, почему именно с Вашими ветками
> такое происходит, да еще и с таким постоянством?


1) Согласен, часто мои вопросы приводят к ругани.
2) Согласен, что я не мастер и часто неправильно задаю вопросы.
3) Согласен, что это мой минус.
4) Всегда признаю свою ошибку, если мне корректно указывают на неё.
5) Не согласен, что вышеперечисленные пункты являются достаточным основанием для оскорбления моей скромной персоны.

Я уже наслушался на этом форуме столько оскорблений, сколько за всю жизь в реальной жизни не слышал, только потому, что я что-то там не так сделал, написал, спросил... Многих бесит, что я не ведусь на эти провокации, поэтому они снова и снова пытаются меня убедить что я дурак, хоть и спокоен как слон, а они умные, но с пеной у рта.

Возможно я, оптять же, не прав, но это моё видение ситуации, которое я как смог аргументировал.


 
Palladin ©   (2008-11-06 17:10) [23]


> Многих бесит, что я не ведусь на эти провокации,

не думаю, у меня вот уважение вызывать начал... еще бы вопросы пограмотней составлял бы, да поподробней...


 
Zhekson   (2008-11-06 17:16) [24]

Palladin ©   (06.11.08 17:08) [21]

:))) у меня уже иммунитет выработался...


 
Zhekson   (2008-11-06 17:29) [25]

Palladin ©   (06.11.08 17:10) [23]

я не волшебник... стараюсь, понимаю, что правильно заданный вопрос - это процентов 90 успеха, но ведь не всем дано... и так уже переехал, вернее выперли))), в категорию для начинающих... Так в общей вообще тоскливо стало, из-за таких репресий недомыслящих)))



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

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

Наверх




Память: 0.51 MB
Время: 0.007 c
15-1223377264
desc
2008-10-07 15:01
2008.12.14
Автофигуры для MS Office


1-1203994220
Anton
2008-02-26 05:50
2008.12.14
Пропадает курсор при вводе


15-1223653872
Terasbetoni
2008-10-10 19:51
2008.12.14
Посоветуйте модуль для работы с двумерными графиками


2-1225654671
KTA
2008-11-02 22:37
2008.12.14
Создание таблицы в Word


2-1225904136
TRSteep
2008-11-05 19:55
2008.12.14
Алгоритм Blowfish





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