Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.02.2010, 22:29   #11
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Я тоже, чтоль отпишусь))
Код:
type
  TMyClass = class
  private:
    FVar: Integer;
   public:
    property SetVar: Integer write FVar;
    property GetVar: Integer read FVar;
    property MVar: Integer read FVar write FVar default 0;
  end;
Тут FVar переменная которую видно только внутри класса TMyClass.
Свойство SetVar устанавливает новое значение для FVar прочитать его с помощью
этого свойства неполучится.
GetVar соответственно читает значение, установить с помощью этого свойства новое
не получится.
MVar позволяет читать и записывать значения, default озночает, если новое
значение не записывается и не считывается
Код:
var
  MyClass: TMyClass;
begin
  MyClass.MVar;
end;
, то в него будет занесено 0 (кажется так).

Есть еще способ задания значений и считываний
например с преобразованиями:
Код:
type
  TMyClass = class
  priavte:
    FVar: Integer;
    function FGetVar: Integer;
    procedure PSetVar(new: Integer);
   public:
    property SetVar: Integer write PSetVar;
    property GetVar: Integer read FGetVar;
    property MVar: Integer read FGetVar write PSetVar;
  end;
  
funtcion TMyClass.FGetVar: Integer;
begin
  Result := FVar * 1000;
end;

procedure TMyClass.PSetVar(new: Integer);
begin
  if FVar <> new 
    FVar := Round(new / 1000);
end;

end.
В этом примере при использовании свойства на чтение результат вернет функция
FGetVar, а при задании нового значения, будет выполнятся процедура PSetVar
Код:
var 
  MyClass: TMyClass;
  i: Integer;
begin
  MyClass.MVar := i;
end;
Здесь, значение из i передается как входной параметр в процедуру PSetVar.

Ну и смешанный вариант:
Код:
type
  TMyClass = class
  priavte:
    FVar: Integer;
    procedure PSetVar(new: Integer);
   public:
    property SetVar: Integer write PSetVar;
    property GetVar: Integer read FVar;
    property MVar: Integer read FVar write PSetVar;
  end;
Тут при считывании, считывается значение как есть. Будет в FVar 5 и вернет 5.
Остальное надеюсь понятно.
psycho-coder вне форума
Старый 15.02.2010, 22:35   #12
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Обычные свойства типа
Код:
property MVar: Integer read FVar write FVar default 0;
Я знал и было очень легко для понимания, но вот с событиями никак не могу разобраться=)
TwiX вне форума
Старый 15.02.2010, 22:46   #13
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Тот же самый принцип. Можно в read указать на другой класс например ))
psycho-coder вне форума
Старый 15.02.2010, 23:04   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
psycho-coder
уточню...методы чтения(Get) и записи(Set) принято именовать так
Get<имя св-ва> Set<имя св-ва>
принято так в Делфи...да и не только там
в том же С++ также(правда там самого property нет)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 15.02.2010, 23:22   #15
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
уточню...методы чтения(Get) и записи(Set) принято именовать так
Get<имя св-ва> Set<имя св-ва>
принято так в Делфи...да и не только там
в том же С++ также(правда там самого property нет)
Где принято? Для облегчения читабельности - да.
У меня они так называются, потому что такие названия уже есть.
Вот специально попробовал, все работает!
Код:
  TMyClass = class
  private
    FVar: Integer;
    function gVar: Integer;
  public
    //property SetVar: Integer write FVar;
    //property GetVar: Integer read FVar;
    property MVar: Integer read gVar write FVar default 0;
  end;


procedure TForm1.Button1Click(Sender: TObject);
var
  my: TMyClass;
begin
  my := TMyClass.Create;
  my.MVar := 1;
  Tag := my.MVar;
  my.Free;
end;


function TMyClass.gVar: Integer;
begin
  Result := FVar;
end;
psycho-coder вне форума
Старый 15.02.2010, 23:30   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Где принято?
я думаю на счет оформления кода, это вполне принято, ибо сразу понятно что за что отвечает.
+иногда бывает нужно переопределять методы...и следование стандарту это очень упрощает....ибо в Делфи можно заныкать методы...(в С++ не выйдет, иначе ты в принципе не сможешь прочесть)
насчет имен, это вполне принято как и типы начинать с T(TForm и тд)
исключения я знаю в названиях структур которые идут от С(апишные)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 15.02.2010, 23:53   #17
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Ну это я и имел ввиду под читабельностью.
psycho-coder вне форума
Старый 16.02.2010, 01:36   #18
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Хоть убейте... Никак не пойму)
Можно простенький примерчик?
Вот я пытался сделать:
Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure asd(var s:string);
    procedure bsd(var s:string);
    procedure FormCreate(Sender: TObject);
  private
    property onCaption: TNotifyEvent read asd write asd;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  asd('*');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  onCaption:=bsd;
end;

procedure TForm1.asd(var s:string);
begin
  Form1.Caption:=Form1.Caption+s;
end;

procedure TForm1.bsd(var s:string);
begin
  ShowMessage('Hooked');
end;
TwiX вне форума
Старый 16.02.2010, 01:40   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

эмм...Твикс а ты что вообще хочешь сделать??
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 16.02.2010, 01:50   #20
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Хочу что бы у потока было свойсвто onDone или что-то в этом роде)
TwiX вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего класса в Delphi 7 - фигуры для шахматной доски electric Компоненты Delphi 18 24.10.2013 15:06
как правильно организовать продажу своего софта? broderweb Свободное общение 11 02.12.2009 17:41
Создание своего класса, наследование от предка Krechet Общие вопросы Delphi 16 02.05.2009 16:15
Создание своего класса AlexandrSid Общие вопросы Delphi 3 19.05.2008 13:28
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50