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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2012, 09:04   #11
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Если вы так не любите глобальные переменные, у каждой кнопки и у каждой формы есть переменная tag. Используйте её. Она и не глобальная как-бы, в то-же время доступна из любого места программы.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.08.2012, 20:45   #12
GSirr
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 42
По умолчанию

Цитата:
у каждой кнопки и у каждой формы есть переменная tag
При чем тут это? Вообще мимо обсуждаемой темы.
GSirr вне форума Ответить с цитированием
Старый 05.08.2012, 20:50   #13
GSirr
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 42
По умолчанию

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

Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls;

type
  TfrmMain = class(TForm)
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    edt1: TEdit;
    procedure IncProperty(Sender: TObject);
  private
    { Private declarations }
    FCounter: Integer;
    procedure SetCounter(AValue: Integer);
  public
    { Public declarations }
    property Counter: Integer read FCounter write SetCounter;
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.IncProperty(Sender: TObject);
begin
  Counter := Counter + 1;
end;

procedure TfrmMain.SetCounter(AValue: Integer);
begin
  FCounter := AValue;
  edt1.Text := IntToStr(AValue);
end;

end.
GSirr вне форума Ответить с цитированием
Старый 05.08.2012, 21:05   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Зачем вообще св-во Counter в данном случае? Переменной FCounter мало? Или к свойству Counter нужен доступ из других форм?
Код:
procedure TfrmMain.IncProperty(Sender: TObject);
begin
  Inc(FCounter);
  edt1.Text := IntToStr(FCounter);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.08.2012, 22:44   #15
GSirr
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 42
По умолчанию

Ок, а вдруг? Почему нет? С public property какая-то беда, как с глобальными переменными? Да и вообще, любое Private поле лучше оформлять как property. Потом код начинает проще относиться к изменением, знаете ли. А уж зону видимости настраивать как того задачи желают. Благо IDE позволяет без труда (напомню, вдруг кто не знает: ctrl + shift + c) генерировать болванки кода.
GSirr вне форума Ответить с цитированием
Старый 05.08.2012, 22:57   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
С public property какая-то беда, как с глобальными переменными?
да нет, просто если оно не надо, то зачем?)
далее внутри класса лучше обращаться к полю представляющее свойство, чем к свойству, ибо так быстрее.
далее, в таких свойствах надо думать, а нужна ли запись в него.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.08.2012, 23:22   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Да и вообще, любое Private поле лучше оформлять как property
Чем лучше? В форме или любом другом объекте в Private может быть далеко не одна переменная, используемая в методах и только в них. Их тоже все в свойства выносить?
Цитата:
Потом код начинает проще относиться к изменением, знаете ли
Что меняется к лучшему в коде от использования свойства вместо переменной? Вижу только необоснованное увеличение кол-ва методов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.08.2012, 23:24   #18
GSirr
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 42
По умолчанию

Цитата:
да нет, просто если оно не надо, то зачем?)
Логично
На самом деле можно долго спорить. И прав не будет никто. Ибо это - аспекты реализации. Я могу сказать - а вдруг пригодится в будущем? Ты можешь сказать - а зачем это надо? Аватар может сказать что, если отказаться от property, будет меньше кода. Кто-то еще может сказать что-то еще.
Я просто постараюсь пояснить, чем мне нравятся property в классах формы. Я думаю, вы поймете следующий код:
Код:
procedure TfrmMain.SetCounter(AValue: Integer);
begin
  FCounter := AValue;
  edt1.Text := IntToStr(AValue);
  Self.Caption := IntToStr(AValue);
  Self.Update;
end;
и т.п.
Т.е. можно контролировать изменения. Протоколировать. Ну, вобщем, делать все операции откуда угодно. И, если нам, к примеру потребуется где-то, кроме тех 20 кнопок, увеличивать Counter на 2, или 3, или 5 - у нас не будет проблем с изменением, скажем edt1.Text. Т.е. мое мнение - перестраховаться, сделав property. Я не прав?
GSirr вне форума Ответить с цитированием
Старый 05.08.2012, 23:27   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Т.е. можно контролировать изменения. Протоколировать. Ну, вобщем, делать все операции откуда угодно. И, если нам, к примеру потребуется где-то, кроме тех 20 кнопок, увеличивать Counter на 2, или 3, или 5 - у нас не будет проблем с изменением, скажем edt1.Text. Т.е. мое мнение - перестраховаться, сделав property. Я не прав?
а вот не путаем сеттер свойства, с методом призванным изменять поле.
если первый может быть вызван кем угодно.
то второй отнюдь не всегда должен быть доступен из вне.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.08.2012, 23:31   #20
GSirr
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 42
По умолчанию

Код:
  private
    { Private declarations }
    FCounter: Integer;
    procedure SetCounter(AValue: Integer);
    property Counter: Integer read FCounter write SetCounter;
  public
    { Public declarations }    
  end;
Да и сеттер, property и filed можно сделать где угодно. Хоть в private, хоть protected, хоть public.
Если не прав, или если не так понял, объясни пож.
GSirr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет кликов prod JavaScript, Ajax 1 19.10.2011 10:35
Как привязать компоненту TComboBox к Button, чтобы при нажатии Button, данные из ComboBox вводились в TstringGrid Marta_ Помощь студентам 2 15.10.2011 01:02
Автоматизация кликов по окну sincemix Общие вопросы Delphi 10 03.08.2010 13:19
обработка кликов в treeview CraZZy RabbIt Общие вопросы Delphi 2 28.03.2009 22:28
Отлов кликов мыши LAFUDR Помощь студентам 9 24.05.2008 01:32